Unity游戏翻越功能异常:添加Space按键后仅偶尔触发
问题根源
Input.GetKeyDown(KeyCode.Space)仅在按下空格的第一帧返回true,而OnTriggerStay虽每帧执行,但如果按键帧刚好和触发器检测帧错位(比如帧率波动、玩家移动过快导致触发器短暂脱离),就会错过触发时机,这就是成功率极低的原因。
靠谱修复方案
1. 输入检测移至Update(最稳妥)
Update是每帧稳定执行的逻辑,不会错过输入帧。单独维护状态变量标记是否处于可翻越区域:
private bool _canVault = false; private Vector3 _vaultTargetPos; // 提前存储翻越位移参数 private void Update() { // 每帧检查输入+可翻越状态,确保不会漏触发 if (_canVault && Input.GetKeyDown(KeyCode.Space)) { Debug.Log("vaulted"); Player.transform.Translate(_vaultTargetPos); _canVault = false; // 触发后重置状态,避免重复触发 } } private void OnTriggerEnter(Collider other) { // 进入触发器时判断是否可翻越,同时计算好位移参数 var upperTrig = GetComponentInChildren<Vaultupper>().uppertrig; if (!upperTrig) { _canVault = true; _vaultTargetPos = other.transform.position; _vaultTargetPos.y = 0; _vaultTargetPos.Normalize(); _vaultTargetPos *= 2; } } private void OnTriggerExit(Collider other) { // 离开触发器时重置状态 _canVault = false; }
2. 原代码加保险(无需大改结构)
如果不想调整整体逻辑,可在Update中补充一次检测,同时加冷却防止重复触发:
private bool _isVaultOnCooldown = false; private float _vaultCooldown = 0.3f; private void Update() { if (_isVaultOnCooldown) return; // Update中补检测,防止OnTriggerStay漏帧 if (Input.GetKeyDown(KeyCode.Space)) { var upperTrig = GetComponentInChildren<Vaultupper>().uppertrig; // 用球形检测确认脚部是否接触障碍物(需给障碍物加标签) Collider[] hitColliders = Physics.OverlapSphere(transform.position, 0.5f); foreach (var collider in hitColliders) { if (collider.CompareTag("VaultObstacle")) { ExecuteVault(collider.transform.position); break; } } } } private void OnTriggerStay(Collider other) { if (_isVaultOnCooldown) return; var upperTrig = GetComponentInChildren<Vaultupper>().uppertrig; if (!upperTrig && Input.GetKeyDown(KeyCode.Space)) { ExecuteVault(other.transform.position); } } private void ExecuteVault(Vector3 obstaclePos) { Debug.Log("vaulted"); var objectpos = obstaclePos; objectpos.y = 0; objectpos.Normalize(); objectpos *= 2; Player.transform.Translate(objectpos); _isVaultOnCooldown = true; Invoke(nameof(ResetVaultCooldown), _vaultCooldown); } private void ResetVaultCooldown() { _isVaultOnCooldown = false; }
3. 触发器优化辅助
- 调大脚部触发器的碰撞范围,避免玩家快速移动时瞬间进出触发器
- 给头部触发器的
uppertrig变量加0.1秒延迟赋值,防止玩家头部擦到障碍物就误判为不可翻越
内容的提问来源于stack exchange,提问作者匿名用户
相关产品推荐
相关产品推荐

