C# 统一破坏和怪异行为(多克隆)
我想创造一种类似地雷的东西,这意味着会有一个物体,当有人踩到它时,会发生爆炸,踩到的物体会受到伤害。这部分效果很好,我已经能够自己弄清楚这种行为 踩到地雷后,物体会自行毁灭。因此,它制造的“爆炸”仍留在这里。更奇怪的是,地雷制造了这次爆炸的多个克隆体。这是密码C# 统一破坏和怪异行为(多克隆),c#,unity3d,unity5,C#,Unity3d,Unity5,我想创造一种类似地雷的东西,这意味着会有一个物体,当有人踩到它时,会发生爆炸,踩到的物体会受到伤害。这部分效果很好,我已经能够自己弄清楚这种行为 踩到地雷后,物体会自行毁灭。因此,它制造的“爆炸”仍留在这里。更奇怪的是,地雷制造了这次爆炸的多个克隆体。这是密码 using UnityEngine; using System.Collections; public class Mine : MonoBehaviour { Transform playerT; GameObjec
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);
}
}
}
它将加载一个带有动画、球体碰撞器和附加到其上的脚本的预设(脚本正在渲染爆炸效果)。这就是当有人踩到地雷时发生的事情
创建多个克隆。我最初认为这是因为怪物仍在与矿井发生碰撞,从而回忆起OnTriggerEnter()事件。我已经尝试在OnTiggerEnter()中将碰撞器的半径设置为0,这样它就不会再与任何其他对象碰撞,但这没有任何帮助。而且,正如你所看到的,火焰不会被摧毁。我试着在PyroExplode类中调用Destroy,看看它是否会产生影响,但没有
下面是我的两个问题:1-为什么它不被销毁?
2-为什么有东西踩在地雷上时会有不止一个火焰?
我认为,既然你有一个球体碰撞器,那么另一个物体进入时会在多个点上碰撞。考虑两个球体碰撞,为了使发动机报告碰撞,两个项目需要重叠。如果你有两个球体,至少有4个接触点,那么这四个球体需要进入。立方体也是如此。如果碰撞器更复杂,可能会有更多的调用 您可以尝试阻止多次呼叫:
private bool sentinel = false;
void OnTriggerEnter(Collider col){
if(this.sentinel == true){ return; }
this.sentinel = true;
// rest of the code
}
我认为,因为你有一个球体碰撞器,另一个物体在进入时会在很多点上碰撞。考虑两个球体碰撞,为了使发动机报告碰撞,两个项目需要重叠。如果你有两个球体,至少有4个接触点,那么这四个球体需要进入。立方体也是如此。如果碰撞器更复杂,可能会有更多的调用 您可以尝试阻止多次呼叫:
private bool sentinel = false;
void OnTriggerEnter(Collider col){
if(this.sentinel == true){ return; }
this.sentinel = true;
// rest of the code
}
你的代码有点奇怪。您将在已添加到的组件处添加一个PyroExplode组件,然后将PyroExplode转换设置为Mine转换,这是相同的。最后你摧毁了Pyro.gameobject和Mine.gameobject,它们又是一样的。如果我错了,请纠正我。我将PyroExplode的变换设置为与Mine变换相同,以避免潜在问题,这只是为了确保爆炸源与Mine原点相同(如果有东西落在地雷上并且几米外发生爆炸,这会很奇怪)。我在1.6f后销毁了Pyro和地雷,这是动画的长度(这意味着当爆炸消失时,我移除了Pyro组件和地雷。Pyro组件没有添加到地雷层次结构中,不知怎的,它添加到了场景层次结构中((这是我的屏幕截图上看到的)))在层次结构中看到的Pyro对象是在
Generate
方法中实例化的对象。在代码destroy(Pyro.gameObject)中销毁的一个
和我的是同一个游戏对象。这是因为这个Pyro
var是您在运行时添加到Mine
对象的新组件。看,在这个代码中,PyroExplode Pyro=gameObject.AddComponent(“PyroExplode”)作为PyroExplode您正在将一个新的PyroExplode
组件添加到与地雷
相同的对象中。所以你调用Destroy(Pyro.gameObject)是没有意义的代码>和销毁(这个游戏对象)
。因为该上下文中的Pyro.gameObject
和this.gameObject
是相同的。另一件事,为了确保OnTriggerEnter
不会被多次调用,请在其上放置一个Debug.log
。代码中有一些奇怪的东西。您将在已添加到的组件处添加一个PyroExplode组件,然后将PyroExplode转换设置为Mine转换,这是相同的。最后你摧毁了Pyro.gameobject和Mine.gameobject,它们又是一样的。如果我错了,请纠正我。我将PyroExplode的变换设置为与Mine变换相同,以避免潜在问题,这只是为了确保爆炸源与Mine原点相同(如果有东西落在地雷上并且几米外发生爆炸,这会很奇怪)。我在1.6f后销毁了Pyro和地雷,这是动画的长度(这意味着当爆炸消失时,我移除了Pyro组件和地雷。Pyro组件没有添加到地雷层次结构中,不知怎的,它添加到了场景层次结构中((这是我的屏幕截图上看到的)))在层次结构中看到的Pyro对象是在Generate
方法中实例化的对象。在代码destroy(Pyro.gameObject)中销毁的一个
和我的是同一个游戏对象。这是因为这个Pyro
var是您在运行时添加到Mine
对象的新组件。看,在这个代码中,PyroExplode Pyro=gameObject.AddComponent(“PyroExplode”)作为PyroExplode
您正在将一个新的PyroExplode
组件添加到与地雷
相同的对象中。所以你调用Destroy(Pyro.gameObject)是没有意义的代码>和销毁(这个游戏对象)
。因为该上下文中的Pyro.gameObject
和this.gameObject
是相同的。另一件事,为了确保OnTriggerEnter
不会被多次调用,请在其上放置Debug.log
。