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

如何使用sqrMagnitude在Unity物体周围显示匹配的检测半径

问题修正方案
  • 变量引用错误:代码中声明了objectToFind变量,但实际调用GameObject.FindWithTag时赋值给了未定义的obj1,运行会直接抛出空引用异常
  • 距离检测逻辑错误:sqrMagnitude返回的是两点距离的平方值,原代码直接和radius * 1.75对比逻辑完全错误,要实现「实际距离小于radius」的判断,应该和radius * radius对比
  • 半径显示缩放错误:默认的2D圆Sprite、3D平面/球体的原始大小为直径1单位,要对应半径为radius的实际范围,缩放值应该是2 * radius而非直接用radius赋值
  • 性能问题:GameObject.FindWithTag每帧调用会产生不必要的性能消耗,无动态生成需求的话应该放到Start方法中执行一次即可

修正后代码

public class ObjectFinder : MonoBehaviour
{
    public GameObject player;
    private GameObject objectToFind;
    public GameObject objectRadius;
    // 检测半径,单位为米
    public float radius;
    // 缓存半径平方,避免每帧重复计算
    private float _radiusSqr;

    void Start()
    {
        // 只在初始化时查找一次目标物体
        objectToFind = GameObject.FindWithTag("ObjectFind");
        // 预计算半径平方
        _radiusSqr = radius * radius;
        // 初始化半径显示的大小,不需要每帧更新除非radius运行时动态修改
        UpdateRadiusDisplay();
    }

    void Update()
    {
        // 如果需要运行时动态修改radius,打开下面两行的注释
        // _radiusSqr = radius * radius; 
        // UpdateRadiusDisplay();
        
        float distanceSqr = (objectToFind.transform.position - player.transform.position).sqrMagnitude;
        if (distanceSqr < _radiusSqr)
        {
            Debug.Log("Object Found");
        }
        else
        {
            Debug.Log("Object out of range");
        }
    }

    // 更新半径显示的大小
    void UpdateRadiusDisplay()
    {
        // 原始可视化对象默认直径为1单位,缩放为2*radius对应直径2*radius,半径匹配设置值
        objectRadius.transform.localScale = new Vector3(radius * 2, radius * 2, 1f);
    }
}

如果需要保留原有代码中的1.75倍检测范围放大系数,只需修改半径平方计算逻辑为 _radiusSqr = (radius * 1.75f) * (radius * 1.75f);,显示的半径大小也可以同步调整为radius * 1.75f * 2来匹配实际检测范围

注意事项

  • 如果你的可视化半径对象原始大小不是直径1单位,根据实际原始尺寸调整缩放系数即可
  • 如果目标物体是动态生成/销毁的,可以在生成时主动赋值给objectToFind变量,避免频繁调用查找方法
  • 2D项目可以把距离计算换成Vector2的sqrMagnitude,减少不必要的z轴计算

内容的提问来源于stack exchange,提问作者Dustin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:06:04