我正在使用团结来开发我的游戏。我创造了一个简单的比赛就像足球一样,在进球后球应该被摧毁,然后重新出现在原来的位置。
我已将此脚本附加到目标对象。
public GameObject ball;
Vector3 ballPosition = new Vector3 (4.51f,0.10f,-3.78f);
void OnTriggerEnter(Collider other)
{
StartCoroutine ("RespwanBall");
}
IEnumerator RespwanBall() {
GameObject clone = (GameObject)Instantiate (ball, ballPosition, Quaternion.identity) as GameObject;
Destroy (ball.gameObject);
yield return null;
}
但它只是第一次有效。然后在第二次销毁后,它会给出一个错误,说明该对象已被删除,并且您正在尝试访问已删除的对象或类似的东西。如果我在OntriggerEnter
函数中使用destroy函数,它会在第一次碰撞时产生相同的错误。
我该怎么办?请帮助。
THANKYOU。
答案 0 :(得分:1)
您正在尝试访问已删除的对象,因为您已将脚本附加到目标并且您始终删除球,并且您的克隆永远不会成为球(因此它始终是相同的球)。
如果它附加到球上,你的脚本就会起作用,因为在这种情况下ball
本身就是这样,因此在主动球中总是会激活销毁方法。
如果您想将其附加到目标,请确保将您的克隆更新为活动球:
IEnumerator RespwanBall() {
Destroy (ball.gameObject);
ball = (GameObject)Instantiate (ball, ballPosition, Quaternion.identity);
yield return null;
}
此外,BlueRaja的评论是您可以用来改进代码的重要内容:
ball.GameObject
可能只是ball
,因为ball
是GameObject
; 答案 1 :(得分:0)
You can try respawning the object by using this script -
using UnityEngine;
using System.Collections;
public class copy : MonoBehaviour
{
[SerializeField]
private GameObject prefab = null; // assign Cube prefab to this in Editor
void Start()
{
// no need for a local prefab variable, nor a call to Resources.Load();
for (int i = 0; i < 4; ++i)
{
Instantiate(prefab, new Vector3(0, i * 10, 0), Quaternion.identity); // you can directly assign position in Instantiate
}
}
}