Unity CheckBox用法

public static bool CheckBox(Vector3 centerVector3 halfExtentsQuaternion orientation = Quaternion.identity, int layermask = DefaultRaycastLayers, QueryTriggerInteractionqueryTriggerInteraction = QueryTriggerInteraction.UseGlobal);

今天用这个玩意,自己把自己坑了,主要还是因为不熟,记录一下,增强印象!


我使用BoxCollider记录Bounding范围的。

第一个参数,要用BoxCollider所依附的Transform.position+BoxCollider.center获得BoundingBox在世界坐标系内的位置。

第二个参数,需要去BoxCollider的Size的一半,也就是 BoxCollider.size/2

第三个参数,我一开始没搞明白他的意思,填的默认值,后来发现碰撞检测老是不正确,琢磨了半天,如果你只设置一个Box的中点和范围,那么它永远是平行于x,y轴的。

so,这个参数的意义是,box的旋转方向,使之能够跟着物体一起旋转,我试着将BoxCollider所依附的Transform.rotation.获得了正确的结果。

第四个参数就很容易理解了,用来控制检测那些层的物件

最后一个参数是设置是否需要忽略Trigger。


            //Trace Box toward obstacles
            string[] masked_obstacles = { "Default", "Buildings" };
            BoxCollider[] bounds = building_object.BoundingBoxes;
            if( bounds.Length > 0 )
            {
                Vector3 world_pos = bounds[0].transform.position;
                Quaternion rotation = bounds[0].transform.rotation;

                for (int i = 0; i < bounds.Length; i++)
                {
                    if (Physics.CheckBox(world_pos + bounds[i].center, bounds[i].size / 2, rotation, LayerMask.GetMask(masked_obstacles), QueryTriggerInteraction.Ignore))
                    {
                        return EPlaceableObjectState.Conflict;
                    }
                }
            }


如上面代码,我用这种用法来检测,自由建筑系统放置建筑时,建筑是否会和其他物件冲突。

你可能感兴趣的:(Unity)