刚学unity,跟着视频做坦克大战(小时候的小游戏)。因为素材都是图片,坦克出生有个保护罩

2.删除场景中的默认灯光

3.选择主摄潒机修改位置,角度显示模式改为正交,把ClearFlags改为纯色颜色自定,保存场景

4.从模型文件夹里找到Tank,拖到游戏场景中

5.给该物体指定圖层为Playes 如果没有的话新建一个这个层,在改变图层对话框中选只对此物体生效按钮

6.给这个坦克加上刚体组件,并锁定Y轴的移动X Z 轴的旋轉

6.1 再添加一个BoxCollider组件,并调整位置和大小

7.把这个坦克拖到Prefab文件夹作为一个预置体

8.把预设文件夹里的DustTrail拖到Tank的下面作为它的子集,设置好它的位置差不多在坦克的后轮位置,重命名为左边的烟雾在复制一个,改变位置重命名为右边烟雾

10.1 回到场景,记得指定音源

然后保存測试,Tank Number处指定坦克编号填1就是1号坦克,由玩家1通过WSAD移动和旋转填2则由玩家2通过上下左右光标键控制移动和旋转。

11.1 把主摄像机拖到上面這个CameraRig下面作为子物体位置设为0,0,-65

11.4 回到场景,拖出2个坦克指定不同的编号,并给上面的代码赋值

11.5 运行相机会跟随着2个坦克的中点位置移動,并当2个坦克的位置拉开以后相机还会自动调节焦距使2个坦克始终在屏幕中

12.4 把这个Canvas拖到Tank下面作为它的子集,然后选择Canvas设置位置为0,0.1,0 宽度高度都设为3.5X轴旋转90°,设置渲染模式为WorldSpace,然后再设置比例为1

12.6 选中Slider物体(包括Slider)下的所有物体设置锚点对齐为铺满(右下角的那个)

14.1 回到编辑器,指定好参数然后别忘了点下Apply

15.. 预置文件夹中找到Shell物体,拖到Hierarchy中为其添加一个CapsuleCollider胶囊碰撞器,方向为Z轴中心为0,0,0.2 大小根据子弹大小修改,這里为0.14,0.5然后在添加一个Rigidbody刚体组件

15.3 回到编辑器指定好参数,保存测试

16.. 选中Tank右键新建一个空物体作为Tank的子物体,重命名为FireTransform修改位置和旋轉

16.5 设置好以后是这样的

16.8 保存测试,玩家1可以按空格键发射炮弹玩家2按Enter键发射炮弹,长按可以蓄力发射

17.. 新建2个空物体分别重命名SpwanPonit1 2,改变位置旋转和显示的颜色

17.1 完成后是这样的

17.1 新建一个Canvas,重命名为MessageCanvas进入2D视图模式,右键新建一个Text作为它的子集,设置一些对齐方式和文字内嫆,字体文字大小,再为其添加一个Shadow组件设置好颜色和位置

17.6 新建脚本 GameManager 额 有点长,有点绕希望你能耐心看完……并理解……

17.8 PS:GameManager 控制整個游戏的流程,TankManager控制坦克的行为一开始由GameManager 在start中调用TankManager 初始化坦克,然后设置相机控制相机的位置,焦距等然后开始GameLoop 协程,GameLoop 中有回合开始、回合进行中、回合结束三中协程说起来太绕,还是看图吧

17.9 保存运行,没问题到这,游戏其实已经可以了但是游戏的音频部分還是有些不足,像BGM坦克的引擎声,炮弹声爆炸声,蓄力声等……混在一起实在有些影响游戏体验所以,下部分使用混音解决这些问題

20.3 选择Groups下面的Master 点击上面的右边的“+”依次新建三个

20.4 选择Tank预制体,在音频的组件的Output选项中分别指定好混合器的组

20.7 看图吧我就不说话了

20.10 保存,运行这样BGM和特效声音都是分开管理的,这样体验会好很多
至此,本项目总算完成了断断续续拖了近一个月,实在说不过去得妀!

}

一般情况下攻击CD都是设置在update函數里面的

触发器是碰撞器的一种,构造触发器需要勾选is trigger

将barrier的图像渲染去掉可以看到仍然是刚体,只不过是透明的没有渲染的。

需要在爆炸特效上面添加脚本看到这个动画的长度为0.167s

脚本写好之后,将脚本拖进去
然后如果子弹触碰到了player也就是标签为“Tank”的时候,出发player脚夲里面的Die方法注意一定不能写错。

首先设置被保护的初始值布尔值的默认都是False

保护起来就需要在子弹触碰到的时候,不能够调用Die方法可以在函数最开始的时候,直接return掉

控制是否显示可以在右边打钩,或者使用GameObject的setActive方法


如果出现显示先后顺序的问题,可以更改order in layer

设置一個布尔值来区别子弹

如果碰到墙那么子弹和墙都需要销毁
如果碰到障碍,那么只有子弹会销毁

仍然采用更换图片渲染的方法

}

原标题:scratch制作经典坦克大战流程(分享一些小技巧和踩过的坑)

用scratch制作小游戏的时候我没有写游戏需求,也没有画流程图每次有想法,就直接上手做了遇到问题,兵来将挡水来土掩。

其实应该画交互流程图尤其内容比较多的时候。在制作欢乐斗地主的时候因为交互很多,所以到后期感觉很乱而且出现了许多bug。

这期讲的不是欢乐斗地主而且经典坦克大战的流程,制作过程中遇到的问题以及一些小技巧。

先上一张图因为時间问题,就制作了一个关卡如果小伙伴们想完善,只需要在链表中添加砖块的坐标

如果想现在体验一把,这是作品的链接可以查看源码,下载素材

好玩别忘了点个赞!赞!赞!

有一天,突然想用scratch制作小时候玩过的坦克大战打开scratch就搞起来。

需要添加的场景是图爿中的黄色砖块、白色砖块、草丛、老家、坦克(玩家坦克,敌方坦克在没有写逻辑时,它们是一样的)还有看不见的子弹。

将舞台場景分成13*13的方格这是经典坦克大战的场景划分,老家位于底部中间的位置在场景中的坐标为(x:0,y:-165)将老家大小调整成一个方格嘚大小,因为素材不同大小设定也不同,我的素材是将角色的大小设定为80。

这是一块砖块其实,这是由两块

这样的素材拼接在一起为什么要这么做,后面会分析

怎么添加呢,场景中那么多黄色砖块难道要添加那么多个素材进来?使用过scratch的小伙伴脑海里都闪过两個字克隆,是的我们只需要添加一块

这样的素材进来,然后通过克隆让场景中出现很多黄色砖块。

克隆多少次克隆完了怎么放到對应的位置,这里需要用到数据模块中的列表新建一个列表,取名一定要有意义看到名字就知道这个列表的用途

列表新建好了需偠将所有黄色砖块的坐标添加到列表中。添加坐标可以封装在一个方法中,也就是更多模块中新建功能块,取名要有意义。新建功能块可以让代码清晰整洁还可以右击定义模块,对其进行编辑选项里面有添加一些参数,该功能块就可以重复使用减少代码量。

功能块新建好开始将黄色砖块坐标添加到列表中。我这里是一列一列的从底部向上添加这样可以使用for循环,减少代码量

这是添加坐标嘚部分代码(完整代码可在作品链接中下载),这里说说为什么要新建砖块长、砖块宽、底部员坐标这三个变量其实它们是常量,至始臸终它们没有改变过那么,它们有存在的意义吗

答案是有的,为什么这需要问产品经理。当然我们现在就是这游戏的产品经理。這三个变量在添加坐标的时候,使用了近百次突然,我们发现砖块长不是36或者你想把场景中的砖块变小一些。你只需要改变这三个變量而不需要去更改下面的上百行代码

坐标添加好了那么克隆的次数就知道了,也就是列表的长度

为了统一化管理砖块,我们将夲体隐藏场景中的砖块都是克隆出来的。这里的编程是存放坐标x的列表动员是存放坐标y的列表,它们是一一对应的

的操作和添加黄銫砖块一样,以后想拓展更多的关卡只需要改变这三个素材中的坐标列表

注意:在ps素材的时候要将素材的前方改成面向右边,因為游戏中向前移动是向右边移动

这是我方坦克的位置代码,这里使用变量仍然是为了砖块大小位置变化,坦克位置也随之变化敌方坦克的添加方式和添加我方坦克一样。

5.添加子弹(我方的和敌方的总共需要添加4个,注意区分开)这里添加一个球的素材,然后缩尛位置随便,因为它是随着坦克移动的

移动的步数,上下是砖块的宽左右是砖块长的一半,和之前添加黄色砖块对应

添加好之后,我们就可以操控我们的坦克但坦克是不能穿过黄色砖块,白色砖块老家,敌方坦克和边缘。

在移动的后面加上判断也就是当触碰到这些物体时,后退回来

这段代码加在移动键的下面,可以实现坦克原地调整方向代码里的“-90”,据上下左右键后面是不一样的

添加好之后,我们又可以操控坦克驰骋战场。测试发现坦克有时会卡在一些地方,过不去因为坦克太大,于是缩小最后问题解决叻,但坦克缩小得看不清

这里说个小技巧,添加一个素材作为坦克的移动,圆形素材是最好的选择将坦克的代码复制到圆形素材中,圆形素材大小随便调整但不能太小。将圆形素材的透明度设置成100(完全透明)坦克一直移动到圆形素材上,方向和圆形素材一致坦克素材大小就可以随便调整了。这个小技巧可以解决带有棱角素材的碰撞问题

这是坦克中的代码,角色可以移动 是圆形素材中广播出嘚消息每次按上下左右键,圆形素材成功移动之后会广播这个消息。如果使用永远重复会很浪费资源。

我方坦克还会和什么发生碰撞对的,还有敌方子弹碰撞之后,需要将我方坦克切换成爆炸造型

这是检测我方坦克是否碰撞到敌方子弹的代码,声音现在不需要加在制作作品的过程中,先将基础逻辑编写完特效声音都在最后加。

将我方坦克素材中的代码复制到对应的敌方坦克素材中,注意坦克素材和移动的圆形素材要一一对应调整一下敌方坦克的出现位置。那么如何将它们设置成随机移动

这是敌方坦克随机移动的部分玳码,其实就是随机一个值判断这个值的范围,在什么范围内执行什么操作注意这个值的范围要大一些,这样你可以调整它的行为仳如,让它多向下移动

别忘了将敌方坦克碰撞的子弹,改成我方的子弹否则敌方坦克就可以相互打架了,想想还挺有趣的

3.添加我方孓弹的代码

子弹素材移动的代码和坦克素材移动的代码一样,都是跟随着圆形素材

这是我方子弹的初始代码,大小调整好要将它隐藏,发射的时候在显示

子弹的发射我是用克隆方式实现的,也就是发射出去的子弹是克隆出来的而子弹本体还在随着圆形素材移动。建議:射击类游戏子弹都采用克隆的方式,这样可以控制发射子弹的颗数而且不影响本体。

这是当按下空格键子弹发射出去的代码。這里说一下“好吧无语是否可移动”这个变量,看到它的名字是不是觉得很奇怪它有两个梗,它的作用和我踩的坑

它的作用是控制孓弹的颗数,想连续发射几颗只需要将这个变量的初始值设置成几。

这是子弹克隆启动的代码为什么一开始要移动18步?是为了让子弹看起来是从坦克前方打出而不是坦克素材的正中心。

说一说这里的坑“好吧,无语是否可移动”这个变量一开始我是定义为只适用於当前角色,也就是局部变量发现克隆里面虽然能使用它,但不能改变它的值只适用于当前角色的变量,克隆里面是不能使用的

新建变量的时候,为什么要分使用于所有角色和仅适用于当前角色新建仅适用于当前角色的变量,使用起来效率会更高,所以能新建僅适用于当前角色的变量,绝不新建使用于所有角色的变量

4.添加敌方子弹的代码

将我方子弹代码复制进去,只不过碰撞的物体要改一下

5.老家和黄色砖块需要添加碰撞子弹的代码,草地和铁砖块不需要

这是老家触碰到子弹的代码,变量“连续碰撞”是为了防止老家二次碰撞子弹就是说,老家爆炸一次之后就不会再爆炸第二次。很多时候都需要变量来控制作品的事件

说说变量的类型,在scratch中我们经瑺将变量当做数字使用,变量的常用类型有Int(整数型)、string(字符串型一串字母或者汉字)、bool(两种结果,true和false)等

以上是经典坦克大战淛作过程,有任何技术问题欢迎关注公众号与我们讨论。

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信