【Unity】Startメソッドとは?インスタンス生成時に一度だけ呼び出される

Startメソッドとは? Unity

こんにちは、ともくんのゲーム作り部屋にようこそ!

このページでは、

「UnityのStartメソッドってなに?」

「Startメソッドをどうやって使えばいいのかわからない。」

というお悩みの方に向けた内容となっています。

Startメソッドとは、Unity側で定義されているメソッドで、オブジェクトが有効化された際などのインスタンス生成時に自動的に呼び出されるイベント関数のことです。

このStartメソッド内に処理を書いておくことで、ゲームを開始してそのオブジェクトが生成されたタイミングで、そのStartメソッドに書かれている処理が行われることになります。

そして、Startメソッドは一度だけ行われる処理になるため、変数の初期化などで使われることが多いです。

そこで、このページでは、Startメソッドがどんなメソッドなのか、仕様や使い方についてまとめていきます。

なお、このページでは、

Windows11
Unity Hub3.11.1
Unity6

のバージョンで解説しています。

この記事を書いた人

ゲーム作りを学び始めた一児のパパです。
このブログは、子供から「ゲームを作ってみたい!」と言われ、非プログラマーでゲーム作りをしたことない僕が、ゲーム作りの本を読んで独学でゲーム開発を学んでいるブログです。
同じように初めてゲーム作りをしている方と一緒に学んでいけるようなブログに出来たらいいなと思っています。
また、「このコードはおかしい」とか「もっと良い書き方があるよ!」などあれば、どんどん指摘して頂けると助かります。

Startメソッドとは?

まずは、Unityで良く使われるStartメソッドについてまとめていきます。

インスタンスの生成時に一度だけ自動で呼び出されるメソッド

Startメソッドは、冒頭でも解説した通りで、ゲーム開始後インスタンスが生成されたタイミングで自動で呼び出されるイベント関数です。

もう少し詳しく言うと、Startメソッドは、インスタンスが生成されて1フレームした後に、一度だけ呼び出されて、メソッド内に書かれた処理が行われます。

このインスタンスとは実体のことで、そのスクリプトをアタッチしているオブジェクトが有効化されたタイミングのことを指しています。

変数の初期化などで使われることが多い

Startメソッドは、インスタンスの生成時に一度だけ行われる処理という性質から、変数の初期化として使われることが多いメソッドです。

変数の初期化とは、まだデータが入っていない変数に対して、数値や文字列などを入れる処理のことです。

例えば、GameObject型の変数をそのクラスで宣言しておいて、Startメソッド内でFind関数を使ってオブジェクトを探して代入する、といったような使い方の場合に最適です。

このように、変数の初期化は最初に一度だけ行っておきたい処理になるので、Startメソッドに書かれていることが多いです。

UpdateメソッドとAwakeメソッドとの関係について

Startメソッドと同じように、ゲームが始まって自動で呼び出されるイベント関数として、UpdateメソッドAwakeメソッドというものがあります。

Updateメソッドは、Startメソッドの後にフレーム毎に自動的に呼び出されるメソッドで、オブジェクトを移動させる処理やキー入力判定の処理などゲームで常に行いたい処理を書いておく部分になります。

一方、Awakeメソッドは、Startメソッドより前のインスタンス生成直後に自動で呼び出されるメソッドで、Startメソッドよりも前でいち早く読み込ませたい処理は、このAwakeメソッドに書いておきます。

そのため、それぞれインスタンスが生成された後に自動で呼び出されるメソッドとなっていますが、呼び出される順番は

Awake ⇒ Start ⇒ Update

の順となります。

Startメソッドの使い方

ここからは、実際にStartメソッドをどのように使っていくのかをまとめていきます。

MonoBehaviourクラスを継承する

まず、Startメソッドを使うためには、MonoBehaviourクラスを継承する必要があります。

継承とは、クラス内の変数やメソッドを別のクラスに引き継ぐことで、StartメソッドはこのMonoBehaviourクラスの中で定義されているため、継承して派生クラスを作成する必要があります。

using UnityEngine;

public class クラス名 : MonoBehaviour  // MonoBehaviourクラスを継承する
{
}

MonoBehaviourから継承を行う際は、3行目のクラス作成の際に、クラス名の後ろに「:」を付けてMonoBehaviourと書くことで、継承することができます。

なお、僕の使っているUnity6では、スクリプト作成の際に自動的にMonoBehaviourクラスを継承することができるようになっているので、その場合はこの作業は必要ありません。

Start()でメソッド内に処理を書いていく

MonoBehaviourクラスの継承ができたら、スクリプト内にStartメソッドを書いていきます。

Startメソッドは返り値が無いので、

using UnityEngine;

public class Test : MonoBehaviour  // MonoBehaviourクラスを継承する
{
    void Start()    // Startメソッドを作る
    {
        // Startメソッドの処理内容を書く
    }
}

と、5行目のようにvoid型で書いてあげることで、Startメソッドを使うことができます。

これで、Startメソッドの{}内に書いた処理が、インスタンス生成後に一度だけ行われるようになります。

なお、メソッドの作り方については、以下の記事でも詳しくまとめていますので、参考にしてみてください。

まとめ

このページでは、UnityのStartメソッドについて、仕様や特徴、また使い方までをまとめていきましたが、いかがでしたでしょうか?

Startメソッドは、インスタンス生成後に自動的に一度だけ呼び出されるイベント関数で、Updateメソッドより前に呼び出されるメソッドになっています。

変数の初期化など最初に行っておきたい処理は、このStartメソッドに書いておくことで、先に処理を行ってくれます。

また、同じようにAwakeメソッドもインスタンス生成後に呼ばれる関数ですが、Startメソッドよりも先に読み込まれることになるため、合わせて覚えておきましょう。

最後までお読みいただきまして、ありがとうございました!

コメント