日記よりの記事となります。
例えば2Dゲームで拾うアイテムに「効果は一緒だけれど効果量が違う」という仕組みにしたい場合
以下は拾うアイテムの色でハート(恋しいにゃ〜ゲージ)の上がり方が異なるようにしました。(キーボードのADor左右キーで移動spaceキーでジャンプです。)
どういう風に設定できるかという内容です。
まずは結論 tagとC#を組み合わせて管理
「効果は一緒だけれど効果量が違う」⇨「効果(tag)は一緒だけれど、効果量(パラメータ管理用C#の変数)が違う」
アイテムを作りたい時に、せっかくなのでこの「効果は一緒だけれど効果量が違う」という文章を設計図として考えてみましょう。
「効果は一緒だけれど」を実現するには、どのような効果を持つアイテムなのかをtagで管理すると良い気がしますね。
「効果量が違う」を実現するには、効果量を定義したC#を書いて、アイテムにアタッチすることで実現できそうです。
以下はアイテムにアタッチすることで、宣言した変数をアイテムに持たせるC#スクリプトです。
publicなのでGUIからいじれます。新しい種類のアイテムを作った場合は効果量を設定した後にプレハブ化を忘れずに。
tagとスクリプト設定で「効果は一緒だけれど効果量が違う」を色々と作れるようになりました。
以降は、今回アイテムの増加量設定追加に伴い発生した修正やバグの振り返りメモです。
変動値があるのなら値をたくさんバグらせてコードを育てていく
私の場合、当初は1ずつゲージが上がるアイテムのみを作る予定だったため、1回の取得で複数の恋しいにゃ〜ゲージがたまる動きに対応していませんでした。
PlayerControllerの一部で、増加用アイテムに触れた際の処理を「nowLove++」としていましたが、アイテムのパラメータ増加に伴い、
増加量1でも100000でも対応できるようにfor処理で回しました。
for(int i = 0; i < addLove;i++){
nowLove ++;
UpdateLoveGauge();
if(nowLove >= maxLove){
//恋しいにゃ〜
Debug.Log("BIG Love!hoge!!!!!!!!");
sceneController.SwitchScene();
return;
}
}
今の所恋しいにゃ〜ゲージの上限が一桁までしかないので、100000も増加するアイテムは不要なのですが、試して正解でした。
上記のループ文で、最初はreturnを書かずに+2だとか+3のアイテムで動作検証をして満足していました。
しかし+100000にしたとたんPCがぐいーーーんと鳴き始めてUnityがかたまりました。
returnがなかったのでハートが7個MAXになったあとも残りの99993回ループし続けてシーンを呼び出そうとしていたのです。
規格外の数値を設定していなければ「たまに遅いな」程度で気づけずにreturnに関する知見も得られなかったかと思います。
コメント