トマシープが学ぶ

Unity/VR/AR/デザイン好きのミーハー 記事内容は自分用のメモです

enum関数について学ぶ【Unity】

enum関数のお勉強

www.sejuku.net

enum

数字の代わりに名前を付けられるイメージ

変数じゃなくて、中身の変わらない定数にしか使えない。

こんな感じで宣言する

    public enum roomname
    {
        bath,bed,piano
    }

最後のカンマはあってもなくてもエラー出なかった。

公式では付けてないけど、上の侍エンジニア記事では最後にカンマ付けてた。

enum キーワード - C# リファレンス | Microsoft Docs

変数を作る

自分で作ったenum型?で変数を定義できる。

private roomname nowroom=roomname.piano;
public roomname nowroom;

intとかGameObjectみたいな場所に自分で作った型を書くの初めてで、最初は戸惑った。

publicにしたらインスペクタで選ぶことができる!!

f:id:bibinbaleo:20190523135955p:plain

enumを==で判別する

if(nowroom==roomname.bed)

みたいにする。nowroom==bedだとだめだった。

etc9.hatenablog.com

数値は0しか入れられない?

enumで設定した変数に初期値を設定するときに、roomname.pianoみたいな文字じゃなくて、配列のように数値を入れてみた。

private roomname firstroom=0;

すると0のときはうまくいったのに、それ以外の数字を入れたらエラーが出た。

Cannot implicitly convert type `int' to `enumtest.roomname'. An explicit conversion exists (are you missing a cast?)

f:id:bibinbaleo:20190523135347p:plain

intをenumに変換できませんだって。

ふつうはちゃんと名前で指定するものなんだろうけど、逆になんで0ではエラーが出ないんだろう。

公式のリファレンスには最初の値が0で、1ずつ増えていくって書いてるから、数値としては正しいはず。

既定では、最初の列挙子の値は 0 で、後続の列挙子の値は 1 ずつ増加していきます。 たとえば、次の列挙型では、 Sat は 0、 Sun は 1、 Mon は 2などとなります。

enum キーワード - C# リファレンス | Microsoft Docs

追記

アドバイスいただきました。

private roomname firstroom=(roomname)1;

としたら通りました!

あと、数字を0から始めたくない場合は、最初の宣言の時に、

public enum roomname { bath=1,bed,piano }

みたいに最初の列挙子に始めたい数字を入れたらいいそうです。

 ありがとうございます!

switch

enumはswitch文とよく一緒に使うらしい。

 switch (nowroom)
        {
            case roomname.bath:
                Debug.Log("今お風呂");
                break;
            case roomname.bed:
                Debug.Log("今ベッド");
                break;
            case roomname.piano:
                Debug.Log("今ピアノ");
                break;

        }

最後に

用語の使い方は間違ってると思うけど、大体理解できた。

業務でUnityを使い始めたので、これからこういう系の記事増えるかも!

www.sejuku.net