Unity中对Ball对象的多次引用

时间:2016-05-17 04:40:03

标签: c# unity3d

我正在制作一款像pong这样的游戏,有多个能量提升。其中一个是拥有一个" Triple Ball"充电。我试着创建另一个球的参考,但这似乎不起作用。我认为这样可行,因为我主要使用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;
        }
        //End locator : if statement and loop


    }

}

}

但似乎我无法做到这一点,因为Ball属于MonoBehavior类型。

问题:有没有办法以我计划的方式或任何方式执行此操作?先谢谢!

2 个答案:

答案 0 :(得分:1)

您需要使用实例化。它派生自Unity的Object类,因此假设“ball”继承自Object或GameObject,这就是你想要的。您可以在此处找到有关它的更多信息:http://docs.unity3d.com/ScriptReference/Object.Instantiate.html

答案 1 :(得分:1)

您确实不使用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是正确的方法。