Unity3D_(API)射线检测Raycast()
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()的更多相关文章
- 浅析射线检测 raycast 的使用 !Cocos Creator 3D !
哎呀?为什么我设置了节点点击回调没反应呀? 记得在写小鸡拍拍的时候遇到一个问题,想要捕捉排球的点击事件,按照 2d 的写法,给3d 节点添加 node 事件,结果点了没反应.代码大概是以下的样子. t ...
- Unity - Raycast 射线检测
本文简要分析了Unity中射线检测的基本原理及用法,包括: Ray 射线 RaycastHit 光线投射碰撞信息 Raycast 光线投射 SphereCast 球体投射 OverlapSphere ...
- 【UE4 C++】 射线检测 LineTrace 及 BoxTrace、SphereTrace、CapsuleTrace API
World.h 库里的 Trace API Trace模式 TraceSingle 单个结果 TraceMulti 多个结果 Trace 的检测依据 ByChanne ByObjectType ByP ...
- Unity的学习笔记(射线检测)
首先,射线检测的API是这样的,网上找了一下,这个图片看得很清楚: 接下来是自己使用这个进行测试 using System.Collections; using System.Collections. ...
- 【Unity3D】枪战游戏—发射子弹、射线检测
一.子弹的碰撞检测: 因为子弹的移动速度非常的快,那么如果为子弹添加一个collider,就有可能检测不到了. 因为collider是每一帧在执行,第一帧子弹可能在100米处,那么下一帧就在900米处 ...
- Unity3D 之射线检测
这里来记录下射线检测的相关内容: 射线检测故名就是通过射线去检测是否和碰撞器产生了交集,和碰撞器与碰撞器发生交集一样,会返回一个真. 射线的用法很多:比如检测是否跳跃,通过向地面投射射线控制在地面时候 ...
- Unity射线检测的用法总结
RayCast 射线检测 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享.心 ...
- U3D学习10——关节和射线检测
1.弹簧 2.铰链 3.固定关节 4.角色关节 5.自定义关节 6.raycast和raycasthit 射线有位移参数,可以设定只触发某一层的. 7.射线检测用于高速和精确 update是 ...
- Layabox 3D游戏开发学习笔记---射线检测,鼠标控制物体运动
核心要点:3D物体碰撞是靠射线检测,射线与碰撞器相撞获取对应的碰撞点信息. class RayPicking03 { private ray: Laya.Ray; private point: Lay ...
随机推荐
- nginx配置一般优化参数
#user nobody; worker_processes 2; # CPU亲和力,worker_processes最多开启8个,注意写法 worker_cpu_affinity 01 10; wo ...
- redis 学习(1)-- redis 安装与启动
redis 学习(1)-- redis 安装与启动 redis 特性 关于 redis 的介绍网上已经有很多信息了,这里我就不在详细说明了.介绍一下几个鲜明特性: 1.速度快 官方称可以达到10W的q ...
- 总线(bus)简介
内容来自于<Computer Organization>,这是我的一篇学习笔记
- Centos7:配置防火墙
firewalld的基本使用 启动: systemctl start firewalld 关闭:systemctl stop firewalld 查看状态: systemctl status fire ...
- echarts is not defined解决方案
最近在写一个类似于vue的一种cola-ui框架,有兴趣的朋友可以了解一下:http://legacy.cola-ui.com/: 项目中有个业务需要引入Echarts图表的需求,由于是前后端没有分离 ...
- 快速入门 Pandas
先po几个比较好的Pandas入门网站十分钟入门:http://www.codingpy.com/article/a-quick-intro-to-pandas/手册前2章:http://pda.re ...
- 模块之-os模块
模块之-os模块 >>> import os >>> os.getcwd() #获取当前工作目录 'C:\\Users\\Administrator' >&g ...
- ecshop新版不能在模板文件.dwt和.lbi中直接添加php代码的解决方法
ecshop新版不能在模板文件.dwt和.lbi中直接添加php代码了,为什么呢? 因为直接在模板中加入php函数和代码,没有经过过滤,容易造成安全隐患.程序源码安全是非常重要的. 不过如果有朋友希望 ...
- java8学习之groupingByConcurrent与partioningBy源码分析
在上一次[http://www.cnblogs.com/webor2006/p/8387656.html]中对于Collectors.groupingBy()方法进行了完整的分析之后,接着继续来分析一 ...
- 清北学堂dp图论营游记day2
上午讲数位dp和背包问题. 先讲背包: 完全背包:换了个顺序: 多重背包: 多重背包优化: 这样把每个物品分成这些组,那么把他们转变成不同的物品,就变成了01背包问题: 滑动窗口取最值问题.单调队列优 ...