unity 射线过滤

作者: 齊葩 | 来源:发表于2017-09-17 21:22 被阅读152次

刚刚看了官方文档,推荐layers来做
我直接翻译了一下官方文档
这个是官方文档链接 https://docs.unity3d.com/Manual/Layers.html

第一步是创建一个新层,然后我们可以分配给一个
GameObject要创建新图层,请打开“编辑”菜单,然后选择“

项目设置 - >标签和图层
我们在一个空的用户图层中创建一个新图层。
我们选择第8层。


分配图层

现在您已经创建了一个新的图层,您必须将图层分配给其中一个游戏对象。

Layer-ChooseLayer.png

在标签管理器中,我们将Player层分配到第8层。

仅使用相机的剔除面具绘制场景的一部分

使用相机的剔除面罩,您可以选择性地渲染位于一个特定图层中的对象。
为此,请选择应选择性渲染对象的相机。

通过勾选或取消勾选剔除掩码属性中的图层来修改剔除掩码。

Layer-CullingMask.png

铸造射线选择性

使用图层可以投射光线并忽略特定图层中的对角线。
例如,您可能想要仅对播放器层投射光线,并忽略所有其他对撞机。

Physics.Raycast函数采用位掩码,其中每个位决定层是否被忽略。
如果layerMask中的所有位都处于打开状态,我们将与所有的碰撞器相冲突。
如果layerMask = 0,我们将永远不会发现与射线的任何碰撞。

// JavaScript example.

// bit shift the index of the layer to get a bit mask
var layerMask = 1 << 8;
// Does the ray intersect any objects which are in the player layer.
if (Physics.Raycast (transform.position, Vector3.forward, Mathf.Infinity, layerMask))
print ("The ray hit the player");

// C# example.

int layerMask = 1 << 8;

// Does the ray intersect any objects which are in the player layer.
if (Physics.Raycast(transform.position, Vector3.forward, Mathf.Infinity, layerMask))
Debug.Log("The ray hit the player");

在现实世界中,你要做的是与之相反的。
我们要对所有的碰撞器投射射线,除了在球员层中。

// JavaScript example.
function Update () {
// Bit shift the index of the layer (8) to get a bit mask
var layerMask = 1 << 8;
// This would cast rays only against colliders in layer 8.
// But instead we want to collide against everything except layer 8. The ~ operator does this, it inverts a bitmask.
layerMask = ~layerMask;

var hit : RaycastHit;
// Does the ray intersect any objects excluding the player layer
if (Physics.Raycast (transform.position, transform.TransformDirection (Vector3.forward), hit, Mathf.Infinity, layerMask)) {
Debug.DrawRay (transform.position, transform.TransformDirection (Vector3.forward) * hit.distance, Color.yellow);
print ("Did Hit");
} else {
Debug.DrawRay (transform.position, transform.TransformDirection (Vector3.forward) *1000, Color.white);
print ("Did not Hit");
}
}

// C# example.
void Update () {
// Bit shift the index of the layer (8) to get a bit mask
int layerMask = 1 << 8;

// This would cast rays only against colliders in layer 8.
// But instead we want to collide against everything except layer 8. The ~ operator does this, it inverts a bitmask.
layerMask = ~layerMask;

RaycastHit hit;
// Does the ray intersect any objects excluding the player layer
if (Physics.Raycast(transform.position, transform.TransformDirection (Vector3.forward), out hit, Mathf.Infinity, layerMask)) {
Debug.DrawRay(transform.position, transform.TransformDirection (Vector3.forward) * hit.distance, Color.yellow);
Debug.Log("Did Hit");
} else {
Debug.DrawRay(transform.position, transform.TransformDirection (Vector3.forward) *1000, Color.white);
Debug.Log("Did not Hit");
}
}

当您没有将LayerMask传递给Raycast功能时,它只会忽略使用IgnoreRaycast图层的对齐机。
这是在投射光线时忽略某些对照物的最简单方法。

************点击这里可以看到作者的其他文章********************欢迎转载,转载请标明出处: http://www.jianshu.com/p/a086d2fa2e99 ********

相关文章

  • unity 射线过滤

    刚刚看了官方文档,推荐layers来做我直接翻译了一下官方文档这个是官方文档链接 https://docs.uni...

  • Unity 射线

    1,摄像机射线: 2, 物体发射射线: 3, 点击发出射线:

  • Unity射线

    射线 与现实中激光手电(激光笔)类似,射线的两个要素:原点和方向。unity引擎引入了这种机制,可以通过代码在场景...

  • Unity 基础 - 射线

    Unity 中虚拟射线能够检测所碰撞到物体,使用 Physics 类的 Raycast 方法实现色心啊碰撞检测功能。

  • 射线检测-unity

    与最近物体碰撞取得位置: 与指定层的物体碰撞: 另外collider相当于游戏物体了

  • Unity射线检测

    Physics.RayCast方法发射射线,射线碰撞的信息存在RaycastHit中。 Camera.main.S...

  • Unity Physics.Raycast

    参考Unity - 射线检测[https://www.cnblogs.com/SouthBegonia/p/117...

  • API

    Plane.Raycast Plane 的介绍参考例子 Unity 之 plane.Raycast 射线检测 拷贝...

  • Unity Recast射线优化

    团队多人在开发游戏界面,很多时候都是复制黏贴,比如上一个图片是需要响应RaycastTarget,然后ctrl+d...

  • Unity 屏幕射线ScreenPointToRay

    如下图所示,点击屏幕时,会生成一条射线,从摄像机的的位置开始,指向屏幕点击的地方,射线继续往前,会穿透绿色的正方体...

网友评论

本文标题:unity 射线过滤

本文链接:https://www.haomeiwen.com/subject/utbmsxtx.html