プログラマーの卵の日記

備忘録になってます!小難しそうなことから超簡単なことまでやってます!!

【Unity】他スクリプトの変数知りたい

構成


No.1 スクリプト内変数を渡しあうオブジェクトを作成する
No.2 渡す用のスクリプトを調整する
No.3 受け取るようのスクリプトを調整する







    No.1 スクリプト内変数を渡しあうオブジェクトを作成する


 とりあえず3DCubeのオブジェクトを二つ作成しときます。

f:id:yutateno:20191031165557p:plain




そうしたらそれぞれのオブジェクトにスクリプトを持たせます。

f:id:yutateno:20191031165606p:plain

 

f:id:yutateno:20191031165616p:plain








    No.2 渡す用のスクリプトを調整する


 渡す用のスクリプトを以下のような感じにしときます。


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

public class GiveScript : MonoBehaviour
{
    private int m_number;

    private const float m_timeOver = 2.0f;
    private float m_timeCount;


    // Start is called before the first frame update
    void Start()
    {
        m_number = 0;
        m_timeCount = 0.0f;
    }

    // Update is called once per frame
    void FixedUpdate()
    {
        m_timeCount += Time.deltaTime;
        if(m_timeCount > m_timeOver)
        {
            m_timeCount = 0.0f;
            m_number++;
        }
    }


    public int GetNumber()
    {
        return m_number;
    }
}

 

publicとして変数を渡すのも良いですが、相手期先で弄られたくないのでゲッターにしときます。もっといろいろしたかったけどまだC#に慣れてないのでこんな感じにしときます。






    No.3 受け取るようのスクリプトを調整する


 次に受け取る側の調整もしときます。
まずはprivateのみで受け取る方法


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

public class ReceiveScript : MonoBehaviour
{
    private GameObject m_give;
    private GiveScript m_giveScript;

    private int m_giveNumber;

    // Start is called before the first frame update
    void Start()
    {
        m_give = GameObject.Find("Give");
        m_giveScript = m_give.GetComponent();

        m_giveNumber = m_giveScript.GetNumber();
        Debug.Log(m_giveNumber);
    }

    // Update is called once per frame
    void Update()
    {
        if (m_giveNumber != m_giveScript.GetNumber())
        {
            m_giveNumber = m_giveScript.GetNumber();
            Debug.Log(m_giveNumber);
        }
    }
}

 

というのが一つのやり方で、次はオブジェクトを渡してもらって中のスクリプトを探してさらにその中のものを探す方法
まず、以下のようなコードを書きます。


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

public class ReceiveScript : MonoBehaviour
{
    public GameObject m_give;

    private int m_giveNumber;

    // Start is called before the first frame update
    void Start()
    {
        m_giveNumber = m_give.GetComponent().GetNumber();
        Debug.Log(m_giveNumber);
    }

    // Update is called once per frame
    void Update()
    {

        if (m_giveNumber != m_give.GetComponent().GetNumber())
        {
            m_giveNumber = m_give.GetComponent().GetNumber();
            Debug.Log(m_giveNumber);
        }
    }
}

 

そうしたらオブジェクトの方に渡すのでUnityの方でちょっと弄ります。

f:id:yutateno:20191031165631p:plain




これで終わり。
自分が知っている方法も今のところこれだけ。