首页 >Unity3D频道 >【Unity3D拓展编辑器】 > Unity3D研究院之自动计算所有包围盒的中心点(七)
2015
09-09

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

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

Foxmail20150909_1

 

	[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 大功告成。 中心点居中了。。

Snip20150909_1

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!

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

  1. 麻了说:

    谢谢 原本不居中的变得更不居中 遇到牛的模型师了

  2. 奈特说:

    (ΩДΩ) 这到底是什么神仙大神, 小白学到了! 真的好用! (膜拜)

  3. baicai说:

    这有个前提,就是原本父物体坐标必须跟世界坐标统一,不然模型要动,想避免这个问题的话,将旋转的选项从头到尾都去掉,就不影响了。

  4. Elaine说:

    您好,您的方法我试了,没有用啊,不知道是什么原因,结果只是模型移动了,中心点还是不对。

  5. 傻妞说:

    老师你好,想问一下,怎么能在移动平台上屏幕的一部分播放视频,现在是全屏播放

  6. 肖行武说:

    非常好啊 经常碰到这种问题..都是在外面建一个父物体..

留下一个回复

你的email不会被公开。 必填项已用 * 标注。