0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[Unity 3D]一個一個のGameObjectに色を付けてみる

Posted at

Unityで、クローン一個一個に、それぞれ違った色を付けてみたいと思ったため、
Scriptを使って色を付けてみることにしました。
しかし、私はプログラミングもQiitaも初心者なので、色々とおかしいところがあると思いますが、
お許しください。

使用Unityバージョン

2020.3.4f1

今回の目標

下の画像のように、ランダムに色を付けれるようになる

実践

まずは、クローンを作れるように、適当にキューブのプレハブを用意します。 そして、PrefabCreateというスクリプトを書いていきます。
PrefabCreate.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PrefabCreate : MonoBehaviour
{
    [SerializeField] private GameObject cube; // プレハブのGameObject

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            Instantiate(cube, new Vector3((Random.value - 0.5f) * 10, (Random.value - 0.5f) * 10, 0), Quaternion.identity);
        }
    }
}

これに関しては適当です。今回はスペースキーを押すとキューブが生成されるようにしました。
これを適当なオブジェクトにアタッチしてあげて、CubeのところにPrefabをアタッチします。
ここからが本題です。色を変更するためのスクリプトを作ってあげます。
名前は... うーん、とりあえず適当にChangeColorとかにしておきます。

ChangeColor.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ChangeColor : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        Renderer renderer = this.gameObject.GetComponent<Renderer>();
        if (renderer != null)
        {
            Material material = new Material(Shader.Find("Standard"));
            material.color = Color.HSVToRGB(Random.value, 1f, 1f);
            renderer.material = material;
        }
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}
解説 まずは、Renderer renderer = this.gameObject.GetComponent();についてです。 これには、Materialをアタッチできるので、自分自身のRendererを取得しています。 次に、Material material = new Material(Shader.Find("Standard"));についてです。 これに関しては、materialをスクリプト内で作成し定義する、ということです。 Shader.Find("Standard")については、実際自分でもよくわかっていません。 下手に間違っている可能性のある情報を載せるのは良くないのでここは解説を省いていただきます。 そして、material.color = (Color型);についてです。 これはそのままで、materialの色を指定しています。 そして最後、renderer.material = material;についてです。 これはGameObjectのRendererのマテリアルのところに、materialをアタッチしているのと同じ 動作になります。 以上で解説終わりです。

結果

実行してスペースキーを連打するとこのようになるはずです。
スクリーンショット 2023-08-10 135016.png

結論

スクリプトで、このような手順を踏めばいいです。
・対象のGameObjectからRendererをGetComponentする
・Materialを定義してやる
・定義したmaterialのcolorプロパティに色情報を代入
・取得したrendererのmaterialプロパティに定義したmaterialを代入
これによってそれぞれ違った色を付けることができます。

今回の記事は以上です。お読みいただきありがとうございました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?