在我的游戏中有一个球击中硬币然后硬币消失并且粒子系统被初始化。
我的问题是破坏我试图编写的粒子系统
Destroy(effect.gameObject)
但是我收到一条错误消息告诉我游戏对象没有定义。
我的统一版本是4.6.3
帮助将不胜感激。
这是我的代码
public class CoinDestroyer : MonoBehaviour {
public Transform coinEffect;
void OnTriggerEnter (Collider other){
if (other.tag == "Player"){
var effect = Instantiate(coinEffect, transform.position, transform.rotation);
Destroy(effect.gameObject, 3);
Destroy(gameObject);
}
}
}
答案 0 :(得分:2)
Instantiate返回一个Object类型的对象,它是Unity中的顶级类(不是.NET类型)。由于你使用var效果,编译器很好地使效果成为一个Object。但是你需要一个GameObject,因为Object没有gameObject成员。
var effect = (GameObject)Instantiate(coinEffect, transform.position, transform.rotation);
这是使用var而不是强类型变量的危险之一。最好的是:
GameObject effect = (GameObject)Instantiate(coinEffect, transform.position, transform.rotation);
在这种情况下,如果缺少强制转换,编译器将抛出一个错误,抱怨Object不能是GameObject而你需要强制转换。
我只在案例中使用var我对类型有100%的肯定,而且像KeyValuePair<string,List<GameObject>>
那样写得很长,否则,总是正确的类型。
答案 1 :(得分:0)
你得到的错误是因为包含效果的对象被破坏了,我建议你在脚本系统内使用脚本,脚本里面应该用以下脚本给出一生的时间:
lifeTime = 1.0f
void Start() {
Invoke ("SelfDestruct", lifeTime);
}