在我的游戏中,有一个球击中了一个硬币,然后硬币消失了,一个粒子系统被初始化。
我的问题是破坏我想要写的粒子系统
Destroy(effect.gameObject)但是我收到一条错误消息,告诉我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);
}
}
}发布于 2016-02-07 08:10:58
实例化返回一个类型为Object的对象,它是Unity中的顶级类(而不是.NET类型)。由于您使用var效果,所以编译器可以很好地使对象生效。但是您需要一个GameObject,因为对象没有gameObject成员。
var effect = (GameObject)Instantiate(coinEffect, transform.position, transform.rotation);这是使用var而不是强类型变量的危险之一。最好是:
GameObject effect = (GameObject)Instantiate(coinEffect, transform.position, transform.rotation);在这种情况下,如果转换丢失,编译器将抛出一个错误,抱怨对象不能是GameObject,需要强制转换。
我只在我100%确定类型的情况下使用var,并且像KeyValuePair<string,List<GameObject>>那样编写它是一个很长的过程,否则,总是正确的类型。
发布于 2016-02-10 07:52:20
您所得到的错误是因为包含效果的对象被破坏了,我建议您在脚本内部的粒子系统中使用一个脚本,应该给以下脚本一个生命周期:
lifeTime = 1.0f
void Start() {
Invoke ("SelfDestruct", lifeTime);
}https://stackoverflow.com/questions/35250110
复制相似问题