【Unity】マウスをクリックするたびにランダムで背景色を変える

マウスをクリックするたびに背景色をランダムに変更するには、Unityのスクリプトを使用してカメラの背景色を制御できます。以下は、そのような機能を実装するための基本的なC#スクリプトの例です。

サンプルコード

このスクリプトは、マウスボタンが押されるたびにカメラの背景色をランダムな色に変更します。CameraコンポーネントがアタッチされているGameObjectにこのスクリプトをアタッチしてください。

using UnityEngine;

public class RandomBackgroundColor : MonoBehaviour
{
    private Camera cam; // カメラコンポーネントの参照を保持する変数

    void Start()
    {
        // カメラコンポーネントを取得して変数に格納
        cam = GetComponent<Camera>();
    }

    void Update()
    {
        // マウスがクリックされたか確認
        if (Input.GetMouseButtonDown(0)) // 0は左クリックを意味します
        {
            // ランダムな色を生成
            Color newColor = new Color(Random.value, Random.value, Random.value);
            // カメラの背景色をランダムな色に設定
            cam.backgroundColor = newColor;
        }
    }
}

このスクリプトの説明:

  • Startメソッドでは、スクリプトがアタッチされているGameObjectからCameraコンポーネントを取得しています。これにより、後で背景色を変更するための参照が得られます。
  • Updateメソッド内で、Input.GetMouseButtonDown(0)を使用して、フレームごとに左マウスボタンが押されたかどうかをチェックします。0は左マウスボタンを表します。
  • マウスボタンが押されると、Colorオブジェクトを生成してランダムな色を設定し、それをカメラのbackgroundColorプロパティに割り当てることで、背景色を変更します。

このスクリプトを使用することで、マウスクリックに応じて背景色がランダムに変わる効果を簡単に実装できます。

おまけ

GetComponent<Camera>()を使ってカメラコンポーネントを取得する代わりに、他の方法でカメラコンポーネントへの参照を取得することもできます。以下は、その代替方法の一部です:

1. インスペクターを通じての直接割り当て

Unityのインスペクターを使用して、スクリプト内のカメラコンポーネントへの参照を直接割り当てることができます。これを行うには、まずスクリプト内にCamera型のpublicまたは[SerializeField]で修飾されたフィールドを作成します。

public class RandomBackgroundColor : MonoBehaviour
{
    [SerializeField] private Camera cam; // インスペクターから割り当てる

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Color newColor = new Color(Random.value, Random.value, Random.value);
            cam.backgroundColor = newColor;
        }
    }
}

この方法では、スクリプトがアタッチされているGameObjectにカメラコンポーネントがなくても、インスペクターから任意のカメラをドラッグ&ドロップで割り当てることができます。

2. Camera.mainを使用する

シーンにメインカメラが一つだけある場合、Camera.mainを使用してそのカメラへの参照を取得することができます。これは、"Main Camera"タグが付いている最初のアクティブなカメラを返します。

public class RandomBackgroundColor : MonoBehaviour
{
    private Camera cam;

    void Start()
    {
        cam = Camera.main;
    }

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Color newColor = new Color(Random.value, Random.value, Random.value);
            cam.backgroundColor = newColor;
        }
    }
}

この方法は簡単ですが、Camera.mainを呼び出すのは処理が重いため、StartAwakeメソッド内で一度だけ呼び出して、結果を変数に保存しておくことが推奨されます。

3. タグを使って検索

特定のタグを使用してカメラを検索することもできます。例えば、カメラに"PlayerCamera"などのカスタムタグを割り当て、それを使用して検索します。

void Start()
{
    cam = GameObject.FindGameObjectWithTag("PlayerCamera").GetComponent<Camera>();
}

この方法を使用するには、事前にカメラのGameObjectに対して適切なタグを設定する必要があります。そして、そのタグ名をGameObject.FindGameObjectWithTagメソッドに渡してカメラを見つけ出します。

これらの方法は、状況に応じて選択でき、特定のプロジェクトのニーズに最適なものを使用できます。

Unity

Posted by hidepon