見出し画像

Unityの機能を復習02: Beginner Programming、Beyond the Basicsを修了

今日はBeginner Programming: Unity Game Dev CourseでUnityにおけるC#言語の復習を行いました。
Beginner Programming: Unity Game Dev Courseの講師は三人おらっしゃいます。

①Marc Gilbertさん、Pluralsightというコンピューター言語学習サイトの講師を務めておられる方です。
②Michael Bakerさん、Unity認定開発者と記載されていました。
③Thomas Winklyさん、こちらはUnity認定講師と記載があります。

コースはそれぞれBeyond the Basics、The Observer Pattern、Finite State Machines、Swords and Shovels Character Controller and AI、Creating a Character Stat Systemの5つに分かれていて、前3講座をGilbertさん、残り2つをそれぞれBaker、Winklyさんが担当しています。
今日はBeyond the Basicsという講座が完了したのでその報告をいたします。

1、コードに用いる名称に一貫性を持たせる


まず最初に学ぶのが基本的なC#スクリプトの書き方です。
基本的なC#文法は知っていることが前提で、スクリプト内の名称の統一の仕方や可読性を高める方法が紹介されていました。
自分がメモしたことは以下になります。

・コードを形式化する
・コード内の名称を統一する
名前空間を効果的に用いる
コメントをしっかりと書く
・selectedColorのような用途・意味がすぐに分かる変数名にする
(Descrictive, Consistent)
・過度の省略化は避ける
・アンダーバーを変数名に用いない
・Pascal case 記法(i.e. PascalCaseFunction)は主に関数に、
・Camel case 記法(i.e. camaleCaseVariable)は主に変数に用いる

名前空間を用いることによって、その空間内で定義した変数・関数をC言語のinclude関数と同じ要領で用いることができる
レギオン(#region, #endregion )を使ってコードを折りたたむことができる

2、効果的な型の使い方

Enumeration - 関数の名称とint値を対応させるのがEnumeration
 味方、敵のアニメーション・状態などを管理する際に使える
Generic Type - 異なる型の引数に同じ処理を行う
 UI上のテキストにint型・string型などが混在するときはGeneric typeを使うといい

スクリーンショット 2020-10-20 202007


Listを効果的に使う
Listは非常に柔軟性が高い。Addで要素を追加する他にも、Insert、Sortで特定のコラムへの挿入やソーティングなどができる。
主にUI上のボタンなどをリストに入れてまとめて処理したいときに有効。
(Add, Insert, AddRange, Clear, RemoveAt, Remove, Count)
(https://yaspage.com/prog/csharp/cs-list/)

スクリーンショット 2020-10-20 211022


Dictionaryの使い方
keyに対応するvalueがあるという構造のコレクションを使いたい場合はDictionaryを使う。インベントリー内のアイテムを参照したい時などに使える。

スクリーンショット 2020-10-20 211235

QueueとStack
QueueはEnqueueで末尾へ追加、Dequeueで先頭からの取り出しを行う。
Stackの場合はPushで末尾へ追加、Popで末尾からの取り出しを行う。
コレクションの要素を特定の順序で処理したいとき(どんな場合?)に用いるのが有効。


3、コルーチン、クラス継承、デリゲート関数を使いこなす

スクリーンショット 2020-10-20 214315

コルーチンはIEnumeratorを返り値にもつ関数で、yieldで指定した時間が経過するまでは次の処理が実行されないという性質を持っている。
処理が終わるまでの間関数をupdateの度に呼び出したくないタイプの処理を記述するのに用いる。
・コルーチンはfor,foreach内の処理を1フレームにではなく各フレームに分散したい場合などにも有効。1フレーム毎の負荷を軽くすることでゲームの処理速度を向上をすることができる。
・コルーチンはデバッグや処理タイミングの複雑化を引き起こす場合もある。できれば静的なオブジェクトの処理のみに用いるのがいいかも知れない。

スクリーンショット 2020-10-20 215610

・銃弾・投射物などのゲームオブジェクトを生成したい場合はインスタンシエート(Instanciate)を活用する.
インスタンシエートを行う関数には生成したいゲームオブジェクト、生成したい場所、ゲームオブジェクトの角度をそれぞれ代入できる。

スクリーンショット 2020-10-20 234031

スクリーンショット 2020-10-20 234128

スクリーンショット 2020-10-20 234216

デリゲートの使い方について - デリゲートを行うにはまずデリゲートしたい関数の返り値と引数を宣言する。
次にデリゲートしたい関数をデリゲートの型と同じ返り値・引数で宣言する
そしてデリゲートをする先の関数の引数にデリゲートの型を使い、その関数内でデリゲート関数を呼び出す。
デリゲートの型がデリゲートしたい関数の型と一致すれば、どのような関数でもデリゲートをする先の関数から呼び出すことができる。

スクリーンショット 2020-10-20 235858

スクリーンショット 2020-10-20 235925

イベントの使い方について - イベントはデリゲート変数を用いたオブジェクト管理の手法で、主にインスタンシエートで作り出した敵キャラクター・投射物などの状態を管理したいときに用いる。
例えば敵を倒したときに実行される変数にゲームを管理するスクリプトからデリゲートを行うことで、ゲームを管理するスクリプト内で定義した処理を敵を倒したときに追加することができる。
主にGameSceneController, HUDControllerなどから使うのが効果的。

制作中のTPSゲームの動画もよろしくお願いします!

この記事が気に入ったらサポートをしてみませんか?