重回童年的经典系列 |【捕鱼达人】小游戏来啦~ 有源码下载【文末送书】

  • ?博客主页:https://blog.csdn.net/zhangay1998
  • ?欢迎点赞 ? 收藏 ⭐留言 ? 如有错误敬请指正!
  • ?本文由 呆呆敲代码的小Y 原创,首发于 CSDN?
  • ?未来很长,值得我们全力奔赴更美好的生活✨

请添加图片描述


?前言

  • 今天给大家带来一款经典游戏复刻版捕鱼达人类的小游戏!
  • 经典版捕鱼达人应该都玩过吧~ 感觉也是一代经典游戏啊!
  • 还记得之前可羡慕别人可以在电脑和手机上玩这款游戏了!
  • 那今天我们就来看看这种类型的游戏是怎样做的吧~

?捕鱼达人

捕鱼达人大家都不陌生,游戏玩法大家都知道就不过多解释了

网上这个类型的游戏有很多种类,先来看一下本篇文章分享的游戏效果吧!

受限于图片大小的缘故,动态图看起来比较卡,其实游戏很丝滑! 下载体验就知道了
请添加图片描述


?游戏图片

先来看几张游戏内的截图,包括开始时的画面,游戏中和游戏结束等画面

如下所示:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


?工程解析

在这里插入图片描述

  • Animations:存放动画的文件夹
  • Background:存放游戏的背景图等
  • Bullets:存放炮台炮弹的图片素材
  • Effect:存放特效素材
  • Fish:存放各种鱼的素材
  • Fonts:存放字体素材
  • Other:一些道具素材
  • Prefabs:存放各种预制体,炮弹、鱼儿和金币等预制体
  • Scenes:存放项目场景
  • Scripts:存放所有脚本
  • Sound:存放各种音频资源
  • UI:存放各种交互性UI素材

预制体的话主要就是游戏中的一些UI元素,因为这是一个2D游戏,所以UI中用到的素材、预制体等都是UI了

场景的话只有两个场景,因为游戏很简单,只有一个开始场景和游戏场景

脚本的话有十来个,控制游戏的一个运行逻辑过程!

精灵图片有很多,会在游戏过程进行不断的切换达到一个视觉效果~

在这里插入图片描述动画控制器有很多,主要是各种鱼类的动作!
在这里插入图片描述
一个开始场景和游戏场景
在这里插入图片描述
游戏的灵魂——脚本代码如下
在这里插入图片描述

还有就是音频文件夹了,主要是有很多个音效,用于各种情况下播放不同的声音
在这里插入图片描述
还有各种游戏中出现的金币等等素材
在这里插入图片描述
这是游戏中用到的UI素材
在这里插入图片描述


?核心代码讲解

这个工程的脚本有十来个,也不是很多,核心的其实就是GameController游戏控制器和FishMaker鱼儿制造器

GameController游戏控制器负责游戏运行的一个核心控制器

包括炮台的各种等级切换使用金币数量根据经验升级发射炮弹等等核心功能

//使用的是第几档的炮弹
    private int costIndex = 0;
    //每一炮所需的金币数和造成的伤害值
    private int[] oneShootCosts = { 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000 };
    private string[] lvName = { "新手", "入门", "钢铁", "青铜", "白银", "黄金", "白金", "钻石", "大师", "宗师" };


        //经验等级换算公式:升级所需经验=1000+200*当前等级
        while (exp >= 1000 + 200 * lv)
        {
            exp = exp - (1000 + 200 * lv);
            lv++;
            lvUpTips.SetActive(true);
            lvUpTips.transform.Find("Text").GetComponent<Text>().text = lv.ToString();
            StartCoroutine(lvUpTips.GetComponent<Ef_HideSelf>().HideSelf(0.6f));
            AudioManager.Instance.PlayEffectSound(AudioManager.Instance.lvUpClip);
            Instantiate(lvEffect);
        }


///发射炮弹
void Fire()
    {
        GameObject[] useBullets = bullet5Gos;
        int bulletIndex;
        if (Input.GetMouseButtonDown(0) && EventSystem.current.IsPointerOverGameObject() == false)
        {
            if (gold - oneShootCosts[costIndex] >= 0)
            {
                switch (costIndex / 4)
                {
                    case 0: useBullets = bullet1Gos; break;
                    case 1: useBullets = bullet2Gos; break;
                    case 2: useBullets = bullet3Gos; break;
                    case 3: useBullets = bullet4Gos; break;
                    case 4: useBullets = bullet5Gos; break;
                }
                bulletIndex = (lv % 10 >= 9) ? 9 : lv % 10;
                gold -= oneShootCosts[costIndex];
                AudioManager.Instance.PlayEffectSound(AudioManager.Instance.fireClip);
                Instantiate(fireEffect);
                GameObject bullet = Instantiate(useBullets[bulletIndex]);
                bullet.transform.SetParent(bulletHolder, false);
                bullet.transform.position = gunGos[costIndex / 4].transform.Find("FirePos").transform.position;
                bullet.transform.rotation = gunGos[costIndex / 4].transform.Find("FirePos").transform.rotation;
                bullet.GetComponent<BulletAttr>().damage = oneShootCosts[costIndex];
                bullet.AddComponent<Ef_AutoMove>().dir = Vector3.up;
                bullet.GetComponent<Ef_AutoMove>().speed = bullet.GetComponent<BulletAttr>().speed;
            }
            else
            {
                StartCoroutine(GoldNotEnough());
            }
        }
    }

FishMaker鱼儿制造器则是控制场景中的各种鱼儿的生成、行走轨迹等功能

这也算是本游戏的一个重点功能

void Start()
    {
        InvokeRepeating("MakeFishes", 0, waveGenWaitTime);
    }

    void MakeFishes()
    {
        int genPosIndex = Random.Range(0, genPositions.Length);
        int fishPreIndex = Random.Range(0, fishPrefabs.Length);
        int maxNum = fishPrefabs[fishPreIndex].GetComponent<FishAttr>().maxNum;
        int maxSpeed = fishPrefabs[fishPreIndex].GetComponent<FishAttr>().maxSpeed;
        int num = Random.Range((maxNum / 2) + 1, maxNum);
        int speed = Random.Range(maxSpeed / 2, maxSpeed);
        int moveType = Random.Range(0, 2);      //0:直走;1:转弯
        int angOffset;                          //仅直走生效,直走的倾斜角
        int angSpeed;                           //仅转弯生效,转弯的角速度

        if (moveType == 0)
        {
            angOffset = Random.Range(-22, 22);
            StartCoroutine(GenStraightFish(genPosIndex, fishPreIndex, num, speed, angOffset));
        }
        else
        {
            if (Random.Range(0, 2) == 0)        //是否取负的角速度
            {
                angSpeed = Random.Range(-15, -9);
            }
            else
            {
                angSpeed = Random.Range(9, 15);
            }
            StartCoroutine(GenTrunFish(genPosIndex, fishPreIndex, num, speed, angSpeed));
        }
    }

其他的代码就不一一讲解了。喜欢这个小游戏的可以下载源码工程娱乐一下

总共有十几个脚本组成,但是还是挺有可玩性的!喜欢这个类型游戏的小伙伴可以自行下载研究一波!


?游戏源码下载

文中这个 捕鱼达人 的源码工程下载链接就在这里啦!

【捕鱼达人】 小游戏下载

有积分的小伙伴可以下载体验,积分不够的直接关注文章最下面的公众号回复:游戏资源

就可以免费领取几十款游戏源码、素材和上千套PPT模板 啦,看看有没有你想要的那一款!


?总结

  • 本篇文章分享了一个 重回童年的经典系列 |【捕鱼达人】的游戏源码并简单分析了一下游戏结构和代码部分
  • 只是简单的分析了一下这个小游戏的工程结构核心脚本
  • 感兴趣的小伙伴可以自行下载源码体验哦!
  • 喜欢的小伙伴可以三连一波,下次再见啦~

?往期优质文章分享


? 优质专栏分享 ?
  • ?如果感觉文章看完了不过瘾,可以来我的其他 专栏 看一下哦~
  • ?比如以下几个专栏:Unity基础知识学习专栏Unity游戏制作专栏Unity实战类项目 算法学习专栏
  • ?可以学习更多的关于Unity引擎的相关内容哦!直接点击下面颜色字体就可以跳转啦!

❤️ 游戏制作专栏 ❤️

? Unity系统学习专栏 ?

? Unity实战类项目 ?

? 算法千题案例 ?

? Python零基础到入门 ?


?评论区抽奖送书

最后在评论区进行抽取三名幸运的小伙伴送下面这本书籍

  • 这次博主多方联系,最终搞到了一些unity 相关的书籍,在这里搞个小活动抽奖送给大家,对看书感兴趣的小伙伴可以参加一波呀,刚开始可能参与的不多,抽中概率很大哦!

  • 《Unity 2D游戏开发》

  • 一本非常经典的2D游戏开发编程名著,结合Unity开发使用效果卓佳!

  • 尤其是想从事Unity开发2D游戏的小伙伴,这本书就可以让你了解Unity用到的2D相关知识,对症下药可以极大地提高学习效率!

?抽奖规则

规则如下:

? 规则如下?
  • 给本篇博客文章 点赞 收藏 评论 三连,然后在评论区评论里点赞数 排名前五的评论抽取三个小伙伴!送一本Unity的书籍!

  • 总共抽三本,中的几率还是很大的哦~ 想看书的小伙伴参与起来!点赞数越高中奖几率越大!

  • 中奖信息明天下午本篇文章评论区公布!记得留意呀!

  • 没抽到的,但是喜欢这本书的小伙伴也可以在网上自行购买哈,官方正品商店购买即可!

? 规则如上?

?推荐理由(⭐⭐⭐⭐)

  • 虽然许多书籍都专注于使用Unity创作3D游戏,但独立开发者更容易成长的市场是2D游戏。

  • 如果你意识到自己是为游戏而生,并想要开发和制作游戏,那你一定会受到本书中真实的、独立的游戏实例的启发。

  • 书中实例使用Unity持续更新的2D工作流程中的新工具,讲解在Unity中开发2D游戏的基本概念。

  • 我们正处于独立游戏的黄金时代,现在正是构建你一直梦想的游戏的更佳时机。《Unity 2D 游戏开发》可以为你指明方向。

没抽到的小伙伴也可以在官方商店购买哈,书还是很棒的,喜欢看书也可以买本看~

Unity 2D游戏开发 京东官方链接在这

书本图片如下,喜欢的小伙伴参与起来!
在这里插入图片描述
在这里插入图片描述

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇

)">
下一篇>>