首页 > 其他分享 >技术笔记(5)MMORPG

技术笔记(5)MMORPG

时间:2024-03-11 14:34:27浏览次数:17  
标签:调用 技术 笔记 ao MaskPanel MMORPG 面板 方法 字典

技术笔记(5)MMORPG

  • 希望实现的功能或目标:

    • 搞定UI系统
    • 搞定人物选择系统

  • 学习笔记:

    • RawImage在登陆界面中负责将某些特定模型渲染出来,比如:人物、怪物

    • UIMask是可以拦截穿透的,即点击上层覆盖的UI界面时,下层是点不到的

    • UISystem类

      • 字典:private Dictionary<string, BasePanel> panelDict = new Dictionary<string, BasePanel>();​​​

      • CanvasTrans:private Transform canvasTrans;​​​

      • 初始化方法:调用所有面板的注册方法,并打开LoginPanel

      • 注册面板方法:字典里没有,就在Canvas的transform之下实例化这个面板预制体,并把这个面板的类add进字典里,并调用该类的OnInit方法

        • 关于BasePanel的OnInit方法:使用扩展方法this.GetSystem获得UISystem之后,把面板gameObject的active设置为false;

          • 关于扩展方法GetSystem:调用单例类StartArchitecture的GetArchitecture方法,获得当前游戏框架,并调用当前框架的GetSystem方法。
      • 移除面板方法:字典里有的话,就把类从字典里remove出来,并把面板gameObject摧毁掉

      • 打开面板方法:调用字典内该面板类的OnShow方法

      • 关闭面板方法:调用字典内该面板类的OnClose方法

      • 其与其他Panel类之间的关系:

        • - UISystem
            - GameUI
              - GamePanel
            - MainUI
              - CharacterCreatPanel
              - ChiocePanel
              - LoadPanel
              - MaskPanel
              - RegisterPanel
              - TipPanel
          
      • 面板渐变方法:如下

    • UI模块之间渐变切换方法

      • 打开MaskPanel

      • 获取MaskPanel的Image组件

      • 调用DOTween.To方法,其中四个参数分别为,getter、setter、endValue、duration实现渐变黑屏

      • 再调用其回调函数OnComplete(()=>{}),实现等待渐变完成之后再开启新Panel,并关闭旧的Panel

      • 在OnComplete内再次调用DOTween.To方法实现黑屏渐变消失,并关闭MaskPanel

      • 具体代码(归属于UISystem):

        • public void PanelsChangeGradually<T,U>()where T : BasePanel where U : BasePanel
          {
              OpenPanel<MaskPanel>();
              Image maskImg = ((MaskPanel)panelDict["MaskPanel"]).MaskImg;
              DOTween.To(() => maskImg.color, toColor => maskImg.color = toColor, new Color(0, 0, 0, 1), 1)
                          .OnComplete(() => { 
                              ClosePanel(typeof(T).ToString());
                              OpenPanel<U>();
                              DOTween.To(() => maskImg.color, toColor => maskImg.color = toColor, new Color(0, 0, 0, 0), 1)
                                  .OnComplete(() => { ClosePanel("TipPanel"); ClosePanel("MaskPanel"); });
                          });
          
          }
          
    • 工具类DeepFindTransform

      • 从根节点开始找find,没找到的话,foreach对每一个子节点进行一次DeepFindTransform递归,当前轮次找到了就直接返回结果Transform
    • 加载面板LoadPanel类

      • 声明Slider

      • OnInit方法中Find场景中的Slider,并调用基类BasePanel的OnInit方法

      • 在OnShow方法中调用基类OnShow,并开启一个开始加载场景的协程StartCoroutine(StartLoading(1));

      • 加载场景的协程:

        • 声明两个整型变量,一是用来展示的进度,二是用来接收实际的进度
        • 调用SceneManager的异步加载场景方法,并声明一个AsyncOperation ao来接收返回值
        • 将ao的allowSceneActivation设置为false
        • 当ao.progress小于0.9f时循环,让展示进度追赶实际进度,每帧加一之后修改Slider
        • 大于0.9f跳出循环后,直接将实际进度设置为100,再次加一,修改Slider
        • 等待一秒之后将ao的allowSceneActivation设置为true
        • private IEnumerator StartLoading(int sceneIndex)
          {
              int displayProgress = 0;
              int toProgress = 0;
              AsyncOperation ao = SceneManager.LoadSceneAsync(sceneIndex);
              ao.allowSceneActivation = false;
              while (ao.progress<0.9f)
              {
                  toProgress = (int)ao.progress * 100;
                  while (displayProgress<toProgress)
                  {
                      displayProgress++;
                      SetLoadingPercentValue(displayProgress);
                      yield return new WaitForEndOfFrame();
                  }
              }
              toProgress = 100;
              while (displayProgress < toProgress)
              {
                  displayProgress++;
                  SetLoadingPercentValue(displayProgress);
                  yield return new WaitForEndOfFrame();
              }
              yield return new WaitForSeconds(1);
              ao.allowSceneActivation = true;
          }
          

  • 实现过程中产生的疑惑:

    • ContentSizeFitter组件的作用
    • unity中,object与Object的区别?

  • 对疑惑的解答:

    • ContentSizeFitter作用为调整RectTransform的大小以适应其内容大小,可作用于Text、Image、HorizontalLayoutGrou、GridLayoutGroup
    • object是C#中所有类型的基类,而Object是Unity引擎中所有对象的基类。
    • 此外,GameObject是Unity中的一个实体对象,他总是有一个Transform组件,用来定义对象在空间中的位置以及在场景层级中的位置;它可以附加其他组件(这些组件都是Object的子类)。Object提供实例化和销毁功能。

日期:3.10

标签:调用,技术,笔记,ao,MaskPanel,MMORPG,面板,方法,字典
From: https://www.cnblogs.com/bqza000/p/18066016

相关文章

  • 废水清洁新篇章:可视化过滤技术的崛起
    在环保日益受到重视的今天,废水处理成为了每个企业和个人都绕不开的话题。然而,传统的废水过滤过程往往是一个“黑箱”操作,人们无法直观地看到废水是如何一步步变得清澈的。今天,我们就来聊聊可视化这一创新技术是如何改变了废水处理的传统模式,让清洁过程变得更加透明和可控的。 ......
  • 为什么要写技术方案?
    有同学留言问我:在中小型公司做测试工作,领导提出要做自动化测试,是找个框架直接落地开干呢,还是先做做调研写个技术方案?担心做调研写方案没人看,领导只关注效率和结果。又是一个难得一见的好问题,这个问题的终极拷问是效率高低和结果优劣的对比,这种现象在很多中小型公司甚至大型公司......
  • 载谭 Binomial Sum 学习笔记
    对于微分有限的生成函数\(F(x)\),有一个生成函数\(G(x)\),以及数列\(a\),如果对于\(0\lek\len\),我们已知\(\displaystyle\sum_{i=0}^na_i[x^i]G(x)^k\),那么我们能够在\(\Theta(n)\)的时间复杂度内求出\(\displaystyle\sum_{i=0}^na_i[x^i]F(G(x))\)。设\(c=[x^0]......
  • 线段树 学习笔记
    简介略。-1一个模板改编自tourist。其中只需要写apply、pushdown、mergeclasssegtree{public:structnode{//don'tforgettosetdefaultvalue(usedforleaves)//notnecessarilyneutralelement!intsum=0,add=0;voi......
  • 狂神说Java——Mybatis学习笔记
    前言:配合狂神老师的教学视频使用效果更佳:https://www.bilibili.com/video/BV1NE411Q7Nx/?spm_id_from=333.1007.top_right_bar_window_custom_collection.content.click&vd_source=4c3c519d33c113799489c7417a0a4c0e1、简介环境说明:jdk8+MySQL5.7.19maven-3.6.......
  • BGRL论文阅读笔记
    BGRL论文阅读笔记Abstract​ 自监督学习提供了一个有前途的途径来消除昂贵的标签信息的需要。然而,为了实现最先进的性能,方法通常需要大量的负的例子,并依赖于复杂的扩充。这可能会非常昂贵,特别是对于大型图形。为了解决这些挑战,我们引入了BootstrappedGraphLatent(BGRL)——一种......
  • Vue学习笔记42--ref
    Vue==>refref属性被用来给元素或子组件注册引用信息(id的替代者)应用在html标签上获取的是真实的DOM元素,应用在组件标签上是组件实例对象(vc)使用方式:声明标识:<h1ref="xxx">。。。。。。</h1>或<Schoolref="xxx"></School>——School为组件获取方式:this.$refs.xxx......
  • 最新二次注入攻击和代码分析技术
    二次注入攻击二次注入攻击的测试地址在本书第2章。double1.php页面的功能是添加用户。第一步,输入用户名test'和密码123456,如图4-45所示,单击“send”按钮提交。 图4-45  页面返回链接/4.3/double2.php?id=4,是添加的新用户个人信息的页面,访问该链接,结果如图4-46所示。......
  • Augmentation-Free Self-Supervised Learning on Graphs论文阅读笔记
    Abstract我们认为,如果没有精心设计的增强技术,图上的扩充可能会任意的做出表现,因为图的底层语义会极大地变化。因此,现有的基于增强的方法的性能高度依赖于增强方案的选择,即与增强相关的超参数。在本文中,我们提出了一种新的无增强图自监督学习框架,即AFGRL。具体地说,我们发现通过与......
  • 线段树学习笔记(更新中)
    本文章开始写作于2024年3月10日22:48,这也是我第一次没有参考板子,独立写出一个线段树的时刻(虽然只是板子题并且debug的时候还是参考了一下)写这个主要是为了我自己以后复习起来方便,毕竟这玩意还是极其容易写挂的注意:以下内容中标为斜体的是需要按照题目要求具体情况具体分析的,文章......