Unity中如何获取不受位姿影响的3D物体真实尺寸?
解决Unity物体尺寸获取不受位姿影响的问题
问题核心在于你用了世界空间下的包围盒尺寸(renderer.bounds.size),当物体旋转时,世界包围盒会根据物体的朝向重新计算,自然会改变数值。要实现仅缩放时尺寸变化,需要基于物体本地空间的原始尺寸来计算。
修正方案
- 提前获取模型的原始本地尺寸(不受位姿影响,仅和模型本身有关)
- 每次仅用
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
相关产品推荐
相关产品推荐

