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

主要内容:

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中显示游戏失败,并暂停运行

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

游戏内图

猜你喜欢

转载自blog.csdn.net/Y1RV1NG/article/details/125408063
今日推荐