Unity基础课程之物理引擎4-用于射击或者点击消除的射线检测方法

news2024/9/22 9:41:14

业务逻辑

这段代码实现了一个功能,当玩家按下鼠标左键或按下Q键时,从游戏主角的位置沿着主角的前方方向发射一条射线。如果射线碰撞到了具有Collider触发或碰撞器的游戏物体,则销毁该游戏物体。

程序逻辑

程序的逻辑如下:
1. 在`Start()`函数中,通过标签"Role"找到并存储游戏主角对象。
2. 在`Update()`函数中,每帧获取游戏主角的当前位置和前方方向。
3. 当玩家按下鼠标左键或按下Q键时,进入条件判断。
4. 输出日志信息表示射线开始发射。
5. 使用`Physics.Raycast()`函数从主角的位置和方向发射射线,将碰撞结果存储在`RaycastHit`变量`Emeny`中。
6. 如果射线击中了某个游戏物体,打印该游戏物体的名称。
7. 将被击中的游戏物体存储到临时变量`TempOBJ`中。
8. 判断被击中的游戏物体的名称是否为"Role",如果不是则销毁该游戏物体。
9. 使用`Debug.DrawLine()`函数绘制一条红色的线,表示射线的路径(场景编辑器中可见)。
10. 结束条件判断。

场景设计,发射的主体设计的是 Role,并且指定一个标签便于代码获取 !

代码演示 


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class StudyRaycast : MonoBehaviour
{
    GameObject OneRole;  // 一个变量,用来存放游戏主角,发射射线时的主体
    public float RayDistance = 55f;  // 射线的长度

    void Start()
    {
        OneRole = GameObject.FindGameObjectWithTag("Role");  // 找到并存储标签为"Role"的游戏物体作为主角
    }

    void Update()
    {
        Vector3 RoleCurrPosition = OneRole.transform.position;  // 主角当前的位置
        Vector3 RoleCurrDirection = OneRole.transform.forward;  // 主角当前的前方方向

        do
        {
            if (OneRole == null)
            {
                Debug.Log("没有赋值主角变量OneRole,请检查主角是否指定标签");
                break;
            }

            // 按下鼠标左键或按下Q键
            if (Input.GetMouseButtonDown(0) || Input.GetKeyDown(KeyCode.Q) || Input.GetKey(KeyCode.Q))
            {
                Debug.Log("射线开始发射");

                RaycastHit Enemy;  // 存储射线返回的目标
                if (Physics.Raycast(RoleCurrPosition, RoleCurrDirection, out Enemy))  // 从主角的位置和方向发射射线
                {
                    Debug.Log(Enemy.transform.name);  // 输出被射线击中的目标的名称
                    GameObject TempOBJ = Enemy.transform.gameObject;
                    Debug.Log("射线发射摧毁目标");

                    if (Emeny.transform.name != "Role")  // 如果被射线击中的目标不是主角本身
                    {
                        Destroy(TempOBJ);  // 销毁被击中的目标
                    }
                }

                Debug.DrawLine(RoleCurrPosition, RoleCurrDirection * RayDistance, Color.red);
                // 在场景中绘制一条红色的线,用于显示射线的路径(注意:这个线只在编辑器中可见,最终游戏中不会显示)
            }
        } while (false);
    }
}

向鼠标点击的位置发射射线并且返回物体请看链接:

学习Unity射线的创建使用_unity 在射线位置创建物体-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue中对路由的进阶学习

路由进阶 文章目录 路由进阶1、路由的封装抽离2、声明式导航2.1、导航链接2.2、高亮类名2.3、跳转传参2.4、动态路由参数可选符 3、Vue路由--重定向4、Vue路由--4045、Vue路由–模式设置6、编程式导航6.1、基本跳转6.2、跳转传参 路由基础入门 1、路由的封装抽离 问题&#x…

智慧办公数据可视化大屏设计(数据可视化)、大数据、数据大屏、办公数据大屏、办公数据

本次分享的作品是用软件Axure8.0(兼容9和10)制作的智慧办公数据进行的可视化大屏设计,主要是针对办公的综合数据、工位数据、会议室数据、访客数据、能耗数据以及设备智控数据进行可视化数据分析。 1、综合分析:对办公室的整体数据、空气质量…

Python数据分析实战-实现Mann-Whitney U检验(附源码和实现效果)

实现功能 使用scipy.stats模块中的mannwhitneyu函数来实现Mann-Whitney U检验,该检验用于比较两个独立样本的分布是否有显著差异。 实现代码 from scipy.stats import mannwhitneyu# 两个独立样本的数据 group1 [1, 2, 3, 4, 5] group2 [6, 7, 8, 9, 10]# 执行…

如何压缩视频?视频压缩变小方法汇总

视频是我们日常生活中不可或缺的一部分,但视频文件往往会占用大量存储空间,这在传输和分享过程中可能成为一个瓶颈。 为了解决这一问题,我们可以通过压缩的方式减小视频大小,视频压缩是指在保证视频质量的前提下,通过…

2023年中国胆道镜市场规模及行业现状,一次性胆道镜市场初具规模[图]

胆道镜是为胰胆管的内窥镜检查和内窥镜手术设计的医用光学内窥镜。肝胆管结石是我国常见的一种胆道疾病,病情较为复杂,且复发率较高,手术质量续期较高,胆道镜已由硬质胆道镜、纤维胆道镜,发展到目前的电子胆道镜。 胆…

SettingsView/设置页 的实现

1. 创建设置视图 SettingsView.swift import SwiftUI/// 设置页面 struct SettingsView: View {/// 环境变量,呈现方式:显示或者关闭Environment(\.presentationMode) var presentationMode/// 默认网址let defaultURL URL(string: "https://www.…

TensorFlow入门(十九、softmax算法处理分类问题)

softmax是什么? Sigmoid、Tanh、ReLU等激活函数,输出值只有两种(0、1,或-1、1或0、x),而实际现实生活中往往需要对某一问题进行多种分类。例如之前识别图片中模糊手写数字的例子,这个时候就需要使用softmax算法。 softmax的算法逻辑 如果判断输入属于某一个类的概率大于属于其…

NginxWebUI runCmd 远程命令执行漏洞复现 [附POC]

文章目录 NginxWebUI runCmd 远程命令执行漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 NginxWebUI runCmd 远程命令执行漏洞复现 [附POC] 0x01 前言 免责声明:请勿利用文章内的相…

web入门---tomcat请求响应

Tomcat 介绍 Web 服务器是一个软件程序,对 HTTP协议的操作进行封装,使得不必直接对协议进行操作,让 web 开发更加便捷。主要功能是“提供网上信息浏览服务”。 下载 tomcat 演示说明 这里有一个示例直接双击打开 index.html但是这个“打开…

ai智能写作MAX:一款强大的AI写作工具

在数字时代的今天,人们对高质量内容的需求越来越迫切。无论是企业宣传、网站推广还是个人创作,优质的文案都能为你带来更多的曝光和转化率。然而,写作并非每个人的强项,许多人遇到了创作瓶颈和写作困境。这时候,AI智能…

Web自动化测试工具哪家强? Selenium与Cypress的比较

随着互联网技术在全球范围内的迅速发展,各种基于浏览器的Web应用程序也已成为当今软件开发的主流。围绕如何更好、更有效的测试Web应用的技术也是层出不穷。Cypress和Selenium是目前广泛使用,且很有代表性的两种Web自动化测试工具。互联网上对Cypress和S…

知识增强语言模型提示 零样本知识图谱问答10.8+10.11

知识增强语言模型提示 零样本知识图谱问答 摘要介绍相关工作方法零样本QA的LM提示知识增强的LM提示与知识问题相关的知识检索 实验设置数据集大型语言模型基线模型和KAPIN评估指标实现细节 实验结果和分析结论 摘要 大型语言模型(LLM)能够执行 零样本cl…

网络安全概述——常见网络攻击与网络病毒、密码体制、安全协议等

目录 1、信息安全五大要素 2、常见的网络攻击类型 2-1)网络攻击的分类: 2-2)常见网络攻击: DOS 攻击的分类: 2-3)常见网络攻击的防范措施 3、计算机病毒 3-1)常见病毒的前缀及其简要描述…

Vuex的简介以及入门案例

🏅我是默,一个在CSDN分享笔记的博主。📚📚 🌟在这里,我要推荐给大家我的专栏《Vue》。🎯🎯 🚀无论你是编程小白,还是有一定基础的程序员,这个专栏…

测评6大最常见的免费开源报表

最近发现几款不错的开源报表,现在给大家分享一下,希望能带来帮助! 1、项目名称:积木报表 项目简介:积木报表,免费的企业级 WEB 报表工具。专注于 “专业、 易用 、优质” 的报表设计器和大屏设计器。支持打…

接口自动化测试详解(文档)

phpunit 接口自动化测试系列 Post接口自动化测试用例 Post方式的接口是上传接口,需要对接口头部进行封装,所以没有办法在浏览器下直接调用,但是可以用Curl命令的-d参数传递接口需要的参数。当然我们还以众筹网的登录接口为例,讲…

大数据之Hudi数据湖_版本兼容与Maven安装配置_解决Hudi与Hadoop3.0的兼容问题_编译hudi源码---大数据之Hudi数据湖工作笔记0002

然后我们来看一下,hudi我们这次安装的时候,各个组件的版本信息 这个hudi对各个版本的支持还是很多的,需要在安装的时候查一下 具体的 可以这样查一下 去看一下具体的hudi对spark的支持是多少,对flink的支持的版本是多少等等可以很容易查到 然后hudi

NSSCTF[SWPUCTF 2021 新生赛]hardrce(无字母RCE)

代码审计&#xff1a; 使用get方式请求给wllm传参 使用preg_match函数正则匹配过滤掉了一些符号 \t,\r,\n,\,\[,\^,\],\",\-,\$,\*,\?,\<,\>,\,\ 以及 [a-zA-Z] 即所有的大小写字母 如果传入内容满足这些条件则会执行eval函数 URL编码取反绕过正则实现RCE&…

【网络安全】「漏洞原理」(一)SQL 注入漏洞之概念介绍

前言 严正声明&#xff1a;本博文所讨论的技术仅用于研究学习&#xff0c;旨在增强读者的信息安全意识&#xff0c;提高信息安全防护技能&#xff0c;严禁用于非法活动。任何个人、团体、组织不得用于非法目的&#xff0c;违法犯罪必将受到法律的严厉制裁。 【点击此处即可获…

聊聊MySql索引的类型以及失效场景

文章目录 概念常见的索引1.B树索引2.哈希索引3.全文索引4.空间索引5.聚集索引 如何设计合理&#xff1f;1.明确索引需求2.选择索引列3.选择索引类型4.考虑索引维护开销5.设计联合索引6.删除不必要索引7.关注索引统计信息8.测试查询效果 常见不生效场景1.全表扫描2.索引列计算3.…