Unity之射线检测

不知道大家有没有玩过红色警戒 —— 一款即时战略游戏,和罪恶都市一样小编小学的时候就开始玩了,这款游戏控制单位角色移动是通过鼠标的点击来实现。

同样的操作方法还有英雄联盟等很多游戏,那本篇文章小编就通过简单小实例来讲解这种操作在Unity中是如何实现的。

小编先展示一下实例的演示动图:红色球体表示我们控制的角色,鼠标左键点击小球就会到相应的坐标位置并打印坐标。

一、原理

先来讲一下这种操作方式的原理:它其实是从摄像机发射出的一条射线。当鼠标点击的时候,射线就从摄像机发射打到你点击的位置,通过检测射线获取到位置坐标,角色就向这个坐标移动。

 注:射线发射后碰到的游戏物体必须要有碰撞组件才会被检测到,演示动图中点击平面区域以外的地方是没有任何反应的。

二、实现实例 

创建射线的两种方法:该实例是通过摄像机创建射线

//创建射线的两种方法:
//方式一 通过向量创建
Ray ray1 = new Ray(Vector3.zero , Vector3.up);
//方式二 通过摄像机创建
Ray ray2 = Camera.main.ScreenPointToRay(Input.mousePosition);

新建一个平面一个球体,球体挂载上红色的材质方便我们观察,新建RayTest脚本用来检测射线并挂载到球体上。

public class RayTest : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        //当点击鼠标左键时执行
        if(Input.GetMouseButtonDown(0))
        {
            //按下鼠标左键发射射线  射线发射后碰到的游戏物体必须要有碰撞组件才会被检测到
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            //声明一个碰撞信息类
            RaycastHit hit;
            //碰撞检测用布尔类型表示
            bool res = Physics.Raycast(ray,out hit);
            //如果碰撞到的情况下,hit就有内容了
            if (res == true)
            {
                //打印出碰撞信息的坐标
                Debug.Log(hit.point);
                //把坐标赋值给球体,球体位置就会直接闪现到射线检测点
                transform.position = hit.point;
            }
            
            //多检测
            //RaycastHit[] hits = Physics.RaycastAll(ray, 100, 1 << 10);
        }
    }
}

点击运行就是动图的演示效果了,很简单的一个实例,拜拜┏(^0^)┛

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/333572.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【新书推荐】Web3.0应用开发实战(从Web 2.0到Web 3.0)

第一部分 Flask简介 第1章 安装 1.1 创建应用目录 1.2 虚拟环境 1.2.1 创建虚拟环境 1.2.2 使用虚拟环境 1.3 使用pip安装Python包 1.4 使用pipregs输出包 1.5 使用requirements.txt 1.6 使用pipenv管理包 第2章 应用的基本结构 2.1 网页显示过程 2.2 初始化 2.3 路由和视图函数…

2种数控棋

目录 数控棋1 数控棋2 数控棋1 棋盘&#xff1a; 初始局面&#xff1a; 规则&#xff1a; 规则&#xff1a;双方轮流走棋&#xff0c;可走横格、竖格、可横竖转弯&#xff0c;不可走斜格。每一步均须按棋所在格的数字走步数&#xff0c;不可多不可少。 先无法走棋的一方为…

强制保存 [force save] 是什么?如何使用它?

文章作者&#xff1a;ajun 阅读本文&#xff0c;了解强制保存&#xff08;force save&#xff09;的作用、使用方法&#xff0c;以及如何在 ONLYOFFICE 文档编辑器中开启强制保存。 引言 ONLYOFFICE有两种保存机制&#xff0c;一种是自动保存&#xff0c;一种是强制保存。自动…

“衣物收纳商品/ASTMF2057-23”和“泳池和水疗设施排水盖/16CFR1450” 的合规要求!

近期&#xff0c;不少美国站卖家陆续收到了亚马逊合规政策要求邮件&#xff0c;针对“衣物收纳商品”和“泳池和水疗设施排水盖”品类的合规要求有更新&#xff0c;请您及时关注&#xff01; 衣物收纳商品的合规认证要求&#xff1a; 衣物收纳商品是指带有抽屉或铰链门的家具商…

41 JAVA安全-目录遍历访问控制XSS等安全问题

目录 演示案例Javaweb代码分析-目录遍历安全问题Javaweb代码分析-前端验证安全问题Javaweb代码分析-逻辑越权安全问题Javaweb代码分析-XSS跨站安全问题拓展-安卓APP反编译JAVA代码(审计不香吗?) 演示案例 Javaweb代码分析-目录遍历安全问题 代码解析及框架源码追踪: 第一关&…

ElasticSearch的常用增删改查DSL和代码

es增删改查常用语法 我们日常开发中&#xff0c;操作数据库写sql倒是不可能忘记&#xff0c;但是操作es的dsl语句有时候很容易忘记&#xff0c;特地记录一下方便查找。 DSL语句 1、创建索引 -- 创建索引 PUT /my_index {"mappings": {"properties": {&…

安装conda搭建python环境(保姆级教程)

目录 一、Anaconda简介二、Anaconda安装 2.1 Anaconda下载2.2 Anaconda安装2.3 配置环境变量 三、通过conda配置python环境 3.1 创建并激活虚拟环境3.2 管理虚拟环境 一、Anaconda简介 Anaconda 是专门为了方便使用 Python 进行数据科学研究而建立的一组软件包&#xff0c;…

洛谷P5731 【深基5.习6】蛇形方阵(C语言)

思路感觉还是比较好想的。 从 1 到 n 依次算。先往右&#xff0c;走到头往下&#xff0c;再走到头往左&#xff0c;以此类推。 #include<stdio.h>int main() {int n, i, j, k1,t0;scanf("%d", &n);int a[100][100];if (n % 2 0)t n / 2;elset n / 2 …

轻空间气膜游泳馆助您冬日尽情畅游

随着气温逐渐降低&#xff0c;寒冷的冬季让许多热爱游泳的人感到不便。然而&#xff0c;随着气膜建筑技术的不断创新&#xff0c;气膜游泳馆应运而生&#xff0c;为冬日游泳提供了理想场所。其轻盈灵活的结构、优越的保温性能&#xff0c;以及独特的设计理念&#xff0c;让您在…

前端面试题(持续更新~~)

文章目录 一、基础1、数组常用的方法2、数组有哪几种循环方式&#xff1f;分别有什么作用&#xff1f;3、字符串常用的方法4、原型链5、闭包6、常见的继承7、cookie 、localstorage 、 sessionstrorage区别8、数组去重方法9、http 的请求方式10、数据类型的判断方法11、cookie …

Python——基本语法(二)

一、while 循环 语法&#xff1a; while 条件表达式:条件表达示为真&#xff0c;就执⾏这⾥的代码&#xff0c;必须缩进 4 个空格多⾏代码保持缩进⼀致 条件表达式可以是: True # 布尔值的 True 1 < 10 # 凡是在 if 语句中使⽤的判断表达示&#xff0c;这⾥都可以使…

基于SkyEye仿真飞腾处理器:运行U-Boot并加载Phytium-FreeRTOS

仿真平台在帮助提升研发效率、加快产品面市时间上的作用已得到诸多验证&#xff0c;通过对处理器进行仿真来支持嵌入式系统及软件的虚拟化开发、测试和验证成为目前应用较为广泛的方法。天目全数字实时仿真软件SkyEye是一款基于可视化建模的硬件行为级仿真平台&#xff0c;在众…

24 小时经营,15 秒出饮,这台无人饮品机横空出世

随着科技的不断进步&#xff0c;无人饮品机应运而生&#xff0c;它以其 24 小时经营、15 秒出饮的特点&#xff0c;迅速成为人们关注的焦点。 D咖无人饮品机的外观设计简洁大方&#xff0c;体积小巧&#xff0c;操作界面简单易懂&#xff0c;消费者可以通过触屏选择自己喜欢的饮…

Stability AI发布全新代码模型Stable Code 3B

Stable Code 3B: Coding on the Edge 要点&#xff1a; Stable Code 3B 是一个包含 30 亿个参数的大型语言模型 (LLM)&#xff0c;可实现准确且响应灵敏的代码补全&#xff0c;其水平与大 2.5 倍的 CodeLLaMA 7b 等模型相当。即使在 MacBook Air 等普通笔记本电脑上没有 GPU&…

C++ 设计模式之 中介者模式

【声明】本题目来源于卡码网&#xff08;题目页面 (kamacoder.com)&#xff09; 【提示&#xff1a;如果不想看文字介绍&#xff0c;可以直接跳转到C编码部分】 【设计模式大纲】 【简介】 -- 什么是中介者模式 &#xff08;第16种模式&#xff09; 中介者模式&#xff08;Medi…

TCO-AF488,AF488-反式环辛烯,一种明亮的绿色荧光染料

文章关键词&#xff1a;AF488 TCO&#xff0c;Alexa Fluor TCO&#xff0c;TCO AF488&#xff0c;AF488 反式环辛烯 一、基本信息 产品简介&#xff1a;AF488 TCO&#xff0c;这是一款独特的荧光染料&#xff0c;以其鲜明的绿色光华吸引了众人的目光。在成像和流式细胞术中&a…

云HIS为连锁医院机构提供统一医院管理解决方案

云HIS重建统一的信息架构体系&#xff0c;重构管理服务流程&#xff0c;重造病人服务环境&#xff0c;向不同类型的医疗机构提供SaaS化HIS服务解决方案。 云HIS优势 1、云端数据优势 在传统的HIS模式里&#xff0c;数据存于医院本身的服务器机组&#xff0c;一旦发生故障&…

docker-compose安装mongodb

shigen坚持更新文章的博客写手&#xff0c;擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长&#xff0c;分享认知&#xff0c;留住感动。 早上醒来的第一件事情就是摸了一下手机&#xff0c;看了一下微信相关的技术推文&#xff0c;给我推荐了一篇…

SpringBoot Redis入门(四)——Redis单机、哨兵、集群模式

单机模式&#xff1a;单台缓存服务器&#xff0c;开发、测试环境下使用&#xff1b;哨兵模式&#xff1a;主-从模式&#xff0c;提高缓存服务器的高可用和安全性。所有缓存的数据在每个节点上都一致。每个节点添加监听器&#xff0c;不断监听节点可用状态&#xff0c;一旦主节点…

three.js从入门到精通系列教程002 - three.js正交相机OrthographicCamera

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>three.js从入门到精通系列教程002 - three.js正交相机OrthographicCamera</title><script src"ThreeJS/three.js"></script><script src&qu…