• Unity屏幕射线碰撞


    Layers层:

    从Layers设置看来,最多支持32层.  图层的值开始依次 0^2,1^2, 2^2, 3^3 依次增加.

    当摄像机Culling Mask属性

    Nothing= –1

    Evening = 全部图层之和, 项目开始默认设置了7个图层. 值就是0^2,1^2, 2^2, 3^3 .. 6^2  = 279

    如果我们选择Defulat图层,所在第0位置值 0^2 = 1

    如果我们选择Defualt,Transparent,图层位置0,1 = 0^2+1^2 = 3

     

    组合:

    假设在游戏中出现这种情况: A,B,C 我们需要通过设计一个数字来表示 [A,B,C,AB,AC,BC] 这6中组合,  我们只需要把A=0,B=1,C=2. 根据数字的^2方

    A = 0 ,B = 1, C = 2,AB = 3,AC = 5,BC = 6

    这样我们就可以通过一个数值来知道,角色有哪些权限.

     

    向屏幕发射一条射线,检测是否碰撞到物体:

    RaycastHit 获取到碰物体的信息

    Ray 定义射线的规则

    向屏幕发射一条射线

    bool Physics.Raycast(Ray ray,out RaycastHit  hit, float distance, int layerMask)

    代码:

    using UnityEngine;
    using System.Collections;
    
    public class Test : MonoBehaviour {
    
        private int index = 0;
    
        // Use this for initialization
        void Start () {
            int index =  LayerMask.NameToLayer("UIMode");
    
        }
        
        // Update is called once per frame
        void Update () {
            RaycastHit hit;
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            
            //以鼠标为原点,向世界发射一条长度100f的射线,只有UIMode图层的物体进行碰撞
            if (Physics.Raycast(ray, out hit, 100f, index))
            {
                Debug.Log("碰撞到UIMode的物体: " + hit.collider.gameObject.name);
            }
    
        }
    }

     

     

    如果你感兴趣,你可以把你妹妹介绍给我
  • 相关阅读:
    DS博客作业02--线性表
    DS博客作业01--日期抽象数据类型设计与实现
    C语言博客作业06--结构体&文件
    C语言博客作业05--指针
    C语言博客作业04--数组
    DS博客作业8——课程总结
    DS博客作业07——查找
    DS博客作业06--图
    DS博客作业——树
    DS博客作业03--栈和队列
  • 原文地址:https://www.cnblogs.com/plateFace/p/4264815.html
Copyright © 2020-2023  润新知