UnityUGUI问题记录
为什么会有LayoutRebuilder.ForceRebuildLayoutImmediate(RectTransform)接口? 什么时候用这个接口?我们在某一帧的Update或者EventInput中执行了一段代码, 这段代码会修改某一UGUI组件的某些属性,我们知道,当一个UGUI组件的属性发生变化时,这个UGUI组件下面的所有UGUI组件的属性也会连带着发生变化. 但是在一帧内,这种变化不是真的同时发生的,UGUI的数据更新发生在LateUpdate之后,OnPreCull之前. 这是笔者还亲自验证的. 具体验证过程在这篇博客中.也就是说Unity会先执行完所有的代码逻辑, 然后再去更新这些UGUI组件的属性, 所以在这一帧中我们执行的修改UGUI组件属性的操作,只有在下一帧时,我们才能够拿到这个组件下UGUI组件的属性的正确值.如果我们想在当前这一帧就获得正确的UGUI组件的属性,那么LayoutRebuilder.ForceRebuildLayoutImmediate(RectTransform)接口就派上用场了. 这个接口会强制更新传入UGUI及其子UGUI的RectT ...
UnityEditor功能开发
GUI、EditorGUI、GUILayout、EditorGUILayout、EditorGUIUtility、GUIUtilityGUI附带的还有GUIGroup、GUIStyle等 EditorGUI好像没有?在UnityEditor开发中下面这些类型都是可以用的https://docs.unity3d.com/ScriptReference/GUI.htmlhttps://docs.unity3d.com/ScriptReference/GUIContent.htmlhttps://docs.unity3d.com/ScriptReference/GUISkin.htmlhttps://docs.unity3d.com/ScriptReference/GUIStyle.htmlhttps://docs.unity3d.com/ScriptReference/EditorGUI.htmlhttps://docs.unity3d.com/ScriptReference/EditorStyles.html
EditorToolBarEditorApplication在Editor下使 ...
乌合之众
序我发现,社会组织就像人体结构一样复杂,我们完全无法让它们突然经受深刻的变化。大自然有时是非常极端的,但决不像我们所理解的那样。所以,对一个民族来说,迷恋大变革是最可怕的事情之一。不管这种变革在理论上显得如何伟大,只有当它能立即改变民族的深层心理时,它才是有用的。然而,只有时间拥有这种力量。支配人类的,是思想、感情和习俗,是存在于我们自身的东西。制度和法律是人们内心精神的表现形式,反映了它的需要,既然是人们的内心精神诞生了制度和法律,制度和法律自然就无法改变它。
ET中的网络通信模块
ET框架中的协议可以分成三种类型:
客户端内部的通讯协议
客户端和服务器之间的通讯协议
服务器内部的通讯协议
ET中负责模块间通信的组件有哪些?
ClientSenderComponent
ProcessInnerSenderProcessOuterSenderSession
MessageSender
MessageLocationSenderComponentMessageLocationSenderOneTypeMessageLocationSender
看起来有很多Sender, 可以归根结底只有ProcessInnerSender和MessageQueueSingleton这几个Sender
Realm SessionRouter SessionGate Session
通过Root节点上的RouterAddressComponent组件可以获得服务器的地址, 并将这个地址给到Session
内网和外网之间的通信(端口映射原理)KCP协议详解Unity+ET6.0网络框架的网络开发基础理论
ET框架自动生成脚本
ET框架仓库下其实是有两个工程的,虽然这两个工程里面的脚本有可能是用的同一份
在Share这个模块中ETSystemGenerator.cs这个脚本里面!
问题 这些代码自动生成的时机是什么时候?
编译的时候自动生成,无需开发者手动管理ETSystemGenerator这个类实现了ISourceGenerator接口,但是需要注意的是,在Unity中自动生成脚本的功能是是通过dll插件的方式接入进来的,还得看一下怎么导出dll,如果对SourceGenerator的源码有修改,需要重新导入dll到Unity中
GeneratorExecutionContext
ET框架中的Singleton
本文笔者会按照ET中所有Singleton创建的顺利,尝试梳理一下设计到的模块。
Singleton的创建
疑问 已经有一个ASingleton了,为什么还要有一个ASingletonAwake?所有的Singleton都会继承ASingleton基类。但是不同的Singleton还会继承不同的ISingletonAwake。 一是使用泛型,二是声明几个参数数量不同的ISingletonAwake接口,开发者可以根据需求选择具体的Singleton继承哪个接口,但是所有的Singleton又都会继承ASingleton被Word中的singletons管理起来,相当于把Singleton的初始化和管理的职能拆分交给了两个角色去处理,还是比较巧妙的。
疑问 为什么有的Singleton会被打上Code特性,有的不会?
虽然大家都是Singleton,但是各个Singleton之间的优先级不一定一样,单例之间会存在依赖。比如CodeLoader、CodeTypes这两个单例,它们两个需要在其他单例之前先被Awake,然后在CodeType单例内部,再去创建出其他单例出来。因此,如果有一个 ...
了不起的盖茨比
“我们要明白,讲交情要在人活着的时候讲,人死就没有交情了,”他意味深长地说,“我自己的原则是,人死我就什么都不管了。”