#初心者にとって難しい列挙型
初めて列挙型を見た時、正直意味がわかりませんでした。
何回か自分でコードを書いていくうちに、なんとなく理解が深まってきたので、まとめようと思います。
##列挙型の意味
列挙型は、⓪ある集合を①条件によって②任意のグループに分類し③そのグループに特定の行動を行わせる、時に利用します。
すっごい抽象的でわかりづらいので、具体的な例で説明します。
⓪ ある学校のクラスメートを、
① 誕生日に応じで、
② 星座によって分類し、
③ それぞれの星座にちなんだポーズをとってもらう。
こんな時に列挙型を使用します。
伝わりましたかw??
##具体的なコード
今回、Playerの行動を列挙型で表現します。
PlayerManager.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerManager : MonoBehaviour
{
//プレイヤーの動きを分類、上記説明の②の部分
public enum DIRECTION_TYPE
{
STOP,
LEFT,
RIGHT,
UP,
DOWN,
}
DIRECTION_TYPE direction = DIRECTION_TYPE.STOP;
float speedX , speedY;
new Rigidbody2D rigidbody2D;
void Start()
{
rigidbody2D = GetComponent<Rigidbody2D>();
}
//プレイヤーの動きを分類するための条件づけ、上記説明の①の部分
void Update()
{
//方向指示キーの入力を受けている部分
float x = Input.GetAxis("Horizontal");
float y = Input.GetAxis("Vertical");
//方向指示キーの入力に応じて、分類に振り分けている部分
if (x == 0 && y == 0)
{
direction = DIRECTION_TYPE.STOP;
}
else if (x > 0)
{
direction = DIRECTION_TYPE.RIGHT;
}
else if (x < 0)
{
direction = DIRECTION_TYPE.LEFT;
}
else if (y > 0)
{
direction = DIRECTION_TYPE.UP;
}
}
//プレイヤーの動きを分類に応じた行動を指示、上記説明の③の部分
void FixedUpdate()
{
//それぞれの分類に応じでプレイヤーの座標を変更している
switch (direction)
{
case DIRECTION_TYPE.STOP:
speedX = 0;
speedY = 0;
break;
case DIRECTION_TYPE.RIGHT:
speedX = 3;
speedY = 0;
break;
case DIRECTION_TYPE.LEFT:
speedX = -3;
speedY = 0;
break;
case DIRECTION_TYPE.UP:
speedX = 0;
speedY = 3;
break;
case DIRECTION_TYPE.DOWN:
speedX = 0;
speedY = -3;
break;
}
rigidbody2D.velocity = new Vector2(speedX, speedY);
}
}
上記のように、条件に応じて分類分けを行い、その分類に応じて異なった関数を実行したい場合に列挙型は用いられます。