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

以下代码我是用在编辑器中的,因为递归比较耗嘛。

代码思路:
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轴也是一样的写法。上面的代码在我的项目中有很大的作用,我做的是一款横版跑酷游戏,障碍和背景移动而主角不动。这样我就可以根据每种障碍的宽度和离主角的位置来精确地打开和关闭碰撞体,做到很大程度的优化。还可以控制每个障碍生成的间距。做到不管障碍物有多大多长,都能准确地控制生成时机和间距。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值