(この記事の使用環境: Unity5.4.2f2 Personal、Windows10


さて、今回はゲームオブジェクトに付けられたタグを動的に切り替えるお話。
全画面キャプチャ 20170119 115922

こんな感じ。文字が小さいですが、コンソールにぶつかったオブジェクトのタグ情報を出力しています。

 
概要はこんな感じ。
  • プレイヤーであるロボくんがはじめにCubeにぶつかったとき、Cubeに付けられているタグは"Pushable"です。
  • ロボくんに押されてCubeが壁(Wall)にぶつかると、Cubeのタグが"Climbable"に変更されます。
  • ロボくんはぶつかったオブジェクトのタグによって振る舞いを変えます。(これは次回の記事で解説予定)
では設定について。
まずは、対象物に付けるタグを2種類作り、一方を対象物に付けておきます。今回は、タグ「Pushable」と「Climbable」を作り、対象物「CubeObstacle」にタグ「Pushable」を付けました。
全画面キャプチャ 20170119 115124

 あとはスクリプトで必要なときにタグを切り替えるだけ。今回はCubeObstacleにアタッチしたスクリプトで、壁にぶつかったらタグを「Climbable」に切り替えています。

public class CubeObstacle : MonoBehaviour {
    
    private void OnCollisionEnter (Collision collision)
    {
        if(collision.gameObject.tag == "Wall")  // 壁にぶつかったら
        {
            this.tag = "Climbable";             // タグを変更する
            GetComponent<Rigidbody> ().constraints = RigidbodyConstraints.FreezeAll;    // 移動・回転をすべてフリーズする
        }
    }
}


何かにぶつかったとき以外に、時間や場所の変化などでタグを切り替えることもできそうですね。

今回は以上です。