そう、ちなみにさ、そんばさんグローバルとローカルって意味合い的なイメージとかなんかあります?言葉。
言葉のイメージ?もうなんかもう言葉だけだと海外と日本みたいな感じかも。
あーめっちゃ、めっちゃそう、そんな感じでいいと思う。
そう、グローバルってなんかその国際的なみたいなイメージない?なんか世界規模なみたいな。
要は自分の国を超えた範囲みたいなイメージなんですよ。
要はあの幅広い範囲っていうのがグローバルのイメージで、ローカルっていうとなんか各地域だから自分の地域とか、
あのそういう地域に特定、絞ったイメージだからローカルっていうのはなんか狭い意味合い持ってるんですよね。
だからグローバルはなんか国際的な、あの世界的な変数って意味。
でローカル変数っていうのは、なんかちょっと閉ざされた、日本とかの変数のイメージ。
閉ざされたっていうかちょっとね、あの囲った感じのちょっと。
なんか変数にもじゃあ基準があって、国際的に使われている変数となんかが日本だけ使われている変数みたいなのがあるってこと?
そう。
あ、そうなんだ。
ごめん、本当にその意味で捉えてほしくて。
国際的と日本的っていうのはあくまで、グローバルとローカルの意味を説明する言葉の、そのあやというか例としてなんだけど。
一例としてね。
一例として、うん。
なんだけど、その今回ね、ラジオでは3枚画像を添付するようにするので、それを使って、
あとは言葉でも、ちょっとラジオでも、グローバル変数とローカル変数のちょっと違いについて説明したいと思うんですよね。
でまず、これね、ゲーム開発初めとかプログラミング初心者としては、エラーって嫌じゃないですか。
エラー起きるの。
いやもう、本当エラーつらい。
あの三角ボタン押して赤文字が続くあの恐怖。
そうそう。
そのエラーの最初よくある一つだと思ってる。
変数の使い方が間違ってて、エラーよく出るんすよ。
グローバル変数は一言で言うと、グローバル変数を使うと、
あれ、こんなタイミングでこの変数変わるっけみたいな、なんかよくわかんない変数の中身が変わったりする。
例えばHPが10で、プレイヤーHP10で、プレイヤーが敵に攻撃するのに、攻撃した時に自分のプレイヤーのHPが下がるみたいな、
よくわかんない挙動が起きたりする時は、グローバル変数、ローカル変数の使い方ちょっと上手くない時、そんなことが起きたりします。
予期せぬ挙動が起きちゃうのね。
予期せぬ挙動、そうそう。
で、ローカル変数とかまた間違い、グローバル変数なんか理解してないと、
触っちゃいけない変数とか出てきたりするんですよ。
アクセスできない変数、アクセス不可ですとか、
そういうエラーとかが出てきて、何のこと?ってなる。
そうか、じゃあゲーム開発でもこの変数よくわかってないと、そういうことが起きちゃうんだ。
そう、だからそれもちょっと話したい。
なるほどね。
しかも日常でもめっちゃ思うことがあるから、最初に言った共感するってやつ、それもちょっと話したいから、
ちょっと早速簡単に説明しますね。
今これプレゼンテーションを開いて、こうズームで見せてくれてるのね。
これを貼ってくれてる。
そうそう、これはアップするラジオ、この3枚をラジオに貼る予定。
詳細の概要欄からね、これが見れますと。
ちょっと待って、ちょっと戻ります。
今画像に見せてるのが、自分キャラクター、プレイヤーでもいいんだけど、
プレイヤーが回復する関数っていうものと、
敵が回復する関数っていうのをちょっと簡単に書いてます。
関数はちょっとあんまり理解しなくていいです。
関数は要はプログラムって思っていいです。
今はこれが走ると、プログラムが走るとゲーム上で実際にそれが起こるみたいなイメージ。
だから今、自分のキャラが回復する関数で、
HPっていうのがあって、HPプラス10ってやると、
自分のHPが回復した感じあるじゃないですか。
プラスイコール10っていうのは、HPに10追加したやつを入れますよみたいな意味なんで、
これがHPプラスイコール10は、HPが10回復するみたいなイメージで捉えてもらえればいいです。
でも自分のキャラ以外にも、敵にもHPっていうのは存在しますよね。
だって自分の体力、敵の体力ってあるように、
敵も体力があってHP、敵が回復するときって、
HPプラスイコール10ってやりたくなるじゃないですか。
でもこれやるとどうなるかっていうと、
今HPっていうのが敵キャラなのか自キャラなのか分からなくないですか。
HPって言葉1個だけだと。
確かに。
プログラミングの変数って。
HP持ってる人もいっぱいいるわけだよね、ゲームの登場キャラで。
そう。
どれに対するプラスなのか分からないね。
分かんないよねこれ。
こういうのが、
これ実はなんですけど、プログラミングでHPって言葉だけで使って、
それ使っちゃうと、プログラムどのHPのことか分かんなくなっちゃうんですよ。
だからこういうのを、今これHPはこれ間違った使い方してるっていう例で、
HPはグローバルな感じの変数になっちゃってるから、
プレイヤーが回復する関数なんだけど、
HPがプラス10になります、プレイヤーが回復する感じ。
だからこれでもしもプレイヤーが回復するとするじゃないですか。
だけどエネミーが回復するタイミングでも、
結局同じことやってエネミーが回復するはずなのにプレイヤーが回復しちゃうみたいな、
そういう混同が起きちゃうんですよね。
なるほどね。もうザクッとプレイヤーが敵か分かんないところが指定されてるから、
HPプラス10がどっちに付与されるかが今分かんない状態になってるね。
そういうことそういうこと。ってなると、
よくやるのが変数名を分けること。
例えばプレイヤーHPっていう変数名にしてあげるのと、
エネミーHPっていうふうな変数名を書いてあるっていうのが、
一つのやり方ですよね。
そうだね。誰のHPを増やすっていうのをプログラミング上もちゃんと指定しておくってことだよね。
そうそうそうそう。
なんだけど、そうやって区別するのはいいんだけど、
そんなことやってると実は変数めちゃくちゃいっぱい宣言しないといけなくて大変になるんですよ。
例えば敵が1匹だったらいいけど、
敵が多分10匹一気に来たとき、
1個ずつ変数をやってあげますかって超大変じゃない?
エネミー1HP、エネミー2HPみたいな。
エネミーごとにちゃんとプログラミングを走らせないといけないってことか。
変数をプログラマーが書かないといけないから、
設計超大変でプログラミング余計嫌になります。
ちょっとめんどくさいかも。
嫌じゃないですか。
そういったときに、
クラスってよく言ったりするんですけど、
クラスって聞いたことある人いるかわからないけど、
クラスとか構造体とかプログラミングの難しい言葉あるんですよ。
そういうのを置いといて、
プレイヤーっていうものにはHPっていうのを持ってます。
プレイヤーとHPっていう、
プレイヤーというキャラクターにHPを持たせます。
エネミーにHPという変数を持たせますっていうのは、
プログラミングで書き方があって、テクニックの。
そういう書き方ができるんですよね。
そういったときにプレイヤー.HPっていうふうに書けば、
プレイヤーの中のHP、
エネミー.HPみたいな感じで書くと、
エネミーのHPっていう、
そういう使い分けができるようになるんですね。
ここはあんまりいいや。
要は言いたいのは、プレイヤーの同じHPって言っても、
HPって一言で言うと、誰のHPかわからなくなるよねって。
だからわからなくなっちゃうから、それは特定するために、
プレイヤーのHPか、エネミーのHPか、
そういう情報を付け加えてあげた方がいいよねっていう話をした感じです。