本节目标

实现休息房间可以回一次血,实现宝箱房间可以获得卡牌

实现办法

休息房间回血

添加一个 RestRoomPanel,给它挂上 UI 和 脚本

代码实现如下

using System;
using UnityEngine;
using UnityEngine.UIElements;

public class RestRoomPanel : MonoBehaviour
{
    private VisualElement rootElement;
    private Button restButton;
    private Button backToMapButton;

    public Effect restEffect;

    public ObjectEventSO loadMapEvent;

    private CharacterBase player;

    private void OnEnable()
    {
        rootElement = GetComponent<UIDocument>().rootVisualElement;
        restButton = rootElement.Q<Button>("RestButton");
        backToMapButton = rootElement.Q<Button>("BackToMapButton");

        player = FindAnyObjectByType<Player>(FindObjectsInactive.Include);

        restButton.clicked += OnRestButtonClicked;
        backToMapButton.clicked += OnBackToMapButtonClicked;
    }

    private void OnBackToMapButtonClicked()
    {
        loadMapEvent.RaiseEvent(null, this);
    }

    private void OnRestButtonClicked()
    {
        restEffect.Execute(player, null);
        restButton.SetEnabled(false);
    }
}

当点击休息一下之后,会执行 restEffect,然后禁用休息按钮

当点击返回地图之后,会广播loadMapEvent事件

其中 restEffect 是一个给自己回 20 点血的卡牌效果

loadMapEvent 事件会被SceneLoadManager监听到,并且调用SceneLoadManager.LoadMenu方法,这个方法会卸载当前场景,并回到 map 场景

宝箱房间获取宝物

修改 Treasure 场景,在它下面添加TreasureChest对象,编辑碰撞体,添加Treasure Button组件

当碰撞体被点击之后,就会触发gameWinEvent事件

gameWinEvent 事件会被 UIManager 监听到

这个方法触发的时候,会隐藏 gameplayPanel,然后显示 gameWinPanel

需要注意一下,GameWinPanel需要将原来Awake里面的代码移动到OnEnable里面去,否则按钮点击事件可能不会触发

项目相关代码

代码仓库:https://gitee.com/nbda1121440/DreamOfTheKingdom.git

标签:20240313_1246