Unity3d - 获取旋转对象的GameObject高度

Adr*_*sku 6 c# unity-game-engine

我想获得GameObject的高度.我尝试过:

this.GetComponent<MeshRenderer>().bounds.size.y
Run Code Online (Sandbox Code Playgroud)

但边界的问题是它只适用于静态对象.如果你有一个移动的物体,并且如果物体的旋转没有完全对齐,那么边界(高度)就不再准确了,因为它返回了一个正方形边界的高度,如果你像一块板一样倾斜一个物体边界高度不准确对象的高度.

它是一个轴对齐的边界框(也称为"AABB").

请检查我附加的图像,在那里你可以看到移动物体的问题,如果你旋转它们的高度不再准确.

在此输入图像描述

有没有其他人有这种问题?

关于如何准确获得物体高度的任何建议?

Tyl*_*per 5

一种选择是使用Game Object的Collider.

您可以相对轻松地找到对撞机的高度和宽度,这是您可以测量游戏对象尺寸的一种方法.对撞机,例如游戏对象上的盒子对撞机,将必须完全包围该对象.您可以执行此操作来调整对撞机的大小,直到它紧紧包裹您的游戏对象.然后,当您想要找到对象的某个维度而不是在对撞机上找到该维度并乘以Game Object的transform.scale时.

以下是我测试过的一些例子.

例1:

CapsuleCollider m_Collider = GetComponent<CapsuleCollider>();
var height = m_Collider.height  * transform.localScale.y;
Run Code Online (Sandbox Code Playgroud)

https://docs.unity3d.com/ScriptReference/CapsuleCollider-height.html

要么

例2:

   BoxCollider m_Collider = GetComponent<BoxCollider>();
   var height = m_Collider.size.y  * transform.localScale.y;
   var width = m_Collider.size.x  * transform.localScale.x;
   var breadth = m_Collider.size.z  * transform.localScale.z;
Run Code Online (Sandbox Code Playgroud)

https://docs.unity3d.com/ScriptReference/BoxCollider-size.html

希望其中一个适合你.

如果没有,那么您可以找到高度的第二个不方便的方法是在对象的顶部和底部创建2个代理对象作为子对象.然后找到它们之间的标量距离.