【Unity/C#】オブジェクト指向のカプセル化や隠蔽について
オブジェクト指向プログラミングの本を読んでいると、最初の頃の章でカプセル化とか隠蔽が出てきます。のっけから初心者の心理的なハードルを上げる言葉が並べられて当時は辛かったのですが、あの頃の気持ちを思い出しつつ自分の言葉でまとめようと頑張った記事がこちらになります。ご査収のほどよろしくお願いします。
あなたのゲームをいち早く完成させるための研究所
オブジェクト指向プログラミングの本を読んでいると、最初の頃の章でカプセル化とか隠蔽が出てきます。のっけから初心者の心理的なハードルを上げる言葉が並べられて当時は辛かったのですが、あの頃の気持ちを思い出しつつ自分の言葉でまとめようと頑張った記事がこちらになります。ご査収のほどよろしくお願いします。
C#でアクセシビリティレベルを表現するために使うアクセス修飾子を紹介しています。このうちpublicについてはUnityで特別な位置付けにあるので、C#での扱いとUnityでの扱いの両方を加味して選択するとグッド。
Unityで使っているC#はオブジェクト指向のプログラミング言語で、継承やオーバーライドの機能を上手く使えると効率よくコーディングできます。この記事では本当に導入レベルの話をしていて、キーワードの紹介に近いので他のページも一緒に参照するといいかもしれません。
thisキーワードを使ってそのインスタンス自身を表す、というのは最初はよく分かっていなかったのですが、使ってみると便利でした。特にフィールドに値をセットしたい時にはthisを使ってフィールドであることを分かりやすくするのも大切ですね。
このページでは主にゲーム全体で使いたい設定値、定義値をstaticなクラスに記載する際、constとstatic readonlyのどちらを使った方がいいかなーという点を出発点に、コンパイル時定数と実行時定数の違いを掘り下げています。
UnityではMonoBehaviourを継承したクラスを作ることが多いですが、これ以外にもいわゆるC#で作成するような通常のクラスを作成して使っていくことで柔軟にコーディングできます。また、staticなクラスも適切に使っていくことで、ゲーム内のデータを保持したり設定値や定義値を保持することもできます。
最初に作った「SceneManager」や「PlayerController」やらのクラスにどんどん機能を追加していってしまうのは多くの人が経験したことがあるんじゃないでしょうかね。クラスが肥大化すると読みにくくなってメンテナンスが大変なので、適切に分割することを考えましょう。
Dictionaryの中身についてforeachを使おうとして「あれ? 型の指定どうするの?」と詰まった個人的な経験から、Dictionaryについてまとめてみました。キーと値のペアであるKeyValuePairというまんまなクラスがあるのでこれを使うべし。
UnityでC#を使い始めて一番最初にぶつかった壁がジェネリックだった記憶があります。きちんと理解すると心強い味方になりますし、プログラミングの負担が減るのでぜひマスターしたい機能です。特にジェネリックリストは一度使い始めると手放せなくなりますからね。
個人的にはListを使うことが多いのですが、Listと配列の違いを意識してどちらを使うのか決めるのが大切です。ポイントは「要素数を後から変えるか」「パフォーマンスを重視するか」ですね。複数の値をまとめて扱いたいケースは多いので、是非ともマスターしたいところ。
C#で使っている型名のintやfloatは実は本名じゃなくてエイリアス(別名)なんです。これを知っていること自体は「ふーん」で終わるのですが、C#が使っているフレームワークである.NET Frameworkにも目を向けてみることでより情報を得やすくなるかもしれません。
スクリプトを書くときにはnullのチェックは忘れずに。特にGameObjectやコンポーネントを操作するときにはnullになりやすいので、処理を分岐させてnullだった場合の処理も実装しておきましょう。
floatを使った計算では誤差が生じることもしばしば。特に値が一致していると思っていても、見た目には同じ値なのにコンピュータ側では「違う」と判断されることもあります。この点について解説を行っています。
クラス、メソッド、フィールドなど、スクリプト内で使用している要素の説明を記載できるドキュメントコメント。APIドキュメントを作成する他、IDEのインテリセンスで説明を表示してくれるので便利です。
「Unityではどんなプログラミング言語を使うの?」という疑問に答える記事です。タイトルでネタバレしていますが、UnityではC#を使います。このC#についてざっくりとした特徴と、学習していく流れを紹介しています。