Unity射线检测官方文档:  传送门

  一、检测前方是否有游戏物体(射线无限长度)

  二、检测前方是否有游戏物体(射线长度为1m)

  三、检测前方游戏物体碰撞信息(射线无限长度):

  四、指定检测碰撞Tag层

  2D射线检测:使用Physics2D.Raycast()

  Raycast()和RaycastAll()区别:Raycast()只检测当前游戏物体,RaycastAll()检测前方所有游戏物体(返回一个数组)

   

  创建一个Cube作为地面,重命名为Ground

  创建一个Cube作为游戏玩家(重命名为Player),游戏玩家下再新建一个Cube(重命名为Ray)作为射线发射起点

  创建三个Cube作为目标,用来判断射线是否检测到目标

  给Ray添加射线检测Player.cs脚本

一、检测前方是否有游戏物体(射线无限长度):

using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class Player : MonoBehaviour { // Use this for initialization
void Start () { } // Update is called once per frame
void Update () {
//射线发射的起始位置和方向
Ray ray = new Ray(transform.position+transform.forward, transform.forward); //Raycast()方法判断射线是否被检测
bool isCollider = Physics.Raycast(ray); //输出检测信息,只能为True或False
Debug.Log(isCollider);
}
}

Player.cs

        //射线发射的起始位置和方向
Ray ray = new Ray(transform.position+transform.forward, transform.forward); //Raycast()方法判断射线是否被检测
bool isCollider = Physics.Raycast(ray); //输出检测信息,只能为True或False
Debug.Log(isCollider);

二、检测前方是否有游戏物体(射线长度为1m):

using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class Player : MonoBehaviour { // Use this for initialization
void Start () { } // Update is called once per frame
void Update () {
//射线发射的起始位置和方向
Ray ray = new Ray(transform.position+transform.forward, transform.forward); //Raycast()方法判断射线是否被检测
bool isCollider = Physics.Raycast(ray,); //输出检测信息,只能为True或False
Debug.Log(isCollider);
}
}

Player.cs

     //射线发射的起始位置和方向
Ray ray = new Ray(transform.position+transform.forward, transform.forward); //Raycast()方法判断射线是否被检测
bool isCollider = Physics.Raycast(ray,); //输出检测信息,只能为True或False
Debug.Log(isCollider);

三、检测前方游戏物体碰撞信息(射线无限长度):

using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class Player : MonoBehaviour { // Use this for initialization
void Start () { } // Update is called once per frame
void Update () {
//射线发射的起始位置和方向
Ray ray = new Ray(transform.position+transform.forward, transform.forward); RaycastHit hit;
bool isCollider = Physics.Raycast(ray,out hit); //输出是否碰撞到物体
Debug.Log(isCollider);
//输出碰撞物体名字
Debug.Log(hit.collider);
//输出碰撞到物体位置
Debug.Log(hit.point);
}
}

Player.cs

    //射线发射的起始位置和方向
Ray ray = new Ray(transform.position+transform.forward, transform.forward); RaycastHit hit;
bool isCollider = Physics.Raycast(ray,out hit); //输出是否碰撞到物体
Debug.Log(isCollider);
//输出碰撞物体名字
Debug.Log(hit.collider);
//输出碰撞到物体位置
Debug.Log(hit.point);

四、指定检测碰撞Tag层

  给Cube-1 添加 Gary1标签,其它Cube不做改动

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class Player : MonoBehaviour { // Use this for initialization
void Start () { } // Update is called once per frame
void Update () {
//射线发射的起始位置和方向
Ray ray = new Ray(transform.position+transform.forward, transform.forward); //需要进行碰撞的Layout层
bool isCollider = Physics.Raycast(ray,Mathf.Infinity,LayerMask.GetMask("Gary1")); //输出是否碰撞到物体
Debug.Log(isCollider);
}
}

Player.cs

        //射线发射的起始位置和方向
Ray ray = new Ray(transform.position+transform.forward, transform.forward); //需要进行碰撞的Layout层
bool isCollider = Physics.Raycast(ray,Mathf.Infinity,LayerMask.GetMask("Gary1")); //输出是否碰撞到物体
Debug.Log(isCollider);

Raycast()和RaycastAll()区别

Unity3D_(API)射线检测Raycast()的更多相关文章

  1. 浅析射线检测 raycast 的使用 !Cocos Creator 3D !

    哎呀?为什么我设置了节点点击回调没反应呀? 记得在写小鸡拍拍的时候遇到一个问题,想要捕捉排球的点击事件,按照 2d 的写法,给3d 节点添加 node 事件,结果点了没反应.代码大概是以下的样子. t ...

  2. Unity - Raycast 射线检测

    本文简要分析了Unity中射线检测的基本原理及用法,包括: Ray 射线 RaycastHit 光线投射碰撞信息 Raycast 光线投射 SphereCast 球体投射 OverlapSphere ...

  3. 【UE4 C++】 射线检测 LineTrace 及 BoxTrace、SphereTrace、CapsuleTrace API

    World.h 库里的 Trace API Trace模式 TraceSingle 单个结果 TraceMulti 多个结果 Trace 的检测依据 ByChanne ByObjectType ByP ...

  4. Unity的学习笔记(射线检测)

    首先,射线检测的API是这样的,网上找了一下,这个图片看得很清楚: 接下来是自己使用这个进行测试 using System.Collections; using System.Collections. ...

  5. 【Unity3D】枪战游戏—发射子弹、射线检测

    一.子弹的碰撞检测: 因为子弹的移动速度非常的快,那么如果为子弹添加一个collider,就有可能检测不到了. 因为collider是每一帧在执行,第一帧子弹可能在100米处,那么下一帧就在900米处 ...

  6. Unity3D 之射线检测

    这里来记录下射线检测的相关内容: 射线检测故名就是通过射线去检测是否和碰撞器产生了交集,和碰撞器与碰撞器发生交集一样,会返回一个真. 射线的用法很多:比如检测是否跳跃,通过向地面投射射线控制在地面时候 ...

  7. Unity射线检测的用法总结

    RayCast 射线检测 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享.心 ...

  8. U3D学习10——关节和射线检测

    1.弹簧  2.铰链  3.固定关节  4.角色关节  5.自定义关节  6.raycast和raycasthit 射线有位移参数,可以设定只触发某一层的. 7.射线检测用于高速和精确 update是 ...

  9. Layabox 3D游戏开发学习笔记---射线检测,鼠标控制物体运动

    核心要点:3D物体碰撞是靠射线检测,射线与碰撞器相撞获取对应的碰撞点信息. class RayPicking03 { private ray: Laya.Ray; private point: Lay ...

随机推荐

  1. session的垃圾回收机制

    session.gc_maxlifetime session.gc_probability session.gc_divisor session.gc_divisor 与 session.gc_pro ...

  2. 使用history.js解决浏览器对history使用的兼容问题

    history.js即可以解决禁止浏览器回退的浏览器兼容问题,也能解决直接修改浏览器当前标签页url的浏览器兼容问题. 解决禁止浏览器回退: <script src="../../js ...

  3. nginx配置一般优化参数

    #user nobody; worker_processes 2; # CPU亲和力,worker_processes最多开启8个,注意写法 worker_cpu_affinity 01 10; wo ...

  4. 程序员必备的网站之Tutorialspoint

    程序员必备的网站之Tutorialspoint 给大家介绍一个非常好的网站Tutorialspointhttp://www.tutorialspoint.com/index.htm,也许好多人都已经用 ...

  5. 用java语言(文件和文件流知识点)实现图片的拷贝,从d盘拷贝到e盘

    /** * 实现图片的拷贝\ * 注意:用的是文件字节流 */ package com.test4; import java.io.*; public class Demo12_4 { /** * @ ...

  6. 访问接口错误,com.netflix.client.ClientException: Load balancer does not have available server for client: panfeng-item-service

    com.netflix.client.ClientException: Load balancer does not have available server for client: panfeng ...

  7. 服务命令(systemctl的使用)

    常用的service与systemctl命令的对比 应用举例: ●start:开启服务 ●stop:停止服务 ●status:参数来查看服务运行情况 ●restart:重新加载服务 应用举例·: #启 ...

  8. css 规范标签

    页头:header 登录条:loginBar 标志:logo 侧栏:sideBar 广告:banner 导航:nav 子导航:subNav 菜单:menu 子菜单:subMenu 搜索:search ...

  9. 简单xml示例

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.X ...

  10. 模拟赛小结:2017 China Collegiate Programming Contest Final (CCPC-Final 2017)

    比赛链接:传送门 前期大顺风,2:30金区中游.后期开题乏力,掉到银尾.4:59绝杀I,但罚时太高卡在银首. Problem A - Dogs and Cages 00:09:45 (+) Solve ...