本节目标
实现休息房间可以回一次血,实现宝箱房间可以获得卡牌
实现办法
休息房间回血
添加一个 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
标签:逻辑,房间,loadMapEvent,rootElement,43,private,restButton,restEffect From: https://www.cnblogs.com/hellozjf/p/18070397