如何从 Unity 中的另一个脚本访问变量?

How can I access a variable from another script in Unity?

我希望能够在另一个脚本中使用一个脚本中的变量。我的目标是允许我引用 particleScale 变量并使用它来影响连接到第二个脚本的对象的大小。我也想稍后从其他脚本中引用其他变量。每个对象还将有多个实例。这是我的第一个脚本;

public class Particle : MonoBehaviour
{
    
    public float particleSize;
    public Transform particle;

    void Start()
    {
        particle.localScale *= particleSize;
    }
}

这是我的第二个;

public class Magnetic : MonoBehaviour
{
    
    public Transform magnetic;

    void Start()
    {
        magnetic.localscale *= Particle.particleSize;
    }
}

求助!

试试这个:

public class Particle : MonoBehaviour
{
    public static Particle instance;
    public float particleSize;
    public Transform particle;

    void Awake()
    {
      instance = this;
    }
    void Start()
    {
        particle.localScale *= particleSize;
    }
}


public class Magnetic : MonoBehaviour
{
    
    public Transform magnetic;

    void Start()
    {
        magnetic.localscale *= Particle.instance.particleSize;
    }
}

有几种方法可以做到,

  1. 使用 FindObjectOfType()
public class Magnetic : MonoBehaviour
{
    public Transform magnetic;
    Particle particle

    void Start()
    {
        particle = FindObjectOfType<Particle>();
        magnetic.localscale *= particle.particleSize;
    }
}
  1. 使用单例模式(仅当您只需要一个粒子类型的对象时)
public class Particle : MonoBehaviour
{
    public static Particle Instance;
    public float particleSize;
    public Transform particle;

    void Awake() {
        if (Instance != null) {
          Destroy(gameObject);
        } else {
          Instance = this;
        }
    }
    void Start()
    {
        particle.localScale *= particleSize;
    }
}

然后 class 将从 Particle.Instance 全局访问,因此您可以使用它的任何 public 方法,或者在您的情况下 Particle.Instance.particleSize