橋本翼(ツバサムス)

メタバースプログラマー。
UnityとUnreal Engineを専門的に扱う。
メタバース系スタートアップ企業に所属。

詳細はこちら

【Unity】スクールでの学習内容

Unity

侍エンジニアでの学習

知識・アドバイス

コード

  • メソッドの引数による受け渡しを利用して、クラス間の密結合を避け、疎結合化し、クラス内のメモリ(変数)を節約しろ
  • 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」)

お問い合わせ

    コメント

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