您的位置:首页 > 移动开发 > Unity3D

2D游戏获得子节点的最小最大位置

2016-04-20 21:12 447 查看
以下代码我是用在编辑器中的,因为递归比较耗嘛。

代码思路:

1.检测矩形碰撞区,图片,粒子的宽度,再根据子节点位置算出两边的最大最小位置。

2.该节点宽度为width = max-min。

private void GetMinMaxPos( Transform node, ref float minValue,ref float maxValue ) {
ParticleSystem particle = null;
SpriteRenderer render = null;
var boxCollder = node.GetComponent<BoxCollider2D>();
float minPos = float.MaxValue;
float maxPos = float.MinValue;
if( boxCollder != null ) {//该节点包含矩形碰撞体
minPos = boxCollder.size.x;
}
else {
render = node.GetComponent<SpriteRenderer>();
if( render != null ) {//该节点包含图片
minPos = render.bounds.size.x;
}
else {
particle = node.GetComponent<ParticleSystem>();
if( particle != null ) {//该节点包含粒子
minPos = particle.startSize;
}
}
}

if( minPos != float.MaxValue && minPos != float.MinValue ) {
maxPos = minPos;
//min
minPos = node.position.x - minPos * node.lossyScale.x * 0.5f;
if( minPos < minValue )
minValue = minPos;

//max
maxPos = node.position.x + maxPos * node.lossyScale.x * 0.5f;
if( maxPos > maxValue )
maxValue = maxPos;
}

var c = node.childCount;
if( c <= 0 )return;
for( int i = 0; i < c; i++ ) {
GetMinMaxPos( node.GetChild( i ), ref minValue, ref maxValue );
}
}


以上代码具体说是获得x轴的最大最小位置,而y轴也是一样的写法。上面的代码在我的项目中有很大的作用,我做的是一款横版跑酷游戏,障碍和背景移动而主角不动。这样我就可以根据每种障碍的宽度和离主角的位置来精确地打开和关闭碰撞体,做到很大程度的优化。还可以控制每个障碍生成的间距。做到不管障碍物有多大多长,都能准确地控制生成时机和间距。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息