Unity

【Unity】オブジェクトの色をクリックで切り替えるやり方!!

unity changecolor

どうも、いつの間にか12月でビビりまくってるコニーです

 

さて、この記事を読んでいる方はUnityでゲームを作ったりすることが多いと思います

ゲームを作るときに

「クリックしてオブジェクトの色を変えたい!!」

と思うことありますよね

 

今回はUnityで簡単にオブジェクトの色を変えるスクリプトをご紹介します

【Unity】オブジェクトの色をクリックで変える方法

さっそくシンプルに

クリックでオブジェクトの色を変える方法を紹介します

今回は下の画像のような赤いCubeをクリックで青色に変えます

unity cube

コードはこちら!!

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ChangeColor : MonoBehaviour
{
    public Material MaterialA;
    GameObject clickedGameObject;

    void Update()
    {
        if(Input.GetMouseButtonDown(0))
        {
            clickedGameObject = null;

            //Rayでクリックしたオブジェクトを取得
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit = new RaycastHit();

            if (Physics.Raycast(ray, out hit))
            {

                //clickedGameObjectがクリックされたオブジェクト
                clickedGameObject = hit.collider.gameObject;

                //マテリアルを変更
                clickedGameObject.GetComponent<Renderer>().material = MaterialA;
            }
        }
    }
}

 

このコードでは

  1. クリックしたときに動作するif文
  2. Rayでクリックしたオブジェクトを取得
  3. オブジェクトのマテリアルをMaterialAに変更

という動作をしています

①を忘れがちですが、これをしておかないとマウスカーソルを合わせただけで色が変化してしまいます

初心者の方はよくやりがちなので注意しましょう!!

これを実際に動かすと次のようになります

 

クリックしたときに

青色のMaterialAへ変更されましたね!

特定のオブジェクトだけ色を変更させる方法

次に

特定のオブジェクトだけ色を変更させる方法

を紹介します

下の画像のように立方体と球があります

これらをクリックした際、立方体だけ色を変えるようにします!!

この作業をすることで
・ほかのオブジェクトへの影響をなくす
・当たりはずれを設定できる
などのメリットがあります

実際のコードはこちら

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ChangeColor : MonoBehaviour
{
    public Material MaterialA;
    GameObject clickedGameObject;

    void Update()
    {
        if(Input.GetMouseButtonDown(0))
        {
            clickedGameObject = null;

            //Rayでクリックしたオブジェクトを取得
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit = new RaycastHit();

            if (Physics.Raycast(ray, out hit))
            {

                //clickedGameObjectがクリックされたオブジェクト
                clickedGameObject = hit.collider.gameObject;

                //Tagで特定のオブジェクトのみ反応させる
                if (clickedGameObject.gameObject.CompareTag("Cube"))
                {
                    //マテリアルを変更
                    clickedGameObject.GetComponent<Renderer>().material = MaterialA;

                }

            }
        }
    }
}

 

先ほどのコードにif文で条件を指定してあげただけですね!

このコードでは立方体のみ”Cube”というタグをつけてあげることで、色を変えるかどうかを判別しています