UnityUnityメモ

Unityでオブジェクトをスライドさせて切り替える方法!【初心者向け】

Unity

はじめに

この記事では、Unity初心者の方でも簡単に理解できる方法で、オブジェクトをスライドさせて順番に切り替える仕組みを作る方法を解説します。スクリプトの基礎から、実際に動作するプログラムの完成まで、ステップバイステップで進めていきます。


さらに、この記事では以下のポイントを学べます:

  • Unityのヒエラルキーウィンドウを使ったオブジェクトの管理
  • スクリプトでオブジェクトを動かす方法
  • 矢印キーを使ったインタラクションの作り方

初心者でも迷わずに進められるよう、具体的な手順とサンプルコードを用意しました!これを読めば、Unityでのオブジェクト操作に自信がつくはずです。それでは、楽しく学んでいきましょう!

Unityを触ったことがないという方はコチラの記事から見てみてください!



2. オブジェクトを準備しよう

Unityでオブジェクトをスライドさせて切り替える仕組みを作るには、まず3つのオブジェクトを作成し、それぞれに違った色を設定して見やすくする必要があります。このステップでは、Cube、Sphere、Cylinderを追加して色をつける方法を解説します。


1. ヒエラルキーウィンドウでオブジェクトを作成する

  1. Unityエディターでプロジェクトを開きます。
  2. ヒエラルキーウィンドウを右クリックします。
  3. メニューから「3D Object」→「Cube」を選択して、シーンにCubeを追加します。
  4. 同じ手順で「Sphere」と「Cylinder」も追加します。

これで、3つの基本的な3Dオブジェクトがシーンに配置されました。それぞれの名前をわかりやすくするため、ヒエラルキーウィンドウ内で右クリックして「Rename」を選択し、以下のように名前を変更しましょう:

  • Cube → Cube
  • Sphere → Sphere
  • Cylinder → Cylinder

2. 各オブジェクトに色を設定する

オブジェクトに色をつけることで、見やすさが大幅にアップします。以下の手順で色を設定してみましょう。

  1. プロジェクトウィンドウで右クリックし、「Create」→「Material」を選択します。
  2. 作成されたMaterialの名前を、それぞれ次のように変更してください:
    • CubeMaterial
    • SphereMaterial
    • CylinderMaterial
  3. 各Materialを選択して、インスペクターウィンドウで色を設定します。
    • CubeMaterial: 赤色(例えば、Color PickerでR: 255, G: 0, B: 0に設定)
    • SphereMaterial: 緑色(R: 0, G: 255, B: 0に設定)
    • CylinderMaterial: 青色(R: 0, G: 0, B: 255に設定)
  4. 設定したMaterialを、それぞれのオブジェクトにドラッグ&ドロップしてアタッチします。
    • CubeにCubeMaterial
    • SphereにSphereMaterial
    • CylinderにCylinderMaterial

これで、3つのオブジェクトに異なる色が適用されました!見た目がはっきりするので、切り替えの動作確認がより簡単になります。


オブジェクトが準備できたら、次は空のオブジェクトを使って位置を管理する方法を解説します!どんどん進めていきましょう!



3. 空のオブジェクトとスクリプトの準備

オブジェクトをスライドさせて順番に切り替えるには、各オブジェクトの位置を管理するための空のオブジェクトを作成します。また、切り替えを制御するスクリプトを準備しましょう。

空のオブジェクトを作成する

  1. ヒエラルキーウィンドウで右クリック
    • 「Create Empty」を選択します。
    • 新しい空のオブジェクトが作成されます。
  2. 名前を付ける
    • 空のオブジェクトを3つ作成し、それぞれ以下の名前を付けます:
      • CenterObject
      • RightObject
      • LeftObject
    • これらは各オブジェクトの位置を管理するために使用します。
  3. もう1つ空のオブジェクトを作成
    • この空のオブジェクトにはスクリプトをアタッチします。
    • 名前を「ObjectManager」など、わかりやすいものに変更しましょう。

スクリプトを作成する

  1. プロジェクトウィンドウで右クリック
    • 「Create」→「C# Script」を選択します。
  2. スクリプトに名前を付ける
    • スクリプトの名前を「ObjectSwitcher」と入力して作成します。
  3. スクリプトを開く
    • 作成したスクリプトをダブルクリックして、エディター(通常はVisual Studio)で開きます。
  4. 以下のコードを入力する
    • 次のコードをスクリプトに入力してください:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ObjectSwitcher : MonoBehaviour
{
    public GameObject cube;
    public GameObject sphere;
    public GameObject cylinder;
    public int count;
    private float speed;
    public Transform centerPos;
    public Transform rightPos;
    public Transform leftPos;

    void Start()
    {
        count = 1;
        speed = 0.5f;
        centerPos.transform.position = new Vector3(0, 0, -2);
        rightPos.transform.position = new Vector3(2, 0, 2);
        leftPos.transform.position = new Vector3(-2, 0, 2);
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.RightArrow))
        {
            count++;
            if (count > 3)
            {
                count = 1;
            }
        }

        if (Input.GetKeyDown(KeyCode.LeftArrow))
        {
            count--;
            if (count < 1)
            {
                count = 3;
            }
        }

        if (count == 1)
        {
            cube.transform.position = Vector3.MoveTowards(cube.transform.position, centerPos.position, speed);
            sphere.transform.position = Vector3.MoveTowards(sphere.transform.position, rightPos.position, speed);
            cylinder.transform.position = Vector3.MoveTowards(cylinder.transform.position, leftPos.position, speed);
        }

        if (count == 2)
        {
            cube.transform.position = Vector3.MoveTowards(cube.transform.position, rightPos.position, speed);
            sphere.transform.position = Vector3.MoveTowards(sphere.transform.position, leftPos.position, speed);
            cylinder.transform.position = Vector3.MoveTowards(cylinder.transform.position, centerPos.position, speed);
        }

        if (count == 3)
        {
            cube.transform.position = Vector3.MoveTowards(cube.transform.position, leftPos.position, speed);
            sphere.transform.position = Vector3.MoveTowards(sphere.transform.position, centerPos.position, speed);
            cylinder.transform.position = Vector3.MoveTowards(cylinder.transform.position, rightPos.position, speed);
        }
    }
}

スクリプトをアタッチする

  1. スクリプトを「ObjectManager」にドラッグ&ドロップ
    • 作成したスクリプト「ObjectSwitcher」を「ObjectManager」オブジェクトにドラッグしてアタッチします。
  2. インスペクターでフィールドを設定
    • スクリプトの公開フィールド(cubespherecylindercenterPosrightPosleftPos)に対応するオブジェクトや位置をドラッグ&ドロップで設定します。

これで、空のオブジェクトとスクリプトの準備は完了です!次は、テストプレイで動作確認を行いましょう。



テストプレイ

ここまで設定が完了したら、いよいよテストプレイの時間です!矢印キーを使って、オブジェクトが順番に切り替わる動作を確認しましょう。以下の手順で進めてください。

1. プレイモードにする

Unityエディターの上部にある「再生ボタン(三角形のアイコン)」をクリックしてプレイモードを開始します。

2. 矢印キーで切り替えを確認

  • 右矢印キーを押すたびに、オブジェクトがスライドして中央に移動することを確認してください。
    • Cube → Sphere → Cylinderの順で移動します。
  • 左矢印キーを押すと、逆の順でオブジェクトが切り替わります。
    • Cylinder → Sphere → Cubeの順です。

トラブルシューティング

もし想定通りに動作しない場合は、以下を確認してください:

  • オブジェクトの設定
    • スクリプトのフィールド(Cube、Sphere、Cylinder、および各Transform)が正しく割り当てられているか。
    • ヒエラルキー内のオブジェクト名がスクリプトで使用している名前と一致しているか確認してください。
  • スクリプトのエラー
    • スクリプト内にエラーがないか確認します。
    • コンソールウィンドウにエラーが表示されている場合は、エラーメッセージをクリックして詳細を確認しましょう。
  • 入力の受け付け
    • 矢印キーの入力が正しく認識されているか確認します。ゲームビューが選択されていないとキー入力が反応しない場合があります。

改善アイデア

テストプレイが成功したら、さらに以下のアイデアを試してみましょう:

  • オブジェクトのスライド速度を調整
    スクリプト内のspeed変数を変更して、オブジェクトの移動速度を速くしたり遅くしたりしてみましょう。
  • オブジェクトを増やす
    新しいオブジェクトを追加し、スクリプトを拡張して切り替えられるオブジェクトを増やすことも可能です。



よくある質問(Q&A)

Q
スクリプトを正しくアタッチしたのに動作しません。どうすればいいですか?
A

まず、以下のポイントを確認してください:

  • スクリプトを正しい空のオブジェクトにアタッチしていますか?
  • インスペクターで、Cube、Sphere、Cylinder、およびそれぞれの位置オブジェクトを正しく割り当てていますか?
  • エラーメッセージが表示されている場合は、スクリプト内のスペルミスや記述漏れを確認してください。特にフィールド名や変数名に注意しましょう。
Q
矢印キーを押してもオブジェクトが動きません。どこを確認すればいいですか?
A

以下の点を確認してみましょう:

  1. キーボード入力が正しく認識されているか確認するために、Input.GetKeyDownの部分にブレークポイントを設置するか、Debug.Logで確認メッセージを出力してみてください。
  2. Unityの「Edit」→「Project Settings」→「Input Manager」で、HorizontalVerticalが正しく設定されているか確認します。
  3. オブジェクトの位置が適切に指定されているかも重要です。スクリプト内のcenterPosrightPosleftPosの値を見直してください。
Q
カスタマイズして独自のオブジェクトや動きを追加したいです。どうすればいいですか?
A

新しいオブジェクトや動きを追加する際は、以下の手順を参考にしてください:

  1. 新しい3Dオブジェクトを追加し、カスタムのMaterialを適用します。
  2. スクリプト内に新しいGameObject変数を追加し、ヒエラルキーで作成したオブジェクトを割り当てます。
  3. 新しい位置を管理するためにTransform変数を追加し、Updateメソッド内で適切な移動ロジックを記述します。
  4. さらにキー操作を増やしたい場合は、Input.GetKeyDownの中に新しい条件分岐を追加して対応しましょう。

おすすめのアセット

「Highway Racer 2」は、リアルな高速レースゲームのテンプレートで、Unityでアクション満載のレーシングゲームを作成できます。カスタマイズ可能な車両、シームレスな物理エンジン、異なる道路環境を提供し、初心者でも使いやすいデザインです。スコアシステムやリアルなAI車両、詳細なプレイヤースタッツ追跡なども含まれています。これにより、独自のレースゲームを迅速に構築可能です。