enum型(列挙型)変数とは、事前に代入される値が特定される変数を扱う際に、その値を指定し活用する変数です。例えば信号{赤,黄,青}、移動方向{上,下,左,右}などのようなものです。
Unityでは通常class間で変数を活用する際、アクセス修飾子に「Public」を指定します。使用するClass(Script)側では、まずFind関数やGetConponent関数を使ってこの変数をもつClassを取得、そこでようやく対象の変数を使うことができます。
しかしenum型の変数については若干挙動が違います。今回はこのenmu型の変数をUnityのClass間、つまりScript間で使用する方法について、サンプルを交えて説明します。
Unityで新たなプロジェクトを立ち上げ、事前準備として以下のものを用意します。
GemeObject「Cube」 移動するゲームオブジェクトとなります
GemeObject「Manager」 CreateEmptyでからのオブジェクトを生成
Script「CubeController」 Cubeの動きを管理するスクリプトファイル
Script「GameMangager」 enum型の変数を持たせるスクリプトファイル
3のスクリプトファイルを1,Cubeに、4のスクリプトファイルを2,Manager にアタッチします。
今回はGameMangagerに「Mode」というenum型変数を持たせ、その値に応じCubeControllerに作成する変数「speed」の値を変更させたいと思います。
対応表は以下の通りです。
まずはGameMangagerに以下のコードを記述します。
public class GameManager : MonoBehaviour
{
public enum Mode //①
{
HI,
MIDDLE,
LOW
}
public Mode speedMode; //②Modeを使うための変数
void ModeChange() //③Modeの値を変更する関数
{
if (Input.GetKeyDown(KeyCode.H)) speedMode = Mode.HI;
if (Input.GetKeyDown(KeyCode.M)) speedMode = Mode.MIDDLE;
if (Input.GetKeyDown(KeyCode.L)) speedMode = Mode.LOW;
}
void Update() //④
{
ModeChange();
}
}
このスクリプトファイルの内容は
① enum型の変数「Mode」の宣言と要素登録
②変数「Mode」を使うための変数「speedMode」を宣言
③関数「ModeChange()」を宣言。
これはキーを押すことによって、変数「speedMode」の値を変更するも関数
④Update()関数 の中で③で作った関数を呼び出す
この段階で、GameManager のInspectorには以下のように、SpeedModeの要素がドロップダウンリストとして表示されます。
続いて「CubeController」に次のコードを記述します。
public class CubeController : MonoBehaviour
{
float speed; //①移動速度を管理する変数
GameManager gameManager; //②GameManager を代入する関数
private void Move() //③Cubeを移動させる関数
{
if (Input.GetKey(KeyCode.RightArrow))
transform.position += new Vector3(speed*0.01f, 0, 0);
if (Input.GetKey(KeyCode.LeftArrow))
transform.position += new Vector3(-speed*0.01f, 0, 0);
}
void ChangeSpeed() //④speedMode に応じてspeedを変える関数
{
if (gameManager.speedMode == GameManager.Mode.HI)
speed = 10;
if (gameManager.speedMode == GameManager.Mode.MIDDLE)
speed = 5;
if (gameManager.speedMode == GameManager.Mode.LOW)
speed = 1;
}
void Start() //⑤
{
gameManager = GameObject.Find("Manager").GetComponent<GameManager>();
gameManager.speedMode = GameManager.Mode.MIDDLE;
}
void Update() //⑥
{
Move();
ChangeSpeed();
}
}
このスクリプトファイルでは
①Cubeの速度を管理する変数「speed」を宣言
②スクリプトファイル「GameManager」を代入する変数「gameManager」を宣言
③Cubeの移動を管理する関数「Move()」を宣言
右キーを押すと、スピード×0.01ずつX座標方向(右へ)へ移動
左キーを押すと、ースピード×0.01ずつX座標方向(左へ)へ移動
④関数「ChangeSpeed()」を宣言、gameManagerのspeedModeを参照し、Modeが HI なら変数「speed」を10に変更。
ここでポイントとなるのが、Modeを呼び出す際に「GameMangager」クラスを指定すること。変数「gameManager」ではないですよ。「Static」の使い方に似ていますね。
同様にModeが「MIDDOLE、LOW」の時の動きを指定します。
⑤Start()関数ではFind()関数,GetConponent()関数を使って、GameMangager を取得。
さらに変数「speedMode」の初期値を指定しています。
⑥Update()関数ではMove()関数、 ChangeSpeed()関数を発動しています。
これでサンプルは完成です。
起動させ、左右矢印キーを押して移動、さらにHキー、Mキー、Lキーを押したときに速度が変更されることを確認してみましょう。
教室では実際に通って頂いての授業の他、Unityのオンライン授業やオンラインサポートも行っております。
お困りごとのある方、ご興味がある方は、ぜひお問い合わせください。
お問い合わせは こちら から。
体験授業のお申込みは こちら から。
Kommentare