Unity中LayerMask的学习手记
2016-05-10 09:47
316 查看
Unity中是用int32来表示32个Layer层。int32表示二进制一共有32位(0—31)。LayerMask实际上是用Int32的32个位来表示每个层级,当这个位为1时表示使用这个层,为0时表示不用这个层。
代码释义:
LayerMask mask = 1 << 你需要开启的Layers层。
LayerMask mask = 0 << 你需要关闭的Layers层。 等价于 LayerMask mask = ~( 1 << 你需要关闭的Layers层。)
layer常用于相机渲染的控制和射线碰撞检测。
相关API:
1、Ray Camera.main.ScreenPointToRay(Vector3 pos) --- 返回一条射线Ray从摄像机到屏幕指定一个点
2、RaycastHit --- 光线投射碰撞信息
3、Ray --- 射线类
4、bool Physics.Raycast(Vector3 origin, Vector3 direction, float distance, int layerMask) --- 当光线投射与任何碰撞器交叉时为真,否则为假。
bool Physics.Raycast(Ray ray, Vector3 direction, RaycastHit out hit, float distance, int layerMask) --- 在场景中投下可与所有碰撞器碰撞的一条光线,并返回碰撞的细节信息()。
bool Physics.Raycast(Ray ray, float distance, int layerMask) --- 当光线投射与任何碰撞器交叉时为真,否则为假。
bool Physics.Raycast(Vector3 origin, Vector3 direction, RaycastHit out hit,float distance, int la
4000
yerMask) --- 当光线投射与任何碰撞器交叉时为真,否则为假。
PS: 如果从一个球型体的内部到外部用光线投射,返回为假。
参数释义:
origin : 在世界坐标中射线的起始点
direction: 射线的方向
distance: 射线的长度
hit: 碰撞信息类。可以得到碰撞物体的transform,rigidbody,point等信息。
layerMask: 只选定Layermask层内的碰撞器,其它层内碰撞器忽略。
5、Ray Camera.main.ViewportPointToRay(Vector3 pos) --- 返回一条射线Ray从摄像机到视口(视口之外无效)指定一个点
6、RaycastHit[] RaycastAll(Ray ray, float distance, int layerMask) --- 投射一条光线并返回所有碰撞,也就是投射光线并返回一个RaycastHit[]结构体。
代码释义:
LayerMask mask = 1 << 你需要开启的Layers层。
LayerMask mask = 0 << 你需要关闭的Layers层。 等价于 LayerMask mask = ~( 1 << 你需要关闭的Layers层。)
public static int OnlyIncluding(params int[] layers) { return MakeMask(layers); } public static int EverythingBut(params int[] layers) { return ~MakeMask(layers); } static int MakeMask(params int[] layers) { int mask = 0; for (int i = 0; i < layers.Length; i++) { mask |= 1 << layers[i]; } return mask; }
layer常用于相机渲染的控制和射线碰撞检测。
相关API:
1、Ray Camera.main.ScreenPointToRay(Vector3 pos) --- 返回一条射线Ray从摄像机到屏幕指定一个点
2、RaycastHit --- 光线投射碰撞信息
3、Ray --- 射线类
4、bool Physics.Raycast(Vector3 origin, Vector3 direction, float distance, int layerMask) --- 当光线投射与任何碰撞器交叉时为真,否则为假。
bool Physics.Raycast(Ray ray, Vector3 direction, RaycastHit out hit, float distance, int layerMask) --- 在场景中投下可与所有碰撞器碰撞的一条光线,并返回碰撞的细节信息()。
bool Physics.Raycast(Ray ray, float distance, int layerMask) --- 当光线投射与任何碰撞器交叉时为真,否则为假。
bool Physics.Raycast(Vector3 origin, Vector3 direction, RaycastHit out hit,float distance, int la
4000
yerMask) --- 当光线投射与任何碰撞器交叉时为真,否则为假。
PS: 如果从一个球型体的内部到外部用光线投射,返回为假。
参数释义:
origin : 在世界坐标中射线的起始点
direction: 射线的方向
distance: 射线的长度
hit: 碰撞信息类。可以得到碰撞物体的transform,rigidbody,point等信息。
layerMask: 只选定Layermask层内的碰撞器,其它层内碰撞器忽略。
<span style="white-space:pre"> </span>if (Input.GetMouseButtonDown (0)) <span style="white-space:pre"> </span>{ <span style="white-space:pre"> </span>GameCamera tempGameCamera = GameCameraManager.GetSingle().getCurrentState() as GameCamera; <span style="white-space:pre"> </span>if(tempGameCamera == null) <span style="white-space:pre"> </span>{ <span style="white-space:pre"> </span>return ; <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>Camera tempCurrentCamera = tempGameCamera.pCamera; <span style="white-space:pre"> </span>Ray ray = tempCurrentCamera.ScreenPointToRay(Input.mousePosition); <span style="white-space:pre"> </span> <span style="white-space:pre"> </span>RaycastHit hit; <span style="white-space:pre"> </span>Physics.Raycast(ray.origin,ray.direction,out hit); <span style="white-space:pre"> </span>Debug.DrawRay(ray.origin, ray.GetPoint(100000.0f), Color.red); <span style="white-space:pre"> </span>}
5、Ray Camera.main.ViewportPointToRay(Vector3 pos) --- 返回一条射线Ray从摄像机到视口(视口之外无效)指定一个点
6、RaycastHit[] RaycastAll(Ray ray, float distance, int layerMask) --- 投射一条光线并返回所有碰撞,也就是投射光线并返回一个RaycastHit[]结构体。
相关文章推荐
- Unity3D控制人物移动跳跃,处理CharacterController的isGrounded总是返回false问题
- Unity5.3官方VR教程重磅登场-系列6 VR真机测试和产品发布
- Unity5.3官方VR教程重磅登场-系列5 VR中的运动
- Unity5.3官方VR教程重磅登场-系列4 VR中的用户界面
- 不知道怎么开发VR游戏?Unity5.3官方VR教程重磅登场-系列3 VR中的交互方式
- Color Grading with Unity and the Asset Store
- Unity5.3官方VR教程重磅登场-系列1
- Unity研究院之多余的MeshCollider和Animation组件
- 深入理解Unity5中的StandardShader屏幕像素化特效的实现
- 【Unity技巧】开发技巧(技巧篇)
- Unity3D Shader 入门
- 不知道怎么开发VR游戏?Unity5.3官方VR教程重磅登场-系列8 VR开发的更多资料
- 优化Unity渲染器
- 优化Unity渲染器
- Unity 精灵图集Shader渲染错乱
- Unity3d删除无用的美术资源
- Chapter 0.a Unity入门案例上
- Android设备连接Unity Profiler性能分析器
- Unity5中叹为观止的实时GI效果
- Unity3D制作简单的太阳系