Unityやってみる21:C#について調べてみました
こんにちは。Unity素人おじさんです。ただしプログラミング歴は結構長いです。
ここ数日、とあるサイトのチュートリアルを、うんうん悩みながら動作させようと頑張っていたのですけれど、ハードルがあまりに高くて中断することにしました。ひょっとしたらあっという間に、素人を脱出できるのではと期待していたのですけど、それほど甘くはなかったです💦 焦るといいことはないですね。
前回はこちら:
と言っても、決して無駄ではなかったです。多数あるサンプルゲームの一つは動作させることが出来て、そこから学ぶことが多数ありました。今後レベルアップしたら、他のサンプルゲームにも再チャレンジしたいと思っています。
で、今日は少しゲーム開発から離れて、スクリプトについて調べてみたいと思います。
Unityにおける、「スクリプト」とは?
Unityは、アセットといわれる部品をくっつけることで、プログラミング不要でゲームが作れる、ゲーム開発プラットフォームですが、細かい動きをカスタマイズしたい時や、自分でアセットを作りたい時などに、プログラミングが必要となりますね。そのプログラムを記述したものが、「スクリプト」ですね。
Unityのスクリプトには、どういう記述ルールがあるの?
Unityのスクリプトには、「C#(シーシャープ)」という名前のプログラミング言語が、採用されていますね。もともとプログラミング業界には、C言語や、それをオブジェクト指向に拡張したC++という言語があったのですが、C++とJavaという言語を参考にして、2000年にマイクロソフトが開発したのが「C#」、と言われていますが諸説あるようです。
C#のマイクロソフト公式のドキュメント、チュートリアルに、下記がありますね。
文法に関しては、上記サイトの左のメニューから、「C#プログラミングガイト」、「言語リファレンス」を選ぶとみることができます。
C#で使える、変数にはどういうものがあるの?
変数の概要と、文字列、1次元配列と多次元配列は下記。
スクリプトの一番上に必ず出てくる、「using」って何なの?
「usingディレクティブ」というのが正式名称のようです。「型」とか「名前空間」とか言われるものを指定することで、グループ化されている、「型」とか「名前空間」を、利用可能になるようですね。C言語でいう「#include」、Pythonでいう「import」と似たようなものでしょうか。詳細はわかりませんがたぶんそうですね。
usingで宣言されている、System.Collections、System.Collections.Genericって何なの?
Microsoft開発の、「名前空間」のようです。Unityでのゲーム開発でも、必ず使うであろうということで、スクリプト作成時にusing宣言されるようですね。実際どのような機能にアクセスできるようになるのかは不明💦 あまり意識しなくても問題ないかも知れません。
もうひとつ、「using UnityEngine;」っていうのも宣言されているけどこれは?
UnityEngineは、Unityでゲーム開発をする上で、割とよく使うものをまとめた「名前空間(?)」のようです。Unity公式の、下記サイトの左のメニューから、「UnityEngine」を選ぶと詳細を見ることが出来ますが、詳細すぎて、しかも英語で結構つらいですね(笑。
スクリプトで使う、「OnMouseDown」などのイベントの定義も、UnityEngineに入っているの?
はい。上記スクリプトリファレンスから、「UnityEngine」→「Classes」→「MonoBehaviour」と選んでいくと、Unityのすべてのクラスの元(基底クラス)である、「MonoBehaviour」の説明を見ることが出来ます。その中に、OnMouseDownなど、イベント発生時に呼び出される各種関数を、見ることが出来ます。「こういうイベント、取得する関数ないかなあ?」 と思う時は、ここをちらっと見てみるといいかも知れませんね。
「GetComponent<Rigidbody>();」っていうおかしな記述はナニ?
C#のコードを見ていて、「<Rigidbody>」という不可解な記述に戸惑いましたが、これは「ジェネリック関数」というもののようです。Unity公式の、次のサイトに説明があります。なお「<>」というのを、「山形括弧」と呼ぶようです。初めて知りました(笑。
簡単に引用しておくと、「(Rigidbody)GetComponent(typeof(Rigidbody));」を省略したもののようです。「えー? 本当? 嘘でしょう?」と思って次のように書き換えて実行したら、確かに同じ動作をしました。山形括弧だとわかりづらいーと思う人は、省略なしで記入してもいいかも知れません、が、どっちでもいいけどどちらを選びますかと聞かれたら、上がいいですと言っちゃいそうですね(笑。
ということで今日はプログラミングは休憩して、Unityのスクリプト(C#)の情報源をまとめてみました。
次回はこちら: