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); } } }
如果你感兴趣,你可以把你妹妹介绍给我