search
LoginSignup
53
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

Unity - 他のスクリプトを触る

はじめに

今回はあるスクリプトから他のスクリプトの関数や変数にアクセスする方法を紹介します。
私自身これには非常に紆余曲折苦労したことがあったため、記事にまとめることにしました。

方針

方法はたくさん存在するのですが、私が一番楽だと思った方法を紹介します。
それは GetComponent を活用することです!!!
GetComponentは最強なので知っておいて損はないかと思います。

方針としては、

  1. アクセスしたいスクリプトを何らかのオブジェクトにつけておく
  2. スクリプトから「オブジェクト → スクリプト → 関数/変数」の順にアクセスしていく

の2ステップです。
それでは、実際の流れを見ていきましょう。

流れ

1. オブジェクトを作成(アクセスされる側)

アクセスしたいスクリプトをつけるためのGameObjectを作成します。
これは空のオブジェクトでも、実際に使用するオブジェクトでもなんでも可です。
今回は「Reseaver」と名付けます。ついでに適当に変数と関数を持たせておきましょう。
変数と関数は全てpublicで作成してください。

スクリーンショット (75).png

Reseaver.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Reseaver : MonoBehaviour {

    public int number = 1000;
    public void ReturnAccess(){
        Debug.Log ("アクセス成功!!");
    }
}

2. 1.のオブジェクトにアクセスする(アクセスする側)

1.と同様にしてアクセスする側のオブジェクトも作成します。
スクリーンショット (76).png

ここからスクリプトを書きます。
まずは1.で作成したオブジェクトを受け取るための器を作りましょう。

Access.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Access : MonoBehaviour {

    public GameObject gameobject;
}

public で宣言することでUnity側で操作することが可能になります。
続いて、Unity側から1.で作成したオブジェクトをgameobjectにアタッチしてください。
スクリーンショット (77).png

3.GetComponentを用いてアクセスしてみる

Accessスクリプトを以下のように書き換えます。

Access.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Access : MonoBehaviour {

    public GameObject gameobject;

    void Start(){

        //Reseaver 内の number という変数を取得する
        int num = gameobject.GetComponent<Reseaver> ().number;
        Debug.Log (num);

        //Reseaver 内の ReturnAccess という関数を使用する
        gameobject.GetComponent<Reseaver>().ReturnAccess();
    }
}

これでアクセスができたはずです。実行画面を見てみましょう。

スクリーンショット (78).png

コンソール画面に正しく出力されましたね。アクセス成功です。

最後に

今回はGetComponetを用いることで
1. gameobjectにアクセス
2. gameobjectのコンポーネントの一つであるスクリプトにアクセス
3. スクリプト内の変数/関数にアクセス
の順でアクセスしました。

この方法を選んだ理由は以下の通りです

  • とっつきやすい
  • 二つの事象に対し一つの方法で対処できる
  • 応用がききやすい

めちゃくちゃ使いやすい上に便利なので、是非使ってみてください。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
53
Help us understand the problem. What are the problem?