c# – Unity3d – 获取旋转对象的GameObject高度

我想获得GameObject的高度.我尝试过:
this.GetComponent<MeshRenderer>().bounds.size.y

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

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

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

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

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

解决方法

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

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

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

例1:

CapsuleCollider m_Collider = GetComponent<CapsuleCollider>();
var height = m_Collider.height  * transform.localScale.y;

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;

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

希望其中一个适合你.

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

相关文章

前言 本文记录unity3D开发环境的搭建 unity安装 unity有中文...
前言 有时候我们希望公告牌跟随镜头旋转永远平行面向屏幕,同...
前言 经过一段时间的学习与实际开发,unity3D也勉强算是强行...
前言 在unity中我们常用的获取鼠标点击的方法有: 1、在3D场...
前言 在之前的例子中,我们都没有用到unity的精髓,例如地形...
这篇文章将为大家详细讲解有关Unity3D中如何通过Animator动画...