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);
        }

    }
}
时间: 2024-12-20 02:02:05

Unity屏幕射线碰撞的相关文章

Unity中射线碰撞试验分享:

Physics.Raycast:光线投射 参数: origin:射线起始点 direction:射线方向 distance:射线长度 layerMask:只选定Layermask层内的碰撞器,其它层内碰撞器忽略. Returns bool - True when the ray intersects any collider,otherwise false. 当光线投射与任何碰撞器交叉时为真,否则为假. 下面通过实现这个小例子来试验一下:点击哪里就向哪里移动 using UnityEngine;

Unity Ugui射线坐标转换总结

世界空间中的点坐标转换到屏幕坐标: screenPos = RectTransformUtility.WorldToScreenPoint(cam, worldPos.transform.position); UGUI物体的坐标转换到屏幕坐标: screenPos = RectTransformUtility.WorldToScreenPoint(canvas.worldCamera, uguiObj.transform.position); 屏幕坐标转换到UGUI坐标: Vector3 wor

unity中射线碰撞检测总结

这阵子通过看视频,看书对unity中射线碰撞检测,有了一些了解,这里我把它总结一下写下来,希望能帮助到你们,也希望通过各位大神来指正不足之处: 射线碰撞检测,就是由某一物体发射出一道射线,射线碰撞到物体之后,可以得到该物体的相关信息,然后就可以对该物体进行一些操作的过程了.PS:个人见解: 射线的发射分为可见和不可见,可见的情况就是在游戏当中你可以看到射线,而不可见就是游戏运行时,你只可以在Scene试图下观察到它,而这到射线又是存在的: 而其实两者区别不大,关键是看你怎么用它了: 下面先看看不

Unreal Engine 4 C++ 射线碰撞

游戏开发中经常会用到射线碰撞,比如激光器打一枪,需要明确知道它集中的位置,然后在这个点释放攻击特效. Unrea Engine 4中做射线碰撞也很简单,主要功能的实现是World的LineTraceSingle这个方法,下面给出测试代码.代码我在ThirdPersonTemplate中测试.检测角色正前方有无柯碰撞的Actor,有就在碰撞点上显示一个调试用的圆球.代码如下: void ANanProjectCharacter::Raycast() { FHitResult hitResult(F

[Unity菜鸟] 射线

1. 射线用 Physics.Raycast 都可以判断,用 collider.Raycast 只在某些(不明)情况下可以 void Update() { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; // if (collider.Raycast(ray, out hit, 100f)) if (Physics.Raycast(ray,out hit ,100f)) { Debug.Dr

unity触发器和碰撞器

Unity中检测碰撞的方法有两种,一种是触发器一种是碰撞器,现在我来解释一下两种的区别. 触发器:有三种方法,分别是OnTriggerEnter,OnTriggerStay,OnTriggerExit 触发器一般是触发某种事物时使用,例如计分,过关什么的,不带有碰撞的物理效果. 碰撞器:有三种方法,分别是OnCollisionEnter,OnCollisionStay,OnCollisionExit 碰撞器一般是碰撞某种事物时使用,例如撞车,击中目标,带有碰撞的物理效果. 代码: 触发器: 1

Unity LineRenderer 射线检测 激光攻击

在进行激光攻击的脚本编写前,我们需要先进行一定程度的想象,激光和普通的远程攻击有哪些不太一样的地方. 正常的远程攻击例如子弹,箭矢,技能波等,都有明确的弹道,不可能同时命中多个敌人,而且一般只要命中敌人后就会被销毁.(特殊技能除外) 但激光可以认为是一种持续性的范围伤害,只是它的范围(长度)是不固定的,在激光的发射阶段,它会在第一个被命中的目标或障碍物处截断. 一旦整个激光成型后,一般来说,它将不再被运动的目标截断,反而是依靠它已经生成的光柱将目标弹开并造成伤害. 当然,如果之前被命中的目标或障

Unity的射线检测碰撞(JavaScript)

#pragma strict function Start () { } function Update () { var hit:RaycastHit; if(Physics.Raycast(transform.position,transform.forward,hit,8)) { print("射线触碰了"+hit.collider.gameObject+"物体"); } }

Unity之CharacterController 碰撞问题总结

CharacterController 不会受到scene的重力影响,自带物理碰撞检测,在脱离导航网格的应用场景下(比如飞行),是很有优势的Unity原生工具组件.如果在复杂的应用场景里,会有多种CC碰撞检测的需求,记录下我碰到的三种碰撞需求和解决方案. 一.和场景碰撞器 需要产生碰撞效果,让CC停止.只需要在场景里刷上碰撞器,并加上OnControllerColliderHit回调,处理逻辑. 二.和UI碰撞器 CC遇到UI上的BoxCollider也会产生碰撞效果,有个小招是把UI的Coll