杂谈(怎样取消某些特定碰撞体的碰撞)(12)

今天遇到一个问题,正常的场景如下
在这里插入图片描述
但是发生了一个问题就是当我点击鼠标,令摄像头向我点击的位置发射射线,如果监测到碰撞体,那么就吧我想要实力化的模型实例出来,但是这就有个问题,我如果在同意个地方点击两次,那么就会发生模型堆积的情况
解决方法:摄像头发射射线的时候,首先检测射线检测到的碰撞题的名字,如果不是各个模型的名字,那就实例化动物模型,否则,不实例化

void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {   
            object ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            bool isHit = Physics.Raycast((Ray)ray, out hit);
            
            int num;
            for(int i = 0; i < 8; i++)
            {
                if(hit.collider.gameObject.name == animals[i].name)
                {
                    judge = 0;
                }
            }
            Debug.Log(hit.transform.name);
            
            if (isHit&&j<8&&judge == 1)
            {      
                num = Random.Range(0, 8);
                Creat(num, hit);    
            }
        }
        judge = 1;

    }

第二个问题,实例化之后,由于动物的碰撞体尺寸太小,所以射线还是可能检测不到动物的碰撞体,从而在一个地方实例化两个动物,
解决方法:蒋碰撞体的x、z尺寸改变,蒋y改变成0,这样的话碰撞体可以平铺整个笑脸,而且还不会发生漏点的地方。
第三个问题:我想要保留动物的碰撞体,但是又怕动物之间的碰撞体过于大发生碰撞:
解决方法:
在物体组件管理器中,在某两个物体是否发生碰撞的界面,把动物之间的碰撞全部取消
在这里插入图片描述
使用这个方法之前,需要添加Layer然后吧动物模型的Layer分别对应上
在这里插入图片描述
至此,今天的问题全部解决!

发布了67 篇原创文章 · 获赞 3 · 访问量 1918

猜你喜欢

转载自blog.csdn.net/lfanyize/article/details/102974645