对Unity中的Ball对象的多个引用

本文关键字:引用 对象 Unity 中的 Ball | 更新日期: 2025-04-15 19:14:31

我正在制作一款像乒乓球这样的游戏,带有多个电源。其中之一就是要有一个";三球;通电。我试着创建另一个球的参考,但似乎不起作用。我认为这是可行的,因为我主要使用Java,在那里我可以创建另一个实例。以下是我尝试的方法,我尝试通过点击一个按钮进行测试:

public class TripleBall : MonoBehaviour {
    public Ball firstBall;
    private int amountOfBalls = 2;
    private Ball[] ballArray;
    private bool start, avail, located;
    void Start () {
         ballArray = new Ball[amountOfBalls - 1];
         for (int i = 0; i < ballArray.Length; i++)
              ballArray[i] = new Ball();
    }
    
    // Update is called once per frame
    void Update () {
        if (Input.GetKeyDown(KeyCode.B))
            start = true;
        if (start)
        {
            //Begin locator: Makes it so when the balls spawn they spawn where the first ball
            if (!located) {
                for (int i = 0; i < ballArray.Length; i++)
                {
                    ballArray[i].transform.position = firstBall.transform.position;
                }
                located = true;
            }
        }
    }
}

但我似乎不能这样做,因为Ball属于MonoPhavior类型。

有没有办法按照我计划的方式或任何方式做到这一点?

对Unity中的Ball对象的多个引用

您真的不需要使用new来创建实例。您在代码中唯一正确的位置是使用new初始化数组。之后,您应该使用GameObject.AddComponent来创建一个新实例,而不是使用new关键字。这是因为Ball类派生自MonoBehaviour

Ball类派生自MonoBehaviour

public class Ball : MonoBehaviour
{
}

这是您修复的代码:

   private Ball[] ballArray;
    void Start()
    {
        ballArray = new Ball[amountOfBalls - 1];
        for (int i = 0; i < ballArray.Length; i++)
            ballArray[i] = gameObject.AddComponent<Ball>();
    }

假设您的Ball类看起来像下面的代码,并且不是从MonoBehaviour:继承的

public class Ball
{
}

那么问题中的代码将是有效的,使用new是正确的方法。

您需要使用instance。它是从Unity的Object类派生的,所以假设"ball"继承自Object或GameObject,这就是你想要的。你可以在这里找到更多信息:http://docs.unity3d.com/ScriptReference/Object.Instantiate.html