【零经验做游戏002期】-实现简易战斗系统(Unity)

【前言】

前两篇文章发布了几天,收获了2个赞,虽然很少,但也给了继续更新的动力,如果你刷到这篇文章且觉得不错的话,拜托点个赞让更多的人看到,感谢!

【着手制作简单的战斗】

目前为止,我们已经学会了如何使用按钮,如果我们的战斗方式只是简单的点击怪物,怪物就会扣血,当血量为0时,怪物就会死亡,除了生命条,其他的功能目前我们所学的知识是不是已经可以实现了?动手~

本期素材自取:

链接:https://pan.baidu.com/s/1iIDziENVV0VUOq8zLdVEOQ 
提取码:4141

1、将素材导入UI工程,右键素材设置为导出 (为什么之前的背景图和按钮不需要设置为导出呢?因为之前的两张图在LobbyPanel中有使用到,而LobbyPanel本身已经选择了导出,就不需要再设置图片资源的导出了,这边怪物的三张图我们需要用到代码添加,所以要手动选择一下导出)

2、制作一个生命条(这边要用到一个新的控件,叫做进度条)

在Widgets文件夹下创建一个进度条,取名为HpBar,参数如下

创建完之后把他自带的两个东西给删掉,不要他生成的,我们自己做,然后将尺寸改为400*40

 

这边会用到图形工具,在HpBar内部创建2个,一个用于作底图(白色),一个用于做生命(红色,红色的需要取名为bar否则不会生效)

选中图形,在右侧可以更改颜色

做完后的效果如图

点击测试按钮(快捷键:F5)可以看到半血时的展示效果~ 搞定

 3、制作一个怪物按钮(这边会用到一个新的控件,叫做装载器,在新建的怪物按钮内创建一个装载器,取名叫做icon)

装载器:简单理解就是用来放置图片资源的

点击生成的icon ,将一个怪物的图片资源拖拽至URL区域

 再将上一步做好的HpBar拖到Monsterbtn中,取名为hpBar

 

 怪物按钮别忘记了:①设置按下效果②删除创建时自带的控制器

 

 怪物按钮制作完成~

 将制作完成的怪物按钮拖到LobbyPanel下(上一期做的blueBtn和numTxt可以先删除掉了,代码记得回头一起删了,不然会报错),如图

UI完成,别忘了点击发布~

 

 4、回到Unity,打开Main脚本,开始撸代码(上一期写的代码可以删了,咱们重头写)

首先明确咱们的需求:
①共三只怪物,第一只死亡时切换为第二只,直到击败全部三只

②三只怪物的血量分别为10、20、30

③每次点击造成3点伤害

代码如下:

using FairyGUI;
using UnityEngine;

public class Main : MonoBehaviour
{
    private GButton _monsterBtn; //怪物按钮,定义在这边方便在不同的方法代码块中使用
    private GProgressBar _hpBar; //血条,定义在这边方便在不同的方法代码块中使用
    private int[] _monsterHp; //用于存放怪物的血量
    private int _curMonsterIndex; //当前的怪物
    private int _clickDamage; //点击时造成的伤害

    // Start方法在启动Unity的调试时会调用,因此我们只要把我们的代码写在这里面即可
    void Start()
    {
        GRoot.inst.SetContentScaleFactor(720, 1280); //设置我们游戏的尺寸
        UIPackage.AddPackage("Assets/RawResources/UIPanels/LobbyBasis"); //加载我们的UI资源包,这边加载的就是提前做好的LobbyBasis包
        GComponent panel = UIPackage.CreateObject("LobbyBasis", "LobbyPanel").asCom; //加载完包就可以获取包内的资源了,这边获取到LobbyPanel
        GRoot.inst.AddChild(panel); //把LobbyPanel添加到舞台中

        _monsterBtn = panel.GetChild("monsterBtn").asButton; //从LobbyPanel中获取到怪物按钮
        _monsterBtn.onClick.Add(OnClickMonster); //添加点击怪物按钮时的监听方法
        _hpBar = _monsterBtn.GetChild("hpBar").asProgress; //从怪物按钮上获取到血条

        InitGame(); //初始化游戏信息
    }

    //游戏初始化(在这边初始化游戏的怪物数据等)
    private void InitGame()
    {
        _curMonsterIndex = 0; //当前的怪物设置为0(就是第一只)
        _monsterHp = new[] {10, 20, 30}; //三只怪物分别的血量
        _clickDamage = 3; //设置每次点击时的伤害
        RenderMonster(); //刷新当前的怪物
    }

    //刷新怪物
    private void RenderMonster()
    {
        _hpBar.max = _monsterHp[_curMonsterIndex]; //设置血条上限为第一只怪物的总血量
        _hpBar.min = 0; //设置血条最小值为0
        _hpBar.value = _monsterHp[_curMonsterIndex]; //设置当前血量,一开始是满血
        _monsterBtn.icon = "ui://LobbyBasis/monster00" + (_curMonsterIndex + 1); //当前怪物对应的图片资源路径
    }
    
    private void OnClickMonster()
    {
        //每次点击时,根据伤害进行扣血,如果扣完之后剩余0点血,就换下一只,如果没有下一只了就结束
        _hpBar.value = _hpBar.value - _clickDamage;
        if (_hpBar.value <= 0)
        {
            //如果还有下一只怪物,就切换到下一只
            if (_curMonsterIndex + 1 < _monsterHp.Length)
            {
                _curMonsterIndex = _curMonsterIndex + 1;
                RenderMonster();//刷怪
            }
            //否则就结束
            else
            {
                //简单处理一下,没怪了就隐藏掉按钮
                _monsterBtn.visible = false;
            }
        }
    }
}

运行看看效果:

OK 完全与咱们的需求效果一致,搞定

本篇本章开始会在文末整理一下文章中用到的东西

来回顾一下本期用到的东西:

①GprogressBar:FariyGUI中的进度条工具,使用的场景一般为血条、经验条、游戏过场加载进度条使用起来很简单,设置好max和min之后,只要在合适的实际更改value值即可

②Gbutton:FariyGUI中的按钮工具,在按钮中的装载器(GLoader)控件要取名为icon,是因为这样就可以在代码上很方便的修改按钮内的图片(btn.icon= "资源路径"),否则你就得先使用GetChild获取到按钮下的GLoader控件才能够更改图片资源,进度条中的bar也是类似的原因,当你修改value值时就会立刻看到进度条的变化。

③GLoader:与其他控件类似,FariyGUI中的控件都是以G开头,GLoaderFariyGUI中的装载器,一般用于装载一张图片,你只要修改loader.icon即可,使用场景很多,使用起来也很简单

目前功能还很简单,但我们已经有了一个雏形了,接下来就是往里面加东西,不过目前所有的代码都写在了一个脚本文件里,这显然是不好的,近近期还是会以熟悉FariyGUI的控件为主,另外把我们的框架给慢慢搭起来

在实际操作过程中遇上任何问题,欢迎加入讨论Q群46791957找我或站内私信我,有看到都会回复!

都看到这了,点个赞加个关注收个藏吧,感谢!

下篇文章见~

 

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

开4141

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

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

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

打赏作者

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

抵扣说明:

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

余额充值