Unity中如何在If语句内实现按键触发后的延迟功能
Unity按下F键延迟执行操作的实现方案
你的代码里有几个问题导致延迟功能没生效:
- 协程
DelayPrint嵌套在Input.GetKeyDown的代码块里,而且没启动 Start方法写在了类外面,属于语法错误- 没添加播放抹黄油动画的实际逻辑
按下面的方式修改就能实现按下F键后等待3秒播放动画的需求:
首先把协程方法移到类的成员位置,然后在按下F键时启动协程,最后在协程延迟后执行动画播放操作。修正后的完整代码如下:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Toast : MonoBehaviour { Ray ray; RaycastHit raycastHit; public Camera cam; public GameObject ButterIt; // 根据你的动画类型替换,比如用Animator组件 public Animator butterAnimator; void Start() { cam = GetComponent<Camera>(); } void Update() { ray = new Ray(transform.position, transform.forward * 100); if (Physics.Raycast(ray, out raycastHit)) { if (raycastHit.transform.tag == "Death") { ButterIt.SetActive(true); if (Input.GetKeyDown(KeyCode.F)) { Debug.Log("Stop Touching My Junk You Pervert! - Tickle Me Bender"); // 启动延迟协程 StartCoroutine(DelayPlayButterAnimation()); Debug.Log("WEE WOO WEE WOO - Patrick"); } } else { ButterIt.SetActive(false); } } } // 定义延迟执行的协程方法 IEnumerator DelayPlayButterAnimation() { // 等待3秒 yield return new WaitForSeconds(3f); // 执行播放抹黄油动画的逻辑,这里以Animator为例 if(butterAnimator != null) { butterAnimator.Play("ButterAnimation"); // 替换成你的动画状态名 } Debug.Log("已播放抹黄油动画"); } }
关键修改点说明:
- 把协程改成类的成员方法,不再嵌套在Update代码块内
- 用
StartCoroutine()启动协程,这是Unity实现延迟逻辑的标准方式 - 替换
Input.GetKeyDown("f")为更规范的KeyCode.F - 添加了动画播放的示例逻辑,你可以根据实际使用的动画组件(Animation/Animator)调整代码
- 修正了
Start方法的位置,移到类内部
内容的提问来源于stack exchange,提问作者Leon
相关产品推荐
相关产品推荐

