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

news2024/10/7 10:13:36

业务逻辑

这段代码实现了一个功能,当玩家按下鼠标左键或按下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/1076194.html

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

相关文章

SI314软硬件兼容替代GTX314L—低功耗14通道电容触摸传感器

Si314是一款具有自动灵敏度校准功能的14通道电容传感器,其工作电压范围为1.8~5.5V。 Si314设置休眠模式来节省功耗,此时,功耗电流为10uA3.3V。 Si314各个感应通道可实现独立使能、校准、灵敏度调节,可以确保可靠性,且具…

自动化测试框架有哪几种?搭建的思路是什么?完整指南奉上!

前言: 任何成功的自动化测试过程的关键组成部分都是测试自动化框架。降低维护成本,测试工作效率提升和提高质量保证团队的投资回报率ROI是优化敏捷流程时所提供的主要优势之一。 出于以下原因,自动化对于高效的测试过程至关重要&#xff1a…

迅为RK3588开发板使用 tflite 框架

1 TensorFlow Lite 是 TensorFlow 移动和嵌入式设备轻量级解决方案。它使设备机器学习具有低延迟和更小的二进制体积。TensorFlow Lite 同时支持 Android 神经网络 API 的硬件加速。 TensorFlow Lite 使用多项技术降低延迟,例如移动 app 内核优化、pre-fused 激活、…

目标检测数据集格式转换:txt格式转换为xml格式(以VisDrone数据集为例)

1.准备好两个文件夹 VisDroneTxt文件夹里面装的是原图片以及txt格式的标签 VisDroneVoc里面的labels文件夹是目标文件夹,用来装转换之后的xml格式标签 2.给出原转换程序 # .txt-->.xml # ! /usr/bin/python # -*- coding:UTF-8 -*- import os import cv2def t…

如何在 Spring Boot 中进行分布式追踪

在 Spring Boot 中进行分布式追踪 分布式系统中的应用程序由多个微服务组成,它们可以位于不同的服务器、容器或云中。当出现问题时,如性能瓶颈、错误或延迟,了解问题的根本原因变得至关重要。分布式追踪是一种用于跟踪和分析分布式应用程序性…

Ceph入门到精通-Nginx超时参数分析设置

nginx中有些超时设置,本文汇总了nginx中几个超时设置 Nginx 中的超时设置包括: “client_body_timeout”:设置客户端向服务器发送请求体的超时时间,单位为秒。 “client_header_timeout”:设置客户端向服务器发送请…

【Azure 架构师学习笔记】-Azure Data Factory (5) --Data Flow

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Data Factory】系列。 接上文【Azure 架构师学习笔记】-Azure Data Factory (4)-触发器详解-事件触发器 前言 Azure Data Factory, ADF 是微软Azure 的ETL 首选服务之一, 是Azure data platfor…

gogs和drone如何配合使用

上篇介绍了drone和gogs安装方法,这次介绍这两个如何使用,此篇文章主要介绍在物理机上进行发布。 此处用到的java项目地址:https://gitee.com/huningfei/demo-test 一 配置gogs 1.1 在Gogs中配置指定仓库的”.drone.yml“文件 1.2 ssh-drone…

美容院微信小程序怎么添加会员管理功能

要为美容院的微信小程序添加会员管理功能,需要遵循以下步骤: 一、明确会员管理功能的定位和目标 首先,要明确会员管理功能的定位和目标。会员管理功能是美容院微信小程序的重要功能之一,它能够帮助美容院更好地管理会员信息、了解…

Cobalt Strike 4.9

Cobalt Strike 4.9 1. 工具介绍1.1. 工具添加1.2. 工具获取 2. 工具使用2.1. 添加权限并运行2.2. 连接服务端2.3. 连接成功 3. 安全性自查 1. 工具介绍 CS 是Cobalt Strike的简称,是一款渗透测试神器,常被业界人称为CS神器。Cobalt Strike已经不再使用MS…

软件测试简历项目经验怎么写?大厂面试手拿把掐

前言 在写简历之前,我们先来看看失败者的简历和成功者的简历之间有什么区别。为什么成功者的简历可以在求职中起到“四两拨千斤”的作用,而失败者的简历却被丢进了垃圾桶,这两者到底有什么不同? 成功的简历与失败的简历 我们发现…

每日一面系列之@Component和@Configuration区别

Configuration 和 Component 到底有何区别呢?我先通过如下一个案例,在不分析源码的情况下,小伙伴们先来直观感受一下这两个之间的区别。 Configurationpublic class JavaConfig01 { }Componentpublic class JavaConfig02 { } 首先&#xff…

常见算法-双骰子游戏(Craps)

常见算法-双骰子游戏(Craps) 1、说明 一个简单的双骰子游戏,游戏规则如下: 玩家掷两个骰子,点数为1到6, 如果第一次点数和为7或11,则玩家胜,如果点数和为2、3或12,则…

使用Jetson AGX Orin进行口罩识别

在 https://gitee.com/gpus/maskDetection_jetson 代码仓有个口罩识别的案例,我们来看看能不能在Jetson AGX Orin上搞定。 先将该代码仓fork到自己的代码仓(以便魔改) 回到自己的代码仓: 根据README.md来操作吧! 首先…

Feign(替代RestTemplate)远程调用

Feign初步学习 定义 Feign 是一个基于 Java 的 HTTP 客户端库,它是 Spring Cloud 中的一部分,用于简化微服务之间的 HTTP 通信。与传统的使用 RestTemplate 来调用 RESTful 服务不同,Feign 提供了一种声明式、基于接口的方式来定义和调用 H…

YB2419是一款功能齐备,内置mos100%占空比高效率同步降压IC

产品描述: YB2419是一款功能齐备,应用极为简单,并兼顾应用的灵活性和广泛性,高性能,以及超高性价比的恒压恒流降压型DC-DC可持续输出4.2A,支持两路USB口同时输出。是一款输入耐压可达40V,4.5-40V输入电压条件正常工作&#xff0c…

基于SpringBoot的厨艺交流平台设计与实现

目录 前言 一、技术栈 二、系统功能介绍 食材分类管理 用户信息管理 菜谱分类管理 菜谱信息管理 食材信息管理 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 使用旧方法对厨艺交流信息进行系统化管理已经不再让人们信赖了,把现在的网络信息…

查找算法——二分查找法

一、介绍 首先需要将查找的数据排好序,再进行二分查找法来进行查找,二分查找是将数据范围不断分割为两份,不断比较中间值与待查找值的大小来确定其在哪个区间范围的一种方法。例如:在一组数据(1,4&#xff…

零基础Linux_14(基础IO_文件)缓冲区+文件系统inode等

目录 1. 缓冲区 1.1 缓冲区的存在 1.2 缓冲区的刷新策略 1.3 模拟C标准库中的文件操作 完整代码及验证: 1.4 重看缓冲区 1.5 stdout和stderr的区别 2. 文件系统 2.1 磁盘的物理结构CHS等 2.2 磁盘的抽象结构LBA等 2.3 文件管理inode等 2.4 对文件的操作…

Bytebase 2023 第三季度回顾

开工快乐!2023 的第三个季度转眼过去了,一起来看看 Bytebase 过去几个月干得如何? 📰 公司动态 Bytebase 突破百万下载。和 GitLab 签署 Technology Partner 技术合作伙伴协议。中东 Shopify 使用 Bytebase 构建一站式数据库开发…