首页 > 其他分享 >43. 实现休息房间的逻辑

43. 实现休息房间的逻辑

时间:2024-03-13 13:11:06浏览次数:16  
标签:逻辑 房间 loadMapEvent rootElement 43 private restButton restEffect

本节目标

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

实现办法

休息房间回血

添加一个 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

标签:逻辑,房间,loadMapEvent,rootElement,43,private,restButton,restEffect
From: https://www.cnblogs.com/hellozjf/p/18070397

相关文章

  • 43_Docker可视化工具
    portainer安装dockerrun-d-p8000:8000-p9000:9000\--nameportainer\--restart=always\-v/var/run/docker.sock:/var/run/docker.sock\-vportainer_data:/data\portainer/portainer#IP:9000进入容器监控三剑客docker-comp......
  • 使用libtorch训练一个异或逻辑门
    本文以一个例子介绍如何使用libtorch创建一个包含多层神经元的感知机,训练识别异或逻辑。即${z= x\text{^}y}$。本例的测试环境是VS2017和libtorch1.13.1。从本例可以学到如何复用网络结构,如下方的LinearSigImpl类的写法。该测试网络结构如下图。一个线性层2输入3输出,一个Sig......
  • CF343E Pumping Stations 题解
    题意:给定一张无向带权图,求一个排列\(p\)使得\(\sum_{i=2}^n\operatorname{mincut}(p_{i-1},p_i)\)最大。输出一种方案。\(n\le200,m\le1000\)。思路:首先这种最小割相关的肯定是最小割树,建树需要\(O(n^3m)\),由于\(Dinic\)实际上跑不满,所以时间完全够。然后考......
  • 41. 抽卡面板的实际逻辑
    本节目标打开抽卡面板之后,显示三张可以抽取的卡牌,点击选择卡牌之后将卡牌添加到牌堆中,然后游戏胜利面板隐藏抽卡按钮实现方法添加卡牌的UIDocument需要给Card也添加turnbutton样式,这样鼠标移动过去的时候会有放大的效果抽卡面板调试布局调试的时候,我们可以把Project......
  • 438. 找到字符串中所有字母异位词c
    /***Note:Thereturnedarraymustbemalloced,assumecallercallsfree().*/intchange(charc){returnc-'a';}booljudge(char*s,inthead,inttail,intn,int*tempp,int*temps){if(tail>=n)returnfalse;for(inti=head;i&......
  • 第143篇:手写vue-router,实现router-view
    好家伙, 今天来手写我们的老伙计vue-router, 1.替换router新开一个项目,并使用我们手写的router 2.大致结构letVue;//保存vue的构造函数classVueRouter{constructor(options){}}VueRouter.install=(_Vue)=>{Vue=_Vue;//备......
  • L1-043 阅览室
    不知道出题人是不是有那个大病。应该是测试点1,如果多次借,按照最后一次,多次还,按第一次。注意四舍五入。还有就是getchar()把空格读了。还有时间全换成了分钟60*小时+分钟。#include<bits/stdc++.h>usingnamespacestd;intmain(){ inta[1003][10]; fill(a[0],a[0]+1003......
  • 洛谷题单指南-线性表-P4387 【深基15.习9】验证栈序列
    原题链接:https://www.luogu.com.cn/problem/P4387题意解读:判断一组序列入栈后,出栈序列的合法性。解题思路:数据长度100000,直接模拟堆栈的入栈和出栈即可遍历每一个入栈元素,依次入栈,每一个元素入栈后,比较栈顶元素和出栈序列第一个,如果相等,则出栈,持续进行比较、出栈直到不相等......
  • R语言逻辑回归、决策树、随机森林、神经网络预测患者心脏病数据混淆矩阵可视化
    全文链接:https://tecdat.cn/?p=33760原文出处:拓端数据部落公众号概述:众所周知,心脏疾病是目前全球最主要的死因。开发一个能够预测患者心脏疾病存在的计算系统将显著降低死亡率并大幅降低医疗保健成本。机器学习在全球许多领域中被广泛应用,尤其在医疗行业中越来越受欢迎。机器......
  • 39. 对战胜负逻辑
    本节目标让用户从地图场景进入对战场景,然后对战胜利或失败之后收起卡牌实现过程让用户从地图场景进入对战场景Persistent场景隐藏Player和GameplayPanelHierarchy窗口中移除对战场景,添加map场景清除MapLayoutSO中的数据然后启动游戏,将Map场景设置为激活然后......