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

- システム
エンジニア - Pythonでのスクレイピングの使い方、よく分かりました。
- プロジェクト
マネージャー - スクレイピングをマスターすれば、いろいろと応用が利き、様々なデータの収集が可能ですので、ぜひスクレイピングに興味のある方は挑戦してください。
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の特徴ですがコンストラクターを定義すると内部処理と干渉するので初期化の処理をしないというものがあります。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
using UnityEngine;
using System.Collections;
public class Test: MonoBehaviour {
// Use this for initialization (初期化に使用)
void Start () {
}
// Update is called once per frame (Update はフレームごとに 1 回呼び出されます)
void Update () {
}
}
|
このコードを以下のように置き換えてみます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
using UnityEngine;
using System.Collections;
public class Test: MonoBehaviour {
public float distancePerFrame = 0.1;
void Start () {
Debug.Log("Hello world!");
}
void Update() {
transform.Translate(0, 0, distancePerFrame);
}
}
|
コードを書き終えたら保存しましょう。
しかし、コードを書き終えて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公式ページにコンポーネントの解説があります。
システム
エンジニアUnityで使うC#の特徴がよく分かりました。
プロジェクト
マネージャーC#スクリプトとGameObjectの特徴を理解すれば簡単にコードを追加することが可能ですので、参考にしてください。
まとめ
UnityにおけるC#はMonoBehaviourやGameObjectなどの概念があるため一見複雑ですが、ゲームを制作するために様々な便利なスクリプトや拡張機能を持ったツールであると認識すれば理解が早いでしょう。
ゲーム制作以外で利用している方も増えているので「なんでこんな仕様なのか」と思われる方もいるでしょう、しかし、うまく使えば初期投資無料でアプリケーションが制作できる素晴らしいツールと言えます。
GameObjectをうまく利用して目的のコンテンツを作っていきましょう。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


新着案件New Job
-
開発エンジニア/東京都品川区/【WEB面談可】/在宅ワーク
月給29万~30万円
東京都品川区(大崎駅)
-
遠隔テストサービス機能改修/JavaScript/東京都港区/【WEB面談可】/テレワーク
月給45万~60万円
東京都港区(六本木駅)
-
病院内システムの不具合対応、保守/東京都豊島区/【WEB面談可】/テレワーク
月給30万~30万円
東京都豊島区(池袋駅)
-
開発/JavaScript/東京都豊島区/【WEB面談可】/テレワーク
月給50万~50万円
東京都豊島区(大塚駅)
-
債権債務システム追加開発/東京都文京区/【WEB面談可】/在宅勤務
月給62万~67万円
東京都文京区(後楽園駅)
-
PMO/東京都豊島区/【WEB面談可】/在宅勤務
月給55万~55万円
東京都豊島区(池袋駅)