获取模型的实际大小

Unity拓展之获取模型的实际大小和实际中心点

模型的实际大小和中心点计算


public static void GetModelSize(this Transform varTransform,out Vector3 varSize, out Vector3 varCenter)
{
	//记录模型的初始信息
	Vector3 postion = varTransform.postion;
	Quaternion rotation = varTransform.rotation;
	Vector3 scale = varTransform.localScale;
	Transform parent = varTransform.parent;
	//初始化信息(将模型位置,角度,调节至默认大小)
	varTransform.SetParent(null);
	varTransform.postion = Vector3.zero;
	varTransform.rotation = Quaternion.Euler(Vector3.zero);
    varTransform.localScale = Vector3.one;
	
	Renderer[] renders = varTransform.GetComponentsInChildren<Renderer>();
	//排除与粒子特效(ParticleSystem)相关的模型(Renderer)
	List<Renderer> TempRenders = new List<Renderer>();
	for(int i = 0; i < renders.Length; i++)
	{
		if(renders[i].transform .GetCompoent<ParticleSystem>() != null)
			continue;
		TempRenders.Add(renders[i]);
	}
	renders = TempRenders.ToArray();
	//计算模型的实际中心点
	Vector3 center = Vector3.zero;
	foreach(Renderer item in renders)
	{
		center += item.bounds.center;
	}
	center /= renders.Length;
	//计算模型的实际大小
	Bounds bounds = new Bounds(center, Vector3.zero);
	foreach(Renderer item in renders)
	{
		Bounds tempbounds = item.bounds;
		bounds.Encapsulate(tempbounds);
	}
	//恢复模型信息
	varTransform.SetParent(parent);
	varTransform.postion = postion;
	varTransform.rotation = rotation;
	varTransform.localScale = scale;

	varSize = bounds.size;
	varCenter = bounds.center;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值