スクリプトの使用(Using Scripts)
Manual     Reference     Scripting   
Unityマニュアル > ユーザガイド > アセットの使用 > スクリプトの使用

このドキュメントは有志により翻訳されたもので、オフィシャルではありません。オリジナルのページはこちら
This document is unofficially translated by users.Please see the original document here.

翻訳に関する修正など、ご連絡はこちらまで。
Please send e-mail to here, when you have any question about the translation.

スクリプトの使用(Using Scripts)

ここではプロジェクト内で便利なスクリプトを作る方法を簡単に説明します。詳細なスクリプトAPIに関する情報は、スクリプトリファレンス(Scripting Reference)を参照してください。 スクリプトを利用したゲームプレイの作成については、このマニュアルのゲームプレイの作成(Creating Gameplay)を参照してください。

Unity内でのスクリプトは簡単な動作スクリプトをJavaScriptBoo、又はC#で記述します。ひとつのプロジェクト中で1つ、または複数の言語を使用できます。1つ以上を使用することによるペナルティは全くありません。ただし、全てのスクリプト例はJavaScriptで記述されています。

新しいスクリプトの作成(Creating new scripts)

メッシュやテクスチャなど他のアセットと違い、スクリプトファイルはUnity内部で作成できます。新しいスクリプトを作成するにはAssets->Create->JavaScript (または、Assets->Create->C Sharp ScriptAssets->Create->Boo Script)をメインメニューから開きます。これでNewBehaviourScriptという名前の新しいスクリプトがプロジェクトビューで選択したフォルダに作成されます。フォルダが選択されていなければ、スクリプトはルートレベルに作成されます。

プロジェクトビューでスクリプトをダブルクリックすると編集出来ます。UnityのスクリプトエディタであるUnitronが起動します。すべてのスクリプト記述はUnitronのような外部エディタで行ない、Unity中では直接行ないません。デフォルトのスクリプトエディタを変更するにUnity->Preferences->External Script editorのドロップダウンアイテムを変更します。

新しい、空の動作スクリプトは次のようなものです:

function Update () {
}

新しいからのスクリプトはそれ自身では何もしませんので、機能を追加してみましょう。スクリプトを次のように変更してください:

function Update () {
print("Hello World");
}

実行すると、このコードは"Hello World"をコンソールに表示します。しかし、まだこのコードが実行されることはありません。スクリプトは実行される前に、シーン中のアクティブなGameObjectに付加されていなければなりません。

スクリプトをオブジェクトにアタッチ(Attaching scripts to objects)

上記のスクリプトを保存し、新しいオブジェクトをGameObject->Create Other->Cubeメニューを使ってシーン中に作成します。これで、新しい"Cube"というGameObjectが現在のシーンに追加されます。

スクリプトをプロジェクトビューからCube(シーンか階層ビュー、どちらでも)にドラッグします。Cubeを選択してComponent->Scripts->New Behaviour Scriptをメニューから選択することも可能です。どちらの方法でも、スクリプトがCubeにアタッチされます。作成した全てのスクリプトはComponent->Scriptsメニューに表示されます。もしスクリプトの名前を変更したらメニューの名前も変更されます。

Cubeを選択しインスペクタを見ると、スクリプトがアタッチされたことが確認できます。

Playを押して作成したものをテストしましょう。"Hello World"がPlay/Pause/Stepボタンの隣に表示されるはずです。

オブジェクトの操作(Manipulating the object)

print()ステートメントはスクリプトをデバッグする場合にとても有効ですが、それがアタッチされたGameObjectの操作は行ないません。さらにスクリプトを変更して機能を追加してみましょう:

function Update () {
transform.Rotate(0, 5*Time.deltaTime, 0);
}

もしスクリプトを書いたことがなければ、混乱するかもしれませんが問題ありません。いくつかの理解しておくべきコンセプトがあります:

  1. 関数 Update () {} はUnityが1秒間に複数回(毎フレーム)実行するコードを記述する場所です。
  2. transformはGameObjectのトランスフォームコンポーネント(Transform Component)への参照です。
  3. Rotate()はトランスフォームコンポーネントに含まれている関数です。
  4. コンマに挟まれて記述された数字は、3D空間のそれぞれの軸に対する回転角度を表します:X, Y, と Z
  5. Time.deltaTimeはTimeクラスのメンバで1秒間の動きを等分します。そのため、cubeはマシンのレンダリング時間によるフレームレートにかかわらず等速で回転します。そのため、5 * Time.deltaTimeは1秒間に5度回転することを意味します。

これらを覚えておけば、このコードは"毎フレームごとにGameObjectのトランスフォームコンポーネントを少し回転させる。それは毎秒Y軸回りに5度である。"と読むことが出来ます。

トランスフォームと同様の方法で多くの異なるコンポーネントにアクセスすることが出来ます。コンポーネントはコンポーネントメニューを用いてGameObjectにアタッチしなければなりません。全ての簡単にアクセス出来るコンポーネントはGameObjectスクリプティングリファレンス(GameObject Scripting Reference Page)変数(Variables)以下にリストアップされています。

GameObjectとスクリプトとコンポーネントの関係についてのさらなる情報は、このマニュアルのGameObjectsのページやコンポーネントの使用(Using Components)のページを参照してください。

変数の力(The Power of Variables)

このスクリプトは常にCubeを1秒に5度ずつ回転させます。1秒間の回転の角度を変更したいと思うでしょう。数値を変更して保存することも出来ま すが、スクリプトが再コンパイルされるのを待ち、Playモードに入らなければ結果を見ることが出来ません。実はもっと早い方法があります。Playモー ドを実行しながらリアルタイムで回転速度を変更して試してみることが出来ます。やり方は簡単です。

5Rotate()関数の中に直接書くのではなく、speed変数を宣言して関数で使用します。スクリプトを次のように変更して保存してください:

var speed = 5.0;

function Update () {
transform.Rotate(0, speed*Time.deltaTime, 0);
}

Cubeを選択してインスペクタを見てみましょう。speed変数が出現したことが確認できます。

この変数はインスペクタから直接編集できます。ファイルエクスプローラで名前を変更するのと同じ感覚です。選択してReturnを押し値を変更しましょう。-(マイナス)の入力も可能ですし、Option[Alt]を押しながら値の上でクリックしてマウスを上下にドラッグすることでも変更できます。変数はいつでも変更できます。ゲームが実行中に変更することも可能です。

Playをクリックしspeedの 値を変更してみましょう。Cubeの回転速度がすぐに変わるはずです。Playモードを終了すると、変更がプレイ前の状態に戻されていることが確認できま す。この方法で、プレイして、調節して、実験して、最適な値を探し出すことが出来ます。それから値を永続的に適用してください。

変数の値をインスペクタで変更する方法はスクリプトを複数のオブジェクトで、それぞれ異なる値を与えて再利用出来ることを意味します。もしスクリプトを複数のCubeにアタッチし、speedをそれぞれのCubeで変更すれば、同じスクリプトを用いているにもかかわらず、すべて異なるスピードで回転させることが出来ます。

次はどこを読んだらいいでしょうか?(Where to go from here)

これはエディタ中でのスクリプトの使い方を非常に簡単に説明したものです。さらなる例はUnityに付属のチュートリアル(Tutorials)を確認してください。また、スクリプトリファレンス中のスクリプトオーバビュー(Scripting Overview)も読んでおくべきです。Unityを用いたスクリプト記述とより深い情報への参照が記述されています。もし完全に妻づいてしまったら、必ずUnityフォーラム(Unity Forums) を訪れて質問してください。誰かが必ず助けてくれるはずです。