四叉树碰撞检测优化(内含源码)

关于四叉树的碰撞检测的原理我就不在这里说了,游戏中也有普通检测和开启四叉树检测开关,有兴趣可以自己对比看下(尤其是在node这个prefab在加一个labe然后就非常明显),性能确实提少不少,废话不多说直接上源码Collision-master.zip (238.2 KB)

23赞

好强的优化。

1赞

卧槽 惊现引擎组大佬

虽然说四叉树好用,但是引擎自带碰撞是成对检测的,每一对节点只会检测一次,所以100个节点以下的时候普通检测效率没有你写的差那么多。

normalCheck() {

    for (let node of this.nodes) {

        node.getComponent("Node").setIsCollision(false)

        node.isCheck = false;

        // this.tree.insert(node);

    }

    for (let i = 0; i < this.nodes.length; i++) {

        let node = this.nodes[i]

        for (let j = 0; j < this.nodes.length; j++) {

            let targetNode = this.nodes[j]

            if (targetNode === node || targetNode.isCheck) continue

            let isCollison: any = targetNode.getBoundingBoxToWorld().intersects(node.getBoundingBoxToWorld())

            if (isCollison) {

                node.getComponent("Node").setIsCollision(isCollison)

                targetNode.getComponent("Node").setIsCollision(isCollison)

            }

        }

        node.isCheck = true;

    }

}

感谢分享!

大佬牛逼,感谢分享~

good job!

这个帧率应该还算一般吧?我自己写的在我电脑上测试都要比这个高50%的帧率

人家是把cpu放慢6倍执行

一样的前置条件

大佬牛逼!

分享一下呗

直接去插件商店搜吧,我的性能比那个还要差一点

谢谢前辈公布源码

mark!!!

试了下 ,好像还没有官方的BoxCollider效率高…

上图为四叉树,下图用的BoxCollider,还是要感谢4叉树源码.

感谢分享,学习学习

腻害~腻害~学习了

这种双循环检测算法是有问题的,检测累赘了
比如说3个节点检测碰撞
你是进行3*3=9次的循环检测
而事实上只需要检测三次就可以
即1和2、1和3、2和3检测是否碰撞即可

不过我想题主重点是分享四叉树,感谢分享,学习了