Unity 中的对象不会触发,尽管碰撞器和代码是正确的
Object in Unity won't trigger, although the colliders and code are correct
近一个星期以来,我一直在测试 Unity 制作游戏的能力。问题如下:
我在玩家周围有一个敌人和一个圆圈,它们都有一个 IsTrigger 处于活动状态的对撞机。在代码中,有一个针对敌人的 OnTriggerEnter 和 OnTriggerExit 事件。如果敌人进入玩家的圈子,则 bool 变为 true 并且应该发生其他事情。但只有这种情况发生:
敌人直接进入玩家内部,然后 bool 才变为真(我测试了很多次,就是这样)即使玩家本身没有对撞机,只有它周围的圆圈(玩家当然有一个角色控制器,但这不可能是触发器,对吗?)
敌人有一个简单的 AI,并且总是走向玩家的方向,所以也许只有当他在那里时才会触发。因为这似乎发生了什么。代码就在这里:
public GameObject thePlayer;
public GameObject theEnemy;
public float enemySpeed = 0.01f;
public bool attackTrigger = false;
public bool isAttacking = false;
void Update () {
transform.LookAt(thePlayer.transform);
if (attackTrigger == false)
{
enemySpeed = 0.01f;
theEnemy.GetComponent<Animation>().Play("walk");
transform.position = Vector3.MoveTowards(transform.position, thePlayer.transform.position, enemySpeed);
}
if (attackTrigger == true && isAttacking == false)
{
enemySpeed = 0;
theEnemy.GetComponent<Animation>().Play("attack");
StartCoroutine(InflictDamage());
}
}
void OnTriggerEnter()
{
attackTrigger = true;
}
void OnTriggerExit()
{
attackTrigger = false;
}
IEnumerator InflictDamage()
{
isAttacking = true;
yield return new WaitForSeconds(1.1f);
GlobalHealth.currentHealth -= 5;
yield return new WaitForSeconds(0.2f);
isAttacking = false;
}
此代码实际上属于 Jimmy Vegas。我正在从他的 YouTube 教程中学习,在他的视频中效果很好。这就是为什么我很困惑。
编辑:敌人无视我的玩家。即使我将对撞机添加到播放器本身,它也不会触发。如果我关闭了敌人的 IsTrigger,他就会让我出故障。我不知道这是什么。
在编辑器中不要对两者使用 isTrigger objects.Use 它只对一个使用。
尝试使用 void OnTriggerEnter(Collider collider){ ... }
函数。
https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnTriggerStay.html
" 仅当其中一个对撞机还附加了刚体时才会发送触发事件"
两个游戏对象都必须包含一个 Collider 组件。必须启用 Collider.isTrigger,并包含刚体。
近一个星期以来,我一直在测试 Unity 制作游戏的能力。问题如下: 我在玩家周围有一个敌人和一个圆圈,它们都有一个 IsTrigger 处于活动状态的对撞机。在代码中,有一个针对敌人的 OnTriggerEnter 和 OnTriggerExit 事件。如果敌人进入玩家的圈子,则 bool 变为 true 并且应该发生其他事情。但只有这种情况发生: 敌人直接进入玩家内部,然后 bool 才变为真(我测试了很多次,就是这样)即使玩家本身没有对撞机,只有它周围的圆圈(玩家当然有一个角色控制器,但这不可能是触发器,对吗?)
敌人有一个简单的 AI,并且总是走向玩家的方向,所以也许只有当他在那里时才会触发。因为这似乎发生了什么。代码就在这里:
public GameObject thePlayer;
public GameObject theEnemy;
public float enemySpeed = 0.01f;
public bool attackTrigger = false;
public bool isAttacking = false;
void Update () {
transform.LookAt(thePlayer.transform);
if (attackTrigger == false)
{
enemySpeed = 0.01f;
theEnemy.GetComponent<Animation>().Play("walk");
transform.position = Vector3.MoveTowards(transform.position, thePlayer.transform.position, enemySpeed);
}
if (attackTrigger == true && isAttacking == false)
{
enemySpeed = 0;
theEnemy.GetComponent<Animation>().Play("attack");
StartCoroutine(InflictDamage());
}
}
void OnTriggerEnter()
{
attackTrigger = true;
}
void OnTriggerExit()
{
attackTrigger = false;
}
IEnumerator InflictDamage()
{
isAttacking = true;
yield return new WaitForSeconds(1.1f);
GlobalHealth.currentHealth -= 5;
yield return new WaitForSeconds(0.2f);
isAttacking = false;
}
此代码实际上属于 Jimmy Vegas。我正在从他的 YouTube 教程中学习,在他的视频中效果很好。这就是为什么我很困惑。
编辑:敌人无视我的玩家。即使我将对撞机添加到播放器本身,它也不会触发。如果我关闭了敌人的 IsTrigger,他就会让我出故障。我不知道这是什么。
在编辑器中不要对两者使用 isTrigger objects.Use 它只对一个使用。
尝试使用 void OnTriggerEnter(Collider collider){ ... }
函数。
https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnTriggerStay.html
" 仅当其中一个对撞机还附加了刚体时才会发送触发事件"
两个游戏对象都必须包含一个 Collider 组件。必须启用 Collider.isTrigger,并包含刚体。