Unity游戏物体尺寸的获取方式与影响因素

来源:互联网 发布:xcalibur for mac 编辑:程序博客网 时间:2024/05/16 05:03

参考文章:

Unity3D 获取一个游戏对象的尺寸

Unity3D 2D入门——sprite尺寸、获取对象

unity与3DMax的单位问题



1、获取父物体时获取自身位置

物体在场景中的实际坐标是自身和所有父对象的坐标相加的结果数值。假设游戏物体的层级是Background -> Deck -> Target,脚本附在target上,代码应该是这样:

  1. Vector3 posTarget = transform.localPosition  
  2.                                   + transform.parent.localPosition  
  3.                                   + transform.parent.parent.localPosition;  


2、获取物体的尺寸

Unity3D中的物体都是以米为单位来计算的,比如 cube的x,y,z初始值都为1米,而plane的x=z=10米,y=0米。

获取尺寸的核心代码:

Vector3 originSize = GetComponent<...>().size;//物体原始尺寸

Vector3 factSize = transform.localScale * originSize;//在unity场景中的实际尺寸


(1)3D物体

一般根据Collider这些碰撞体组件获取尺寸大小。此时GetComponent<xxCollider>().bounds.size;为实际尺寸,可直接使用。

(2)2D物体

一般根据spriteRenderer、meshRederer等组件获取尺寸大小。2D物体需要利用bounds获取原始尺寸,即GetComponent<...>().bounds.size;。



3、影响物体尺寸的因素

(1)首先是3DMax中的系统单位设置。如下图,左边是系统单位,右边是显示单位。

  MAX显示单位_m.jpg

系统单位决定3Dmax系统记录模型实际尺寸的单位,默认为1cm,显示单位决定3DMax主面板显示时使用的尺寸单位,默认为10cm。系统单位与显示单位、模型尺寸共同决定,最终存储时记录的单位值(暂且叫“存储单位”),公式为:存储单位=(模型尺寸/显示单位)*(显示单位/系统单位)。例如:做个1cm的box:显示单位设置为1cm时,系统单位为1cm 存储单位为1,系统单位为0.1mm 存储单位为100(10mm=1cm);做个1m的box:显示单位设置为1cm时,系统单位为1cm 存储单位为100,系统单位为0.1mm 存储单位为10000。

“存储单位”最终会记录到模型文件,Unity3D导入时将按“1存储单位=1m”的比例显示模型。


(2)在模型资源的导入属性中,scale Factor影响着模型的在unity的原始尺寸。表示模型在unity中的尺寸按这个比例进行缩放。

模型导入后一般情况会缩小为1/100,因为导入属性中的scaleFactor默认为0.01。为了实现3DMax导出的模型在导入Unity3D时默认1m=1m,那么我们需要让“存储单位”=100。“存储单位”=(模型尺寸/显示单位)*(显示单位/系统单位),化简为存储单位”=模型尺寸/系统单位,即可理解为存储单位表示模型的尺寸是多少个系统单位大小,与显示单位无关。模型尺寸假设1m,计算出系统单位为1cm。所以在约定不修改scaleFactor情况下,3DMax里系统单位只要设置为cm,则可实现“实现3DMax导出的模型在导入Unity3D时默认1m=1m”。


(3)在图片资源的导入属性中,pixel per unit影响着图片在unity的原始尺寸。这个选项表示:该图片的N个单位(正常情况是像素)=unity中的1个单位(默认是米)。


0 0