【经典游戏】坦克大战 Unity2D项目实战(保姆级教程) |
您所在的位置:网站首页 › unity随机生成不同的敌人 › 【经典游戏】坦克大战 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.拿到切换图片的引用: 五、碰撞器的添加,解决坦克旋转、抖动问题 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.将资源中的 2.游戏窗口比例设为16:10 3.使用Image、Text制作得分和生命值 4.(PlayerManager脚本)公开两个文本属性,在Unity中赋值 5.在Update中让文本随得分和生命值变化 6.在Unity中制作游戏失败的图片并赋值 7.在Update中显示游戏失败,并暂停运行 ————————————————具体开发流程结束—————————————————— 游戏内图 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |