对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类型。
有没有办法按照我计划的方式或任何方式做到这一点?
您真的不需要使用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