Unity2D 街机风太空射击游戏 学习记录 #12环射道具的引入

概述

这是一款基于Unity引擎开发的2D街机风太空射击游戏,笔者并不是游戏开发人,作者是siki学院的凉鞋老师。

笔者只是学习项目,记录学习,同时也想帮助他人更好的学习这个项目

作者会记录学习这一期用到的知识,和一些代码逻辑。

项目地址:学习地址

由于笔者已经跟着视频做了10期,所以这个记录博客不会很连贯。

这里笔者也把自己跟做的项目开源到了码云上
项目地址

1 引入新的道具图标

为什么要取消勾选Generate Physics Shapes
在这里插入图片描述
如果勾选了Generate Physics Shapes,Unity就会自动给当前游戏物体增加碰撞体积,使该物体能和其他碰撞体进行碰撞。

2 PowerUpCircle 脚本

吃到这个道具的代码逻辑跟吃到隐身和散射是一样的。

start方法中使得道具刷新出来之后向屏幕中心移动
update方法中检测道具是否超出屏幕,如果超出屏幕则销毁这个游戏对象

道具向世界坐标系原点 (0,0) 直线移动的逻辑

向量的归一化

当我们只关心向量的方向,而不关心长度的时候,可以考虑对向量进行归一化。所谓归一化,就是将向量的长度转变为1,而其方向不发生变化。

在Unity/C#中,我们可以用nornalized将一个Vector2向量进行归一化。

transform.position是获取当前物体在世界坐标系中的位置坐标
transform.position.nornalized是将这个坐标向量转化为方向(方向相同,但是长度为1)
GetComponent<Rigidbody2D>().velocity 获取该游戏对象的Rigidbody2D组件,设置其速度方向为指向世界坐标系原点但是大小为1的向量,由于有负号,所以方向会反转
这样道具生成之后就会向世界坐标系原点进行移动。

在这里插入图片描述

吃到道具的逻辑

这里跟吃到前面隐身和散射道具的逻辑是一样的。
Player脚本的OnTriggerEnter2D方法中,通过
other.gameObject.name.StartsWith("powerUp")
当主角碰撞到到的游戏对象的名字以powerUp开头的时候,就可以通过下面的方法去获得该游戏对象上面的道具组件,如果不是空,则代表吃到了对应的道具。
var ghost = other.gameObject.GetComponent<PowerUpGhost>()
var spread = other.gameObject.GetComponent<PowerUpSpread>()
var circle = other.gameObject.GetComponent<PowerUpCircle>()

环射的实现

            // 吃到了子弹环射道具if (powerUpCircle != null){// 更新射击子弹状态isPowerUpCircle = true;// 播放音效transform.Find("SfxPowerUp").GetComponent<AudioSource>().Play();// 播放特效ParticleSystem fx = Instantiate(Game.Default.powerUpFx, null);fx.transform.position = other.transform.position;fx.gameObject.SetActive(true);fx.Play();// 右上角道具显示Sprite icon = Game.Default.powerUpCircle.GetComponent<SpriteRenderer>().sprite;// 回调函数,倒计时结束之后隐藏隐身文本Game.Default.uiPowerUps.AddPowerUp(icon,  3, () => {isPowerUpCircle = false;// 倒计时结束之后隐藏隐身文本});Destroy(other.gameObject);}

道具掉落的随机逻辑

在这里插入图片描述

通过全局管理类Game克隆一个环射道具预制体
将其位置设置到子弹碰撞的位置
然后将其绑定的游戏对象进行显形

这里为什么要用克隆

如果直接修改原预制体会影响后续所有生成的对象,所以我们克隆一个。

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

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

相关文章

网站如何启用HTTPS访问?本地内网部署的https网站怎么在外网打开?

在互联网的世界里&#xff0c;数据安全已经成为了每个网站和用户都不得不面对的问题。近期&#xff0c;网络信息泄露事件频发&#xff0c;让越来越多的网站开始重视起用户数据的安全性&#xff0c;因此启用HTTPS访问成为了一个热门话题。作为一名网络安全专家&#xff0c;我希望…

计算机网络-----详解网络原理TCP/IP(上)

文章目录 &#x1f4d5;1. UDP协议✏️1.1 UDP的特点✏️1.2 基于UDP的应用层协议 &#x1f4d5;2. TCP协议✏️2.1 TCP协议段格式✏️2.2 TCP协议特点之确认应答✏️2.3 TCP协议特点之超时重传✏️2.4 TCP协议特点之连接管理✏️2.5 TCP协议特点之滑动窗口✏️2.6 TCP协议特点…

Lora训练

一种大模型高效训练方式&#xff08;PEFT&#xff09; 目标&#xff1a; 训练有限的ΔW&#xff08;权重更新矩阵&#xff09; ΔW为低秩矩阵→ΔWAB&#xff08;其中A的大小为dr, B的大小为rk&#xff0c;且r<<min(d,k)&#xff09;→ 原本要更新的dk参数量大幅度缩减…

蓝牙 5.0 新特性全解析:传输距离与速度提升的底层逻辑(面试宝典版)

蓝牙技术自 1994 年诞生以来,已经经历了多次重大升级。作为当前主流的无线通信标准之一,蓝牙 5.0 在 2016 年发布后,凭借其显著的性能提升成为了物联网(IoT)、智能家居、可穿戴设备等领域的核心技术。本文将深入解析蓝牙 5.0 在传输距离和速度上的底层技术逻辑,并结合面试…

Minio使用https自签证书

自签证书参考&#xff1a;window和ubuntu自签证书_windows 自签证书-CSDN博客 // certFilePath: 直接放在 resources 目录下 或者可以自定实现读取逻辑 // 读取的是 .crt 证书文件public static OkHttpClient createTrustingOkHttpClient(String certFilePath) throws Excep…

汽车前纵梁焊接总成与冲压件的高效自动化三维检测方案

汽车主体结构件上存在很多安装位&#xff0c;为保证汽车装配时的准确性&#xff0c;主体结构件需要进行全方位的尺寸和孔位置精度检测&#xff0c;以确保装配线的主体结构件质量合格。 前纵梁焊接总成是车身框架的核心承载部件&#xff0c;焊接总成由多片钣金冲压件焊接组成&a…

F接口基础.go

前言&#xff1a;接口是一组方法的集合&#xff0c;它定义了一个类型应该具备哪些行为&#xff0c;但不关心具体怎么实现这些行为。一个类型只要实现了接口中定义的所有方法&#xff0c;那么它就实现了这个接口。这种实现是隐式的&#xff0c;不需要显式声明。 目录 接口的定…

cartographer官方指导文件说明---第3章 cartographer前端算法流程介绍

cartographer官方指导文件说明 第3章 cartographer前端算法流程介绍 3.1 Scan Match扫描匹配 扫描匹配&#xff08;Scan Matching&#xff09;是 Cartographer 中实现局部SLAM的核心技术&#xff0c;它通过优化算法将当前激光扫描数据对齐到子图地图中。下面从计算过程、数学…

汽车整车厂如何用数字孪生系统打造“透明车间”

随着工业4.0时代的发展&#xff0c;数字孪生技术已成为现代制造业的重要利器。特别是在汽车整车厂&#xff0c;通过数字孪生系统的应用&#xff0c;能够有效打造一个“透明车间”&#xff0c;实现生产过程的全面可视化与实时监控&#xff0c;提高生产效率&#xff0c;降低成本&…

openKylin适配RISC-V高性能服务器芯片,携手睿思芯科共拓智算新蓝海

3月31日&#xff0c;睿思芯科&#xff08;深圳&#xff09;技术有限公司&#xff08;简称“睿思芯科”&#xff09;2025春季新品发布会在深圳前海国际会议中心盛大举行&#xff0c;作为RISC-V领域的年度盛事&#xff0c;此次发布会吸引了众多业内目光。此次发布会上&#xff0c…

【已解决】lxml.etree.ParserError: Document is empty

本专栏解决日常生活工作中非快速找到解决方案的问题。 问题背景 在爬取某网站时&#xff0c;使用开源框架报错&#xff1a;lxml.etree.ParserError: Document is empty 解决方案 1、多个搜索引擎中查找&#xff0c;建议都是对lxml的python源码进行修改&#xff0c;不好用。…

mac电脑调试iphone真机safari网页

mac电脑调试iphone真机safari网页 start 本文主要是记录一下如何调试苹果手机上的safari的网页 方法 1.苹果手机打开 web检查器 操作步骤&#xff1a; 打开设置搜索safari最底部“高级”开启“网页检查器” 2.mac电脑打开safari 操作步骤&#xff1a; 先用数据线连接手机和…

opencv依据图像类型读取图像像素点

Mat数据类型和通道对应的type()&#xff1a; 库类型C1C2C3C4CV_8U081624CV_8S191725CV_16U2101826CV_16S3111927CV_32S4122028CV_32F5132129CV_64F6142230 通过c程序查看类型并读取图像像素点&#xff1a; switch (im->type()){case 0:std::cout << "at (&quo…

软件架构的发展历程——从早期的单体架构到如今的云原生与智能架构

软件架构的发展历程是技术演进与业务需求相互驱动的结果&#xff0c;从早期的单体架构到如今的云原生与智能架构&#xff0c;每一步都在突破系统的可扩展性、灵活性和效率边界。以下是其核心发展脉络及未来趋势的全景解析&#xff1a; 一、发展历程&#xff1a;从单体到智能的…

Oracle 基础语句大全:从数据定义到复杂查询

一、DDL&#xff08;数据定义语言&#xff09;&#xff1a;定义数据库结构 1. 创建表&#xff08;CREATE TABLE&#xff09; -- 语法格式 CREATE TABLE [schema.]table_name (column1 datatype [CONSTRAINT constraint1],column2 datatype [DEFAULT default_value],-- 表级约…

【学习笔记】锁+死锁+gdb调试死锁

【学习笔记】锁死锁gdb调试死锁 一、互斥锁&#xff08;std::mutex&#xff09; 最基本的锁类型&#xff0c;提供排他性访问&#xff0c;同一时间仅允许一个线程持有锁。 #include <iostream> #include <mutex> #include <thread>std::mutex mtx; // 全局…

Flutter中将bytes转换成XFile对象上传

在Flutter中将字节数据(bytes)转换为XFile对象并上传可以通过以下步骤实现&#xff1a; 1.字节数据转临时文件 首先需要将字节数据写入临时文件&#xff0c;可以使用dart的File类实现&#xff1a; final tempDir await getTemporaryDirectory(); final file File(${tempDi…

饼图:数据可视化的“切蛋糕”艺术

饼图&#xff0c;作为数据可视化家族中最经典、最易识别的成员之一&#xff0c;其核心功能如同其名——像切分蛋糕一样&#xff0c;直观展示一个整体&#xff08;100%&#xff09;被划分为若干组成部分的比例关系。 往期文章推荐: 20.用Mermaid代码画ER图&#xff1a;AI时代的…

Flutter - 原生交互 - 相机Camera - 曝光,缩放,录制视频

曝光 Flutter上CupertinoSlider组件的样式是iOS上的Slider,使用该组件控制曝光量, Camera插件提供的API是CameraController的 Future<double> setExposureOffset(double offset) async {... }最后调用iOS端的系统方法控制曝光值 - (void)setExposureTargetBias:(floa…

Python中布尔值在函数中的巧妙运用

在 Python 中&#xff0c;布尔值&#xff08;True 和 False&#xff09;不仅可以用于简单的条件判断&#xff0c;还可以在函数中发挥强大的作用。通过合理使用布尔值&#xff0c;你可以使函数更加灵活、高效且易于理解。今天&#xff0c;就让我们一起深入探讨如何在函数中巧妙运…