PR

【Unity / C#】Enum要素でループ処理を記述しよう!

Unity

今回はUnityでC#スクリプトでEnumの有用性やEnum要素でループ処理する方法を紹介したいと思います。プログラミングのコツやバグの少ないコードを書きたい方はぜひ参考にしてみてください。

Enum(イーナム)とは

C#でスクリプトを書くときに「Enum」という機能を使うことがあります。

日本語では列挙型と呼ばれるデータ型の一つで関連性の高いものをまとめて定義できるものとなります。

別スクリプトにするほどでもないけど
かんたんに種類分けする時に利用することが多いです

 

ゲームのキャラクターで定義してみる

例えばゲームのキャラクターの種類を分類するEnumを用意すると

enum Character {
    Player, // プレイヤー
    Enemy, // 敵
    Boss   // ボス
}
となります。
そして利用するときは下記のように識別することができます。
if(characterType == Character.Boss)
{
    // ボス場合の処理
}

このようにソースコードを見た瞬間に何をしているかわかりやすいのがEnumを利用するメリットの一つです

 

内部的には数値型

実はEnumは内部的には数値として持っています。
さきほどの例の場合は下記のようになります。

Character.Player・・・0
Character.Enemy・・・1
Character.Boss・・・2
そのため先程例に出した処理は下記と同じ意味となります。
if((int)characterType == 2)
{
    // ボスの処理
}

「じゃあ別にEnumなんていらないじゃん」という人も多いかもしれませんがバグの温床になりやすいマジックナンバーを防ぐために必要だったりします

 

メリット:マジックナンバーを防げる

プログラムではよく下記のように言われることがあります。

マジックナンバーは絶対ダメ

マジックナンバーとは「何かしらの意味のある数値をそのままソースコードに書き込む」ことを言います。

「魔法の数字」と可愛らしい名前をしていますが、開発ではバグを大量発生させる悪魔といっても過言ではないです笑

 

マジックナンバーある・なしで比較

さきほどお伝えした通りなのですが
先述の2つのソースコードをコメントを消して比較してみましょう。

// パターン1
if((int)characterType == 2)
{
}

// パターン2
if(characterType == Character.Boss)
{
}

いかがでしょうか?
この場合、パターン2はコメントがなくても読みやすいですね。

ソースコードが少ないとそこまで恩恵を感じられませんが、これが開発終盤になってくるとかなり効果を発揮します!

私は普段からコメントがなくても読めるコードを推進しているのですが、これがまさに良い例ですね。

 

 

Enumをループ処理をする方法

ではEnumの有用性がわかったところで本題に戻りましょう。
さきほどのEnumを全種類に対して処理をしたいときが稀にあります。

ほんとたまーに使います

その方法は下記のようになります。
foreach (Character character in Enum.GetValues(typeof(Character))) 
{
    // 各キャラ種への処理
}

処理的にはEnum.GetValues()メソッドを使うことで、enum一覧を配列として取得することができます。

受け取った配列で「foreach」をかけてるということですね!

「foreach」で処理するメリット

Enumをループ処理にすると何が便利かというと

例えば先程の定義に「Friend(仲間)」という種類を追加した場合に処理を追記せずに実行することができます。

ゲーム開発は流動的(仕様が変わる)なので
こういう実装をしておくと後々楽をすることができますね

 

 

活動内容のPR

下記が本サイトでの活動内容となります。

他の開発動画を見る

 

 

終わりに

いかがでしたでしょうか。

今回はC#スクリプトでよく使う「Enum」と「Enumでループ処理」をする方法を紹介してみました。

特にEnumを使う意義についてはプログラム初学者が失敗するケースを多く見てきたのでぜひ使うことを癖付けるようにすると良いかと思います。

みんなで開発するプロジェクトでは迷惑をかけてしまうので注意したいところ!

 

では今回はここまでとなります。
ここまでお読みいただきありがとうございました。

 

また本サイトではゲーム開発や日常で気になったことや英語学習などゲーム開発者である私が発信しているサイトとなります。もし興味がありましたら画面左下のベルマークから購読していただけますと幸いです。

 

2022/03 動画版

コメント

スポンサーリンク
Ads Blocker Image Powered by Code Help Pro

Ads Blocker Detected!!!

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

タイトルとURLをコピーしました