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 ...
随机推荐
- 笛卡尔树--牛客第四场(sequence)
思路: O(n)建一颗笛卡尔树,再O(n)dfs向上合并答案就行了. #define IOS ios_base::sync_with_stdio(0); cin.tie(0); #include &l ...
- const和static const的区别(未整理)
对于C/C++语言来讲,const就是只读的意思,只在声明中使用;static一般有2个作用,规定作用域和存储方式.对于局部变量,static规定其为静态存储方式,每次调用的初始值为上一次调用的值,调 ...
- Laravel-admin 表单提交同时验证俩个以上的字段唯一值
$name = isset(request()->all()['name']) ? request()->all()['name'] : ''; $id = isset(request() ...
- React 中的函数式思想
函数式编程简要概念 函数式编程中一个核心概念之一就是纯函数,如果一个函数满足一下几个条件,就可以认为这个函数是纯函数了: 它是一个函数(废话): 当给定相同的输入(函数的参数)的时候,总是有相同的输出 ...
- MySQL性能优化(七):其它优化
原文:MySQL性能优化(七):其它优化 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/v ...
- Clang教程之实现源源变化
clang教程之实现源源变化 声明:本教程来自于Eli Bendersky's website 原文地址:http://eli.thegreenplace.net/2014/05/01/modern- ...
- SuperMap-WebGL-坐标系及转换说明
转载自:https://blog.csdn.net/supermapsupport/article/details/89519310 一.坐标系介绍我们先来列举下Cesium中的坐标系:WGS84经纬 ...
- go语言的学习之路
一.学习前言 (1)go语言的介绍 1.解释型语言:python PHP java scripy (前端) 2.编译型语言:C C++ C#(微软开发) java(sun公司开发 后来被甲 ...
- String,到底创建了多少个对象?
String str=new String("aaa"); <span style="font-size:14px;">String str=n ...
- linux系统使用grep命令提取文件的基名或者路径名
效果等于~]#dirname /etc/sysconfig/network-scripts/ifcfg-ens33 echo "/etc/sysconfig/network-scripts/ ...