我正在尝试创建对名为Ball
的对象的多个引用,以便在进行此类操作时屏幕上会有多个球。但是,我似乎无法弄清楚如何做到这一点。以下是我试图实现这一目标的方法:
private GameObject reference;
private Ball[] ballArray;
void Start () {
reference = GameObject.FindGameObjectWithTag("ball");
ballArray = new Ball[amountOfBalls - 1];
start = false;
for (int i = 0; i < ballArray.Length + 1; i++)
{
ballArray[i] = Instantiate(reference);
print("Initialized: " + (i + 1) + " times.");
}
}
当我这样做时,我收到以下错误
Cannot implicitly convert type 'UnityEngine.GameObject' to 'Ball'
但是,如果我将ballArray
的类型更改为Object
它可以正常工作并且不会出现任何错误,但是如果它是类型的话我无法访问Ball
的方法Object
。我需要这些方法。
问题:我如何才能完成这项工作并仍然可以访问我的Ball
类方法?
这是一个进一步明确我需要做什么的例子
void Update () {
for (int i = 0; i < ballArray.Length + 1; i++) {
if (ballArray[i].isOffScreen()) {
print("Ball #" + (i+1) + " is off screen");
}
}
}
我需要能够从isOffScreen
类访问Ball
方法。
感谢先进的任何帮助!
答案 0 :(得分:2)
将GameObject实例化并存储到临时GameObject,然后使用GetComponent
获取附加到其上的Ball脚本的实例。
for (int i = 0; i < ballArray.Length; i++)
{
GameObject tempObj = (GameObject)Instantiate(reference);
ballArray[i] = tempObj.GetComponent<Ball>();
}
这解决了
无法隐式转换类型&#39; UnityEngine.GameObject&#39;到&#39; Ball&#39;
错误。
您的上一个问题已得到纠正。请停止这样做:ballArray = new Ball[amountOfBalls - 1];
。简单做ballArray = new Ball[amountOfBalls];
要获取更新代码,请使用以下代码:
void Update () {
for (int i = 0; i < ballArray.Length; i++)
{
if (ballArray[i].isOffScreen()) {
print("Ball #" + (i+1) + " is off screen");
}
}
}
请注意,我从两个代码块中删除了所有for (int i = 0; i < ballArray.Length + 1; i++)
,并将其替换为for (int i = 0; i < ballArray.Length; i++)
。这是正确的方法。
答案 1 :(得分:1)
您可以将ballArray的数据类型更改为
List<GameObject> ballArray = new List<GameObject>();
所以要调用isOffScreen方法,
ballArray[i].getComponent<Ball>().isOffScreen()
<强>更新强>
结束结果
private GameObject reference;
private List<GameObject> ballArray;
void Start()
{
reference = GameObject.FindGameObjectWithTag("ball");
ballArray = new List<GameObject>();
start = false;
for (int i = 0; i < amountOfBalls; i++)
{
ballArray.Add(Instantiate(reference));
print("Initialized: " + (i + 1) + " times.");
if (ballArray[i].GetComponent<Ball>().IsOffScreen())
{
print("Ball #" + (i + 1) + " is off screen");
}
}
}