【制作100个unity游戏之26】unity2d横版卷轴动作类游戏7(附带项目源码)

简介: 【制作100个unity游戏之26】unity2d横版卷轴动作类游戏7(附带项目源码)

前言

欢迎来到【制作100个Unity游戏】系列!本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第26篇中,我们将探索如何用unity制作一个unity2d横版卷轴动作类游戏,我会附带项目源码,以便你更好理解它。


本节主要是实现人物血条和延迟虚血


血条 能量条UI

配置画布

UI适配新的输入系统

选择我们自己创建的新输入系统

配置画布参数

绘制血条 能量条UI 头像框

具体可以看我之前的文章:unity实现延迟虚血,掉血缓冲的血条效果

新增CharacterEventSO,定义角色事件的ScriptableObject类

[CreateAssetMenu(menuName = "Event/CharacterEventSO")]
public class CharacterEventSO : ScriptableObject {
    public UnityAction<Character> OnEventRaised;// 定义角色事件被触发时的UnityAction

    // 触发角色事件的方法
    public void RaiseEvent(Character character){
        OnEventRaised?.Invoke(character);// 触发事件并传入角色参数
    }
}

添加SO配置

修改Character,触发生命值变化事件,通知UI更新显示

public UnityEvent<Character> OnHealthChanged;// 生命值变化时触发的事件

private void Start()
{
    currentHealth = maxHealth;// 初始化当前生命值为最大生命值

    OnHealthChanged?.Invoke(this);// 触发生命值变化事件,通知UI更新显示
}

public void TakeDamage(Attack attacker)
{
    //。。。

    OnHealthChanged?.Invoke(this);// 触发生命值变化事件,通知UI更新显示
}

配置

新增PlayerStatBar,玩家状态条类,用于显示玩家状态信息


public class PlayerStatBar : MonoBehaviour {
    public Image healthImage;//生命值显示的图片
    public Image healthDelayImage;//生命值缓冲显示的图片
    public Image powerImage;//力量条显示的图片

    //当接收到生命值变化百分比时更新生命值显示
    public void OnHealthChanged(float persentage){
        healthImage.fillAmount = persentage;// 更新生命值显示的填充比例
    }
}

配置

新增管理UI界面的类UIManager,响应角色生命值事件的方法,更新玩家状态条显示

// 管理UI界面的类
public class UIManager : MonoBehaviour {
    public PlayerStatBar playerStatBar;// 玩家状态条

    [Header("事件监听")]
    public CharacterEventSO healthEvent;// 角色生命值事件

    private void OnEnable() {
        healthEvent.OnEventRaised += OnHealthEvent;// 当启用时订阅生命值事件
    }

    private void OnDisable() {
        healthEvent.OnEventRaised -= OnHealthEvent;// 当禁用时取消订阅生命值事件
    }

    // 响应角色生命值事件的方法,更新玩家状态条显示
    private void OnHealthEvent(Character character)
    {
        var persentage = character.currentHealth / character.maxHealth;// 计算当前生命值百分比
        playerStatBar.OnHealthChanged(persentage);// 更新玩家状态条显示
    }
}

配置

效果

延迟虚血

修改PlayerStatBar

private void Update(){
    if(healthDelayImage.fillAmount > healthImage.fillAmount){
        healthDelayImage.fillAmount -= Time.deltaTime * 0.8f;
    }
}

效果

源码

源码不出意外的话我会放在最后一节

参考

https://space.bilibili.com/370283072

目录
相关文章
|
9天前
|
存储 JSON 关系型数据库
【unity实战】制作unity数据保存和加载系统——大型游戏存储的最优解
【unity实战】制作unity数据保存和加载系统——大型游戏存储的最优解
18 2
|
9天前
|
存储 JSON 图形学
【unity实战】制作unity数据保存和加载系统——小型游戏存储的最优解
【unity实战】制作unity数据保存和加载系统——小型游戏存储的最优解
10 0
|
9天前
|
图形学
【制作100个unity游戏之29】使用unity复刻经典游戏《愤怒的小鸟》(完结,附带项目源码)(下)
【制作100个unity游戏之29】使用unity复刻经典游戏《愤怒的小鸟》(完结,附带项目源码)(下)
18 0
|
9天前
|
图形学
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版3(附带项目源码)
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版3(附带项目源码)
21 2
|
9天前
|
图形学
【制作100个unity游戏之28】花半天时间用unity复刻童年4399经典小游戏《黄金矿工》(附带项目源码)
【制作100个unity游戏之28】花半天时间用unity复刻童年4399经典小游戏《黄金矿工》(附带项目源码)
22 0
|
9天前
|
图形学
【制作100个unity游戏之29】使用unity复刻经典游戏《愤怒的小鸟》(完结,附带项目源码)(上)
【制作100个unity游戏之29】使用unity复刻经典游戏《愤怒的小鸟》(完结,附带项目源码)
19 2
|
9天前
|
图形学
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版2(附带项目源码)
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版2(附带项目源码)
11 1
|
9天前
|
存储 JSON 关系型数据库
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版13(完结,附带项目源码)
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版13(完结,附带项目源码)
15 0
|
9天前
|
图形学
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版12(附带项目源码)
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版12(附带项目源码)
14 0
|
9天前
|
存储 图形学
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版11(附带项目源码)
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版11(附带项目源码)
11 0