unity3d 如何从不同的脚本中获取变量?

92vpleto  于 2023-04-07  发布在  其他
关注(0)|答案(2)|浏览(301)

我是Unity的新手,我想访问我在不同脚本中初始化的变量。我如何访问该变量?我使用标记访问该变量。我想访问paddleIsAlive变量。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour
{
    public void Start()
    {
        alive = GameObject.FindGameObjectWithTag("Paddle").GetComponent<PaddleScript>();
    }

    void OnTriggerStay2D(Collider2D collider)
    {  
        if (Input.GetKeyDown("space") && collider.gameObject.tag == "Paddle" && alive.paddleIsAlive == true)
        {
            // Do something
        }
    }
}

即使我在start()中初始化它,也会得到这个错误:

the name alive doesn't exist in the current context
monwx1rj

monwx1rj1#

当创建一个变量时,你必须显式地设置它的类型。因为你想让你的变量alive保持对另一个脚本PaddleScript的引用,所以它的类型应该是PaddleScript

public void Start() {
    PaddleScript alive = GameObject.FindGameObjectWithTag("Paddle").GetComponent<PaddleScript>();
}

然而,如果你这样做,即在Start()方法中声明它,它将只在这个函数中被查看。但是因为你还需要在OnTriggerStay2D()函数中使用它,你必须在任何函数之外声明这个变量,就像这样:

public class NewBehaviourScript : MonoBehaviour
{
   private PaddleScript alive; // Variable declaration

    public void Start()
    {
        alive = GameObject.FindGameObjectWithTag("Paddle").GetComponent<PaddleScript>(); // Variable initializing
    }

    void OnTriggerStay2D(Collider2D collider)
    {  
        if (Input.GetKeyDown("space") && collider.gameObject.tag == "Paddle" && alive.paddleIsAlive == true)
        {
            // Do something
        }
    }
}
eqzww0vc

eqzww0vc2#

如果你想在碰撞器中获取一个脚本,请确保变量为**public**。

public class PaddleScript : MonoBehaviour
{
    public float PaddleLength = 2; // for example..

    public void DoSomething()
    {
        // ..
    }
}

如果上面的脚本连接到你的paddle,你不需要在Start中使用GameObject.Find,只需要使用TryGetComponent

void OnTriggerStay2D(Collider2D collider)
{  
    if (Input.GetKeyDown(KeyCode.Space))
    {
        if (collider.TryGetComponent(out PaddleScript paddle))
        {
            Debug.Log(paddle.PaddleLength); // for ex field..
            paddle.DoSomething(); // for ex method..
        }
    }
}

相关问题