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

news2024/10/2 16:19:19

文章目录

  • 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.coloradmin.cn/o/1412822.html

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

相关文章

22.Lambda 表达式

Lambda 表达式 1. 概况2. 函数式接口3. 格式3.1 完整格式3.2 省略格式 4. 代码示例5. 输出结果6. 注意事项 学习Lambda表达式之前最好先学会 匿名内部类 1. 概况 Lambda 表达式是一种在编程中用来表示匿名函数的简洁语法。它是基于函数式编程风格的一种特性,最初在…

2024.1.26每日一题

LeetCode 边权重均等查询 2846. 边权重均等查询 - 力扣(LeetCode) 题目描述 现有一棵由 n 个节点组成的无向树,节点按从 0 到 n - 1 编号。给你一个整数 n 和一个长度为 n - 1 的二维整数数组 edges ,其中 edges[i] [ui, vi,…

微信小程序(十六)slot插槽

注释很详细&#xff0c;直接上代码 上一篇 温馨提醒&#xff1a;此篇需要自定义组件的基础&#xff0c;如果不清楚请先看上一篇 新增内容&#xff1a; 1.单个插槽 2.多个插槽 单个插糟 源码&#xff1a; myNav.wxml <view class"navigationBar custom-class">…

【C++】C++入门基础讲解(一)

&#x1f497;个人主页&#x1f497; ⭐个人专栏——C学习⭐ &#x1f4ab;点击关注&#x1f929;一起学习C语言&#x1f4af;&#x1f4ab; 导读 经过一段时间的C语言学习&#xff0c;我们以及基本掌握了C语言的知识&#xff0c;今天&#xff0c;我们就开始学习C&#xff0c;…

网络安全相关知识点总结

网络安全背景 网络空间安全 --- Cyberspace 2003年美国提出网络空间的概念 --- 一个由信息基础设施组成的互相依赖的网络。 我国官方文件定义&#xff1a;网络空间为继海&#xff0c;陆&#xff0c;空&#xff0c;天以外的第五大人类活动领域 阶段的变化&#xff1a; 通信保密阶…

七通道NPN 达林顿管GC2003,应用于计算机,工业和消费类产品中

GC2003 内部集成了 7 个 NPN 达林顿晶体管&#xff0c;连接的阵列&#xff0c;非常适合逻辑接口电平数字电路&#xff08;例 如 TTL&#xff0c;CMOS 或PMOS 上/NMOS&#xff09;和较高的电流/电压&#xff0c;如电灯电磁阀&#xff0c;继电器&#xff0c;打印机或其他类似的负…

Android App开发基础(1)—— App的开发特点

本文介绍基于Android系统的App开发常识&#xff0c;包括以下几个方面&#xff1a;App开发与其他软件开发有什么不一样&#xff0c;App工程是怎样的组织结构又是怎样配置的&#xff0c;App开发的前后端分离设计是如何运作实现的&#xff0c;App的活动页面是如何创建又是如何跳转…

基于frp工具实现内网穿透,跨局域网远程SSH登录

文章目录 一.概述1.1 为什么要内网穿透&#xff1f;1.2 什么是frp&#xff1f; 二.frp安装管理流程2.1 frp下载2.2 部署2.3 通过systemd系统服务管理启动程序 三.frp配置测试&#xff08;通过SSH访问内网机器C&#xff09;3.1 服务端配置文件frps.toml修改3.2 客户端配置文件fr…

开源模型部署及使用

开源模型部署及使用 1.Langchain-Chatchat1.环境2.运行3.效果 2.facefusion1.环境2.运行3.效果 3.Aquila1.环境2.运行 1.Langchain-Chatchat Langchain-Chatchat这里面可以调用许多模型&#xff0c;我本地下载了chatglm3模型文件&#xff0c;所以就用这个模型。 1.环境 根据…

Python如何实现队列的同步实现

队列 q Queue.Queue(maxsize 10) 创建一个“队列”对象。Queue.Queue类即是一个队列的同步实现。队列长度可为或者有限。可通过Queue的构造函数的可选参数maxsize来设定队列长度。如果maxsize小于1就表示队列长度。 q.put()方法在队尾插入一个项目。put()有两个参数&#x…

解决Windows系统本地端口被占用

目录 一、被程序占用端口 1.通过终端杀掉占用端口的进程 2.任务管理器 二、被系统列为保留端口 前言&#xff1a; 首先了解为什么会出现端口被占用的情况 端口被占用的情况可能出现的原因有很多&#xff0c;主要有以下几点&#xff1a; 1.多个应用程序同时启动&…

如何对图片进行引用。

问题描述&#xff1a;如何对图片进行引用。 问题解答&#xff1a; 在图片描述处和图片标题处引用即可。

【C++11并发】mutex 笔记

简介 在多线程中往往需要访问临界资源&#xff0c;C11为我们提供了mutex等相关类来保护临界资源&#xff0c;保证某一时刻只有一个线程可以访问临界资源。主要包括各种mutex&#xff0c;他们的命名大都是xx_mutex。以及RAII风格的wrapper类&#xff0c;RAII就是一般在构造的时…

光伏设计——光伏合作的几种方式

鹧鸪云 随着光伏产业的发展&#xff0c;越来越多的企业和组织选择通过合作来提高效率、降低成本、实现共赢。以下是几种常见的光伏合作方式&#xff1a; 合资企业&#xff1a;合资企业是一种常见的合作方式&#xff0c;两个或多个公司共同出资、共同经营&#xff0c;共享利润和…

学习笔记-李沐动手学深度学习(四)(12-13,权重衰退、L2正则化、Dropout)

总结 【trick】过拟合及正则化项参数的理解 实际数据都有噪音&#xff0c;一般有噪音后&#xff0c;模型实际学习到的权重w就会比 理论上w的最优解&#xff08;即没有噪音时&#xff09;大。&#xff08;QA中讲的&#xff09; 【好问题】 &#xff08;1&#xff09;不使用正…

Java强训day4(选择题编程题)

选择题 接口中的方法是为了让重写编程题 题目 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int a_b sc.nextInt();int b_c sc.nextInt();int ab sc.nextInt();int bc sc.nextInt();for(in…

HttpHeaders 源码中headers成员变量为什么声明为final

源码如下 public class HttpHeaders implements MultiValueMap<String, String>, Serializable {private final Map<String, List<String>> headers;public String getFirst(String headerName) {List<String> headerValues (List)this.headers.get(…

THM学习笔记——OSI模型和TCP/IP模型

全是文字 比较枯燥 建议视频 OSI模型由七个层次组成&#xff1a; 第7层 -- 应用层&#xff1a; OSI模型的应用层主要为在计算机上运行的程序提供网络选项。它几乎专门与应用程序一起工作&#xff0c;为它们提供一个界面以用于传输数据。当数据传递到应用层时&#xff0c;它…

3dmax效果图渲染出现曝光怎么解决?

在使用3ds Max完成效果图渲染工作时&#xff0c;有时会遇到曝光过度的问题&#xff0c;这会使得渲染的图像出现光斑或者过亮&#xff0c;损害了效果的真实感和美观度。那么解决解决3dmax曝光问题呢&#xff1f;一起看看吧&#xff01; 3dmax效果图渲染出现曝光解决方法 1、相机…

yml配置文件怎么引用pom.xml中的属性

目录 前言配置测试 前言 配置文件中的一些参数有时要用到pom文件中的属性&#xff0c;做到pom文件变配置文件中也跟着变&#xff0c;那如何才能做到呢&#xff0c;下面咱们来一起探讨学习。 配置 1.首先要在pom.xml中做如下配置&#xff0c;让maven渲染src/main/resources下配…