Unity エンジニアになるための C# 学習環境を構築する

Unity をこれから始めたい、やらなくてはならないという人をターゲットにした記事です。

C#を利用する背景

Unity は、現在 Unity 5.5 として、 Unity 5.6ベータ、今年はUnity 2017に進化し続けているゲーム開発エンジンです。Super Mario Run や、Pokémon Go などで採用されたことでも話題のエンジンです。

このUnityは、Unity Editorと言われるエディタで開発を進め、コンパイルからデプロイまで一括でこのUnity Editorで行います。(iOSは、Xcode用のプロジェクトを吐き出し、最終的にはXcodeを利用します)

プログラムは、スクリプトとして複雑なゲームの制御を行うためのものとして、JavaScript、またはC#にて記述することになります。何と言っても情報量的にC#が一番多いと思います。Boo言語も今では非推奨になりました。これからUnityのスクリプト言語として選択するのであれば、C#が良いと思います。

また、話はそれますが、Microsoftが買収し無償で提供されるようになった、XamarinもC#で記述します。ビジネスアプリケーションのネイディブ開発には、このXamarinも選択肢にあがってくるでしょう。それでも、利用する言語がC#で統一されているだけで、開発を行うリソースを流用しやすいでしょう。

いまでもですが、古くはC#は Microsoft .NET Framework上で動作する言語という印象で、Windowsクライアントの開発を行うもの、または、Windows Serverのサーバーサイド言語という印象が強い方もいらっしゃるかもしれません。

近年は、このC#でWindwos/Linux/macOSなど様々なプラットフォームで開発することができる、Monoがあります。そして、Unityも内部でこのMonoを利用して、様々なプラットフォームに向けたゲームアプリを排出できるようになっています。

Unity を触ることになった時、必ずしもプログラミング経験者ではない人も、Unityに興味をもって参入してきている印象があります。
そこで、いきなり Unity Editor を利用して何かを始める前に、スクリプト言語である C# そのものをシンプルに理解しておくことで、Unity に関する様々なサンプルやネット上の記事の理解を早めることができるでしょう。

プログラミング経験者でも、「そもそもC#という言語そのものの理解」となるとどこで習得するのでしょうか。MicrosoftがC#言語仕様を公開していますが、日本語のリソースも古く、入門書を購入しても、Windowsありき、.NET Frameworkありきの解説を多く見受けます。

先にも書いた通り、C# = .NET Frameworkではありません。私は、まず Unity や.NET Frameworkに依存しない、素のC#という言語自体を学んでいくことが、重要だと考えています。

まず、C# で作ったプログラムを、コンパイル、そして実行するための環境を作りましょう。

Mono のインストール

今回は、macOS で C# を学ぶための環境づくりを行います。Mac PortsHomebrew ソースからのコンパイルなど、様々な方法でインストールすることが可能ですが、とにかく簡単に、Monoのページからパッケージを落としてきてインストールすることにします。


http://www.mono-project.com/download/#download-mac

パッケージを実行して、手順に沿ってボタンを押してインストールするだけです。

また、以降の作業は、 ターミナル を利用します。俗に言う、 黒い画面 というやつですね。
macOSに標準で、ターミナルというアプリケーションが入っていますが、iTerm2 を利用することをオススメします。好みに合わせて、好きなターミナルをご利用ください。

まずは、ターミナルを起動して、Monoのバージョンを表示してみます。

執筆時点で導入したMonoのバージョンは、4.6.2 であることが確認できます。

Unityでは、今現在でも Mono 2.x 系を利用していて、C# のバージョンでいう C# Version 4 が利用できます。Mono 4.6 が Unityで利用できる(設定をいじくれば)ようですが、公式のサポートを待ちましょう。

なので、今回の学習環境は。2.x 以上のMonoであれば問題ないので、上記URLから最新のMonoを導入すれば問題ありません。

コンパイルと実行

プログラム言語により、その動作方法はまちまちですが、C#は以下の手順を踏みます。

  1. プログラムを記述する
  2. コンパイルする (中間言語に変換する)
  3. JITで実行する

コンパイルするといっているのは、C#で記述したソースコードを中間言語:CIL(Common Intermediate Language) に変換することを意味します。
このCILを mono(.exe)を利用して実行することで学習を進める。本来のコンパイルは、ソースコードから中間コード(OBJ)を生成して、リンカーを通して実行可能なプログラムを生成する。

JITとは、Just-In-Timeの頭文字で、先に作成した中間言語のコードを実行時に、実行できる形(機械語)にして実行する手法です。これに対して、
AOT(Ahead-Of-Time)は、先に機械語に変換して、即座に実行できるようにする手法です。C++など、先に紹介したコンパイル→リンカーの形式は、このAOTになります。

余談ですが、JITとインタイプリターは若干違います。PHPやJavaScirptは、インタプリター言語です。実行時にプログラムソースコードを解釈しながら実行するのが、JITとの大きな差です。

シェル操作とVim操作

これからシェルを使って簡単なプログラム記述し動作させますが、シェル?黒い画面無理! Vim、は?みたいな人もいると思います。まずは、簡単にシェル操作とVim操作を習得しましょう。あまり深くはやりません。

ディレクトリを表示/作る/消す/移動する

シェル操作ですが、ディレクトリやファイルを表示したり、作ったり、消したり、移動したりするこの4つだけまず覚えましょう。

ディレクトリやファイルの一覧が表示を確認することができます。また、

とすることで、隠しファイル(頭に .(ドット)が付くファイル)を除去して表示することができます。

次に、作業用のディレクトリを作ってみましょう。

ディレクトリの内容を表示して、作成されていることを確認します。いまいるディレクトリを カレントディレクトリ と言います。
以下のコマンドで、現在いるディレクトリのパスが表示されます。

では、作成した HelloWorld ディレクトリに移動してみます。

もう一度、pwdでカレントディレクトリを確認してみてください。HelloWorld下に移動していることがわかると思います。ディレクトリの移動は、この cd を利用します。Change Directory の略です。

では、一つ上のホームディレクトリに戻りましょう。

../ これは一つ上のディレクトリを意味します。もう一度 pwd でカレントディレクトリを確認してみてください。ホームディレクトリに戻っています。

また、ホームディレクトリに移動する時、以下のコマンドでどこからでも戻ることができます。

~/ は、ホームディレクトリを意味します。

最後に、HelloWorldディレクトリ削除します。

ディレクトリの内容を表示して、 HelloWorldが削除されていることを確認してください。

黒い画面が苦手な人でも、上記くらいの簡単な操作なら覚えられるのではないでしょうか。シェルは、まだまだ複雑な操作が可能ですが、これくらいのライトな操作から慣れていきましょう。

最後にもう一度、HelloWorldディレクトリを作成して、カレントディレクトリをHelloWorldに移動しておきます。

Vimでファイルを作る

次に、フィアルを作るために vi というコマンドを利用します。vi は、環境によって違いますが、vimと同じものであると考えて問題ありません。viの拡張版がvimです。環境によっては、vi = vim として動作します。

この操作は、通常のテキストエディタとは少しことなりますので、簡単な操作だけ覚えましょう。
カレントディレクトリは、HelloWorldにいるものとします。

hello_world.csというファイルを作成する準備ができました。画面が変わりますが、この状態では、まだファイルは作られていません。

まず、 ESCキーを一度押して、下記のコマンドを実行します。画面最下部に入力が表示されます。

入力したらENTERキーを押すとファイルが作られ、viが終了します。ll コマンドにてディレクトリの内容を確認してみてください。

その後、もう一度、下記の同じコマンドを実行します。

テキストは空なので、ここに何か入力して保存してみます。

i を一度押して、testと入力、その後 ESC を押して、:wq を入力し ENTERキーを押します。

これで、testと記述されたファイルが保存されます。

ファイルの内容を表示してみましょう。

うまく表示されましたか?

vi/vimは、ノーマルモードと入力モードを行ったり来たりして操作します。入力を行いたい場合は、 iで入力モードに切り替えます。( a で追記としても切り替えられます。) 入力モードから、ノーマルモードに切り替えるには、 ESC を押すことで切り替わります。

ノーマルモード時に、カーソルを移動するには、 jkhl で上下左右に移動できます。

適当にテキストを書いてみて、ノーマルモードと入力モードを切り替えながら、テキストを入力してみましょう。もちろん、vim操作ももっと高度な操作が可能ですが、ここでは簡単な入力・編集方法を知っているだけで十分です。

また、このVim操作は、C#を記述するだけでなく、macOSの設定や Linue、Windowsでも利用可能です。特にサーバーの設定をLinuxで行う場合には必須といってよいでしょう。覚えておいて損はありません。

今後、プログラムを記述していくのに、Vimを利用していきます。またUnityのプロジェクトとしてC#を操作する時には、別なエディタを利用していきますが、そこにもこのVim操作が行えるようにしていきます。

入力モードに切り替わってしまえば、単純なテキストエディタと一緒の操作です。最初の慣れないうちは、入力モードに切り替えた後に、矢印キーなどで操作しても構いません。少しずつ慣れていきましょう。慣れた頃にはテキスト操作が格段に早くなります。

Hello World

話が逸れましたが、まずは、プログラムを記述しましょう。ターミナルのパスは、HelloWorldディレクトリの下にいることとします。

先ほど作った hello_world.cs にプログラムを記述していきます。

プログラムを記述したら、保存してviを終了します。C# プログラムの意味は、次回からやるので、ここでは、このまま入力してください。

中間言語にコンパイルする

monoをインストールすると mcs というコマンドが利用できるようになっています。この、mcsを利用して、先ほど記述したソースコードを、中間言語にコンパイルしましょう。

コマンドを実行すると、同じディレクトリに hello_world.exe が出来上がっています。 ll コマンドでファイルの存在を確認してください。

JITで実行する

さて、作った hello_world.exe を実行してみましょう。実行には mono コマンドを利用します。

表示されましたか? hello_world.cs を修正したら、再度mcsコマンドでコンパイルして、monoで実行してください。この繰り返しです。

おわりに

いかがでしたか?今回は C# そのものを学習するための環境構築を行いました。ターミナルの操作に慣れていない人に向けても、簡単なシェル操作とVim操作を学んでもらいました。

Unity は非常によくできたゲームエンジンであると思います。その操作を行う C# という言語そのものの理解や、検証を行うにも、ローカルにこのような環境があることは、非常に便利です。

もちろん Unity ユーザーからすると、UnityのC#クラスなどが利用できるわけではありませんが、C#そのものの動作確認や学習に利用してもらえればと思います。

次回は、今回記述した HelloWorldクラス の構造と、言語仕様について解説する予定です。

最新の更新を
プッシュ通知で購読しよう