c# - 我的触发器对撞机触发,但里面的 if 语句不起作用
问题描述
我有一个敌人,有两个对撞机(一个盒子和一个球体),都被IsTrigger
激活了。实际敌人的游戏对象是一个 Empty,在它下面是我的网格和另一个用于实例化射击的 Empty Object(所以 Empty "ufo" > ufo mesh, Empty "SpawnShot")。
现在,我希望敌人进入一个有盒子对撞机(也是IsTrigger
激活了选项的触发器)并带有标签的区域后开始射击Boundary
。
附加到我的敌人的代码如下所示:
//Public variables
public float speed, frequency, magnitude;
public GameObject shot;
public Transform shotSpawn;
public float fireRate;
//Private variables
private float nextFire;
private bool startFire = false;
private Vector3 pos;
void Start ()
{
pos = transform.position;
}
void Update ()
{
//Sine movement
pos += transform.forward * Time.deltaTime * -speed;
transform.position = pos + transform.up * Mathf.Sin (Time.time * frequency) * magnitude;
//Fire
if (startFire && Time.time > nextFire) {
nextFire = Time.time + fireRate;
Instantiate (shot, shotSpawn.position, shotSpawn.rotation);
}
}
void OnTriggerEnter (Collider other)
{
Debug.Log ("hello im the ufo trigger");
if (other.gameObject.CompareTag ("Boundary")) {
startFire = true;
Debug.Log ("Boundary and boolean is " + startFire);
}
}
我在没有布尔值的情况下对其进行了测试,以查看是否是拍摄本身的问题,但这确实有效。我已经用 Debugs 测试了这些行,唯一没有调试的是OnTriggerEnter
函数内部的 if 语句。所以它确实触发了,但它没有进入 if 语句。
我检查了 100 次,是否所有内容都已标记,并且触发选项是否已激活。我不知道怎么了!
PS:不明飞行物移动,唯一不工作的是火。
编辑:所以我刚刚添加了另一个 if 语句,这个确实有效(??),我改变了这样的功能:
void OnTriggerEnter (Collider other)
{
Debug.Log ("hello im the" + other.gameObject.name + "-" +
other.gameObject.tag + "trigger");
if (other.gameObject.name == "Boundary") {
startFire = true;
Debug.Log ("Boundary and boolean is " + startFire);
}
if (other.gameObject.CompareTag ("player_shot")) {
Destroy(this.gameObject);
}
}
即使将其与名称而不是标签进行比较,它仍然无法正常工作。当我的玩家开火时,敌人被摧毁,所以对撞机正在工作,但不是第一个 if 语句
解决方案
推荐阅读
- c# - 刷新页面 PopAsync()
- lua - var 中的 var = var 中的 var + 1
- c++ - 使用 std::hash
对于自定义类 - javascript - 从 Vue 中添加 Google 跟踪代码管理器(在获得同意后)
- java - 使用 Spring Kafka 编写的单元测试 Kafka Consumer
- sql - 创建具有较小存储桶的新 SQL 列(基于文本,而不是数字)
- jquery - showIn 导致表单验证
- php - index.php 页面未加载到 GCE VM 实例的主域上
- python - 将 Pandas 数据框的索引拆分为单独的列
- .net - .Net 控制器接收和处理提交的 PDF 的操作