スパッツくじ-Remake- ― キャラクター選択画面を制作03

こんにちは。
メイドさんこと、女装子ゲームクリエイターtoメイドです(笑)

いつもコメント、ときにはメッセージをいただき、ありがとうございます💗

以前から作っている”スパッツくじ -Remake-”のキャラクターの選択画面。


以前完成させた選択画面の処理

ちゃんと想定どおりの動作ができたということで、システム周りはめでたく完成……かと思いきや。
新たな問題が発覚。

いや、処理自体は間違いではないのでこの処理のやり方がおかしい、という訳ではないんだけども。
前にどうやって解決したのかは「前の記事」を読んでいただくとして。

正確には”前のやり方だと、また別の問題が起きる”状態になっていた。

どういうことかというと。
Unityでは、1つの画面のことを「シーン」って呼ぶんだけど。
”現在選ばれているキャラクター番号の変数”を使うのが「上記の選択画面のシーンのみ」で使われるだけなら、前のやり方でよかった。
が、実はこの”キャラクター番号の変数”は他のシーンでも使われることになっている。
原則として、変数というのはそのシーンの中でしか使うことができない。
これを”別のシーンでも使えるように……正確には”変数をどのシーンからでも共有できるようにするため”なんだけど。
”変数をstatic(静的)にする”必要がある。

しかし、変数をstaticにしたことで新たな問題が発生する。
「次」と「前」のボタン、それぞれに設定している”キャラクター番号の変数”が認識できなくなってしまい、エラーとなってしまったのだ。

そもそも、staticの変数というのは静的……つまり「静か」なんです。
他のオブジェクトや変数のように「ここにいますよー!」とか「私はここですよー!」という風に主張(?)をしていない

時には静かに寄っていき、時には静かに待ち、静かに処理をする。
どんなことがあっても隠密に処理を遂行する。
staticはまるで”忍者のようなもの”なんですね。

で、どうやら命令書によって動いている方々が認識できるのは「ここにいる」という主張をしているもののみらしく。
主張をしていなければ気づかれないという……

のようなことで(笑)
各ボタンに設定された命令書を持った方々は「ここに変数がいると書かれてたので来てるんですが、いないみたいですね。これじゃあ処理が進められません」といってエラーを出している、ということに。


これを解決するため、またしてもスクリプトを修正することになるんだけど……

結論から書くと。

やっぱり、1つのスクリプトファイルにまとめて書いても問題ありませんでした。

なんじゃそりゃ! という感じかもしれないんだけど(笑)

前に書いて躓いたスクリプトの書き方は。

(上からすべて実行される)
条件分岐(押されたボタン名)

ボタン名が「前」なら
前ボタンを押された時の処理を実行
キャラクター番号を参照し、数値によって処理をする

ボタン名が「次」なら
次ボタンが押された時の処理を実行
キャラクター番号を参照し、数値によって処理をする

……という書き方をしていた。

これだと、とりあえずボタンの名前によって判別はしてくれるものの。
悲しいかな、プログラムのルール上「上から順に実行される」ようになってるため、いちおう”キャラクター番号を参照する”という部分をすべて通っていくことになる。
ので、ボタンを最初のと別のものを押した場合は、上記の参照が二重で読み込まれるためにおかしな挙動をしてしまっている、ということみたいだった。

この記述のしかたをしたのは、メイドさん自身が「ボタンはそれ専用に作られた1つのメソッド(命令)にしか反応できないため、反応させるメソッドはすべて同じものにしないといけない」という訳のわからない勘違いしていたためで。
実は、ボタンの設定は「どのメソッドに反応するか選択できる」ということを知って。
なら、まとめて書いても問題なさそうだな……となり。

記述としては。

「次」ボタンが押された時の処理
キャラクター番号を参照し、数値によって処理をする
——————-ここまでが「次」ボタンの処理なのでここで処理終了———————–

「前」ボタンが押された時の処理
キャラクター番号を参照し、数値によって処理をする
——————-ここまでが「前」ボタンの処理なのでここで処理終了———————–


という感じ。

条件分岐ではなく”1つ1つのメソッド(命令)として完全に別々になっている”。
プログラムというのは「命令されたことしかしない」、つまり「命令がなければ動かない」
ので、同じスクリプトに記述されていても、完全に分けておけば変なタイミングで変数が参照されておかしな処理になる……ということがなくなるのである。

ということで、他のシーンからも変数を参照できるようになったと。
(再生時の見た目は上記の動画と全く同じなので、今回は動画を撮っていません)

実際に他のシーンから参照できるかどうかは、また次の記事で。




以上のようなことで。
処理がおかしくなったのを解決した話でした。


最後までお読みいただき、ありがとうございました。






















コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です