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 ...
随机推荐
- TCP 三次握手和四次挥手
TCP 三次握手和四次挥手 作为面试会被经常考察的的点,自己复习了一下,总结如下: TCP 三次握手 先上图: 所谓三次握手,是指建立一个 TCP 连接时,需要客户端和服务器总共发送 3 个包. 第一 ...
- 预约系统(四) 管理页面框架搭建easyUI
Manage控制器用于管理页面 Index视图为管理页面首页,采用easyUi的后台管理框架 Html头部调用,jquery库,easyui库,easyui.css,icon.css,语言包 < ...
- 第四篇 jQuery中的事件与应用
4.1 事件中的冒泡现象,ready()方法 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" & ...
- scrapyd使用教程
1. 安装服务器: pip install scrapyd 启动: scrapyd 访问:127.0.0.1:6800 2. 安装客户端 pip install scrapyd-client 3. 进 ...
- html/form表单常用属性认识
1.form表单常用属性练习 <style> .form1 { margin: auto; height: 900px; width: 500px; text-align: center; ...
- webpack 四个核心概念
webpack 是当下最热门的前端资源模块化和打包工具.它可以将许多松散的模块(如 CommonJs 模块. AMD 模块. ES6 模块.CSS.图片. JSON.Coffeescript. LES ...
- 转载:Linux目录文件的权限查看与修改
######################################## ...
- C# 过滤字典中的数据 并将过滤后的数据转成新的字典对象
Dictionary<string, object> dic = new Dictionary<string, object>(); dic.Add("); dic. ...
- deep_learning_Function_tensorflow_transpose()
tf.transpose()的用法 一.tensorflow官方文档内容 transpose( a, perm=None, name='transpose' ) Defined ...
- c++实现服务器和多个客户端的实时群聊通信
我们通过TCP/IP来实现多人聊天室,如果租一个服务器我们就可以实现全网的多人聊天室(不懂tcp/ip的点进来https://www.cnblogs.com/yskn/p/9335608.html)! ...