- 博客(63)
- 收藏
- 关注
原创 《软件设计师》下午题型(一)—— 数据流图设计
它摆脱了系统的物理内容,精确地在逻辑上描述系统的功能、输入、输出和数据存储等,是系统逻辑模型的重要组成部分。解,则称图 A 是图 B 的父图,图 B 是图 A 的子图。,即父图和子图的输入/输出数据流一致,这是找出遗漏数据流非常重要的技巧。其次,每个加工至少有一个输入数据流和一个输出数据流,反映此加工的数据来源和结果,加工的输出数据流应该都有其对应的输入数据流。再次,要找出遗漏的数据流,有时数据流平衡原则不作为解题的直接方法,而作为排除的手段,然后根据说明或其他方法找到图中遗漏的数据流。
2024-08-23 12:05:21
689
原创 《Unity3D高级编程 主程手记》第四章 用户界面(六) UI 优化(上)
动”指的是元素移动,或放大/缩小频率比较高的 UI。“静”就是静止不动的 UI,准确的说是界面上不会移动、旋转、缩放、更换贴图和颜色的 UI。
2024-08-13 11:43:33
786
原创 报错:ListenerException: Attempting to add listener with inconsistentsignature for event type XXX
多处添加监听,并且传递 MsgCallback 类型不一致。
2024-08-06 17:37:35
121
原创 《Unity3D高级编程 主程手记》第四章 用户界面(五) 快速构建一个简单易用的 UI 框架
首先它需要依赖 Unity3D 的 Animator 组件 [RequireComponent (typeof(Animator))]其次它要有播放(Play)接口用来播放指定动画,这里 Play 的参数包括动画名、播放完毕后的回调函数委托等。再次在 public 变量中需要 AutoPlay 这个参数,这样美术人员就可以在 Unity3D 界面上设置自动播放而无需程序调用了。最后需要在自动播放时选择指定的动画名和是否循环播放,以及循环播放间隔。
2024-08-06 17:30:06
1110
原创 《Unity3D高级编程 主程手记》第四章 用户界面(四) UGUI 核心源码
我们常用的组件 Image、RawImage、Mask、RectMask2D、Text、InputField 中,Image、RawImage、Text 都是继承自 MaskableGraphic ,而 MaskableGraphic 又继承自 Graphic 类,因此 Graphic 相对比较重要,它是基础类,也存放了核心算法。所有核心部分都围绕着如何构建网格、谁将重构,以及如何裁切来进行的。,它内部采用 List 容器对象池,将所有使用过的废弃的数据都存储在里对象池的容器中,当需要时再拿旧的继续使用。
2024-07-31 15:50:37
662
原创 《Unity3D高级编程 主程手记》第四章 用户界面(二) UGUI 系统的原理及其组件使用
UGUI 是,它的每个可显示的元素都是通过的形式来构建起来的。当 UI 系统被实例化时,UGUI 系统首先要做的就是。Unity3D 在制作一个图元,或者一个按钮,或者一个背景时,都会。可以理解为制造了一个 3D 模型,用一个网格绑定一个材质球,材质球里存放要显示的图片。如果每个元素都生成一个模型并且绑定一个材质球存入一张图片的话,那么界面上成千上万个元素就会拥有成千上万个材质球,以及成千上万张图。
2024-07-25 14:20:04
860
原创 Cannot perform upm operation: connect ETIMEDOUT 34.36.199.114:443 [NotFound]
问题:打开 Package Manager,加载报错。版本:Unity 2018 Windows。
2024-07-22 15:18:30
272
原创 《Unity3D高级编程 主程手记》第二章 C#技术要点(八) 业务逻辑优化技巧
不只是算法能大幅度提高业务逻辑的效率,普普通通的业务代码也同样可以有质的飞越。优秀程序员常关注代码对性能的影响,普通人只关注是否能完成功能,这样日积月累代码质量就会形成差距。
2024-07-20 16:47:28
1088
原创 什么是字节对齐?怎么计算struct占用多少个字节?
现代计算机中内存空间都是按照 byte 划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。指定对齐值:编译器或者程序员指定的对齐值,packLen。默认对齐值:结构体中每一个数据成员及结构体本身都有默认对齐值,记为defaultLen。成员偏移量:即相对结构体起始位置的长度,记为offset。成员长度。
2024-07-19 16:13:56
724
原创 《Unity3D高级编程 主程手记》第二章 C#技术要点(一) Unity3D中的C#的底层原理
C#、VB、J#这些遵守CLI规范的高级语言,会被各自的编译器编译成中间语言 IL,当需要运行他们时就会被实时的加载到运行库中,由虚拟机动态地编译成汇编代码(JIT)并执行。IL2CPP 有自己的虚拟机,该虚拟机不执行 JIT 或翻译代码,主要用于内存管理,其内存管理才有类似 Mono 的方式,程序员无需关心两者的内存差异。首先由 Mono 将 C# 翻译成 IL,再将 IL 重新变回 C++ 代码,再有各个平台的 C++ 编译器直接编译成能运行的机器码。,虚拟机不能跟踪这类代码,需要手动管理。
2024-07-15 17:45:10
688
原创 《Unity3D高级编程 主程手记》第四章 用户界面(一) 用户界面系统的比较
从图集工具来看,NGUI有更多的自主选择权,而UGUI更多的自动化的便利,从组件支持度来看NGUI更适合快速原型,而UGUI更多的是需要自己编写适合自己的组件。从UI底层可定制度上看,两者都是可定制的,但NGUI更加方便。从输入事件处理上看,NGUI混合了物理系统,而UGUI有一套自己独立的事件系统。从层级显示上看,NGUI概念有点混淆,而UGUI层级概念清晰干净。从字体制作上看,NGUI麻烦了点,而UGUI更加方便。从社区完善上看,NGUI更加商业化,而UGUI有官方支持后台强大。
2024-07-11 15:01:52
307
原创 《Unity3D高级编程 主程手记》第三章 数据表(三) 多语言的实现
一般文字都会以 Key-Value 形式存放在 Excel 表里,就比如 Key 为 “RoleName”,Value 为 “角色名字”,或者 Key 为 “1101”,Value 为 “好友分享” 等。这种 Key-Value 形式一般会以 Int-String(整数对字符串)或 string-string(字符串对字符串)的形式存在。
2024-07-10 10:17:52
221
原创 《Unity3D高级编程 主程手记》第三章 数据表(二) 数据表的制作方式
最简单的就是直接将 Excel 里的数据复制粘贴到文本文件中作为游戏数据。手动导出为 CSV。使用 Shell 或 Bat( Window 批处理)设计自动化流程操作。通过特定语言编写自动化程序。使用 Jenkins 来强化自动化流水线。使用 Unity3D 的菜单栏编辑功能。
2024-07-09 18:28:22
503
原创 clean code-代码整洁之道 阅读笔记(第十七章 终章)
类的方法只应对其所属类中的变量和函数感兴趣,不该垂青其他类中的变量和函数。可以在从不被调用的小工具方法中找到,也可以在永不会发生的switch/case条件中找到。如果某个模块依赖于另一个模块,依赖就该是物理上的而不是逻辑再上的。没有实现的默认构造器、没有用到的变量、从不调用的函数、没有信息量的注释等等,这些都是应该移除的废物。如果你有个已知并该在较高抽象层级的默认常量或配置值,不要将它埋藏到较低层级的函数中。只要把计算过程打散成一系列良好命名的中间值,不透明的模块就会突然变得透明,这很值得注意。
2024-07-09 15:43:44
1146
原创 《Unity3D高级编程 主程手记》第三章 数据表(一) 数据表的种类
数据表相当于是一个外部的数据库,数据库中存储着与游戏人物相关的数据,只不过这个数据库里的数据是不能更改的。数据表是连接美术,设计策划,和程序的桥梁。
2024-07-08 20:19:14
557
原创 《Unity3D高级编程 主程手记》第一章 软件架构(二) 软件架构的思维方式
软件研发、系统架构中最重要的能力——抽象能力。架构师先要在大脑中,然后是,以及子模块之间的,然后是子模块,最后将子模块起来,形成最后系统。我们常说编程和架构设计就是搭积木,优秀的架构师受职业习惯影响,眼睛里看到的世界都是模块化组合方式。
2024-07-02 17:22:57
388
原创 《Unity3D高级编程 主程手记》第一章 软件架构(一) 架构的意义
实际上架构无处不在,它实质上是解决生活和工作中的问题的一种方案。在软件系统架构中,架构承担了解决项目从研发到上线运营的方案。项目中的每个子系统的都有自己的决策方向,而子系统的决策方向,把它们合起来加入一定的关联性就构成了一个完整架构整体,即每个系统、模块、组件都是软件系统架构中的一部分。优秀的架构师,需要对每个子系统决策的方向要进行深思熟虑,不仅只针对单个系统的决策方向,还要结合其他系统以及整体系统需求的方向进行决策。在架构中这五项能力缺一不可,某项能力特别突出也不能决定整个架构的好坏,综合因素才是。
2024-06-29 15:41:34
425
原创 clean code-代码整洁之道 阅读笔记(第十五章)
如此我们遵循了童子军军规。模块比我们发现它时更整洁了。不是说它原本不整洁。作者们做了卓越的工作。但模块都能再改进,我们每个人也有责任把模块改进得比发现时更整洁。本章将研判来自JUnit框架的一个代码例子。
2024-06-27 18:03:57
324
原创 《Unity3D高级编程 主程手记》第二章 C#技术要点(七) 各类搜索算法
广度优先搜索和深度优先搜索是最常见的搜索算法,但如果不进行些枝剪的话效率是比较差的,直接使用不加修饰的广度和深度算法,会消耗比较多的 CPU 以至于整体效率比较差。好的搜索算法,需要有数据结构的支撑,在数据结构里记录了信息的特征,每次搜索的痕迹和当前的内容环境都可以用于枝剪和优化。
2024-06-27 15:07:06
915
原创 clean code-代码整洁之道 阅读笔记(第十四章)
许多种不同类型,类似的方法——听起来像是个类。ArgumentMarshaler的概念就是这样产生的。对Args类所做的最主要的修改是在监测部分。随着代码腐败下去,模块之间互相渗透,出现大量隐藏纠结的依赖关系。能工作的代码经常会严重崩溃。首先,每种参数类型都要有解析其范式元素、从而为该种类型选择HashMap的方法。要编写整洁代码,必须先写肮脏代码,然后再清理它。换言之,采用TDD,不会允许做出破坏了系统的修改。没什么能比糟糕的代码给开发项目带来更深远和长期的损害了。——创建合适的空间放置不同种类的代码。
2024-06-26 17:49:29
438
原创 国内镜像源网址
腾讯:腾讯软件源 (tencent.com)阿里:阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 (aliyun.com)清华:清华大学开源软件镜像站 | Tsinghua Open Source Mirror
2024-06-25 18:28:43
789
原创 《Unity3D高级编程 主程手记》第二章 C#技术要点(六) 排序算法
基础能力决定你到底能走多远。我们不是写一两年程序就完事了,从毕业算起,我们可能要写20-30年的程序,这段漫长的长跑路程中,最终比的不是谁熟悉API比较多,也不是谁用插件用的有多熟练,更不是比谁更熟悉某软件,而是。
2024-06-25 17:07:14
659
原创 clean code-代码整洁之道 阅读笔记(第十三章)
就生成的字节码而言,对于在getNextId方法中执行的那两个线程,有12870种不同的可能执行路径。当然,多数路径都得到正确结果。这样一来,每个线程都像是世界中的唯一线程,没有同步需要。当存在一个主要为读者线程提供信息源,但只偶尔被作者线程更更新的共享资源,吞吐量就会是个问题。两个线程修改共享对象的同一字段时,可能互相干扰,导致未预期的行为。挑战之处在于平衡读者线程和作者线程的需求,实现正确操作,提供合理的吞吐量,避免线程饥饿。在另外的情况下,有可能复制对象,从多个个线程收集所有复本的结果,并在。
2024-06-25 16:06:44
629
原创 《Unity3D高级编程 主程手记》第二章 C#技术要点(五) 委托、事件、装箱、拆箱
在 C# 中指针被封装在内部函数当中。不过回调函数却依然存在,于是 C# 多了一个委托(delegate)的概念,所有函数指针都以委托的方式来完成的。委托可以被视为一个更高级的函数指针,它不仅仅能把地址指向另一个函数,而且还能传递参数、获得返回值等多个信息。系统还为委托对象自动生成了同步、异步的调用方式,开发人员使用 BeginInvoke()、EndInvoke() 方法就可以避开 Thread 类,从而直接使用多线程调用。
2024-06-24 20:07:26
834
原创 clean code-代码整洁之道 阅读笔记(第十二章)
提升内聚性,降低耦合度,切分关注面,模块化系统性关注面,缩小函数和类的尺寸,选用更好的名称,如此等等。这也是应用简单设计后三条规则的地方:消除重复,保证表达力,尽可能减少类和方法的数量。我们的目标是在保持函数和类短小的同时,保持整个系统短小精悍。所以,尽管使类和函数的数量尽量少是很重要的,但更重要的却是测试、消除重复和表达力。遵循有关编写测试并持续运行测试的简单、明确的规则,系统就会更贴近OO低耦合度高内聚度的目标。Kent Beck关于简单设计'的四条规则,对于创建具有良好设计的软件有着莫大的帮助。
2024-06-21 17:55:36
478
原创 《Unity3D高级编程 主程手记》第二章 C#技术要点(四) 浮点数的精度问题
浮点数计算在我们大多数项目中并没有使用到特别的科学计算部分,所以float基本都够用。double也同样有精度问题,无论怎么样都是无法避免精度导致的在逻辑中的不一致的问题。名称。
2024-06-21 17:10:52
899
原创 clean code-代码整洁之道 阅读笔记(第十一章)
有一种强大的机制可以实现分离构造与使用,那就是依赖注入(Dependency Injection,DI),控制反转(Inversion of Control,IoC)在依赖管理中的一种应用手段。系统也应该是整洁的。领域特定语言(Domain-SpecificLanguage,DSL)是一种单独的小型脚本语言或以标准语言写就的API,领域专家可以用它编写读起来像是组织严谨的散文一般的代码。拥有模块化关注面的POJO系统提供的敏捷能力,允许我们基于最新的知识做出优化的、时机刚好的决策,决策的复杂性也降低了。
2024-06-20 18:29:48
775
原创 《Unity3D高级编程 主程手记》第二章 C#技术要点(三) Dictionary 底层源码剖析
Dictionaray是由数组构成,并且由哈希函数完成地址构建,由拉链法冲突解决方式来解决冲突。从效率上看,同 List 一样最好在实例化对象时,即 new 时尽量确定大致数量会更加高效,另外用数值方式做 Key比用类实例方式作为 Key 值更加高效率。从内存操作上看,大小以 3->7->17->37->….的速度,每次增加 2 倍多的顺序进行,删除时,并不缩减内存。如果想在多线程中,共享 Dictionary 则需要我们自己进行 lock 操作。
2024-06-19 17:13:58
1033
原创 clean code-代码整洁之道 阅读笔记(第十章)
对类的任何修改都有可能破坏类中的其他代码。我们的Portfolio类不再依赖于TokyoStockExchange类的实现细节,而是依赖于StockExchange接口。如果我们构建一个依赖于外部TokyoStockExchangeAPI的Portfolio类,代表投资组合的价值,则测试用例就会受到价值查询的连带影响。在整洁的系统中,我们对类加以组织,以降低修改的风险。尽管讨论了这么多关于代码语句及由代码语句构成的函数的表达力,除非我们将注意力放到代码组织的更高层面,就始终不能得到整洁的代码。
2024-06-19 15:36:51
656
原创 clean code-代码整洁之道 阅读笔记(第九章)
代码中的测试展示了为测试构造一种面向特定领域的语言的技巧。我们没有直接使用程序员用来对系统进行操作的API,而是打造了一套包装这些API的函数和工具代码,这样就能更方便地编写测试,写出来的测试也更便于阅读。测试API中的代码与生产代码相比,有一套不同的工程标准。守规矩的开发者也将他们的测试代码重构为更简洁和具有表达力的形式。如果测试不干净,你改动自己代码的能力就有所牵制,而你也会开始失去改进代码结构的能力。测试与生产代码一起编写,测试只比生产代码早写几秒钟。和其他代码一样:明确,简洁,还有足够的表达力。
2024-06-18 18:09:05
871
原创 《Unity3D高级编程 主程手记》第二章 C#技术要点(二) List 底层源码剖析
List 并不是高效的组件,真实情况是,它比数组的效率还要差的多,他只是个兼容性比较强得组件而已,好用,但效率差。
2024-06-18 16:10:07
1296
原创 UML是啥?类图是啥?UML类图怎么画?进来手把手教!!!
UML:统一建模语言的简称,它是一种由一整套图表组成的标准化建模语言。UML用于帮助系统开发人员阐明,展示,构建和记录软件系统的产出。类图(Class Diagram)是描述类、接口、协同以及他们之间关系的图,用来显示系统中这些概念的静态结构。类图也是其它图的基础,我们可以在类图的基础上,使用状态图、协作图、组件图和配置图等。二、UML类图怎么画?2.1 单个类常见的类图和接口静态属性/方法:加上下划线,如抽象属性/方法:使用斜体表示,如。
2024-06-17 17:51:08
2577
原创 clean code-代码整洁之道 阅读笔记(第一章~第八章)
记住,好的软件系统是由一系列读起来不错的代码文件组成的。读者要能确信,他们在一个源文件中看到的格式风格在其他文件中也是同样的用法。数据、对象的反对称性:在任何一个复杂系统中,都会有需要添加新数据类型而不是新函数的时候。另一方面,也会有想要添加新函数而不是数据类型的时候。做到这一步,我们就能单独处理它,也极大地提升了代码的可维护性。在使用我们控制不了的代码时,必须加倍小心保护投资,确保未来的修改不至于代价太大。使用单独的块封装,主代码尽量只与封装的块交互。边界上的代码需要清晰的分割和定义了期望的测试。
2024-06-04 15:57:57
259
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人