Version: 2020.1
言語: 日本語
スクリプティングの概念
変数とインスペクター

スクリプトの作成と使用

ゲームオブジェクトの動作はアタッチされた Component (コンポーネント) により制御されます。Unity ビルトインのコンポーネントは多目的に使用できますが、独自のゲーム機能を実装するにはそれ以上が要求される場合があります。Unity では Script (スクリプト) を使用してカスタムのコンポーネントを作成できます。これにより、思い通りのゲームのイベントの送信、時間の経過に伴ったコンポーネントプロパティの修正、ユーザー入力操作への反応が可能になります。

Unity は元々 C# プログラミング言語をサポートしています。 C# (C シャープと発音) は Java や C++ に似た標準的な言語です。

これに加え、互換性のある DLL をコンパイルできる場合は、他の多くの .NET 言語を使用できます。詳細については こちらのページ を参照してください。

プログラミング技術および個々の言語の使用法をマスターすることはこのページの範囲を超えます。しかし Unity でプログラミングを学ぶための多くの本、チュートリアル、および他のリソースがあります。詳細は Unity Web サイトにある Learn (学習) セクション を参照してください。 

スクリプトの作成

他のアセットの大多数とは異なり、スクリプトは通常、Unity 内で直接作成されます。Project ウィンドウの左上にある [Create] メニューから、またはメインメニューから Assets > Create > C# Script の順に選択します。

新規のスクリプトはプロジェクトパネルで選択した任意のフォルダーに作成されます。新規のスクリプトのファイル名が選択状態となり、新規の名前を入力するように促されます。

新規スクリプトに名前をつけるのは後まわしにせず、この時点で行なうとよいでしょう。後で説明するように、ここでつけた名前は、ファイルの最初のスクリプトテキストの作成に使用されます。

スクリプトファイルの構造

Unity でスクリプトアセットをダブルクリックすると、テキストエディターで開きます。デフォルトでは、Unity は Visual Studio を使用しますが、好みのエディターを Preferences の External Tools で選択できます (Unity > Preferences)。

ファイルの初めのコンテンツは以下のようなものです。

using UnityEngine;
using System.Collections;

public class MainPlayer : MonoBehaviour {

    // Use this for initialization (初期化に使用)
    void Start () {
    
    }
    
    // Update is called once per frame (Update はフレームごとに 1 回呼び出されます)
    void Update () {
    
    } 
}

スクリプトは Unity 内部処理と連携するため 、MonoBehaviour と呼ばれるビルトインクラスの派生クラスを実装します。クラスはゲームオブジェクトにアタッチできる新たな種類のコンポーネントを作成するための設計図と捉えることができます。スクリプトコンポーネントをゲームオブジェクトにアタッチするたびに、ブループリントにもとづいてオブジェクトの新規インスタンスが作成されます。作成ファイル名と一致するようクラス名がつけられます。クラス名とファイル名が一致しないとゲームオブジェクトにアタッチされたスクリプトコンポーネントは無効となります。

クラスで定義される 2 つの関数に注目してください。Update 関数はゲームオブジェクトのフレーム更新を処理するコードを配置する場所です。何か動作させたり、何かを起動させたり、あるいはユーザー入力操作に反応したり、時間の経過とともに処理されるゲーム中のあるゆるものを含みます。Update 関数で必要な処理を行なうためには変数のセットアップ、設定を読み取ったうえでゲーム中のアクションが行なわれる前に他のゲームオブジェクトとの結びつけを行ないます。Start 関数はゲームプレイの直前に Unity により呼び出され、任意の初期化を行なうのによい場所です。

より高度なプログラミング知識を持つ上級者は、オブジェクトの初期化がコンストラクター関数によって行なわれないことを意外に思うかもしれません。この理由はオブジェクトの作成はエディターにより処理され、皆さんが通常考えるようにゲーム開始時に行なわれるものでないためです。スクリプトコンポーネントのためにコンストラクターを定義しようとすると、Unity の通常処理と干渉するため、プロジェクトで重大な問題の原因となります。

ゲームオブジェクトの呼び出し

すでに述べたように、スクリプトはコンポーネントの青写真であり、ゲームオブジェクトにスクリプトがアタッチされるまではコードは実行されません。Hierarchy ウィンドウでスクリプトのアセットをゲームオブジェクト上へドラッグするか、現在選択されているゲームオブジェクトのインスペクター上へドラッグすることで、スクリプトをアタッチできます。コンポーネントメニューにはスクリプトサブメニューがあり、プロジェクトで利用可能なすべてのスクリプトが含まれています。スクリプトのインスタンスは、インスペクター上では見た目は他のコンポーネントと同じです。

1 回アタッチした後、再生ボタンを押してゲームを起動するとスクリプトが動作します。試すには次のコードを Start 関数に加えます。

// Update is called once per frame (これを初期化に使用)
void Start () 
{
    Debug.Log("I am alive!");
}

Debug.Log は Unity のコンソールにメッセージを表示するだけの簡単なコマンドです。今すぐ再生ボタンを押すと、Unity エディターウィンドウの下部とコンソールウィンドウ (Window > General > Console) にメッセージが表示されます。


  • 2018–03–19 修正されたページ

  • MonoDevelop は 2018.1 以降 Visual Studio に置き換えられました

スクリプティングの概念
変数とインスペクター