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

Unity中如何获取不受位姿影响的3D物体真实尺寸?

解决Unity物体尺寸获取不受位姿影响的问题

问题核心在于你用了世界空间下的包围盒尺寸(renderer.bounds.size),当物体旋转时,世界包围盒会根据物体的朝向重新计算,自然会改变数值。要实现仅缩放时尺寸变化,需要基于物体本地空间的原始尺寸来计算。

修正方案

  1. 提前获取模型的原始本地尺寸(不受位姿影响,仅和模型本身有关)
  2. 每次仅用transform.localScale与原始尺寸相乘,得到当前缩放后的实际尺寸

修正后的代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GetSize : MonoBehaviour
{
    public Vector3 size;
    private MeshRenderer _renderer;
    private Vector3 _originalLocalSize; // 存储模型原始本地尺寸

    private void Start()
    {
        _renderer = GetComponent<MeshRenderer>();
        // 获取本地空间下的包围盒尺寸,不受移动、旋转影响
        _originalLocalSize = _renderer.localBounds.size;
    }

    private void Update()
    {
        // 用缩放值乘以原始尺寸,仅缩放变化时size才会改变
        size = Vector3.Scale(_originalLocalSize, transform.localScale);
        Debug.Log(size);
    }
}

关键说明

  • _renderer.localBounds.size:这是模型在自身本地空间的包围盒尺寸,不管物体怎么移动、旋转,这个值都不会变,只有模型本身修改时才会变化。
  • Vector3.Scale:对两个Vector3的对应分量分别相乘,等同于手动计算各轴原始尺寸乘对应缩放值,能准确得到当前缩放后的实际尺寸。
  • 避免在Update中重复调用GetComponent:组件获取只需要一次,放在Start里能减少性能消耗。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 11:40:38