Start()は信じるな

 

機能はポテトに塩を振る機能と、ゴミ箱を出し入れする機能を制作した。

 

塩を振る

 

ボタンを押すとポテトに塩が振られる。

塩の回数が0回だとオレンジ、1~3回だと黄色、4回以上だと真っ白になる。

0回、4回以上のカスポテトを落としてしまうと何かしら悪いことが起こるようにしたい。

 

最初はマテリアルのアルベドをうまいこと編集して、塩が振られた状態だと白いつぶつぶが付くようにしたかったが、アルベドの画像を編集して貼り付けるとモデルがバグってしまうため、色の変換のみで妥協した。

 

この色の変化はスクリプトからmaterial.colorで行いたかったが、変換後に模様が消えて黄色い四角柱になってしまったので断念した。

最終的には、いくつかマテリアルを用意しておき、スクリプトからマテリアル自体を変更することで色の変化を表現した。

 

 

 

 

ゴミ箱出し入れ

ボタンを押すとゴミ箱を出し入れできる。

カスポテトをこのゴミ箱でうまく拾うことでペナルティを回避できるようにしたい。

このゴミ箱の移動はRigidbody.MovePositionでやりたかったが、動きがカクカクして微妙だった。3dのMovePositionを使ったことがあまりなく、どう修正すればいいのかよくわからなかったので、transform.positionを直接いじることで滑らかな移動をさせている。

ポジションを直接いじることで連続性が無くなり、移動中はオブジェクトが貫通するようになってしまったが、まあ、それもゲーム性といことで...

 

 

この他にもいくつか学びがあった。

まず、startが実行されるタイミングについて

オブジェクトをinstantiateをしたメソッドの中で、生成したオブジェクトのクラスからメソッドを使用するとStart()が実行されていない状態でメソッドが実行されることになる。Start()が実行された前提で生成されたクラスのメソッドを書いているとぬるぽとかが出る。これはStart()ではなくAwake()を使うことで回避できる。

 

この問題を解決するのに結構時間がかかった。

実行順を意識するのって大事だなぁ。

 

また地味な学びとしてcolliderのtriggerの有無で当たった時の変数名がcollisionとcolliderで変わる。じみーに忘れてペーストしがちだったので気を付けたい。

 

 

今日はUI周りの作業をがんばっていこ~