我正在制作一款像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类型。
问题:有没有办法以我计划的方式或任何方式执行此操作?先谢谢!
答案 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是正确的方法。