Unityの検索機能

Unity における C# のコーディング(初心者向け)

初めてのゲームを制作するために Unity でコードを学ぼうとしても、どこから始めればよいかわかりません。Unity はその苦労を理解しています。ここでは Unity のスクリプティング要素の内訳と学習用の資料を提供します。これらを活用して、"スペースシューター" などのより高度なプロジェクトに取り組むことができます。これにより、変数、関数、クラスなどのコーディングの基礎の基礎、およびそれらの使用方法を学習できます。

次に該当する方はこちらを参照してください。プログラミング経験は豊富でも Unity の使用経験がない方.

Unity におけるスクリプティングとは?

スクリプティングとは、ゲームオブジェクトにアタッチされているスクリプトやコンポーネントのことで、ゲームオブジェクトがどのように動作するのか、そしてどのように相互作用するのかを指示します。これはゲームプレイの構成要素になります。今や、Unity におけるスクリプティングとは純粋なプログラミングとは異なります。純粋なプログラミングを行った経験がある場合、例えば実行できるレベルのアプリを作成したことがある場合は、Unity ではアプリケーションを実行するためのコードを作成する必要がないことに気付くでしょう。Unity が代わりにやってくれるからです。その手間の分だけ、Unity スクリプトではゲームプレイの方へフォーカスするのです。

Unity は大きなループで実行されます。ゲームシーン内のすべてのデータを読み取ります。たとえば、ライト、メッシュ、どのような動作かを通して読み取り、この情報をすべて処理します。

テレビについて考えてみましょう。たとえば、北米の場合は 29.5 フレーム/秒であるため、Unity はこれと同じことを行う必要があります。単一のフレームを個別に 1 つ 1 つ実行しています。スクリプトに記述して Unity に指示を与え、Unity がそれらをフレームごとにできるだけ早く実行します。

高フレームレートを達成することは、ゲームが滑らかになるだけでなく、スクリプトもより頻繁に実行され、制御がよりレスポンシブになることを意味します。

Unity で使用可能な言語とは?

Unity がスクリプトを呼び出すには、そのスクリプトをシーン内のゲームオブジェクトにアタッチする必要があります。スクリプトは Unity が理解できる特別な言語で書かれます。この言語を通じてエンジンに指示を出すことができます。

Unity で使用される言語は、C#と呼ばれます(C シャープと発音)。Unity で運用されるすべての言語はオブジェクト指向のスクリプト言語です。他の言語と同様に、スクリプト言語は構文(つまり品詞)と変数、関数、クラスなどと呼ばれる主部で構成されます。

2017.3 以前のバージョンの Unity を使用する場合は、MonoDevelop というテキストエディターが使えます。これはコードの記述を支援するエディターで、コード記述の誤りを知らせたり、作業を短縮化する機能を提供します。2018.1 以降のバージョンでは、Visual Studio for Unity Community、またはその他のビジュアルエディター(Visual Studio、メモ帳、Sublime Text など)を使用することもできます。

次に示すのは、スクリプトのサンプルコードです(次のチュートリアルに基づくものです:Coding in Unity for the Absolute Beginner 完全初心者のための Unity コーディングチュートリアル):

sample code unity

ご覧の通り、変数、関数、クラスというものがあります。

これらの役割は?

変数は、値とオブジェクトへの参照を保持します(オブジェクトは「より大きい」変数と捉えることができます)。変数は、使用する値を保持するための入れ物のようなものです。変数は小文字で始まります。

関数は、これらの変数を比較したり操作したりするコードのコレクションです。関数は大文字で始まります。コードを関数にまとめることで、プログラムのさまざまな部分からコードを簡単に繰り返し使い回すことができるようになります。

クラスは、オブジェクトのプロパティを定義するテンプレートを作成するために、変数や関数のかたまりをまとめて構造化したコードにするものです。

スクリプティングとは主にこのようなオブジェクトと、そのオブジェクトの現在の状態や値を比較することにあり、これは結果や解を決定するロジックに基づいて記述します。

変数

Unity のスクリプトでは、最初に必要なツールを記述します。これは通常、変数を宣言することによって行います。宣言されている変数はこちらで確認できます。変数には、可視性を扱うキーワードとなる public または "private" を付け、その後に型、名前を記述します。

variables in unity

Unity では、変数を宣言する際にいくつか可視性を扱うものを使用しますが、中でも特に重要な二つが public と private です。

コードエディターで上述のテキストを使用してスクリプトを作成し、Unity に戻ってスクリプトをゲームオブジェクトに割り当ててみると、public として宣言された light 変数はインスペクターからアクセスして、表示することができます。しかし、private の変数の場合は表示できません。private として定義された変数には、このクラス内のこのスクリプト内からしかアクセスできないためです。

変数を public にすれば、他のスクリプトや他のクラスからアクセスし、Unity エディターのインスペクターから変更できるようになります。つまり、他のユーザーもその変数にアクセスし、その値を変更できるようになります。

さまざまな理由により、private と public は使い分けられます。プライベート変数を使用すると、それらの変数はそのクラス内でしか変更できなくなるため、コードがよりクリーンになります。そのため、コードのデバッグやメンテナンスが行いやすくなります。

public を選択すると、他のオブジェクトからもその変数にアクセスできるようになるため、問題が発生した際には、コードベース全体を調べてソースを追跡しなければならなくなります。しかし、オブジェクト間で相互にやりとりをさせたい場合は、一部の変数(または関数)を public にする必要が生じます。

変数には 1 つ、ある重要な側面があります。それは型です。型は、変数がメモリ内に保持する値の種類を定義するためのものです。数値やテキストのほか、以下の図のように、より複雑な型を使用することもできます。下記の図にある Transform、Light および Demo Script は、実際にはコンポーネントへの参照です。Unity では、オブジェクトの処理方法を把握するために、オブジェクトの型を把握しておく必要があります。

variables in unity inspector

変数についてもう 1 つ大事なことは、名前です。変数の命名について特に覚えておくべきこととして、数字から始まってはいけないということと、スペースを含めてはいけないということがあります。そのため、名前の記述についてはスタイルが定められています。C# では、命名規則はキャメルケースです。先頭は小文字で書き始め、スペースを空けずに、次の語を大文字で書き始めます(例:"myLight")。

Unity では、スクリプトをコンパイルする際、public 変数がエディターに表示されるようにしています。次の図(インスペクターの画面)を参照してください。

demo script unity inspector

関数

スクリプトでは、関数を使用して変数を操作します。Unity には、自動的に実行される関数が多数あります。下記をご覧ください。

functions in unity

Awake は、そのコンポーネントを使ったゲームオブジェクトがインスタンス化されるときに、1 回だけ呼び出されます。ゲームオブジェクトが非アクティブな場合は、アクティブになるまで呼び出されません。ただし、ゲームオブジェクトが非アクティブであっても、コンポーネントが使用可能な場合(名前の横に小さなチェックボックスがある場合)は、Awake が呼び出されます。Awake を使用すると、値を割り当てる必要があるすべての変数を初期化することができます。

Start - Awake と同様、Start はゲームオブジェクトがアクティブな場合に呼び出されますが、コンポーネントが使用可能な場合にしか呼び出されません。Awake との違いについて詳しくは、こちらをご覧ください: ビデオ.

Update はフレームごとに 1 回呼び出されます。この関数には、常に更新する必要があるアニメーション、AI、およびその他のゲームパーツなど、継続的に実行されるロジックを定義するためのコードを記述します。

FixedUpdate は、物理演算を実行したい場合に使用します。

チュートリアルのスクリプトセクションには、FixedUpdate と Update のトピックがあります。このトピックでは、Update 関数と FixedUpdate 関数を使用してフレームごとに変更を加える方法と、これらの関数の違いについて説明しています。.

LateUpdate は Update に似た関数ですが、LateUpdate はフレームの最後に呼び出されます。Unity では、すべてのゲームオブジェクトを参照し、すべての Update を確認したうえで、LateUpdate を呼び出します。これはカメラなどの操作に役立ちます。たとえば、ゲーム内のキャラクターを移動させる場合、そのキャラクターが別のキャラクターにぶつかると、最終的に別の位置に移動しますが、カメラをキャラクターと同時に移動させると、ブレが生じて、カメラを必要な位置に移動できません。そのため、基本的には、第二のループを使用するのが便利です。

関数の記述

関数を記述する際には、まず、関数の戻り型を記述し、次に関数の名前を記述して、括弧内にパラメーター(もしあれば)を記述します。関数名は最初の文字を大文字にし、関数本体は波括弧内に記述します。次に示すのは、関数の記述方法の例です。

writing functions unity

この関数を呼び出すには、どうすればよいでしょうか?

function-in-unity

関数では、計算を行った後、値を返すことができます。つまり、何かを実行するように命令し、情報を処理した後、答えを返すことができます。"void" 型を使用した場合は、何も返されません。

クラス

クラスとは、これらの変数や関数のコレクションです。たとえば、次のスクリプトはクラスです。

class example in Unity

クラスを機能させるには、クラス名を C# スクリプトのファイル名と一致させる必要があります。また、ゲームオブジェクトにアタッチするには、MonoBehaviour という別のクラスから派生させる必要があります。これは、最初にスクリプトを作成する際に自動的に処理されます。なお、クラスにも public と private の区別があります。

Unity では、下記の例のようなカスタムクラスを作成する場合、そのクラスをシリアライズする必要があります。つまり、クラスをシンプルなデータに変換して、Unity のインスペクターに表示できるようにするということです。これを行うことで、クラスがインスペクターに表示されるようになります。

classes in unity example

変数、関数、およびクラスは、Unity でコーディングを始めるための基礎にすぎません。学習セクションには、わかりやすいスクリプトチュートリアルが豊富に用意されています。これらを利用して、プログラミングを 1 から学習し、各種のプロジェクトに応じた詳細なコードを作成できるようになりましょう。