【零经验做游戏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找我或站内私信我,有看到都会回复!

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

下篇文章见~

 

  • 35
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
Unity3D的动作游戏战斗系统是一种为游戏开发者提供的一套功能强大的工具和技术,用于创建充满刺激和动感的战斗场景。它提供了各种功能和组件,帮助开发者实现复杂的战斗机制,让玩家能够享受到真实感和挑战性。 首先,Unity3D提供了丰富的动画系统,使得角色在战斗中能够执行各种流畅的动作。开发者可以通过导入模型和动画,使用Animator组件来控制角色动画的播放和过渡。这样,玩家在游戏中的行动和操作会得到立即的反馈,增加了战斗的紧张感和乐趣。 其次,Unity3D提供了强大的碰撞检测和物理引擎,用于处理角色之间的碰撞和交互。开发者可以使用Collider和Rigidbody等组件,通过设定碰撞和力的属性来模拟真实的战斗效果。这样,在游戏中的击打、挥动武器等动作会根据物理规律产生逼真的效果,使战斗更加有趣和真实。 此外,Unity3D还提供了AI系统,可以为敌人和NPC角色添加自动控制和行为。开发者可以编写AI脚本,使敌人具备攻击、躲避、追击等行为,增加战斗的策略性和挑战性。AI系统的灵活性和可定制性,使得开发者可以根据游戏需求自由设计各种智能的战斗场景。 总之,Unity3D的动作游戏战斗系统为开发者提供了丰富的工具和技术,使得他们能够轻松地创建出各种充满动感和挑战性的战斗场景。通过使用动画系统、碰撞检测和物理引擎以及AI系统,开发者可以创造出真实、流畅而有趣的游戏体验,使玩家沉浸在刺激的战斗世界中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

开4141

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

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

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

打赏作者

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

抵扣说明:

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

余额充值