You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity复刻Stickman Hook:圆形对象批量变色功能异常排查

问题排查与修复:Stickman Hook复刻中最近圆形高亮问题

你的代码存在两个核心逻辑错误:

  • 遍历过程中提前修改颜色,此时还未确定最终的最近点,导致颜色被反复覆盖,最终只有最后一个被遍历的点可能生效
  • 第二个判断里错误操作了closestPointSprite(当前临时认定的最近点),而不是当前遍历的point的SpriteRenderer,完全搞反了修改对象

正确的做法应该分两步:

  1. 先遍历所有圆形,找到真正距离最近的那个,这一步只记录结果,不修改颜色
  2. 再次遍历所有圆形,把最近的设为紫色,其余设为白色

修复后的代码:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 06:57:14