我想创造一些像矿井一样的东西,这意味着会有一个物体,当有人踩到它时,会发生爆炸,踩到的物体会受到伤害。这部分很有效,我已经能够自己弄清楚这种行为。
踩到地雷后,物体会自行消灭。因此"爆炸"它创造了遗骸。更奇怪的是,该矿创造了这次爆炸的多重克隆。这是代码
using UnityEngine;
using System.Collections;
public class Mine : MonoBehaviour {
Transform playerT;
GameObject itself;
// Use this for initialization
void Awake() {
playerT = GameObject.FindGameObjectWithTag ("Player").transform;
}
void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "Monster") {
EnemyHealth enemyHeatlh = other.GetComponent<EnemyHealth> ();
enemyHeatlh.Death ();
PyroExplode Pyro = gameObject.AddComponent("PyroExplode") as PyroExplode;
Pyro.setTransform(transform);
Pyro.Generate ();
Destroy (Pyro.gameObject, 1.6f);
Destroy (this.gameObject, 1.6f);
}
}
}
在这段代码中,我实例化一个新的PyroExplode,设置它的transform属性并在他身上调用方法Generate()。这是Generate()方法:
public void Generate(){
Instantiate ( Resources.Load ("Pyro1"), mineTransform.position, mineTransform.rotation);
}
将加载一个带有动画,球体对撞机和附加脚本的预制件(脚本呈现爆炸效果)。所以,现在当有人踩到矿井时会发生这种情况!
创建了多个克隆。我首先想到的是因为怪物仍在与矿井相撞,因此回想起OnTriggerEnter()事件。我试图在我的OnTriggerEnter()中将我的对撞机的半径设置为0,这样它就不会再碰到其他任何东西,但它没有帮助。另外,正如你所看到的,Pyro并没有被摧毁。我试图在PyroExplode类中调用Destroy来查看它是否有所作为,但它没有。
所以这是我的两个问题:
1-为什么不被销毁?
2-为什么当有什么东西踩到我的地方时会有超过1个Pyro?
答案 0 :(得分:2)
我认为既然你有一个球体对撞机,那么另一个物体在进入时会碰到很多点。考虑两个球体碰撞,为引擎报告碰撞,这两个项目需要重叠。如果您有两个至少有4个接触点的球体,则这四个球体需要进入。与立方体相同。如果对撞机更复杂,可能会有更多的呼叫。
您可以尝试阻止多次通话:
private bool sentinel = false;
void OnTriggerEnter(Collider col){
if(this.sentinel == true){ return; }
this.sentinel = true;
// rest of the code
}