【Unity】ゴールしたアイテムの色を変える

f:id:s44511173:20190719114403g:plain

床に転がっている時、Cubeは緑色をしています。
ゴールした時、赤に変わっていますね。
今回は、この手法についてご紹介します。

マテリアルを作成する

オブジェクトの色は、マテリアルで設定します。
※Physic Materialではありません。ただのMaterialです。
Projectメニュー>Materialを選択し、マテリアルを新規作成します。

f:id:s44511173:20190719160748p:plain

色々設定項目がありますが、今回はそのまま!
色だけを設定します。
Albedo項目をクリックするとカラーピッカーが表示されるので、色を指定します。
さらにゴール用にマテリアルをもう一つ作成し、色を赤にします。

スクリプトからマテリアルを変更する

アイテムがゴールしたら、スクリプトからマテリアルを変更します。
アイテムにアタッチされているスクリプトに、以下を追加しましょう。
※新しくスクリプトを作成してアイテムにアタッチしてもOK

/// <summary>
/// インスペクタからゴールマテリアルをセット
/// </summary>
[SerializeField]
private Material goalMat; 

/// <summary>
/// 衝突した際にコールされる
/// </summary>
/// <param name="collision">衝突した相手のコライダ</param>
private void OnCollisionEnter(Collision collision) {
    if(collision.gameObject.tag == Defines.GoalTag) {
        GetComponent<MeshRenderer>().material = this.goalMat;
    }
}

実行する前に、上記のスクリプトのインスペクタでゴールマテリアルをセットするのをお忘れなく!
私はよく忘れてUnity様に怒られます・・・。

これで、ゴールしたアイテムの色が変わるようになりました!

結論

  • オブジェクトの色は、マテリアルで設定する
  • マテリアルはスクリプトから変更できる
  • スクリプトのインスペクタで、オブジェクトをセットするのをよく忘れるw