ブルーノのC#プログラミング & unity勉強日記

プログラミング素人、ブルーノの自主勉強ノートです。他のプログラミングを勉強したい方の助けになれば幸いです。その他趣味の雑記もしていきたいです

Unity / スクリプトコンポーネント

f:id:covory10101101276:20180216162737j:plain

レーヌ村

 

みなさんこんにちは🌚

最近寝落ちしてばっかでYoutubeが全く知らない動画を再生しているせいでトップページが身に覚えのない動画で埋め尽くされているブルーノです。知らないYoutuberのチャンネルが必ず出てくる...

さて今回は短いですが、前回やったコンポーネントについて。もう一つとても大事なコンポーネントをやっていませんでした。それこそがスクリプトコンポーネントであり、このおかげでゲームは多様に動くものと思われます。

 

スクリプトコンポーネントとは

スクリプト(Script)とは英語で「台本」みたいな意味ですね。ゲームの進行や各部品の動きを命令するのがこのスクリプトコンポーネントで、プログラムに命令するのですからその言語はプログラム言語です。そしてこのUnityではC#JavaScriptで命令することができます(ちなみにJavaScriptは厳密にはUnity用に調整されたもので普通のJavaScriptとは似ているが違うそうです)。

まずゲームの進行のためのオブジェクトとしてヒエラルキーブラウザに新しく「GameManager」という名前の空のゲームオブジェクトを作ります。

f:id:covory10101101276:20180216231725p:plain

この名前にするとゲームの進行を管理するものであるとUnityに分からせることができます。

そしてこの空のGameManagerに[Add Component]から[New Script]を選択しましょう。言語はもちろんC#で名前は「DropCube」としておきましょう。すると

f:id:covory10101101276:20180216231949p:plain

Assetsにスクリプトが追加されました!!これをダブルクリックすると...

f:id:covory10101101276:20180216232259p:plain

いつか見たことある感じの画面が!!

このサイトでは解説していませんが、この画面はUnityをダウンロードした時にデフォルトならば一緒にダウンロードされるMonoDevelopというアプリケーションの画面です。そしてこのコードはUnity用の初期設定のコードです。ジェネリックが宣言されているのと、UnityEngine名前空間が宣言されているのが特徴ですね。そして中身のStartメソッドとUpdateメソッドも見たことがありませんね。これら全てUnityEngine名前空間で定義されたゲーム用のメソッドのようです。なるほど!!この中にゲームの機能が詰まっているんですね!!このライブラリを眺めるだけでもワクワクしてきますよ!!

いかんいかん。続きを

とりあえず以下のように書きます

f:id:covory10101101276:20180216233007p:plain

わっけわかんないですね!!

一つずつ概要をフィーリングで書いていきます。それぞれの機能と書き方はUnityスクリプトリファレンスを見ればとても詳しく載っているので分からない場合はそちらを見ましょう。

public class DropCube : MonoBehaviour

Unityのオブジェクトは全てこのMonoBehaviourクラスから派生します。派生したクラスの名前はスクリプトを生成した際に自分がつけた名前ですね

void Start () {
        InvokeRepeating ("DropOne", 2f, 1f);
    }

Startメソッドはゲームがスタートした時に一度だけ呼び出されます。このStartのような呼び出される「時」のことをイベントと言います。

InvokeRepeatingメソッドは順に(関数名、呼び出される時間、それ以降何秒ごとに呼び出されるか)を記述し、繰り返し(Repeating)呼び出す(Invoke)メソッドです。DropOneとは?それを次で記述しています。

void DropOne()
    {
        CubeCount += 1;
        Instantiate (CopyCube,new Vector3 (0, 40, 0), Quaternion.identity);
        if (CubeCount == 100) {
            CancelInvoke();
        }
    }

DropOneが呼び出された場合、冒頭で宣言したCubeCountを1増やし、Instantiate関数を呼び出します。Instantiate関数は(複製するオブジェクト、位置、向き)の順に指定すると、その座標に指定した向きでオブジェクトを生成します。

そしてCubeCountが100になるとCancelInvokeメソッドで呼び出しを止めます。

 

ん?肝心のCopyCubeを宣言したはいいけどそんなオブジェクトの情報なくないか?と思いますよね?まあまあ先ほどのGameManagerのインスペクターを見てみると...

f:id:covory10101101276:20180216234849p:plain

CopyCubeって欄ができている!!ということはこれにCubeを設定すれば...

f:id:covory10101101276:20180216235040p:plain

100個ものキューブが!!!

すごい!!!!これは自由自在ですね!!!100個もコピーしなくて良いのです。

このようにUnityEngineの機能を把握すればあらゆることを実装できます。これはUnityEngine名前空間の中身を熟読しなければ...いくつあるんだ...?今回はここまでにしておきます。

 

なんか今回一気にゲームって感じになりましたね!しかしUnityはこんなものでは終わりません。まだまだあらゆる便利でハイクオリティな機能をいくつも備えているようです。Unity....やり尽くしてやるぜい!!!😤