UnityUnityメモ

Unityでスペースキーを使ったBool変数の切り替え方法を徹底解説

Unity

1. はじめに

こんにちは!Unityを使ってゲーム開発を学びたい初心者の皆さん、今日はスペースキーを押すたびにBool型(真偽値)変数の値を切り替える簡単なスクリプトの作り方をご紹介します。これを覚えると、ゲーム内でトグル(切り替え)動作を実装する際に役立ちますよ!

まず、Bool型について簡単に説明します。Bool型は「true(真)」または「false(偽)」の2つの値を持つ変数のことです。プログラミングの中では、スイッチのオン・オフや特定の条件を満たしているかどうかを管理するためによく使われます。

今回作成するスクリプトでは、スペースキーを押すたびに、このBool型の変数がtrueからfalse、またはその逆に切り替わる動きを実現します。これを使えば、例えばゲーム内でライトをオン・オフしたり、音楽の再生と停止を切り替えたりする仕組みが作れます。


Unityでのキー入力の仕組み

Unityでは、キーボードの入力を検知するためにInputクラスを使用します。このクラスの中には、キーの押下や放す動作を検知する便利なメソッドが用意されています。特に今回使うのは以下のメソッドです:

  • Input.GetKeyDown(KeyCode.Space)
    → スペースキーが押された「瞬間」を検知します。

この記事では、初心者の方にも分かりやすくステップごとに解説していきますので、ぜひ最後まで一緒に進めてみてくださいね!

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




2. 必要な準備

Unityでスクリプトを作成し、実行できる環境を整えるために、まずは必要な準備を行いましょう。


1. Unityプロジェクトを作成する

まず、Unity Hubを起動して、新しいプロジェクトを作成します。

  1. Unity Hubを開き、右上の「新しいプロジェクト(New Project)」ボタンをクリックします。
  2. テンプレート選択画面が表示されます。「3D」または「2D」を選択しましょう(今回はどちらでもOKです)。
  3. プロジェクトの名前を「ToggleBoolTutorial」と設定します。
  4. 保存先を指定して「作成(Create)」をクリックします。

これで、新しいUnityプロジェクトが作成されました。


2. オブジェクトの準備

スクリプトを試すためにシーン内に適当なオブジェクトを配置します。

  1. ヒエラルキー(Hierarchy)ウィンドウを右クリックします。
  2. 「3D Object」→「Cube」を選択して、キューブをシーンに追加します。
    (ここでは見やすさのためにCubeを使いますが、実際にはどんなオブジェクトでもOKです。)



3. スクリプトの作成

さて、ここから実際にスクリプトを作成していきましょう!
今回は、スペースキーを押すたびに bool 型の値を反転させる簡単なスクリプトを作ります。以下の手順に沿って進めてみてください。


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

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

  1. プロジェクトウィンドウを右クリックします。
  2. Create」→「C# Script」を選びます。
  3. スクリプトに名前を付けます。ここでは「ToggleBool」とします。

作成したスクリプトがプロジェクトに追加されたことを確認してください。


2. スクリプトのコードを記述

次に、「ToggleBool」スクリプトをダブルクリックして開き、以下のコードを貼り付けましょう。

using UnityEngine;

public class ToggleBool : MonoBehaviour
{
    private bool isCheck = false; // Bool型変数の初期値をfalseに設定

    // Updateは毎フレーム呼び出されます
    void Update()
    {
        // スペースキーが押された瞬間を検出
        if (Input.GetKeyDown(KeyCode.Space))
        {
            // isCheckの値を反転させる
            isCheck = !isCheck;

            // 現在のisCheckの値をコンソールに出力
            Debug.Log("isCheck is now: " + isCheck);
        }
    }
}

3. コードのポイント解説

それぞれの部分について簡単に説明します!

  1. private bool isCheck = false;
    • bool 型変数 isCheck を宣言しています。
    • 初期値として false を設定しています。この値がスペースキーを押すたびに反転します。
  2. if (Input.GetKeyDown(KeyCode.Space))
    • UnityのInput.GetKeyDown メソッドを使用して、スペースキーが押された瞬間を検知します。
  3. isCheck = !isCheck;
    • ! は否定を意味する演算子です。現在の isCheck の値を反転させます。
    • 例えば、isCheckfalse の場合、この式により true に変わります。
  4. Debug.Log("isCheck is now: " + isCheck);
    • Unityのコンソールに isCheck の現在の値を出力します。これにより、スクリプトが正しく動作しているか確認できます。

コード全体の説明

このスクリプトは、MonoBehaviourというUnityの基本クラスを継承しています。MonoBehaviourを使うことで、Unityのいろいろな機能を使うことができます。このスクリプトでは、isCheckという名前のブール型の変数を使っています。この変数は、スペースキーを押すたびにtruefalseの間で切り替わります。

各部分の説明

  • 変数の定義と初期化:
private bool isCheck = false;

ここでは、isCheckというブール型の変数を定義しています。booltrueまたはfalseのどちらかの値を持つことができます。最初はfalseに設定されています。

  • Updateメソッド:
void Update()

Updateメソッドは、Unityでフレームごとに繰り返し呼ばれる特別なメソッドです。ゲームの動作中に常に実行されます。

  • スペースキーの検出と変数の反転
if (Input.GetKeyDown(KeyCode.Space))
{
    isCheck = !isCheck;
    Debug.Log("isCheck is now: " + isCheck);
}
  • Input.GetKeyDown(KeyCode.Space): ここでは、スペースキーが押された瞬間を検出しています。GetKeyDownはキーが押されたその瞬間にtrueを返します。
  • isCheck = !isCheck;: ここでは、isCheckの値を反転させています。!は論理NOT演算子で、truefalseに、falsetrueに変わります。
  • Debug.Log("isCheck is now: " + isCheck);: 最後に、現在のisCheckの値をコンソールに出力しています。これにより、スペースキーを押すたびにisCheckの値がどう変わったかを確認できます。

全体の動き

  1. ゲームが開始されると、isCheckfalseに設定されています。
  2. ゲームが動作している間、Updateメソッドが毎フレーム呼ばれます。
  3. プレイヤーがスペースキーを押すと、その瞬間にisCheckの値が反転します。
  4. 新しいisCheckの値がコンソールに表示されます。

4. スクリプトの保存

コードの編集が完了したら、忘れずに保存(Ctrl + S または Command + S)してください。これでコード部分の準備は完了です!

次はこのスクリプトをUnity内で動かしてみましょう。次のセクションでは、スクリプトをゲームオブジェクトにアタッチし、動作確認する方法を解説します!




5. 動作確認

さて、スクリプトを作成してGameObjectにアタッチしたら、いよいよ動作確認をしてみましょう!以下の手順に従って、スペースキーを押すたびにisCheck変数が切り替わることを確認してください。


ステップ1: プレイモードに切り替える

  1. Unityエディター上部にある「Play」ボタン(三角形のアイコン)をクリックして、プレイモードに切り替えます。
  2. シーンがアクティブになり、ゲームが動作する状態になります。

ステップ2: スペースキーを押してみる

  1. キーボードのスペースキーを押します。
  2. Unityエディターの「Console(コンソール)」ウィンドウを確認してください。
    • isCheck is now: true または isCheck is now: false と表示されているはずです。

ステップ3: もう一度スペースキーを押す

  1. 再度スペースキーを押してみましょう。
  2. コンソールに表示されるメッセージが、前回とは反対の値(trueまたはfalse)に変わることを確認してください。

ステップ4: 動作の確認ができない場合のチェックポイント

もし正しく動作しない場合は、以下の項目を確認してください:

  1. スクリプトがアタッチされているか?
    • 作成したスクリプトが対象のGameObjectにドラッグ&ドロップされているか確認しましょう。
  2. コンソールが表示されているか?
    • Unityエディター下部にある「Console」タブが選択されていることを確認してください。
  3. キー入力の設定が正しいか?
    • スクリプト内のKeyCode.Spaceを確認し、変更が必要なら正しいキーコードに修正してください。

これで動作確認は完了です!スペースキーを押すたびに、isCheckの値がtruefalseの間で切り替わるようになりました。うまく動作しましたか?
この簡単な仕組みは、ゲームで多くの場面に応用できるので、ぜひいろいろなプロジェクトで試してみてくださいね!



6. 応用例

Bool型を使ったスクリプトは、シンプルですがゲーム開発でとても役立つ機能です。ここでは、今回学んだ「スペースキーでBool型の値を切り替えるスクリプト」を少しアレンジして、実際に使える応用例を紹介します!


① ライトのオンオフを切り替える

ゲーム内の照明を制御するシンプルな例です。プレイヤーがスペースキーを押すたびにライトを点けたり消したりすることができます。

コード例:

using UnityEngine;

public class ToggleLight : MonoBehaviour
{
public Light sceneLight; // 操作するライトをInspectorで指定
private bool isLightOn = true; // ライトの初期状態

void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
isLightOn = !isLightOn; // 真偽値を切り替え
sceneLight.enabled = isLightOn; // ライトの状態を反映
}
}
}

実装手順:

  1. ヒエラルキー(Hierarchy)でライトを作成します(例:Directional Light)。
  2. 作成したスクリプトを空のGameObjectにアタッチ。
  3. インスペクターでsceneLightに操作するライトをドラッグ&ドロップ。
  4. プレイモードでスペースキーを押してオンオフを確認!

② ゲームの一時停止

ゲーム中にプレイヤーがスペースキーを押すと、ゲームを一時停止する仕組みを作れます。

コード例:

using UnityEngine;

public class PauseGame : MonoBehaviour
{
private bool isPaused = false;

void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
isPaused = !isPaused; // 真偽値を切り替え
Time.timeScale = isPaused ? 0 : 1; // 一時停止状態の切り替え
Debug.Log("Game is " + (isPaused ? "Paused" : "Running"));
}
}
}

実装手順:

  1. 作成したスクリプトを空のGameObjectにアタッチ。
  2. プレイモードでスペースキーを押してゲームの一時停止を試してみましょう!

③ オブジェクトの表示・非表示を切り替える

特定のオブジェクトをスペースキーで表示または非表示にする例です。例えば、UI要素や敵キャラクターを出現させたり消したりできます。

コード例:

using UnityEngine;

public class ToggleVisibility : MonoBehaviour
{
public GameObject targetObject; // 操作対象のオブジェクト
private bool isVisible = true; // 表示状態の初期値

void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
isVisible = !isVisible; // 真偽値を切り替え
targetObject.SetActive(isVisible); // 表示・非表示を切り替え
}
}
}

実装手順:

  1. ヒエラルキーで操作対象のオブジェクトを作成。
  2. スクリプトを空のGameObjectにアタッチ。
  3. インスペクターでtargetObjectに操作対象のオブジェクトをドラッグ&ドロップ。
  4. スペースキーでオブジェクトの表示・非表示を切り替えます。

このように、Bool型とキー入力を活用することで、さまざまなゲーム要素を簡単に制御できます。ライトや一時停止、オブジェクトの表示切り替え以外にも、プレイヤーの動作やエフェクトのオンオフなど、幅広い用途があります。ぜひこれを元に、自分だけのユニークな仕組みを作ってみてください!



よくある質問

Q
スクリプトを正しく作成したのに動作しません。なぜですか?
A

スクリプトが正しくGameObjectにアタッチされているか確認してください。また、スペルミスがないか、入力キーが正しいかを確認しましょう。

Q
Bool型の値を保存して次回プレイ時に復元できますか?
A

はい、PlayerPrefs やファイル保存機能を使えば可能です。詳細な記事を別途参照してください。

Q
このスクリプトを他のキーに変更できますか?
A

もちろん可能です。KeyCode.Space を他のキーコードに置き換えるだけで対応できます。

おすすめのアセット

「Survival Engine Online」は、マルチプレイヤー対応のサバイバルゲームテンプレートです。キャラクターの生活や戦闘、建築、農業など、豊富な機能を備えています。オンラインプレイが可能で、Unityのネットワーキングシステムを使用して簡単にマルチプレイヤーゲームを作成できます。特に初心者にも扱いやすい設計で、ゲーム開発のスタートに最適です。