优质中文开源软件代码项目资源技术共享平台
传播开源的理念,推广开源项目
风雨总会过去,阳光定会到来,河南加油!

网站首页 游戏开发 正文

Unity3D研究院之自动计算所有包围盒的中心点(七)

longtao100 2021-08-30 游戏开发 78 ℃ 0 评论

美术在做场景的时候可能会出现这个情况? 如下图所示,这个地块的中心点远离模型十万八千里?与其相信美术或者策划我觉得程序要更相信自己!!

 

 
C#  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 
[ MenuItem   ( "MyMenu/Do Test" ) ]      
static   void   Test   ( )        
{      
Transform  parent   =   Selection . activeGameObject . transform ;      
Vector3  postion   =   parent . position ;      
Quaternion  rotation   =   parent . rotation ;      
Vector3  scale   =   parent . localScale ;      
parent . position   =   Vector3 . zero ;      
parent . rotation   =   Quaternion . Euler ( Vector3 . zero ) ;      
parent . localScale   =   Vector3 . one ;      
 
 
Vector3  center   =   Vector3 . zero ;      
Renderer [ ]   renders   =   parent . GetComponentsInChildren < Renderer > ( ) ;      
foreach   ( Renderer  child  in   renders ) {      
center   +=   child . bounds . center ;           
}      
center   /=   parent . GetComponentsInChildren < Transform > ( ) . Length ;        
Bounds  bounds   =   new   Bounds ( center , Vector3 . zero ) ;      
foreach   ( Renderer  child  in   renders ) {      
bounds . Encapsulate ( child . bounds ) ;           
}      
     
parent . position   =   postion ;      
parent . rotation   =   rotation ;      
parent . localScale   =   scale ;      
 
foreach ( Transform   t   in   parent ) {      
t . position   =   t . position   -    bounds . center ;      
}      
parent . transform . position   =   bounds . center   +   parent . position ;      
 
}      
 

OK 大功告成。 中心点居中了。。


Tags:Unity3D

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

请填写验证码
开源分类
最近发表
开源网标签
开源网归档