【Unity】別スクリプトの関数(メソッド)・変数を呼び出し渡す

当サイトで紹介する商品・サービス等の外部リンクは、アフィリエイト広告を含む場合があります。
スポンサーリンク

Unityで2つ以上スクリプトをつくったとき、別のスクリプトで定義した変数や関数を呼び起こしたい時があるかと思います。

また、別のスクリプトから変数をアクセス(使う)場合はstatic(静的)にする必要がありますが、static変数はゲームを終了して再開しても値を保持できないことやクラス間の依存関係の増加など致命的な問題があります。

したがって、本記事では、staticを使わずに、別スクリプトの関数を呼び起こす方法を紹介します。

本記事は次の人におすすめ
  • 別のスクリプトの関数を呼び出したい。
  • static以外で変数にアクセスしたい。
  • 「GetComponent<>();」の使い方を知りたい。
スポンサーリンク

GetComponent

GetComponentは、Unityでゲームオブジェクトにアタッチされたコンポーネントを取得するためのメソッドです。

取得には、次の通りに書きます。

GetComponent<コンポーネントの型>()

GameObjectは物理エンジンを適用させるRigidbodyを取得して、スクリプトから操作する場面が多く、以下のコードはRigidbodyコンポーネントを取得して、重力、質量、速度、移動を制御するコードになります。

// Rigidbodyコンポーネントを取得
Rigidbody rb = GetComponent<Rigidbody>();

// 重力を有効にする
rb.useGravity = true;

// 質量を変更する
rb.mass = 2f;

// 速度を変更する
rb.velocity = new Vector3(1f, 0f, 0f);

// 力を加えて移動させる
rb.AddForce(Vector3.forward * 10f);

GetComponentで別スクリプトの関数を呼び起こす方法

それでは、別のスクリプトから関数を呼び出す方法を解説します。

今回はスクリプト「ScriptA.cs」「ScriptB.cs」の2つを使います。

「ScriptB.cs」にて、スペースキーを押すと、「ScriptA.cs」の関数で変数を加算するコードです。

関連記事:「【Unity】UIボタンを押すごとに数字を増やし、クリックした回数をカウントをする

ソースコード

関数を渡す側

using UnityEngine;

public class ScriptA : MonoBehaviour
{
    int Count;
    public void MethodA()
    {
        Count++;
        Debug.Log(Count);
    }
}

関数を受け取る側

using UnityEngine;

public class ScriptB : MonoBehaviour
{
    private ScriptA scriptA;

    private void Start()
    {
        scriptA = GetComponent<ScriptA>();
    }

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
       Debug.Log("Spaceキーが入力されました");
            scriptA.MethodA();
        }
    }
}

UdemyでUnityを学習

Udemyは、オンデマンド式の学習講座です。
趣味から実務まで使えるおすすめの講座を紹介します。

ビックセール開催中(10月25日まで)
対象のコースが1800円から(最大95%OFF)

多彩な講座から自分に合った講座を探そう!

最大94%OFF

終了まで

時間

解説

初めに、「ScriptA」を解説します。

「Count」はint型変数で、関数「MethodA()」内で「Count」を1ずつ加算します。

    int Count;
    public void MethodA()
    {
        Count++;
        Debug.Log(Count);
    }

つづいて、「ScriptB」を解説します。

scriptAは、クラス「ScriptA」のprivateなインスタンス変数です。

クラス「ScriptA」の新しいインスタンスを作成して、変数「scriptA」に格納します。
よって、別のスクリプト(ScriptB)からScriptAクラスで定義されたメンバー変数、メソッド、プロパティにアクセスすることができます。

  private ScriptA scriptA;

また、Start()内で、privateな変数「scriptA」にGetComponentメソッドを使用して、スクリプトで定義されたメソッドや変数にアクセスします。

 scriptA = GetComponent<ScriptA>();

最後にUpdate()内で、スペースキーを押すと、スクリプト「ScriptA」内の関数MethodA()を実行させます。

if (Input.GetKeyDown(KeyCode.Space))
{
 Debug.Log("Spaceキーが入力されました");
scriptA.MethodA();
}

実演

完成した2つのスクリプトをHierarchyウィンドウにアタッチしてください。

再生ボタンを押して、スペースキーを押すと以下のようになります。

まとめ

今回は、staticを使わず、別スクリプトの関数を呼び起こす方法を紹介しました。

関数を呼び起こすためには、「GetComponent()」を使い、呼び起こしたい関数があるクラスの新しいインスタンスを作成して、privateな変数を定義します。

privateな変数を用意することで、そのスクリプト内のみで変数が有効になるので、別のスクリプトからの干渉を受ける心配はなくなります。

この記事を書いた人

プロフィール

アリッシア

                 

大学4年間で何か胸を張れるスキルを身に着けたくて当サイト運営を始めました。
現在、大学院に進学するか就職するか迷いながら勉強しています。
詳しいプロフィールはこちら

Contact icon

contact

X icon

X

Instagram icon

Instagram

Note icon

Note

スポンサーリンク
Unity
フォローする
タイトルとURLをコピーしました