【经典游戏】坦克大战 Unity2D项目实战(保姆级教程)

2023-11-10

主要内容:

1.Unity3D引擎中的基础设置。

2.2D场景的搭建,预制体制作。

3.2D动画的制作。

4.图片图集的有关知识。

5.碰撞器,触发器,碰撞检测与触发检测。

6.2D游戏渲染的一些知识。

7.敌人AI的编写。

8.UGUI有关内容,场景切换等。

所需资源包链接:https://pan.baidu.com/s/199wuwMiucKDQfZR54Skwxg?pwd=a6pa 
提取码:a6pa

————————————————————开始———————————————————

一、新建项目、导入资源

新建个2D项目,将所有的图片贴图模式改为2D ANDUI

 二、场景搭建

1.设置主摄像机:size(离屏幕位置)设置为8.5

2.Background设置为黑色游戏显示

3.窗口设置为 5:4

4.图集的加工:导入素材的Texture调整为Sprite(2D and UI),点击apply。

5.Sprite Mode:Multiple(图片的默认属性是single,这代表此图片在这里视为一个单独的精灵来处理)。

5.Sprite Mode:Multiple(图片的默认属性是single,这代表此图片在这里视为一个单独的精灵来处理)

切割图集(需要切割):点击Sprite Editor——Slice——Automatic ——点击Slice(调整大小,获得尺寸)——Grid By Size(按照固定大小切割)——点击Slice——自行切割找到合适尺寸,W28H28,将大小填入切割的尺寸即可。

三、游戏中预制体的制作,2D动画的制作

1.Play1拖入Hierarchy面板下

2.Unity开发以米为单位,将坦克Scale调整为3,3,3。改名为Player

3.在Project面板下,新建文件夹Prefabs存放预制体,拖入Player

4.再把Map下的石头、墙、水、草等拖入Hierachy面板下

5.解决每个图片都要调整大小问题:Sprite Render组件下的Sprite控制显示的图片,Ctrl+D复制几个一样的物体,再拖入图片到Sprite下。

 

 

6.创建存放动画和存放动画控制器的文件夹Animation和AnimatorControllerBorn

2D动画:鼠标单击选择第一张图片按住Shift选择最后一张图片,拖入Hierarchy面板下,弹出窗口命名动画名字,命名为Born,Hierarchy面板下改名为Born。大小调整为3,3 ,3

 

7.创建存放动画和存放动画控制器的文件夹Animation和AnimatorControllerBorn

2D动画:鼠标单击选择第一张图片按住Shift选择最后一张图片,拖入Hierarchy面板下,弹出窗口命名动画名字,命名为Born,Hierarchy面板下改名为Born。大小调整为3,3 ,3。控制器改名为BornController,与动画分别拖入相应文件夹下。

在预制体Prefabs文件夹下创建Map文件夹存放地图和Effect特效文件夹

同理,创建爆炸特效Boom和无敌效果Born2,河流Water取消显示摄像机Gizmos,叉掉Camera旁边的摄像机

 四、控制玩家的移动(Player脚本)

 1.创建新的文件夹Script,存放所有的脚本。

 2.创建(Player)脚本,添加在玩家坦克身上

3.控制游戏物体移动,在Update函数中后面因碰撞抖动问题需要改在FixedUpdate函数中,

 

 四、控制玩家的移动-不同方向移动的图片切换(Player脚本)

1.拿到Sprite组件,更改它的属性值

2.拿到渲染器的引用:

 3.在Awake函数中(一开始就拿到),Start函数之前

4.拿到切换图片的引用:并在Unity中分别把对应图片拖入

 

 五、碰撞器的添加,解决坦克旋转、抖动问题

1.发生碰撞的物体身上都应该有碰撞器,其中一方(最好是运动的一方)身上要有刚体。

给Player游戏物体添加Box Collider 2D(2D游戏碰撞器)和刚体Rigibody 2D,将重力改为0

 2.Map里所有的物体添加Box Collider 2D(2D游戏碰撞器),草不用,因为草可以通过

3.解决旋转问题:选择Player游戏物体,在Rigibody 2D下的Constraints勾选上z轴

 

4.解决抖动问题:Unity内置的生命周期函数(固定物理帧)

 

六、移动优先级的添加,2D渲染层级问题(Player脚本)

1.解决同时按两个键,斜着走的问题。垂直优先。先确定V

 

 2.然后把控制移动的代码封装成一个方法,在FixedUpdate中调用

 

3.渲染的优先级:Order in Layer层级越大,越后渲染。Born、Grass设置为1

4. 添加子弹,层级设置为1,拖入Tank文件夹下做成预制体。爆炸特效层级也设置为1

 

 七、坦克的攻击方法及子弹朝向(Player脚本)

1.拿到子弹预制体的引用,定义子弹旋转角度

2.当按下空格的时候实例化一个子弹

3.弹朝向问题的解决,移动方法的编写。旋转图片——旋转Z轴

八、子弹移动脚本,攻击CD的加入

1.创建子弹的脚本(BulletFly),在Update里面设置子弹移动

 

 

2.设置子弹CD(Player脚本)
设置计时器 同时将子弹实例化的方法中加入使得每次射击后时间归零

 

3.给子弹添加触发器,给子弹添加Rigidbody2D,重力设置为0。

 

 九、空气墙的制作,标签的添加

1.找到不可通过及消灭的岩石,将其贴图删除即可成为空气墙

2.给每个预制体添加对应的Tag(标签)

3.在(BulletFly脚本)添加完善碰撞检测

 

 十、玩家无敌方法与死亡方法的编写(Player脚本)

1.声明爆炸特效、保护特效、是否复活、无敌时间

2. 坦克死亡方法

 3. 坦克无敌方法

 4.将无敌特效放置为坦克的子物体,并将其渲染层级改为-1

 十一、区别玩家的子弹与敌人的子弹

 1.在(BulletFly脚本)中加入判断语句,是否为玩家子弹

2.为玩家坦克生成子弹的时候添加一条语句(Player脚本)

十二、制作玩家出生特效(Born脚本)

1.新增Born脚本用于玩家的初始生成

2.在Unity中将玩家坦克预制体拖入

 十三、敌人出生特效(Born脚本)

用同样的产生特效随机生成两种敌人,改写Born脚本代码,并在Unity中拖入制作好的两种敌人预制体

 十四、敌人AI的编写(Enemy脚本)

1.新建(Enemy脚本)编写敌人自动攻击和移动的代码,将Player脚本复制进去,并进行修改。

修改攻击方法,不需要摁下空格键攻击,会自动攻击

2.修改移动方法 

 

 十五、在地图上生成不同元素(MapCreation脚本)

1.新建个空物体命名“MapController”,赋予新脚本“MapCreation”.

2.使用数组存放所有元素,在Unity中拖放好

 

3. 写一个实例化物体的方法(可以将实例化出的物体作为子物体放置在脚本所在物体下)

 4.找好老家的位置,空气墙的位置,通过封装好的实例化物体的方法进行实例化

 5.在随机产生墙、水、敌人、障碍、草的物体时,需要采用数组来记录已经使用过的位置,防止一个位置上实例化两个物体

6.写一个随机产生位置的方法

7.判断位置列表中是否有与产生位置重复

 8.实例化游戏中的元素、玩家、敌人

十六、玩家重生、得分(PlayerController脚本)

 1.新建脚本“PlayerController”,实例化instance

 2.Ctrl+R+E可快速部署

 3.实例化单例

 4.声明生命值、得分、是否死亡

 5.重生的方法(若生命值0返回开始界面)

 6.在Update中调用重生方法

 7.若玩家死亡在“Player脚本”中,找到死亡方法,添加调用isDead的属性值

 

 8.若敌方死亡在“Enemy脚本”中,找到死亡方法,添加调用Score的属性值

 十七、UI制作

1.将资源中的 作为5:4背景底色,将主摄像机的颜色调为灰色

2.游戏窗口比例设为16:10

3.使用Image、Text制作得分和生命值

4.(PlayerManager脚本)公开两个文本属性,在Unity中赋值

 5.在Update中让文本随得分和生命值变化

 6.在Unity中制作游戏失败的图片并赋值 

 7.在Update中显示游戏失败,并暂停运行

 ————————————————具体开发流程结束——————————————————

游戏内图

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【经典游戏】坦克大战 Unity2D项目实战(保姆级教程) 的相关文章

  • Unity 粒子特效、材质发光 HDR ShaderGraph图文教程[完成lit发光设置]

    效果如图 准备工作 在hdr模式下 关闭Directional Light 相机设置 移动球挂一个点光源作为子节点 设置自行调节 0 创建移动球的材质及shader shader gt 在Project Create Shader Grap
  • UnityVR--组件3--Line Renderer--线性渲染

    目录 线性渲染组件简介 绘制线条Line Renderer组件介绍 绘制拖尾Trail Renderer组件介绍 应用1 使用Line Renderer绘制线段 应用1实现 使用系统工具或自定义工具绘制线段 应用2 Trail Render
  • Unity之获取游戏物体对象或组件的几个方法

    文章目录 前言 通过物体名称获取对象 GameObject Find Transform Find 通过物体标签获取对象 GameObject FindWithTag GameObject FindGameObjectWithTag Gam
  • GooglePlay提审警告(com.google.android.gms:play-services-safetynet:17.0.0)

    1 Goole在今年6月份出的新政策 不在使用safetynet 而使用Play Integrity API 2 项目本身没有使用过safetynet 3 使用了firebase 查阅资料 解决方案如下 implementation pla
  • unity中创建询问弹出窗口

    在开发过程中进程会遇到需要弹出一个窗口询问用户是否进行的操作 今天就来制作一个这样弹出窗口 然后根据弹出窗口的选择内容不同进行不同的操作 本例中主要是为了删除一个数据 而在删除数据操作前需要得到用户的一个确认操作 这里面主要用到了Notif
  • Unity学习笔记(一)—— 基础知识

    一 基础知识 1 开发团队组成 2 unity特点 图形界面 所见即所得 入门简单 支持C 比OC C 更友好 js 国内外资源丰富 因为使用的人多 跨平台性好 PC端 移动端等 对VR AR的支持最完善 3 成功案例 游戏 炉石传说 神庙
  • unity后台加密时间锁

    前言 在做一些项目的时候 有些不良甲方在给完项目后会有不给尾款的情况 之前都是加一些水印啥的 感觉不是很方便 第一不美观 第二如果甲方给完尾款后还得重新打包去水印 然后又做过一个本地的时间锁 等到时间 程序直接退出 但是感觉还是不方便 有时
  • 【IMGUI】 各种辅助类 EditorGUIUtility、EditorUtility、GUIUtility、GUILayoutUtility

    EditorGUIUtility class in Editor 继承自 GUIUtility EditorGUI 的各种辅助程序 EditorGUIUtility currentViewWidth 我尝试打印了下这个值和position
  • unity3d大型互动照片墙

    1 本次应客户需求 制作一个大型照片墙互动 输出分辨率为9600 4320 注 unity3d官方推荐最大分辨率为8192 3686 4 经过现场长达24小时暴力测试中途未发生问题 姑且判定可以达到正常标准 废话不多说 先上效果 unity
  • VLC for unity 插件如何使用

    VLC for unity 插件如何使用 先去下载一个VLC播放器 安装完成后 然后导入插件链接https download csdn net my 这个插件我的另一个上传资源里有 或者到商店去下载 这个插件链接下载完是一个txt文档 里面
  • Unity保存图片到相册

    Unity保存图片到Android相册 Java 纯文本查看 复制代码 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
  • 【Unity步步升】监控与检测物体的各种方案,如:射线、碰撞、挂载等...

    在制作AR模型数值控制方案的时候遇到了检测的问题 学习过程受益匪浅 故今天为大家整理带来一篇监控与检测物体的参考方案集合 目录 一 射线检测 二 物体存在检测 三 碰撞检测 一 射线检测 单射线检测 首先完成搭建场景如下图1 1 我这里用到
  • Unity旋转以及万向锁问题

    我之前研读了一些关于unity旋转相关的博客 一直想抽个时间写个总结 但是由于实习太忙一直没有写 趁着今天请了假晚上有时间把这段时间一些学习心得写出来 Unity inspector面板中的Rotation 在unity中 想必大家最先接触
  • unity dots jobSystem 记录

    Looking for a way to get started writing safe multithreaded code Learn the principles behind our Job System and how it w
  • 【原神游戏开发日志1】缘起

    原神游戏开发日志1 缘起 版权声明 本文为 优梦创客 原创文章 您可以自由转载 但必须加入完整的版权声明 文章内容不得删减 修改 演绎 相关学习资源见文末 大家好 最近看到原神在TGA上频频获奖 作为一个14年经验的游戏开发行业的老兵 我就
  • mixamo根动画导入UE5问题:滑铲

    最近想做一个跑酷游戏 从mixamo下载滑铲动作后 出了很多动画的问题 花了两周时间 终于是把所有的问题基本上都解决了 常见问题 1 动画序列 人物不移动 2 动画序列 人物移动朝向错误 3 蒙太奇 人物移动后会被拉回 4 蒙太奇 动画移动
  • 【转载】【Unity】WebSocket通信

    1 前言 Unity客户端常用的与服务器通信的方式有socket http webSocket 本文主要实现一个简单的WebSocket通信案例 包含客户端 服务器 实现了两端的通信以及客户端向服务器发送关闭连接请求的功能 实现上没有使用U
  • Unity学习笔记

    一 旋转欧拉角 四元数 Vector3 rotate new Vector3 0 30 0 Quaternion quaternion Quaternion identity quaternion Quaternion Euler rota
  • 游戏开发常见操作梳理之NPC任务系统

    多数游戏存在任务系统 接下来介绍通过NPC触发任务的游戏制作代码 using System Collections using System Collections Generic using UnityEngine
  • 游戏开发之常见操作梳理——武器装备商店系统(NGUI版)

    游戏开发中经常出现武器商店 接下来为你们带来武器装备商店系统的具体解决办法 后续出UGUI Json版本 敬请期待 武器道具的具体逻辑 using System Collections using System Collections Ge

随机推荐

  • 转:《C++ Templates》读书笔记

    有三种模板参数 形参 1 类型参数 这是使用得最多的 2 非类型参数 3 模板的模板参数 类型参数 类型参数是通过关键字typename或者class引入 关键字后面必须是一个简单的标识符 后面用逗号来隔开下一个参数声明 等号代表接下来的是
  • U盘病毒 hypertrm.exe 修复

    1 最近电脑中了这种病毒 没有直观的感觉 不会蓝屏 也不会有其他任何异样 恶心的是他在我每次插入U盘的时候会提示INF默认安装 我没有对病毒样本做分析 感觉他只是创建了系统钩子 导致我尽管杀掉了u盘里所有的病毒 再次插上一切还会重来 2 解
  • String转字节数组

    Java语言中字符串类型和字节数组类型相互之间的转换是经常发生的 网上的分析以及代码也比较多 本文将分析分析常规的byte 和String之间的转换 1 String转byte 就是调用String类的getBytes 方法 如果没有带参数
  • 企业微信中授权小程序

    授权的时候先判断当前小程序运行环境 使用企业微信专有接口wx getSystemInfo if res environment wxwork 企业微信环境 wx qy login 获取企业微信派发的临时登录凭证 success res gt
  • PCL 计算点云的主曲率

    目录 一 算法原理 1 算法源码 2 特别提醒 3 曲率显示 二 代码实现 三 结果展示 四 测试数据 一 算法原理 1 算法源码 template
  • 用消息队列实现AB进程随时通信,在共享内存中循环逆置打印字符串

    一 要求实现AB进程随时对话 A进程发送一句话给B进程 B进程接收后打印 B进程回复一句话给A进程 A进程接收后打印 随机重复1 2步骤 当收到quit后 要结束AB进程 A进程 include
  • Python 爬取高校历年分数线

    最近一周一直在帮家里小弟看高考志愿 所以更新的没那么频繁了 请大家见谅 在看各高校的往年分数时 忍不住手痒 想着能不能给它爬下来 哈哈 说干就干 1 流程分析 之前无意中在这个网站发现有各个高校的历年录取分数线 https gkcx eol
  • 绕过过滤的空白字符

  • R语言-用stringr包处理字符串

    1 字符数统计和字符翻译 1 1 nchar和length nchar这个函数简单 统计向量中每个元素的字符个数 注意这个函数和length函数的差别 nchar是向量元素的字符个数 而length是向量长度 向量元素的个数 x lt c
  • python如何将多个文件夹的PNG图片批量转换为jpg图片(无损转换)

    一般不需要后期处理分析的照片无需使用PNG格式 对于普通的风景人物的照片可以无损转换为jpg格式 这个过程只是将原图png格式中保存空白信息的多余通道去掉而已 并不会影响画质 而内存一般可以变为原来的四分之一 对于图片收藏爱好者来说 可以节
  • ES2015数组扩展 - Array.from()

    Array from方法用于把两类对象转为真正的数组 类似数组的对象 array like object 和可遍历 iterable 的对象 包括ES6新增的数据结构Set和Map 下面是一个类似数组的对象 Array from将它转为真正
  • YOLO V6论文精读

    1 Introduction 在论文中 作者通过实证观察了几个促使我们重新提供YOLO框架的重要因素 1 从RepVGG 3 中重新参数化是一种优越的技术 在检测中尚未得到很好的利用 我们还注意到 对RepVGG块进行简单的模型缩放变得不切
  • 开发启动rsync服务的脚本

    rsync服务的重要性不言而喻 但是一般我们都是rsync daemon启动 我们可以启动rsync服务在init d目录下呢 只要我们写个脚本就OK了 root zyj cat etc init d rsyncd bin bash cre
  • 为金融而生的区块链Injective(INJ)

    Injective背景 Injective 是 Binance Labs 2018 年第一期孵化的八个项目之一 已经获得了众多机构的支持 包括全球顶尖的加密货币风险投资公司之一 Pantera Capital Injective 的核心团队
  • 【蓝桥杯学习笔记】2. 最大公约数和最小公倍数

    系列文章目录 蓝桥杯学习笔记 1 入门基本语法及练习题 文章目录 系列文章目录 前言 一 最大公约数 二 最小公倍数 总结 前言 蓝桥本笔记 从入门到放弃 本片文章使用Python语言编写 Now is better than never
  • openEuler软件包加固项目笔记

    项目概要 使用mugen框架对openEuler操作系统的软件包rubygem bacon进行测试 记录issue 涉及到一些保密性 我有些东西不便细述 因此设置了查看权限 一 申请云服务器 openEuler操作系统安装 说明 安装ope
  • Vue React实现Anchor锚点组件

    Vue实现 使用 页面引入 import Anchor from components common Anchor
  • 对于C++中的extern关键字用法的理解

    今天在学习Effective C 时遇到了extern 关键字 这个关键字我不熟悉 因此参考csdn上一位大佬的博客 总结出如下笔记 一 首先 明确一点 即 extern是关于声明的关键字 变量的声明有两种情况 1 一种是需要建立存储空间的
  • Python标准模块--logging

    1 logging模块简介 logging模块是Python内置的标准模块 主要用于输出运行日志 可以设置输出日志的等级 日志保存路径 日志文件回滚等 相比print 具备如下优点 可以通过设置不同的日志等级 在release版本中只输出重
  • 【经典游戏】坦克大战 Unity2D项目实战(保姆级教程)

    主要内容 1 Unity3D引擎中的基础设置 2 2D场景的搭建 预制体制作 3 2D动画的制作 4 图片图集的有关知识 5 碰撞器 触发器 碰撞检测与触发检测 6 2D游戏渲染的一些知识 7 敌人AI的编写 8 UGUI有关内容 场景切换