因此,在我的游戏中,有一杆枪可以喷射子弹,而我试图使gameObject在与子弹碰撞时被摧毁。项目符号基于一个gameObject(胶囊)。到目前为止,我已经尝试了以下两个脚本:
using UnityEngine;
using System.Collections;
public class whenshot : MonoBehaviour {
void OnCollisionEnter(Collision col)
{
if (col.gameObject.name == "Bullet")
{
Destroy(col.gameObject);
}
}
}
和:
using UnityEngine;
using System.Collections;
public class whenshot : MonoBehaviour {
void OnCollisionEnter(Collision col)
{
if (col.gameObject.name == "Bullet")
{
Destroy(this); //the difference between the two is that I changed "col.gameObject" to "this"
}
}
}
我正在拍摄物体,但它并未消失/破坏。我怎样才能解决这个问题?
如果有帮助,请看以下图片:
最佳答案
this
引用调用方(this is basic OOP)的对象实例,即whenshot
,而不是gameObject
。因此,第二个示例实际上是从脚本所附加的Destroy
中gameObject
脚本实例。
第一个脚本在技术上很好,并且可以满足以下条件:
子弹(子弹)或目标(或两者)都附有非运动刚体组件。 (Unity docs.)
两者都具有3D Collider组件。
与目标相撞的每个子弹游戏对象的名称都恰好是“子弹”。
所有弹丸对象都将此脚本作为组件。
一些建议
使用预制件和标签:将您的子弹原语存储为预制件。在预制件上添加一个名为“子弹”的标签。对目标执行相同操作,并将其标记为“目标”。将播放器标记为“玩家”。在“ gunController”中,设置对子弹预制件的引用,并使其在您使用的任何触发器上实例化子弹。在项目符号的脚本中,使用CompareTag("Target")
代替==
并销毁目标gameObject和this.gameObject。
在我看来,以上是您想要的行为。在这种情况下,碰撞与破坏之间不会存在延迟,因此无需模拟任何物理过程。除非您与子弹/目标发生其他物理相互作用,否则将没有刚体的物体标记为触发器。
强烈建议
查看Unity教程。
关于c# - 用子弹射击时物体未被破坏-UNITY3D C#,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37979818/