UnityUnityメモ

Unity初心者向け!Spaceキーでオブジェクトを交互に切り替える方法を徹底解説

Unity

1. はじめに

Unityでゲーム開発を始めたばかりの方にとって、ボタン操作やキー入力によるオブジェクトの制御は、基本的でありながら非常に重要なスキルです。今回は、「Spaceキーを押すたびにCubeとSphereを交互に表示・非表示にする」というシンプルな機能を作りながら、Unityのスクリプトの基礎を学んでいきます。


この記事では、初心者の方でも理解しやすいように、次のポイントを丁寧に解説します:

  • Unityでのオブジェクトの配置方法
  • スクリプトの作成とアタッチ方法
  • キー入力を検知してオブジェクトを切り替える仕組み

Spaceキーを押すたびに画面上のオブジェクトが切り替わると、ゲーム開発に必要なインタラクティブな要素を手軽に実現できます。この操作は簡単で応用が効くため、ぜひマスターしてください!それでは、具体的な手順を一緒に見ていきましょう!

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



2. 準備

それでは、Spaceキーを押すたびにCubeとSphereを交互に表示・非表示にするための準備を進めていきましょう!Unityの基本操作をおさらいしながら進めるので、初心者の方でも安心してくださいね。


2-1. Unity3Dプロジェクトを新規作成する

まずはUnityで新しいプロジェクトを作成しましょう。以下の手順で行います。

  1. Unity Hubを開き、「新規作成(New Project)」をクリックします。
  2. 3Dテンプレートを選択し、プロジェクト名を入力(例: ToggleCubeSphere)して「作成(Create)」をクリックします。
  3. 数秒待つとUnityエディタが開き、新しいプロジェクトが準備されます。

2-2. CubeとSphereを配置する

次に、3DオブジェクトのCubeとSphereをシーンに配置します。以下の手順に従ってください。

  1. ヒエラルキー(Hierarchy)ウィンドウを右クリックして「3D Object」→「Cube」を選択します。
    • シーンビューに立方体(Cube)が表示されます。
    • ヒエラルキー内に「Cube」という名前のオブジェクトが追加されます。
  2. 同じように、ヒエラルキーで右クリックして「3D Object」→「Sphere」を選択します。
    • 球体(Sphere)が表示され、ヒエラルキーに追加されます。

2-3. オブジェクトに名前を付ける

ヒエラルキー内のオブジェクトを見やすくするため、それぞれに名前を付けましょう。

  1. ヒエラルキー内の「Cube」を選択し、もう一度名前をクリックして「Cube」のままでも良いですが、わかりやすい名前に変更しても構いません(例: MyCube)。
  2. 同様に、「Sphere」を選択して必要であれば名前を変更します(例: MySphere)。

これで準備は完了です!次はスクリプトを作成して、実際にSpaceキーでオブジェクトを切り替える仕組みを作っていきますよ。



3. スクリプトの作成

ここでは、CubeとSphereを交互に表示・非表示にするスクリプトを作成します。簡単な手順で進めていくので、一緒にやってみましょう!


1. スクリプトを作成する

まずは、新しいスクリプトを作成します。

  1. プロジェクトウィンドウを右クリックします。
  2. 「Create」→「C# Script」を選択します。
  3. 作成したスクリプトに名前を付けます。今回はわかりやすいように GameManager と名付けましょう。

これでスクリプトが作成されました。


2. スクリプトを編集する

次に、作成したスクリプトをダブルクリックして開き、以下のコードをコピー&ペーストしてください。

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

public class GameManager : MonoBehaviour
{
    public GameObject cube;
    public GameObject sphere;

    void Start()
    {
        // ゲーム開始時にSphereを非表示にする
        sphere.SetActive(false);
    }

    void Update()
    {
        // Spaceキーが押されたときに実行
        if (Input.GetKeyDown(KeyCode.Space))
        {
            if (sphere.activeSelf)
            {
                // Sphereが表示中の場合はCubeを表示、Sphereを非表示
                cube.SetActive(true);
                sphere.SetActive(false);
            }
            else
            {
                // Cubeが表示中の場合はSphereを表示、Cubeを非表示
                cube.SetActive(false);
                sphere.SetActive(true);
            }
        }
    }
}

3. スクリプトの内容の解説

このスクリプトが何をしているのか、簡単に説明します。

  1. public GameObject cubepublic GameObject sphere
    • CubeとSphereをUnityのインスペクターで設定できるようにするための変数です。
  2. Start() メソッド
    • ゲームが始まったときに、最初に一度だけ実行されます。
    • sphere.SetActive(false) によって、ゲーム開始時にSphereを非表示にします。
  3. Update() メソッド
    • 毎フレーム実行されます。
    • Input.GetKeyDown(KeyCode.Space) でSpaceキーが押されたかをチェックします。
    • Sphereが表示されているかどうかを sphere.activeSelf で確認し、CubeとSphereの表示を切り替えます。

コード全体の説明

このスクリプトはGameManagerというクラスを定義していて、MonoBehaviourを継承しています。Unityでは、MonoBehaviourを継承することで、スクリプトがUnityのオブジェクトにアタッチされて、特定のイベント(例えばゲームの開始時や毎フレームの更新時)に反応するようになります。

各部分の説明

1. public GameObject cube; public GameObject sphere;

  • cubesphereという2つのゲームオブジェクトの変数を宣言しています。publicとすることで、Unityのエディタ上でこれらのオブジェクトを設定できるようになります。

2. void Start()

  • このStartメソッドは、ゲームが開始されるときに一度だけ呼び出されます。ここではsphere.SetActive(false);としています。これは、ゲームが始まると同時にsphereオブジェクトを非表示にするという意味です。

3. void Update()

  • Updateメソッドは毎フレーム呼び出されます。ゲームが動いている間は、このメソッドの中の処理が常に実行されます。
  • if (Input.GetKeyDown(KeyCode.Space))という条件文は、プレイヤーがスペースキーを押した瞬間を検知します。
  • 内側のif(sphere.activeSelf)は、sphereオブジェクトが表示されているかどうかをチェックします。
    • もし表示されていれば、cubeを表示してsphereを非表示にします。
    • もし表示されていなければ、cubeを非表示にしてsphereを表示します。

全体の動き

  1. ゲームが始まると、sphereは非表示になります。
  2. プレイヤーがスペースキーを押すと、次の処理が行われます:
    • もしsphereが表示されていれば、cubeを表示し、sphereを非表示にします。
    • もしsphereが非表示であれば、cubeを非表示にし、sphereを表示します。

これでスクリプトの準備は完了です!次は、このスクリプトをUnity内で正しく動かすための設定を行います。



4. スクリプトのアタッチと設定

さて、スクリプトが完成したら、次はこれをUnityのシーンに組み込んで動かしてみましょう。スクリプトをアタッチして設定する手順を順番に説明します。


1. スクリプトを空のGameObjectにアタッチする

まず、作成したスクリプトGameManagerをシーン内で管理するために、空のGameObjectを作成してアタッチします。

  1. Hierarchyウィンドウで右クリックし、メニューから「Create Empty」を選びます。
  2. 作成されたGameObjectをわかりやすい名前に変更しましょう。例えばGameManagerと名付けます。
  3. Projectウィンドウから作成したGameManagerスクリプトを、HierarchyウィンドウのGameObjectにドラッグ&ドロップします。
    これでスクリプトがGameObjectにアタッチされました!

2. CubeとSphereをスクリプトに登録する

次に、CubeとSphereをスクリプト内で操作できるように登録します。

  1. HierarchyウィンドウでCubeとSphereを選択します。それぞれの名前がわかりやすくCubeSphereになっているか確認してください。
  2. GameObjectにアタッチされたGameManagerをクリックし、Inspectorウィンドウを表示します。
  3. GameManagerスクリプトの公開されているプロパティがInspectorに表示されます。ここではCubeSphereという2つのフィールドが見えるはずです。
  4. CubeをCubeフィールドに、SphereをSphereフィールドにドラッグ&ドロップして登録します。

ポイント: ドラッグ&ドロップする際は、間違えないようにフィールド名をよく確認してください!


3. スクリプトの確認

全て設定が完了したら、再度内容を確認しましょう。

  • 空のGameObjectGameManagerスクリプトがアタッチされていること
  • InspectorでCubeSphereフィールドに正しいオブジェクトが登録されていること

これで準備は完了です!次のステップで実際にSpaceキーを押して動作確認をしてみましょう。簡単ですよね?



5. 実行してみよう!

いよいよ完成したスクリプトを動かして、CubeとSphereが交互に切り替わるのを確認してみましょう!


1. プレイモードを開始する

まず、Unityエディターの画面上部にある**再生ボタン(▶)**をクリックして、プレイモードを開始します。プレイモード中はゲームの動作をリアルタイムで確認することができます。


2. Spaceキーを押してみる

キーボードのSpaceキーを押してみてください。以下のような動作が確認できれば成功です:

  • 最初に表示されているのはCubeです。
  • Spaceキーを押すとSphereが表示され、Cubeが非表示になります。
  • 再度Spaceキーを押すと、Cubeが表示され、Sphereが非表示になります。

この動作を繰り返すことで、CubeとSphereが交互に表示・非表示を繰り返します。


3. 動かない場合の確認ポイント

もし切り替えがうまくいかない場合は、以下をチェックしてみましょう:

  1. InspectorでCubeとSphereが正しく登録されているか
    • GameManagerスクリプトのCubeSphereのフィールドに、対応するオブジェクトがドラッグ&ドロップされていることを確認してください。
  2. スクリプトのエラー
    • スクリプトにミスがないか確認します。エラーがある場合、Unityのコンソールウィンドウにエラーメッセージが表示されます。
  3. Spaceキーが正しく認識されているか
    • キーボードが動作しているか確認してください。必要に応じてKeyCode.Spaceを他のキーに変更して試してみましょう。

無事に切り替えができたら、これで成功です!
Unityでは簡単なスクリプトでも、このようにインタラクティブな動作を作ることができます。これをベースに、他のオブジェクトを追加したり、別のキー操作を実装することで、より複雑な仕組みを作ることができますよ!



6. 応用アイデア

UnityでSpaceキーを押すたびにCubeとSphereを交互に表示・非表示にするスクリプトは、シンプルですが応用の幅が広いです!ここでは、この仕組みを使ったさらに楽しいアイデアや工夫を紹介します。


① 他のキーで操作を切り替える方法

現在のスクリプトではSpaceキーがトリガーですが、他のキーを使って操作を変更することも簡単です。例えば、AキーDキーを使いたい場合は、以下のようにコードを修正するだけです。

if (Input.GetKeyDown(KeyCode.A)) // Aキーを押したとき
{
if (sphere.activeSelf)
{
cube.SetActive(true);
sphere.SetActive(false);
}
else
{
cube.SetActive(false);
sphere.SetActive(true);
}
}

これを応用すれば、特定のキーごとに異なるオブジェクトを切り替えることも可能です。


② 切り替えるオブジェクトを増やす

今はCubeとSphereの2つだけですが、複数のオブジェクトを切り替えるようにすることもできます。その場合、配列やリストを使うと便利です。

public GameObject[] objects; // 切り替えるオブジェクトを配列に格納
private int index = 0; // 現在のオブジェクトインデックス

void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
// 現在のオブジェクトを非表示に
objects[index].SetActive(false);

// 次のオブジェクトを表示(インデックスを更新)
index = (index + 1) % objects.Length;
objects[index].SetActive(true);
}
}

このスクリプトを使えば、3つ以上のオブジェクトを順番に切り替えられます!例えば、Cube → Sphere → Capsuleのように、好きな順番で表示することが可能です。


③ アニメーションやエフェクトを追加

オブジェクトを切り替えるだけでなく、アニメーションやエフェクトを組み合わせると、より視覚的な演出ができます。例えば、以下のアイデアがあります。

  • フェードイン・フェードアウト: 切り替える際に、透明度を徐々に変更して自然な演出を追加
  • パーティクルエフェクト: 切り替わるタイミングで光や煙のパーティクルを表示
  • 移動アニメーション: 切り替えるときにスムーズに位置を移動する演出

以下は簡単なフェードアウトを実現するコードの例です。

IEnumerator FadeOut(GameObject obj)
{
Renderer renderer = obj.GetComponent<Renderer>();
Color color = renderer.material.color;

for (float alpha = 1; alpha >= 0; alpha -= 0.1f)
{
color.a = alpha;
renderer.material.color = color;
yield return new WaitForSeconds(0.1f);
}

obj.SetActive(false);
}

切り替えるタイミングでこのコルーチンを呼び出せば、より滑らかな効果を追加できます!




④ トリガーの条件を変更する

現在のスクリプトでは、キーボードの入力をトリガーにしていますが、他にもいろいろなトリガーを利用できます。

  • マウスクリック: Input.GetMouseButtonDown(0) でクリックを検知
  • タイマー: 一定時間ごとに切り替えたい場合はTime.deltaTimeを活用
  • 衝突判定: 他のオブジェクトに接触したら切り替える

例えば、一定時間ごとに切り替えるスクリプトの例です。

private float timer = 0;
public float switchInterval = 2.0f; // 2秒ごとに切り替え

void Update()
{
timer += Time.deltaTime;
if (timer >= switchInterval)
{
timer = 0;
if (sphere.activeSelf)
{
cube.SetActive(true);
sphere.SetActive(false);
}
else
{
cube.SetActive(false);
sphere.SetActive(true);
}
}
}

⑤ オブジェクト切り替えをゲームプレイに活用

実際のゲームプレイに応用すると、以下のようなシステムを作ることができます。

  • 武器の切り替え: 剣、弓、銃などを順番に切り替える
  • キャラクターの変身: 状況に応じてキャラクターの形態を変更する
  • ギミックのトリガー: スイッチを押すとオブジェクトが切り替わる

これらのアイデアを参考にして、自分だけのオリジナルな演出を作ってみてください!この仕組みを応用するだけで、より魅力的で遊び心のあるゲームを作ることができますよ!



よくある質問

Q
オブジェクトが切り替わらない場合、どうすればいいですか?
A

InspectorでCubeとSphereが正しく登録されているか確認してください。また、スクリプトのエラーがないか確認しましょう。

Q
他のキーでも操作できますか?
A

KeyCode.Spaceを他のキーに変更すれば可能です。例: KeyCode.Aで「Aキー」に変更できます。

Q
他のオブジェクトも切り替えられますか?
A

はい、スクリプトを拡張すれば可能です。オブジェクトをリスト化して柔軟に操作しましょう。

おすすめのアセット

「Platformer Project」は、初心者でも簡単に使える2Dプラットフォーマーゲームのテンプレートです。このアセットには、キャラクターコントローラー、敵AI、アイテム収集システムなど、ゲーム制作に必要な基本的な要素がすべて含まれています。初心者から上級者まで幅広く対応しており、コードやアセットのカスタマイズも可能です。