【Unity】別のスクリプトの値を変更する方法!

f:id:clrmemory:20171119131450j:plain

こんにちはクリアメモリです!

Unityでゲームを作っていると「他のスクリプトを指定して処理を追加」することがよくあります。

 

コードAからコードBを呼び出す時に、コードを書き足さないとエラーが発生してしまうので、今回はその方法を紹介します。

今回の方法は2種類あります。2つのオブジェクトが「同じシーンに存在する場合」と「存在しない場合」でそれぞれ説明します。

 

では早速スクリプトから別のスクリプトを呼び出す方法を見ていきましょう。

 

 

はじめに

 

例えばオブジェクトAで「数を数える処理」があったとして、その処理を「オブジェクトBで変更する」というようなコードの場合、スクリプトが2つになります。

 

そのような時に追加するコードがあります。

まずは、「スクリプトAを追加しているオブジェクト」と「スクリプトBを追加しているオブジェクト」が同じシーン内に存在している場合に使えるコードを紹介します。

 

そのあと、「スクリプトAのオブジェクト」と「スクリプトBのオブジェクト」が別のシーンにある場合のコードを説明します。

 

同じシーンにある場合

 

同じシーン内でスクリプトを取得するには、以下のようなコードを書いてみてください。

using UnityEngine;
using System.Collections;

public class CodeA : MonoBehaviour {
    GameObject ObjectB;
    CodeB codeB;
    // Use this for initialization
    void Start () {
        //Bのスクリプトを取得
        ObjectB = GameObject.Find ("ObjectB");
        codeB = ObjectB.GetComponent ();
    }

    // Update is called once per frame
    void Update () {
        //Bを呼び出す
        codeB.A = 15f;
    }
}
using UnityEngine;
using System.Collections;

public class CodeB : MonoBehaviour {
        public float A;
    void Start(){
        //コードBでの処理を記載
                A = 3f;
    }
}

 

codeBにスクリプトBを入れています。

codeB = ObjectB.GetComponent<CodeB>();

 

Bのコードを取得しているので、あとはcodeB.XXXXで呼び出せば処理を変更することができます。呼び出す型を「public」型にしておかないと表示されないので注意してください。

 

ですが、このコードではオブジェクトBが同じシーン内に存在していない時はエラーが発生してしまいます。

 

同じシーンにない場合

 

先ほどのコードでも取得できるのですが、別シーンにあるコードを呼び出すなら以下のようなコードを使ってください。

CodeB codeB = new CodeB();

 

というように書くだけで「別のシーンにあるオブジェクト」追加されたスクリプトを取得することができます。

 

注意点は「シーンが変わるとUpdate( )内のコードが呼ばれない」という点です。

シーンをまたいでオブジェクトを存在させるにはDontDestroyOnLoadというコードを使えば、実装できます。

 

まとめ

 

今回の方法を使えば、他のオブジェクトに追加されているスクリプトを取得できるよう2なりました。

別のシーンにあるスクリプトを取得する方法も紹介しましたが、こちらはあまり出番がなさそうです。

 

www.clrmemory.com

 

はじめに紹介した方法は、かなりの頻度で使うコードなので是非覚えておいてください。

ではまた。

 

新着記事