はじめてのUnity 【第12回 Unityのスクリプト①】
はじめてのUnity 【第12回 Unityのスクリプト①】
Unityのスクリプト①
前回までの記事で、Unity の基本的な機能や、コンポーネントについてみてきました。
今までに出てきた機能を組み合わせることで、簡単なゲームシーンの構築くらいは出来てしまいます
しかし、それだけではゲームにはなりません。マウスやキーボードの入力に合わせて、ゲームオブジェクト
を動かしたり、スコアの表示や、ゲーム内での時間の制御はスクリプトで行う必要があります。
スクリプトを使えるようになれば、自分のオリジナルコンポーネントを作ることができます。
言語
Unity では「C#」、「JavaScript」、「Boo」 この3つの言語でスクリプトを記述することができますが、
どの言語で作成しても、Unity の中間言語にコンパイルされ、実行される速度に差はありません。
また、作成したスクリプトは、ゲームオブジェクトに追加することではじめて実行されます。
このブログではC# を使って解説していきます。
MonoDevelop
Unity には、MonoDevelop というスクリプトエディタが付属しているので、試しに起動してみましょう。
まず、スクリプトファイルを用意します。
スクリプトファイルは、アセットと同じように扱われるため、Project ビューから、Create > Script と選んで作成します。
新規ファイル作成時にファイル名を付けることができますが、今回は特に変更せず、NewBehaviourScript のままにしておきましょう。
作成したファイルをダブルクリックすると、MonoDevelop が起動してスクリプトを編集することができます。
スクリプト
スクリプトファイルを作成すると、以下のような内容の、実行に必要な最低限のコードがあらかじめ記述されています。
using UnityEngine; using System.Collections; public class NewBehaviourScript : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { } }
MonoBehaviour クラス
スクリプトの4行目を見てみましょう。
public class NewBehaviourScript : MonoBehaviour
クラス名が作成したファイル名と同じ、 NewBehaviourScript となっています。
Unity ではスクリプトを読み込む際に必ずファイル名と同じ名前のクラスが必要となります。
名前が一致するクラスがないとエラーとなってしまうので、スクリプトを編集する際には気を付けてください。
また、スクリプトとして動作するクラスは必ず、MonoBehaviour クラスを継承していなければなりません。
4行目後半の : MonoBehaviour の部分がこの継承にあたります。
MonoBehaviour クラスでは、ゲームオブジェクトに対する共通処理が定義されているため、継承がされていないと、
オーバーライド関数に処理を記述しても、ゲームオブジェクトは正しく振る舞ってくれません。
オーバーライド関数
次に、6行目以降を見てみましょう。
Start () と Update () というオーバーライド関数(メソッド)があります。
// Use this for initialization void Start () { } // Update is called once per frame void Update () { }
Start () メソッド
スクリプトが起動すると、まずStart () メソッドが一度だけ読み込まれます。
タイマーのリセットのような初期化などの処理はここに記述します。
Update () メソッド
Start () メソッドが読み込まれた後は、フレーム毎にUpdate () メソッドが読み込まれます。
オブジェクトの状態を更新するようなコードはここに記述することで、フレーム毎に最新の状態に更新されます。
試しに、フレーム毎にY軸に沿って1度回転するコードを書いてみましょう。
サンプルコード① RotateY.cs
using UnityEngine; using System.Collections; public class RotateY : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { transform.Rotate (0,1,0); } }
スクリプトが作成できたら、適当なCube を配置して、Project ビューからCube にRotateY.cs をドラッグ&ドロップしましょう。
シーンを再生すると、Cube が回転します。
第8回でアニメーション機能を使ってCube を回転させましたが、簡単な連続処理であればこのようにスクリプトからでも実行可能です。
しかし、Update () メソッドは、1フレーム毎に連続処理されるため、あまりにも実行に時間のかかる処理を記述してしまうと、ゲームのパフォーマンスに影響が出るので気を付けましょう。
まとめ
Unity のクラスはMonoBehaviour クラスを継承している必要があるという点をしっかり把握しておきましょう。
最後までお読みいただきありがとうございます。
← Unityの記事一覧にもどる
ゲーム制作関連のオススメ連載リンク
とっても手軽なゲーム制作体験!
Unityゲーム開発基礎
実際のリリースゲームを題材にしたハンズオンゲーム制作連載
実践unityゲーム開発