Unity基于玩家手部原点检测方向问题:如何避免同时输出左右与上下
问题修复方案
问题根源
原代码中X轴与Y轴的方向检测是两个独立的判断块,当对象处于左/右方向时,若Y轴坐标的整数部分与玩家手部相等,会同时触发上下方向的打印逻辑,导致输出重复。
修复思路
优先判断X轴的左右方向,仅当X轴几乎处于同一水平线时,再判断Y轴的上下方向,确保同一时刻只输出一个方向。
修复后的代码
public GameObject playersHand; private Transform targetOrigin; private Vector2 targetPos; private Vector2 handPos; void Start() { targetOrigin = transform; // 简化写法,无需this.gameObject.transform } void Update() { handPos = playersHand.transform.position; targetPos = targetOrigin.position; // 计算X轴和Y轴的整数差值 int xDiff = (int)targetPos.x - (int)handPos.x; int yDiff = (int)targetPos.y - (int)handPos.y; // 优先判断左右方向 if (xDiff > 0) { print("Left"); } else if (xDiff < 0) { print("Right"); } // X轴几乎重合时,再判断上下方向 else { if (yDiff > 0) { print("Down"); } else if (yDiff < 0) { print("Up"); } } }
关键修改点
- 调整判断优先级:先处理X轴的左右方向,只有当X轴整数差值为0时,才进入Y轴的上下判断,避免同时触发两个方向的输出。
- 简化逻辑实现:直接计算坐标整数部分的差值,替代原有的
changed函数,逻辑更直观易懂。 - 变量命名优化:将
mypos改为handPos,语义更清晰,便于维护。
内容的提问来源于stack exchange,提问作者UnityPro
相关产品推荐
相关产品推荐

