【Unity 3D】学习笔记四十:射线
2023-09-27 14:27:03 时间
射线
射线,类比的理解就是游戏中的子弹。是在3D世界里中一个点向一个方向发射的一条无终点的线。在发射的过程中,一旦与其它对象发生碰撞,就停止发射。
射线的原理
创建一个射线时,首先须要知道射线的起点和终点在3D世界里的坐标。
using UnityEngine; using System.Collections; public class Script_06_08 : MonoBehaviour { void Update() { //创建射线,从零点发射到对象 Ray ray = new Ray(Vector3.zero, transform.position); //计算射线的起点和终点 RaycastHit hit; Physics.Raycast(ray, out hit, 100); //使用调试方法绘制这条线(调试方法记载scene视图中存在) Debug.DrawLine(ray.origin, hit.point); } }执行后:
上述代码中,Debug.DrawLine( )方法仅仅有在scene视图中才干看到。假设想将射线绘制在游戏中,须要使用GL图形库或者LineRenderer方法。
碰撞监測
射线是能够用来推断与游戏其它对象的碰撞,如这样例,以摄像机的位置为原点,向鼠标移动点发射一条射线。就好比向靶心打了一枪,来推断是否打中。
using UnityEngine; using System.Collections; public class Script_06_09 : MonoBehaviour { //靶心贴图 public Texture texture; //提示信息 private string info; void Update() { //创建从摄像机位置到鼠标位置之间的射线 Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; //推断该射线是否打中游戏对象 if(Physics.Raycast(ray, out hit)) { info ="打中靶心"; }else { info ="未打中靶心"; } } void OnGUI() { //计算准心贴图的坐标 Rect rect = new Rect(Input.mousePosition.x -(texture.width >>1 ) ,Screen.height - Input.mousePosition.y - (texture.height >> 1),texture.width,texture.height); //绘制准心贴图 GUI.DrawTexture(rect,texture); //输入打靶子的信息 GUILayout.Label(info + ",打中的坐标为:"+Input.mousePosition); } }执行后:
上述代码使用Camera.main.ScreenPointToRay方法来穿件一条由摄像机向鼠标当前位置发射的射线,然后使用Physics.Raycast推断这条射线是否与某游戏相交,相交返回true,否者返回false。
相关文章
- 3D机器视觉技术您了解多少?
- Boom 3D序列号授权超赞的音效增强及播放工具
- 盘点存储2016:3D XPoint从炒作到落地
- 3D视觉应用研发系列笔记——机器人3D互动(一.技术难点分析)
- 【3D视觉创新应用竞赛作品系列】轻量化、松耦合的手持RGB-D室内环境实时重建系统
- 2018CHI Best Paper Award Agile 3D Sketching with Air Scaffolding
- 基于 Android 的 3D 视频示例代码
- 3d激光雷达开发(pcd数据读取)
- vectordraw图形库,提高了 WebGL 3D 渲染模式的性能
- Cocos 3D功能初探学习笔记(2)---3D精灵
- 通过UI显示3D模型
- 三维基因组 | 3D Genome | 3C | 染色质构象捕获 | Chromosome Conformation Capture | Capture Hi-C | 简介
- 【业界首例】MIT新算法骗过神经网络3D物体分类,成功率超90%
- win10 uwp 使用 Matrix3DProjection 进行 3d 投影
- Web 3D捏脸