Unity3D | 经典小游戏Battle City

Cheer Up

游戏说明:

除了音效,游戏地图上的元素有:

草丛(玩家可以躲进去,敌人攻击不到) 
河流(双方都过不去,但是子弹可以穿过) 
铁墙(坦克和子弹都过不去) 
砖墙(一发子弹摧毁后坦克可以过去)
空气墙(围在地图周围,防止出界) 
敌方大坦克(打两下才死)
敌方小坦克(打一下就死)
有玩家1和玩家2,可以选择单人/双人模式

地图是随机生成的,每次打开都不一样,丰富了游戏的多样性和可玩性。敌方坦克(包括大小坦克)一次最多存在3个,被摧毁后间隔3s在地图的左上/右上/上面中间 随机生成相应数量的。

❥输赢的判断:

敌方坦克数目一定,每消灭一个获得1分,消灭满20个,也就就是得分20分获得胜利,玩家自己有3生命值(即3条生命),被击中一次损失1条生命并且在出生点复活,获得3s的无敌效果。生命耗尽或者老家被摧毁,就game over。

可以理解为有10个类:


☀️项目效果展示

  • 这里的gif是用了一款ScreenToGif的软件录制的,处理的比较短
  • 右侧图标分别表示消灭的敌人数量(上) 和 当前的生命值(下),被击中一次生命值-1,变为0的时候玩家死亡,游戏结束

目录

☀️项目效果展示

☀️前言

⭐️相关背景

⭐️相关知识

⭐️版本说明

⭐️许可证激活

⭐️及时保存

☀️项目概况

⭐️项目整体布局

⭐️猜想验证

⭐️分步介绍(结合代码)

❀Audio.cs

❀Born.cs

❀Bullet.cs

❀Enemy.cs

❀Explosion.cs

❀Heart.cs

❀MapCreation.cs

❀Option.cs

❀Player.cs

❀PlayerManager.cs


☀️前言

⭐️相关背景

  • 博主在大二暑期接触了unity,借鉴实战视频上手花两天复刻了 “坦克大战” 这一经典小游戏,发现做游戏这种过程真的比玩儿游戏还要爽啊,hh,看着一些功能逐渐被实现,游戏越来越完整,真的是挺令人舒适和爽快。由于那时候零基础直接上手,对于一些基础操作真的是不太熟练,很不灵活,幸好有一些前辈的帮助(比如优快云小伙伴们熟悉的y哥),解决了一些自己难以解决的问题,帮助小虾在迷茫的夜海上拨开神秘的迷雾。

⭐️相关知识

  • 在学习的过程中,几个比较重要的知识点就是:预制体、克隆体、精灵渲染器、渲染层级、脚本、碰撞检测、触发检测、AI设计、UI设计、固定物理帧...

⭐️版本说明

  • 小虾采用的是Unity一个较新的版本-2021.1.16,这里建议小伙伴们下载和教程相同版本的,不然真的会有可能遇到卡点消耗心情哈。
  • 可以和我一样在Unity Hub里面安装,Hub感觉挺好用的。

⭐️许可证激活

  • 这个...有段时间不登好像就要重新激活许可证,遇到同样问题的小伙伴可以进入下图的网址:Unity - Activation 按提示进行操作即可

⭐️及时保存

  • 打开的时候总是激动又煎熬,U3D启动有点慢并且操作过程中很可能就会报废,所以项目过程中一定要及时保存,不然一不小心可能就要重新来过啦!


☀️项目概况

⭐️项目整体布局

  • 整个项目工程的一个概况就在下面了,Hierarchy菜单下是放 预制体(Prefab) 的 克隆体(Clone) 的,这些克隆体可以拖到左上方的大界面中,通过点击播放按钮进行效果检验。左下方的就是整体的动画效果显示了。
  • 做一个小游戏项目,我们首先需要素材,这里推荐初学的小伙伴去siki学院学习,里面会有相应的完整初级案例教程。

⭐️猜想验证

  • 学习的过程就是不断验证猜想并接收新知识的过程,我本来想坦克大战里面的地图就是把预先处理好的 “砖墙、水泥墙、草坪、河流、空气墙(防止Object越过边界的)” 按照一定规律和自己的喜好摆放开来作为整张地图的,但事实打脸了(觉得自己真傻)。
  •  地图实例化(MapCreation) 中,我们使用了 “产生随机位置” 的方法,在避开已有位置的基础上,自动生成其它的地图元素。

代码如下:

 // 产生随机位置的方法
    private Vector3 CreateRandomPosition() // 列表中没有这个位置,才能产生
    {
        while(true)
        {
            // 不生成x=-13,13(变为10)这两列,y=-8,8这两行的位置
            Vector3 createPosition = new Vector3( Random.Range(-9,10), Random.Range(-7,8), 0); // x y z,Random.Range(a,b)中b的实际值是b-1
            if(!HasThePosition(createPosition))
            { 
                return createPosition; // 列表中没有的位置就返回 
            }
            // false 则继续循环
        }
    }

⭐️

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

米莱虾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值