Unity備忘録5頁目「スクリプトを書いてみる1」

江上宿六です。

 

こうやって備忘録を書いたりはしてのは良いんですけど、本業の方がなかなか

進まないんですよね。 最近になってようやく企画を始められました、遅い。

 

今回はスクリプトですね。 UnityではJavascriptC#等を使ってスクリプト

書くことが出来ますが、ここではC#を使って書いていきます。 スクリプト

プロジェクトビューのCreateからC#Scriptを選ぶことで追加出来ます。

f:id:y6yegami:20180709135953p:plain f:id:y6yegami:20180709140004p:plain

スクリプトが追加されるとまずはファイルの名前を入力させられます。

とりあえずここはtestとでもしておきましょう。 決定するとインスペクターに

自動生成されたスクリプトが表示されます。 これを編集していく事になります。

 

このスクリプトを編集するには、スクリプトを選択した状態でインスペクターの

上部にあるOpenをクリックするか、スクリプトのファイルをダブルクリック、

右クリックでOpenを選択するなど様々な方法がありますが、そこはお好みで。

 

ここでVisualStudioを入れていた人はVisualStudioが開くと思います。

アカウントの登録が出来ていなければ行いましょう。

f:id:y6yegami:20180709142434p:plain

まぁ、こんな感じになっていますね。 上から簡単に説明していきます。

1~3行目はUnityやC#で使う便利な変数や関数をこのスクリプトでも使いますよ

といった感じの宣言です。 基本的に消してはいけないやつだと思います。

 

5行目、testクラスの宣言。 MonoBehaviourというのはこれ継承だったかな。

別に今は継承とかそういうのはどうでもいいです。 肝心なのはその次です。

 

8~10行目にあるStart関数は最初に一度だけ行われる関数です。 その最初

というタイミングについては後で書きますが、変数などの初期化を行うのに

都合の良い関数です。

 

13~15行目にあるUpdate関数は毎フレーム呼び出される関数で、

主にオブジェクトを更新する処理をするのに使われる関数です。

 

早速このStart関数とUpdate関数の中に記述して機能を確かめてみましょう。

f:id:y6yegami:20180709145805p:plain

Start関数の中にこう書いてみました。 Debug.LogはUnityのコンソールに

出力を行うものです。 中身は見飽きた感のあるHello World!という文字列です。

書けたら保存をしてUnityに戻って実行ツールなどを使い実行してみましょう。

 

‥‥まぁ、何も起きませんけどね。 Unityでスクリプトを実行させるには

スクリプトをオブジェクトにアタッチする必要があります。 Cubeがあれば

それでも良いですが、無い場合はヒエラルキーのCreateからCreateEmptyを

選択して空のオブジェクトを追加します。

 

そうしたらヒエラルキーのCube、または空のオブジェクトのGameObjectに

testのスクリプトをドラッグ&ドロップします。

f:id:y6yegami:20180709151453p:plain

これでアタッチができました。 再び実行してみましょう。

f:id:y6yegami:20180709152223p:plain

今度はコンソールや画面左下の所にHello World!と表示されました。

コンソールはその画面左下の所をクリックしたり、Windowメニューから表示

させる事ができます。

 

Hello World!と一回表示されたのは記述をしたStart関数が一度だけ呼び出される

関数だからです。 それではUpdate関数にも同様にHello World!と出力するよう

記述して実行してみましょう。 一度アタッチしておけば書き換えた後に

再度アタッチする必要はありません。

f:id:y6yegami:20180709153144p:plain

f:id:y6yegami:20180709153157p:plain

想像は出来たと思いますが、凄い勢いでコンソールが流れていきました。

1秒60フレームの描画が行われるとしたら、1秒で60回Hello World!されます。

これらがStart関数とUpdate関数の機能です。

 

後述するといったStart関数が行われるタイミングですが、調べたところ

スクリプトが有効で、Update関数が行われる前に行われるとありました。

 

Startよりも先に呼び出されるAwake関数というのもあるようですが、

とりあえず現状はStartで良いと思います。 将来何かを作ろうとした時に

初期化で何か問題があると感じたらAwakeを思い出しましょう。

 

長くなりましたが今回はここで終わりです。 次回はコンソールに出力する

のではなく実際にオブジェクトを操作してみたいと思います。