Unity学习之坦克游戏制作(2)游戏场景的制作

文章目录

  • 1. 基础场景的搭建
  • 2. 游戏主面板
    • 2.1 拼出面板
    • 2.2 创建新面板
    • 2.3 设置面板复用
    • 2.4 退出界面
  • 3. 坦克基类
    • 3.1 创建基类脚本
      • 3.1.1 基类基本属性
      • 3.1.2 抽象开火函数
      • 3.1.3 受伤虚函数
      • 3.1.4 死亡虚函数
  • 4 玩家——基础移动旋转摄像机跟随
  • 4.1 玩家对象脚本
    • 4.2 控制坦克移动
    • 4.3 先实现部分函数
    • 4.4 设置摄像机跟随玩家
  • 5 小地图
    • 5.1 创建新的摄像机和贴图
    • 5.2 控制摄像机移动的脚本
  • 6 武器和子弹对象
    • 6.1 武器脚本
    • 6.2 子弹脚本
    • 6.3 武器奖励对象和获取特效
    • 6.3.1 随机武器
    • 6.4 属性奖励相关
      • 6.4.1 属性奖励脚本
  • 7 可击毁箱子
    • 7.1 箱子预设体
    • 7.2 脚本
  • 8 固定不动的敌人
  • 9 移动的敌人
    • 9.1 坦克移动
    • 9.2 坦克一直盯着玩家
  • 10 怪物血条
  • 10 通关点


1. 基础场景的搭建

切换到GameScene,进行场景的搭建
在这里插入图片描述

2. 游戏主面板

得分、血量、设置退出等

2.1 拼出面板

在这里插入图片描述

2.2 创建新面板

在这里插入图片描述

在这里插入图片描述
提供方法更新面板
在这里插入图片描述

在这里插入图片描述
通过帧间隔时间 进行累加 会比较准确

在这里插入图片描述

在Start函数中测试
在这里插入图片描述

2.3 设置面板复用

复用设置面板
直接从BeginScene中把root中的Setting面板复制,然后在GameScene的root中复制
在btn中增加监听界面
在这里插入图片描述
现在运行会报错,因为Music对象找不到
在这里插入图片描述
所以同时可以复用开始场景的背景音乐 ,把 开始场景的BKMusic拖过来直接用
但这时候还是会报错,在点击关闭的时候,之前的逻辑是显示主菜单的界面,但这里没有主菜单,所以报错

所以在SettingPanel 中,进行判断

在这里插入图片描述

2.4 退出界面

点击退出后,弹出确定面板
在这里插入图片描述

创建脚本
在这里插入图片描述

别忘了在GamePanel里面增加显示的监听事件
在这里插入图片描述
在打开游戏设置 和 退出游戏面板的时候,暂停时间的增加

在点击事件的时候,将时间缩放量改为0
在这里插入图片描述
在隐藏设置面板和退出面板的时候 将缩放量改回来
在这里插入图片描述

3. 坦克基类

在这里插入图片描述

3.1 创建基类脚本

3.1.1 基类基本属性

在这里插入图片描述

3.1.2 抽象开火函数

在这里插入图片描述

3.1.3 受伤虚函数

在这里插入图片描述

3.1.4 死亡虚函数

在死亡是Destory该对象 并且播放 相应的特效
创建gameobject用来关联特效
在这里插入图片描述
在这里插入图片描述

4 玩家——基础移动旋转摄像机跟随

4.1 玩家对象脚本

继承坦克基类
在这里插入图片描述

4.2 控制坦克移动

在这里插入图片描述

还有炮台旋转
由于敌人和玩家都能旋转炮台,所以在基类中添加成员属性

在这里插入图片描述
脚本拖入 场景中的玩家坦克,并关联头部
现在应该能WS前后移动 AD旋转 鼠标转动头部

4.3 先实现部分函数

在这里插入图片描述

4.4 设置摄像机跟随玩家

在这里插入图片描述
把摄像机拖到炮台上,并设置一下XYZ轴让其对准坦克的炮台

5 小地图

5.1 创建新的摄像机和贴图

在这里插入图片描述
拖入摄像机的目标贴图
在这里插入图片描述
拖入UI 的map 组件
在这里插入图片描述

5.2 控制摄像机移动的脚本

在这里插入图片描述

把Player 拖入 target中
在这里插入图片描述

6 武器和子弹对象

在这里插入图片描述
选择一个武器拖入玩家的Weapon槽中
在这里插入图片描述
在这里插入图片描述

武器炮口
也会有多个子弹的武器
在这里插入图片描述

6.1 武器脚本

在这里插入图片描述
关联预设体

在这里插入图片描述
在玩家脚本中 声明一个transform 来关联武器,命令武器发射
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
因为受伤函数需要知道 谁打得我,所以在武器脚本中关联下谁发射的子弹
在这里插入图片描述
在这里插入图片描述

6.2 子弹脚本

在这里插入图片描述
改变一下武器的预设体,由于不想动原有预设体,所以创建新的预设体
重新关联bullet
在这里插入图片描述

在这里插入图片描述
此时按发射能动起来

在这里插入图片描述
给子弹添加物理效果,并设置为触发器

在这里插入图片描述
会有往下落的效果
在这里插入图片描述
脚本中增加碰撞触发函数

在这里插入图片描述
创建新层级
在这里插入图片描述
把墙壁的层级都改为Cube

在这里插入图片描述
设置武器拥有者
在这里插入图片描述
让子弹在发射的时候计算伤害

设置子弹销毁时的特效
在这里插入图片描述
在这里插入图片描述

爆炸特效中有Audio Source组件
所以创建时改音效的音量和开启状态

6.3 武器奖励对象和获取特效

创建多个武器预设体
在这里插入图片描述

关联子弹

同理创建新子弹
在这里插入图片描述
在这里插入图片描述

6.3.1 随机武器


在做主页面时做过一个旋转的脚本,直接拖进来
在这里插入图片描述
运行时自动转
把这个做成触发器

创建武器奖励的脚本,让Player层的碰撞器碰到后就销毁自己

在这里插入图片描述
将武器预设体存储在脚本中,并随机给玩家发放武器

所以此时玩家应该拥有一个给外界提供的给自己切换武器的方法
到Player的脚本中增加
在这里插入图片描述

然后在Weapon中调用这个方法

在这里插入图片描述

在Player脚本中记录武器位置,让武器装载在这上面
在这里插入图片描述

6.4 属性奖励相关

套路和武器差不多
创建预设体拖入旋转脚本设置为Trigger
在这里插入图片描述

6.4.1 属性奖励脚本

在这里插入图片描述
给各个预设体批量添加该脚本,并设置Type
在这里插入图片描述
触发的事件
在这里插入图片描述
设置特效
在这里插入图片描述
在这里插入图片描述

7 可击毁箱子

7.1 箱子预设体

在这里插入图片描述
其中有一个碰撞器
在这里插入图片描述

7.2 脚本

1打到自己的子弹 应该销毁
2 打到箱子 随机创建奖励的逻辑

把箱子Tag改成cube,之前子弹逻辑中处理过打中cube自动销毁
在这里插入图片描述
在这里插入图片描述
关联奖励
在这里插入图片描述
为箱子销毁添加特效
在这里插入图片描述
在cube销毁自己前放特效
在这里插入图片描述
在这里插入图片描述
加上自动销毁AudioSource 的脚本

在这里插入图片描述

8 固定不动的敌人

拖入一个固定不动的敌人,让其头部自动旋转,在UI设计时我们已经写过头部旋转相关
在这里插入图片描述

在这里插入图片描述
让其在间隔时间发子弹
创建脚本,让其继承坦克基类
实现实例化子弹和让其知道打了谁

我们在子弹脚本中已经有一个setFather
在这里插入图片描述
实现开火函数
在这里插入图片描述

在UPdate中设置在间隔时间发射子弹
在这里插入图片描述

设定上这类坦克不会被 摧毁
所以重写受伤函数,让其在函数中什么都不做

在这里插入图片描述
拖入脚本到塔类坦克中,关联子弹

在这里插入图片描述
设置子弹打到塔类坦克会触发特效,并且不会穿过
加一个Tag
在这里插入图片描述
在这里插入图片描述

增加判断条件,如果阵营不相同,会触发子弹命中特效
在这里插入图片描述

在这里插入图片描述
判断是否受伤,通过里氏替换原则
在这里插入图片描述

9 移动的敌人

实现来回移动
坦克要一直盯着玩家
当目标到达一定范围内要攻击玩家

9.1 坦克移动

在这里插入图片描述

往randomPos 里增加几个点,增加一个函数,让坦克随机往这几个点移动
在这里插入图片描述

在这里插入图片描述
在Update函数里判断是否到达了另一个点
在这里插入图片描述
拖入脚本测试
创建两个空gameobject
在这里插入图片描述
在这里插入图片描述
拖入脚本中
在这里插入图片描述

9.2 坦克一直盯着玩家

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
当我和他的距离在一定范围内,会攻击玩家
在这里插入图片描述

重写Fire函数
由于坦克可能有几个开火点,跟tower一样设置炮口和子弹
在这里插入图片描述
在这里插入图片描述
关联发射点,并改变怪物标识

设置击败敌方并给玩家加分

在这里插入图片描述

10 怪物血条

在这里插入图片描述

在怪物脚本中直接创建
声明血条的背景 黑色部分 和血条剩余部分 白色部分

在这里插入图片描述
在这里插入图片描述

设置只有受伤才会显示血条
在这里插入图片描述
在这里插入图片描述

10 通关点

添加一个点
在这里插入图片描述
添加碰撞器
在这里插入图片描述
判断碰撞,让玩家通关
由于还没有通关界面,所以直接转到主菜单
在这里插入图片描述
拖入脚本

游戏场景自行构建

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

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

相关文章

移动端打包成功后禁止生成 report.html 文件,并不自动打开该文件

目录 【问题】移动端 npm run build 打包后生成并打开 report.html 文件package.json 文件vue.config.js 代码 【解决】打包后去除 report.html 文件vue.config.js 代码 参考 【问题】移动端 npm run build 打包后生成并打开 report.html 文件 package.json 文件 {"name&…

蓝牙----蓝牙协议栈L2CAP

蓝牙协议栈----L2CAP L2CAP的功能术语介绍L2CAP信道L2CAP的工作模式经典蓝牙的分段和分解过程 L2CAP—逻辑链路控制和适配层协议 L2CAP的功能 经典蓝牙的L2CAP层实现了协议复用、数据分段与重组、封装调度等操作。BLE的L2CAP层是经典蓝牙L2CAP层的简化版本: 在基…

爬虫js逆向分析——x平台(实现)

爬虫js逆向分析——x平台(实现) (仅供学习,本案例只是分析流程没有账号)网址:https://xuexi.chinabett.com/ 1.分析请求包格式 打开控制台,并勾选保存日志,然后点击登录看发送了什…

ICSpector:一款功能强大的微软开源工业PLC安全取证框架

关于ICSpector ICSpector是一款功能强大的开源工业PLC安全取证框架,该工具由微软的研究人员负责开发和维护,可以帮助广大研究人员轻松分析工业PLC元数据和项目文件。 ICSpector提供了方便的方式来扫描PLC并识别ICS环境中的可疑痕迹,可以用于…

Unity配置表xlsx/xls打包后读取错误问题

前言 代码如下: //文本解析private void ParseText(){//打开文本 读FileStream stream File.Open(Application.streamingAssetsPath excelname, FileMode.Open, FileAccess.Read, FileShare.Read);//读取文件流IExcelDataReader excelRead ExcelReaderFactory…

vue实现甘特图

目录 实现效果 一、安装依赖 二、使用 二、绕过license 实现效果 一、安装依赖 npm i --save vue-gantt-schedule-timeline-calendar 实现甘特图需先安装上述依赖,安装依赖实际上是通过gantt-schedule-timeline-calendar来实现的。所以node_module中因包含以下…

JQuery下载和一些语法

最近学了六种jQuery选择器,我想把学过案例和知识结合起来,给大家分享下! 那么既然学jQuery选择器,肯定要先了解下jQuery是什么吧!jQuery是一个快速、简洁的JavaScript框架,相当于用jQuery能更加高效的创建…

【快影】怎么制作卡拉OK字幕

您好,您添加了字幕之后可以添加动画,选择卡拉OK,其中 卡拉OK1是支持修改颜色的,卡拉OK2只支持修改文字的底色。

Denoising diffusion implicit models 阅读笔记2

Denoising diffusion probabilistic models (DDPMs)从马尔科夫链中采样生成样本,需要迭代多次,速度较慢。Denoising diffusion implicit models (DDIMs)的提出是为了在复用DDPM训练的网络的前提下,加速采样过程。 加速采样的基本思路是&#…

geemap学习笔记052:影像多项式增强

前言 下面介绍的主要内容是应用Image.polynomial() 对图像进行多项式增强。 1 导入库并显示地图 import ee import geemap ee.Initialize() Map geemap.Map(center[40, -100], zoom4)2 多项式增强 # 使用函数 -0.2 2.4x - 1.2x^2 对 MODIS 影像进行非线性对比度增强。# L…

创建第一个 Spring 项目(IDEA社区版)

文章目录 创建 Spring 项目创建一个普通的 Maven 项目添加 Spring 依赖IDEA更换国内源 运行第一个 Spring 项目新建启动类存储 Bean 对象将Bean注册到Spring 获取并使用 Bean 对象 创建 Spring 项目 创建一个普通的 Maven 项目 首先创建一个普通的 Maven 项目 添加 Spring 依…

全面解析开源大语言模型:BLOOM

大型语言模型 (LLM) 的兴起一直是自然语言处理 (NLP) 领域的一个决定性趋势,导致它们在各种应用程序中的广泛采用。然而,这种进步往往是排他性的,大多数由资源丰富的组织开发的 LLM 仍然无法向公…

什么是servlet

什么是servlet 什么是servlet Servlet(Server Applet)是 Java Servlet 的简称,称为小服务程序或服务连接器,用 Java 编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据…

java数据结构与算法刷题-----LeetCode769. 最多能完成排序的块

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 解题思路 这道题可以理解为,只能保证块内有序的情况下&#xf…

大模型学习笔记一:大模型应用开发基础

文章目录 一、大模型一些概念介绍 一、大模型一些概念介绍 1)产品和大模型的区别(产品通过调用大模型来具备的能力) 2)AGI定义 概念:一切问题可以用AI解决 3)大模型通俗原理 根据上文,猜测下…

WordPress反垃圾评论插件Akismet有什么用?如何使用Akismet插件?

每次我们成功搭建好WordPress网站后,都可以在后台 >> 插件 >> 已安装的插件,在插件列表中可以看到有一个“Akismet反垃圾邮件:垃圾邮件保护”的插件(个人觉得是翻译错误,应该是反垃圾评论)。具…

vue实现在线Excel表格功能

目录 1.安装x-data-spreadsheet xlsx 2.引入 3.使用 1.安装x-data-spreadsheet xlsx npm i x-data-spreadsheet xlsx2.引入 import zhCN from "x-data-spreadsheet/src/locale/zh-cn"; import Spreadsheet from "x-data-spreadsheet"; import * as X…

【c++】高精度算法(洛谷刷题2024)乒乓球详解

系列文章目录 第一题 乒乓球 视频:http://【洛谷题单 - 算法 - 高精度】https://www.bilibili.com/video/BV1Ym4y1s7BD?vd_source66a11ab493493f42b08b31246a932bbb 目录 系列文章目录 第一题 乒乓球 前言 一、题目以及引领思考 二、题解与代码 1.输入输出案例 …

C语言实现快速排序算法(附带源代码)

快速排序 在区间中随机挑选一个元素作基准,将小于基准的元素放在基准之前,大于基准的元素放在基准之后,再分别对小数区与大数区进行排序。 动态效果过程演示: 快速排序(Quick Sort)是一种常用的排序算法&…

WIFI电路原理时序检修思路

uart是串口,bt是蓝牙,hsic是高速接口。pcm是音频接口。时序图的第五步是发出就绪信号,然后第六步与门发出就绪信号。 wifi芯片是u8_rf。 特别说明:short表示短接。xw表示实际是看不到物体的,是直接相连的。 找信号50_…