侍エンジニアでの学習
知識・アドバイス
コード
- メソッドの引数による受け渡しを利用して、クラス間の密結合を避け、疎結合化し、クラス内のメモリ(変数)を節約しろ
- 2つ以上のクラスで同じような処理があった場合は、親クラス(~Baseクラス)に同じような処理を記述し、子クラスで振る舞いを変えさせろ
- 「TryGetComponent()」を使用して、タグではなく、接触相手にアタッチされているクラスで、接触相手を判断しろ(タグを追加する必要が無くなる)
- なるべく、1つのゲームオブジェクトに1つのスクリプト(~Detailクラス)をアタッチするようにしろ(処理の多様性UP)
- 3つ以上の外部クラスで使用されているクラスはシングルトンにしろ
- 「『PlayerController』クラスならプレイヤーの動きのみを制御し、『GameManager』クラスならゲームの進行に関する処理のみを書く」というように、クラス毎に役割分担を明確にしろ
- 「GameManager」クラスのようなゲームの脳にあたるクラス以外のクラスでは、変数を外部からアサインするのはやめ、メソッドの引数などを利用して、クラス内の変数自体を減らすように意識しろ(「クラスはできる限り外部からの参照を少なくする」という事を意識する事で、様々なエラーを防止できる)
- 各クラス間を効率よく疎結合化するためにクラス図を作成せよ
- コルーチンが正常に動作しなくなる可能性があるため、「Destroy()」等で消える可能性のあるクラスで、コルーチンを行ったり、直接的に呼び出すな
- 「Instantiate()」を使って、ゲームオブジェクトのクローンを生成する時は、なるべく「GameObject」型ではなくて、そのゲームオブジェクトにアタッチされているクラスを第一引数に渡せ(処理の簡略化)
- 「enum」型のような構造体は「null」の状態を強制的に設定しない限り、「null」にはならないため、基本的に構造体への「null」チェックは不要
- 何か番号を故意に振る場合は、配列やリストとの相性を考えて、必ず0からスタートしろ
- そのメソッド内でしか使用されていないメンバ変数・関数は、ローカル変数・関数にしろ(メモリの節約)
- 1つの効果音につき、1つの「AudioSource」を作成しておくと、音が途切れなくなる
- UIはヒエラルキー上における「Canvas」の子オブジェクトの上から順に表示の優先順位が上がる(「末っ子」が一番前に表示されて、「長男・長女」が一番後ろに表示される)
- 「C#」や「Python」は比較的、高性能であるため、「var(型推論)」は使わなくても良いが、「var(型推論)」以外の型で記述した際にエラーが発生するか、型の名前が長いなら、「var(型推論)」を使え
- 「Tween.OnComplete()」は3つ以上重ねると、読みにくくなってしまう為、「Sequence」を使え(「Tween.OnComplete()」は2つまでなら重ねて良い)
- 「switch」文、「if~else if」文などによる分岐ではなく、クラスの継承、インターフェイスなどを用いて振る舞いを変えろ
- 「Start()」「SetUp~()」等で「Reset()」を呼び出し、「Reset()」内でコンポーネントの取得処理等を記述するようにしろ(デバック効率UP)
- 「GameData」クラスでは可変性のある数値(現在値など)を管理し、「ConstData」クラスでは不変性のある数値(最大所持数など)を管理しろ
- 固定値については、リテラル表記(コンピュータプログラムのソースコードなどの中に、特定の データ型 の値を直に記載)は避け、「ConstData」クラス等(constキーワード)を使用しろ
- ゲームの状態(enum)を「GameManager」クラス等で管理する際は「UniRx」の「Reactive Property」を使え
その他
- 「EventSystem」ゲームオブジェクトが無いと、UIがタップなどの感知に反応しないので、もしもヒエラルキーの見える所に無い場合は、既にあるのに新しく追加されてしまう恐れがある為、「EventSystem」ゲームオブジェクトは、単体でヒエラルキーの見える場所に置いておけ
- 非同期処理はメインの処理の負担を軽減できる
用語と概要
UniRx/UniTask
UniRx | イベント処理を行う際に、Observableの概念を使ってイベントを扱うことができるライブラリ (値の監視など) |
UniTask | コルーチンの不満点を解消した、コルーチンの上位互換 (コルーチンの処理を「async / await」で代用できるようになるが、 キャンセルの処理を記述する必要がある) |
セーブ・ロード
PlayerPrefsクラス | ・ゲーム内ではなく、端末ごとにその端末内に保存場所を作る |
JsonUtilityクラス | ・どんな型でも「string」型に変換するためのフィルター ・クラスごとに使用するのが主流 ・「{}」で1つのクラス |
メソッド
メソッド名 | 呼び出されるタイミング |
Reset() | ・ゲームオブジェクトにそのスクリプトをアタッチした時 ・インスペクターからリセットした時 ・スクリプト中で呼び出した時 |
注意点
ConstDataクラス
- 「ConstData」クラス(固定値の管理クラス)では、「const」キーワードを付けて、変数はすべて大文字、単語が変わるときにはアンダーバーを使用しろ(例「GAME_OVER_TIME」)
コメント