Unity3D中按下E键触发动画失效问题求助
问题分析与修复方案
你的代码因标签判断逻辑倒置,导致玩家进入Trigger后无法启动等待按键的协程,最终按下E键没有动画反馈。
核心问题点
在OnTriggerStay和OnTriggerExit方法中,你写了if (!other.CompareTag("LookTrig")),这个逻辑意味着:当接触的物体不是玩家(带LookTrig标签)时,才显示提示并直接返回。这就导致真正的玩家进入Trigger时,跳过了协程启动的代码,自然无法响应E键触发动画。
修复后的完整代码
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Fixedpress : MonoBehaviour { public Animator Tributton; public GameObject GM; private Coroutine routine; private void Start() { GM.SetActive(false); } private void OnTriggerStay(Collider other) { // 仅当接触的是玩家(LookTrig标签)时,才执行交互逻辑 if (!other.CompareTag("LookTrig")) { return; } GM.SetActive(true); // 防止重复启动协程 if (routine != null) StopCoroutine(routine); routine = StartCoroutine(WaitForKeyPress()); } private IEnumerator WaitForKeyPress() { // 等待E键按下 yield return new WaitUntil(() => Input.GetKeyDown(KeyCode.E)); // 触发动画 Tributton.SetTrigger("Fiveyon"); Debug.Log("Fiveyon!"); // 如需禁止重复触发,保留以下代码 // enabled = false; } void OnTriggerExit(Collider other) { if (!other.CompareTag("LookTrig")) { return; } // 退出Trigger时停止协程并关闭提示 if (routine != null) { StopCoroutine(routine); } GM.SetActive(false); } }
关键修改说明
- 调整标签判断逻辑:仅当接触的物体是玩家(LookTrig标签)时,才显示提示并启动协程,其他物体进入Trigger直接跳过处理。
- 修正提示显示时机:将
GM.SetActive(true)移到玩家标签判断通过后的逻辑中,确保只有玩家靠近时才显示选中提示。 - 统一退出逻辑:退出Trigger时,仅当是玩家离开才关闭提示并停止协程。
内容的提问来源于stack exchange,提问作者Cyber studios
相关产品推荐
相关产品推荐

