.net column
.NET開発者のためのブログメディア

Unityで使うC#の特徴を紹介|C#言語を始めるのにUnityは適切か?

2021年03月02日
SE
Unityで使うC#の特徴について教えてください。
PM
UnityはMonoBehaviour、GameObjectなどのゲーム制作に特化した概念が用意されたエディタで、C#スクリプトとGameObjectの特徴を理解すれば簡単にコードを追加することが可能です。

Unityとは?


Unityとはゲームを制作することに特化したエディタ、ゲームエンジンです。

Unityを使わずにC#言語のみでゲーム制作をすることも可能ですが、Unityには感覚的に操作や調節のしやすいエディタやゲーム制作に便利なスクリプトが搭載されており、他にもアセットストアなどで既に作られたコードを販売、あるいは無料提供しているので比較的楽にゲーム制作をすることが可能です。

ゲーム制作だけではなく、AR、VR、その他のアプリをつくるためにも使われており様々な企業で利用されています。

Unity内でのC#によるクラスやオブジェクトの考え方

Unityは基本的にC#で制御します。GameObjectという概念のオブジェクトが準備されMonoBehaviourというクラスを継承することで便利にゲームを制作することができます。

視覚的に操作しやすいエディタが準備され、デザイナーとプログラマとの共同開発を行うのに向いています。

GameObjectの変数はコードで変更することもできますが、変数等をUnityエディタ上のInspector上で変更できるように設定することも可能ですのでテストユーザーへの指示も楽になるなどの利点があります。

C#言語を始めるのにUnityは適切か?

既存の継承クラスが優秀なのでC#初学者が自分でクラス構成を考える勉強をするには最初からUnityを使うと理解が難しくなる可能性はあります。変数について学習するには最適です。

良くも悪くも、初学者でもそれらしく動くものがつくれてしまうのでモチベーションを維持するには良いのですが、プログラミングの深いところまで学習しようとするとなかなか文献が見つからないことがあります。

しかし、視覚的にすぐに成果が現れますし、周りに初学者が多いので初心者向けの文献やブログが多いのも利点です。コードに苦手意識を持たなくなるにはぴったりです。

ゲーム以外にもUnityを使用する会社も多く就職のチャンスもある分野です。しかし専門的に深くC#を学ぶのであれば、体系的に学んだ方が理解が早い場合があります。

ここではC#にある程度理解がある人がUnityを使うケースを想定して紹介しています。

どんな人がUnityを使うべき?

Unityは3Dに関するアプリケーションやゲーム、あるいは映像、AR、VRアプリなどを制作したいが、ゼロからC#でクラスを作って表示を制作して3Dアプリを作るのは面倒だという人には最適なツールです。

C#を学習するというよりは、目的があって何か作る人がUnityを制御するためにC#を使うという形になるでしょう。

Unityは10万米ドル以上の収益がない限りは無料で使用できるツールなので初学者でも誰でも気軽に使用することができます。(だからこそ初心者ばかりが殺到してしまってブログや市場に初学者用の文献しかなくなって学習が難しくなってしまうという欠点もあります。)

簡単な表示アプリを制作するのであればUnityを使うことで手軽に作成することができます。

とりあえずUnity内でC#コードを書いてみよう

まず「クラスなどの概念などは良いからさっさとコードを書いて動かしてみたい」「Unityをとりあえずインストールしたけど、どこでC#を書くのだろう」という方のために、簡単に書き方を紹介します。

初心者はとりあえずGameObjectを操作するスクリプトをC#で制作すると良いでしょう。GameObjectにコンポーネントを追加することによりシーン上で機能します。

なお、自分でスクリプトを書かなくてもある程度の機能や表示や当たり判定に関するスクリプトは、既にコンポーネントに追加できる変数やメソッドが準備されていたりするので有効に使いましょう。

これらのスクリプトはプラットフォームに互換性があるなど単に機能が用意されている以上に優秀な性質を持っています。まずはスクリプトの作り方から紹介します。

C#スクリプトファイルを制作する方法

Unityでスクリプトを作成するには、Projectと書かれたウィンドウのクリエイトメニュで作成しましょう。ProjectはUnityにしようするファイルを格納する場所です。

WindowsやMacを使っている時にエクスプローラーで「新しいフォルダ」や「新規テキスト」などを制作したことはあるでしょう。それと同様に、フォルダ内に新しいスクリプトファイルを新規に制作することができます。

方法は「①Projectのタブのすぐ下にあるCreateメニューを選択しドロップメニューを出し」、次に「②C# script を選択します」そして「③C#のスクリプトが作成されます(Testなど適当な名前をつけてください)」以上の通りです。

慣れたらエクスプローラー上で自力でUnityプロジェクトフォルダを探してファイルを作っても構いませんが、クラス記入ミスを防ぐためにもUnity上で制作すると良いでしょう。

C#スクリプトファイルを書き換えよう

空のスクリプトファイルを開くと既に以下のようなコードが書かれていると思います。ファイル名をTestにした方はclass名もTestになっています。

ファイル名とクラス名が間違っているとスクリプトが動作しないので変更しないようにするか、変更したい場合はファイル名も変更するように気をつけてください。

MonoBehaviourクラスを初めから継承していることがわかります。場合によっては継承しないことも可能ですが、今はこのままにしておきます。

Unityの特徴ですがコンストラクターを定義すると内部処理と干渉するので初期化の処理をしないというものがあります。

 

このコードを以下のように置き換えてみます。

 

コードを書き終えたら保存しましょう。

しかし、コードを書き終えてUnityのプロジェクト画面に戻ってもなにも起こらないと思います。基本的にゲームシーンに反映する時はGameObjectのコンポーネント部分にアタッチする必要があります。

GameObjectを作成しよう

GameObjectを制作して先ほど作ったスクリプトをアタッチしましょう。

まず画面上部のメニューから、新しい ゲームオブジェクト (GameObject > Create 新しい ゲームオブジェクト (GameObject > Create Empty) を作成します。

次に作ったGameObjectを選択してInspectorウィンドウ内の「Add Component」ボタンをクリックし、「New Script」を選択します。さらに先程のスクリプトが表示されるのでアタッチします。

アタッチするとInspectorにスクリプトが追加されdistancePerFrameと書かれた部分に入力可能になります。(初期値は0.1)

早速再生ボタンを押してみましょう。

空のGameObjectに他のコンポーネントを設定する方法

再生ボタンを押すと、コンソールウィンドウに”Hello World !”と表示されます。表示されない場合はスクリプトのファイル名やコードのエラーがないか確認してください。

inspector内のtransformと書かれた部分の数値も上昇し続けており、設定によっては空のGameObjectを選択すると緑と赤と青の表示が移動し続けることを目視できます。(この緑と赤と青の表示はギズモと呼ばれます)

これはコードでスクリプトがアタッチされている自分自身のGameObjectの transformを変更し続けるようにしたからです。スクリプトは他のGameObjectにもアタッチできます。

作ったスクリプトを使い回す方法

作ったスクリプトは他のオブジェクトに流用できます。一度再生ボタンを切ってHierarchyのCreateタブを開いてCubeなどを選択しましょう。Cubeオブジェクトにも同じようにスクリプトをアタッチしてみます。再びシーンを再生すると同じように動きます。

視覚的なコンポーネントがついていなかった空のオブジェクトと違って、視覚的に立方体が移動するのでわかりやすいでしょう。transformが増加するということはゲーム上で位置が変わり続けるということです。

If関数などと組み合わせればコントローラでキャラクターを動かすようなことも可能になってきます。

再生しながらメンバ変数を設定する方法

inspectorの数値は再生中も変更することができ、再生終了後数値が元に戻ります。スクリプトのdistancePerFrameと書かれた変数を0.1から0.5などに変更すると更に早く動きます。

このようにコードを書き換えなくてもpublicで宣言した変数はinspector内で編集できるようになります。この数値はメンバ変数なのでGameObjectごとに個別に速さを変更できます。

なお空のオブジェクトの方にもCubeと同じコンポーネントを追加すれば見え方も変わるので、Add Component から色々追加してどのようなスクリプトが用意されているのか試してみると良いでしょう。ヘルプを押すとUnity公式ページにコンポーネントの解説があります。

SE
Unityで使うC#の特徴がよく分かりました。
PM
C#スクリプトとGameObjectの特徴を理解すれば簡単にコードを追加することが可能ですので、参考にしてください。

まとめ

UnityにおけるC#はMonoBehaviourやGameObjectなどの概念があるため一見複雑ですが、ゲームを制作するために様々な便利なスクリプトや拡張機能を持ったツールであると認識すれば理解が早いでしょう。

ゲーム制作以外で利用している方も増えているので「なんでこんな仕様なのか」と思われる方もいるでしょう、しかし、うまく使えば初期投資無料でアプリケーションが制作できる素晴らしいツールと言えます。

GameObjectをうまく利用して目的のコンテンツを作っていきましょう。


.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)

Search

Popular

reccomended

Categories

Tags

Jobs