2nd term 1st week - dsuz/csharp GitHub Wiki

今回のテーマ

  1. enum(列挙型)
  2. オブジェクト指向プログラミング - カプセル化
  3. コーディング規約

準備

  1. CSharp2-1-1.unitypackage をダウンロードして Unity のプロジェクトにインポートする
  2. Project のフォルダ "2-1 enum" の下にある 2DTopView シーンを開いて実行し、動くことを確認しておくこと

enum(列挙型)

ゲームを作っていると、フラグが増えてきてその管理が煩雑になったりする。また、状態管理の際に、状態を 0, 1, 2 などで管理したくなることがある。(例: ゲーム開始 = 0, ゲーム中 = 1, やられた = 2, クリアー = 3)

このような時に enum を使うと、新しい名前を持つ定数を定義することができる。

例題

  1. 2DTopView シーンは「紫のエリアに入ると毒を受け、ライフが減っていく」「黄色のエリアに入ると麻痺して、移動速度が遅くなる」「ライフが 0 になると死んでしまい、動けなくなる」「水色のエリアに入ると、毒・麻痺は回復する」という仕様になっている
  2. 毒・麻痺・死の状態はそれぞれ _isPoisoned, _isParalyzed, _isDead というフラグで管理されている
  3. これらのフラグを一元化し、プレイヤーの状態を表す _state で管理するようにプログラムを修正せよ

参考資料

  • 『独習 C# 新版』
    • enum
      • 9.3.1 列挙型の基本
      • 9.3.2 列挙型のさまざまな宣言
      • 9.3.3 列挙型の正体

備考 1

Unity では、enum のフィールドを [SerializeField]/public でインスペクター上に表示すると、ドロップダウンリストから選択できて便利である。

備考 2

今回の例では、「毒かつ麻痺」というような2つの状態が重なるようなことはしておらず、各ステータスは排他的になっている。これを「毒かつ麻痺」のように2つ以上の状態が重なるようにしたければ、もう一段階手間をかける必要がある。そのような時は、「ビットフラグ」として状態管理をする。「Unity ビットフラグ enum」で検索するとよいでしょう。

参考

カプセル化

次のページで「オブジェクト指向(プログラミング)の 3 大要素」の一つである「カプセル化」について説明する。

コーディング規約

次のページで「プログラミングの書き方」「書けるだけでなく、"読める" コードを書く」ための知識として、「コーディング規約」について説明する。