Unity

Unity初心者向け!クリックでオブジェクトの色を切り替える方法

Unity

はじめに

Unityを始めたばかりの皆さん、こんにちは!ゲーム開発って、覚えることがたくさんあって大変ですよね。でも、ちょっとした仕組みを作れるようになると、一気に楽しくなります!

今回は、「オブジェクトをクリックするたびに色を切り替える」という、Unityの基本操作とスクリプトを組み合わせたシンプルな仕組みを作ってみましょう。この方法は初心者の方にもぴったりで、C#スクリプトの基礎やUnityでのオブジェクト操作を楽しく学べます。

さっそく、一緒にチャレンジしてみましょう!Unityを触ったことがないという方はコチラの記事から見てみてください!



1. 3Dオブジェクトを作成しよう

最初に、クリックで色を変える対象となる3Dオブジェクトを作成します。ここでは、「Cube」を作成します。

  1. Hierarchy(ヒエラルキー)ウィンドウを右クリックします。
  2. 表示されたメニューから「3D Object」→「Cube」を選択します。

これでシーン内にCubeが追加されます。Cubeが選択された状態で、Sceneビューに白い立方体が表示されているのを確認しましょう。

ポイント

Cubeの大きさや位置を調整したい場合は、Inspector(インスペクター)ウィンドウで以下の項目を設定できます:

  • Position(位置):オブジェクトの場所を調整します(例: X:0, Y:0, Z:0)。
  • Scale(拡大/縮小):オブジェクトの大きさを変更します(例: X:1, Y:1, Z:1)。

これで、色を変更する対象となる3Dオブジェクトの準備が完了です!次に進みましょう。




2. スクリプトを作成しよう

次に、クリックでオブジェクトの色を切り替えるためのスクリプトを作成します。

1. 新しいスクリプトを作成

  1. Project(プロジェクト)ウィンドウで空白の場所を右クリックします。
  2. 「Create」→「C# Script」を選択します。
  3. スクリプトの名前をColorChangerと入力します。

これで、ColorChangerという名前の新しいスクリプトが作成されます。

2. スクリプトを編集

  1. 作成したColorChangerスクリプトをダブルクリックして、スクリプトをエディタで開きます。
  2. 以下のコードを貼り付けます。
using UnityEngine;

public class ColorChanger : MonoBehaviour
{
    private Renderer rend; // オブジェクトの色を変更するためのRenderer
    private Color[] colors = { Color.red, Color.blue, Color.green, Color.yellow }; // 切り替える色の配列
    private int currentColorIndex = 0; // 現在の色のインデックス

    void Start()
    {
        // Rendererコンポーネントを取得して、最初の色を設定
        rend = GetComponent<Renderer>();
        rend.material.color = colors[currentColorIndex];
    }

    void OnMouseDown()
    {
        // インデックスを1つ進めて次の色に切り替え
        currentColorIndex = (currentColorIndex + 1) % colors.Length;
        rend.material.color = colors[currentColorIndex];
    }
}

コードのポイントを解説

  • Rendererを取得
    GetComponent<Renderer>()を使って、オブジェクトの見た目を変更するためのコンポーネントを取得します。
  • OnMouseDown()を使用
    この関数は、オブジェクトをクリックしたときに自動で呼び出されます。
  • 色の配列と切り替えロジック
    colors配列に切り替える色を定義し、currentColorIndexを使って次の色に変更します。% colors.Lengthで配列の範囲を超えないようにします。

1. スクリプトの基本構造

スクリプトはUnityのMonoBehaviourクラスを継承しています。これでUnityのオブジェクトと連携できます。

public class ColorChanger : MonoBehaviour
  • ColorChangerという名前のクラス。
  • MonoBehaviourを使うと、Unityのイベント(例えば、マウスクリックやフレーム更新)を処理できます。

2. 変数の定義

private Renderer rend;
private Color[] colors = { Color.red, Color.blue, Color.green, Color.yellow };
private int currentColorIndex = 0;
  • Renderer rend: オブジェクトの見た目(マテリアルや色)を変えるためのもの。
  • Color[] colors: 変えたい色をまとめてリスト(配列)にしています。
    • 赤、青、緑、黄色が設定されています。
  • int currentColorIndex: 今どの色を使っているかを数字で管理します。最初は0(赤)。

3. Startメソッド

void Start()
{
rend = GetComponent<Renderer>();
rend.material.color = colors[currentColorIndex];
}
  • Start()はゲームが始まったときに1回だけ呼ばれる特別なメソッド。
  • GetComponent<Renderer>():
    • このオブジェクトの中からRenderer(見た目を操作する部品)を探して、rendに入れます。
  • rend.material.color = colors[currentColorIndex];:
    • 最初に赤色(colors[0])をオブジェクトに設定します。

4. OnMouseDownメソッド

void OnMouseDown()
{
currentColorIndex = (currentColorIndex + 1) % colors.Length;
rend.material.color = colors[currentColorIndex];
}
  • OnMouseDown:
    • オブジェクトがクリックされたときに呼ばれる特別なメソッドです。
  • currentColorIndex = (currentColorIndex + 1) % colors.Length;:
    • 現在の色を次の色に進めます。
    • % colors.Lengthで「最後の色の次は最初の色」に戻るようにしています。
  • rend.material.color = colors[currentColorIndex];:
    • 次の色をオブジェクトに設定します。

全体の動き

  1. ゲームが始まると、最初の色が設定されます(赤色)。
  2. オブジェクトをクリックすると、OnMouseDownが呼ばれて、次の色に進みます。
    • クリックするたびに赤→青→緑→黄色→赤…という順番で色が変わります。



3. スクリプトをアタッチしよう

スクリプトをオブジェクトにアタッチする方法を説明します。とても簡単なので、以下の手順に従ってください!

  1. Project(プロジェクト)ウィンドウで、先ほど作成したColorChangerスクリプトを見つけます。
  2. スクリプトをドラッグ&ドロップして、Hierarchy(ヒエラルキー)ウィンドウのCubeに重ねます。
  3. Inspector(インスペクター)ウィンドウを確認すると、CubeにColorChangerスクリプトがアタッチされているのがわかります。



4. 実行して確認しよう

ここまでの手順が完了したら、いよいよ実行して動作を確認します!

  1. **上部ツールバーの「再生ボタン(Play)」**をクリックします。
    • 再生ボタンは画面上部中央にある、三角形のアイコンです。
  2. シーンが再生され、ゲーム画面が表示されます。
  3. Cubeをクリックしてみてください。
    • Cubeの色がクリックするたびに切り替わるのを確認できるはずです!

これで、クリックでオブジェクトの色を切り替える方法の解説は終了です! Unityの基本を理解する練習にもぴったりなので、ぜひ試してみてくださいね。




よくある質問

Q
Cubeをクリックしても色が変わりません。なぜですか?
A

CubeにColliderがついているか確認してください。Colliderがないとクリックイベントが検出されません。

Q
色をもっと追加したい場合はどうすればいいですか?
A

colors配列に色を追加してください。例えば、Color.magentaColor.cyanを追加できます。

Q
Cube以外のオブジェクトでも使えますか?
A

はい、任意の3Dオブジェクトにスクリプトをアタッチすれば使えます。