Unity复刻Stickman Hook:圆形对象批量变色功能异常排查
问题排查与修复:Stickman Hook复刻中最近圆形高亮问题
你的代码存在两个核心逻辑错误:
- 遍历过程中提前修改颜色,此时还未确定最终的最近点,导致颜色被反复覆盖,最终只有最后一个被遍历的点可能生效
- 第二个判断里错误操作了
closestPointSprite(当前临时认定的最近点),而不是当前遍历的point的SpriteRenderer,完全搞反了修改对象
正确的做法应该分两步:
- 先遍历所有圆形,找到真正距离最近的那个,这一步只记录结果,不修改颜色
- 再次遍历所有圆形,把最近的设为紫色,其余设为白色
修复后的代码:
void FindClosestPoint() { float DistanceToClosestPoint = Mathf.Infinity; GameObject closestPoint = null; GameObject[] points = GameObject.FindGameObjectsWithTag("Swing"); // 第一步:找到最近的点 foreach (GameObject point in points) { float DistanceToPoint = (point.transform.position - tf.position).sqrMagnitude; if(DistanceToPoint < DistanceToClosestPoint) { DistanceToClosestPoint = DistanceToPoint; closestPoint = point; } } // 处理空数组情况,避免空引用错误 if(points.Length == 0 || closestPoint == null) return; // 第二步:统一设置颜色 foreach (GameObject point in points) { SpriteRenderer sprite = point.GetComponent<SpriteRenderer>(); sprite.color = point == closestPoint ? Color.magenta : Color.white; } }
内容的提问来源于stack exchange,提问作者Jonathan
相关产品推荐
相关产品推荐

