自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(100)
  • 资源 (2)
  • 收藏
  • 关注

原创 AI 绘画整体认知

AI 绘画整体认知。包括 发展时间线、已有的AI绘画云平台、重要平台/工具/概念、自己搭建的步骤等。

2022-12-05 22:25:44 1449 1

原创 ChatGPT 体验和思考

ChatGPT 体验和思考

2022-12-05 21:52:36 7429 3

原创 Unity UI 框架相关的一些思考

UI 类型的选择组件式、树状聚合设计原因支持度和易用性的思考操作/生命周期顺序的思考复杂黑盒接口的异常处理思考。。。

2022-11-26 00:02:57 2360

原创 Unity UI 框架

Unity UI 框架组件化、树状聚合设计提供面板创建/销毁/显隐藏接口、显示状态维护提供控件创建/动态逻辑绑定/销毁接口提供元素半自动收集、代码自动生成层级管理焦点管理内置自动添加背景,及背景点击响应逻辑内置自动播放打开/关闭动画、动画状态维护内置返回键回退逻辑其他(自定义组件、屏幕适配、多语言支持等)

2022-11-19 17:27:32 7931 3

原创 HybridCLR 探索

HybridCLR 示例项目简析

2022-10-19 17:47:26 5628 1

原创 Unity 中的 .NET、Mono 和 IL2CPP

Unity 中的 .NET 概述;Mono 和 IL2CPP 对比;IL2CPP 原理概述等。

2022-10-15 23:11:10 2312

原创 .NET相关概念

在研究 HybridCLR 之前,需要先详细了解 .NET相关概念。包括:什么是.NET、.NET 开发和运行环境、.NET 多语言开发条件、.NET 跨平台运行原理(托管执行过程)、.NET实现、.NET 应用发布、Unity开发者应关心的重点等、

2022-10-04 03:42:36 2334

原创 我理解的游戏数据模型

一、游戏数据的意义游戏本质是数据(所有模块的数据,共同构成一个完整的游戏数据模型)。玩游戏,就是在与服务器交换数据,最后改变这些数据存档。二、数据划分1、按所属划分 系统数据:系统本身的配置数据(如主线有哪些章、地图是怎样的、有什么NPC等) 个人数据:包括,账号数据(账号ID,token等)、角色基本数据(如,昵称、头像、角色等级经验等)、角色在各系统下产生的数据(如,拥有的道具资源、签到时间、Boss挑战次数,好友列表等) 服务器数据:由服务器生成和维护的数据(如,排......

2022-07-29 21:35:22 1910

原创 Behavior Designer 重点简记

Behavior Designer 重点简记

2022-07-07 20:55:14 658 2

原创 Unity 中实现可复用的 GridView

源码已放入我的 github,地址:Unity-ListView一、确定使用参数“GridView的参数,要怎么设计才能强大且易用”,我想了很久之后看了UGUIGridLayoutGroup的源码,发现我还是 too young。它的设计已经很合理了,沿用即可。原因:1、StartCorner 和 StartAxis 可以确定出八种排布方式。2、Constraint 为 Flexible时的,Padding 可能影响自适应的行列数。3、Padding 和 对齐方式配合的也很巧妙...

2022-04-09 17:45:29 3790 5

原创 UGUI 源码之 GridLayoutGroup

一、重点:1、GridLayoutGroup继承自LayoutGroup2、布局所需参数:⑴ StartCorner,从哪个角开始排布。⑵ StartAxis,从哪个轴开始排布。⑶ Constraint,列数或行数上的约束,可以指定行列数,也可以根据Content大小自适应。⑷ Spacing,间距、Padding,边距。⑸ CellSize,元素大小。其中,⑴、⑵ 可以确定出八种排布方向。...

2022-04-09 16:30:37 3512

原创 UGUI 源码之 LayoutGroup

一、重点:1、LayoutGroup 继承自UIBehaviour,可以利用其生命周期方法设置脏标记。2、LayoutGroup 实现了两个接口 ILayoutElement, ILayoutGroup,说明它既是一个布局元素,又是一个布局控制器。3、CalculateLayoutInputHorizontal() 为子类提供一个通用的、计算有效的 m_RectChildren(没有实现 ILayoutIgnorer 接口的子物体 和 实现了 ILayoutIgnorer 接口,但 ignor.

2022-03-05 21:03:45 4148

原创 UGUI 源码之 布局相关接口和类的关系及标记更新

UGUI 源码之 布局相关接口和类的关系及标记更新

2022-03-05 16:23:11 306

原创 不用 If 将越界索引转化为标准索引

若一个列表是循环的,当需要将当前索引左右切换至上一个/下一个时。就需要做这样的转换。虽然当索引越界时,可以用 if ,但有些丑,用一个算式即可。(#list 代表列表长度,列表索引从1开始)1、左切至前一个(将 x - 1 转到标准值):y=((x - 1) + (#list - 1)) % #list + 1如,1,2,3,4,5,6,7 减一后 变为 71234562、右切至下一个(将 x + 1 转到标准值)y=(x + 1) % #list如,1,2,3,4,5,

2022-02-26 12:03:46 258

原创 Unity的Package了解(2020.3)

已验证包----------------------------------------------------------2D Animation:com.unity.2d.animation为使用精灵实现骨骼动画提供了所有必要的工具和运行时组件。2D Pixel Perfect:com.unity.2d.pixel-perfect2D Pixel Perfect 包中包含 Pixel Perfect Camera 组件,可确保像素图像在不同分辨率下始终保持锐利清晰,并在运动中保持

2021-09-19 23:57:05 5000

原创 两个调整UI的便捷工具

一、两个需求在拼UI的过程中,经常需要手动干两件事。如果能够自动处理,可以节省大量时间,对性能也有好处(不必要的重叠可能导致不能合批)。(更重要的,这是布局强迫症的福音)需求1:为选中的多个同级物体增加一个Box,使其位置等于 所有选中物体的总中心使其大小等于 所有选中物体的总大小。执行后,选中物体的世界坐标均不变。结果预览1:创建包围盒需求2:调整选中物体,使其位置等于 所有子物体(不包含自身)的总中...

2021-08-28 21:34:21 435

原创 UGUI 源码之 ILayoutElement、ILayoutController、ILayoutGroup、ILayoutSelfController、ILayoutIgnorer

必须先搞清UGUI自动布局系统的设计思想,才能理解这些接口的用意。一、基本思想自动布局系统基于布局元素 和布局控制器两个概念。1、布局元素一个布局元素是具有矩形变换以及其他可选组件的游戏对象。(必需RectTransform)布局元素对自身应具有的大小有一定的了解。(由布局元素自身提供布局属性,可实现接口ILayoutElement)布局元素不直接设置自身的大小,而是可由用作布局控制器的其他组件使用布局元素提供的信息来计算布局元素要使用的大小。(布局元素的最终大小和位置由布...

2021-07-18 23:18:21 602

原创 数据库范式快速理解

一、第一范式概念: 在关系模型中,对于添加的一个规范要求,所有的域都应该是原子性的,即数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。快速理解: 表中各列相互独立、不重复、无前后顺序、不可分割(也要看定义,如“个人简介”可作为一列String没问题。但也可拆分为“教育背景”“工作经历”“项目经验”等)。二、第二范式概念:...

2021-07-05 00:01:14 250

原创 UGUI 源码图形更新及遮罩部分小结

具体请看博客专栏:https://blog.csdn.net/nratel/category_11133596.htmlGithub UGUI 注释(未完):https://github.com/NRatel/uGUI。1、UGUI Canvas元素更新基础2、UGUI RectMask2D+MaskableGraphic 工作原理3、UGUI Mask+MaskableGraphic 工作原理4、UGUI Mask 和 RectMask2D 的更新...

2021-06-26 21:57:09 232

原创 UGUI 源码之 MaskableGraphic

一、MaskableGraphic 的实质。1、MaskableGraphic 继承自 Graphic,并通过RectMask2D 和 Mask 实现 “可遮罩的图形”。2、最终RectMask2D 是通过 canvasRenderer.cull = cull; 实现剔除。通过调用canvasRenderer.EnableRectClipping(clipRect); 或canvasRenderer.DisableRectClipping(); 开启或关闭裁剪。3、最终 Mask 是通...

2021-06-26 21:36:26 699

原创 UGUI 源码之 StencilMaterial

这是一个模板测试材质管理类。可为每个 Graphic 动态地创建其自定义的模板测试材质。其实就是从性能上考虑,将相同参数的模板测试材质缓存起来,使用者自己进行添加、移除。-------------------------------------------------------------------------目前,UGUI 中只有 Mask 组件在进行遮罩时用了它。实际上,还可以利用它做一些其他的、模板测试可以做的炫酷效果,这里暂不研究。-----------------------.

2021-06-26 20:17:33 511

原创 UGUI 源码之 Mask、IMaterialModifier、IMaskable

一、Mask 的实质1、Mask 通过模板测试进行遮罩的。模板测试在渲染流水线的 光栅化阶段/逐片元操作时。如图:Unity模板测试文档:https://docs.unity3d.com/cn/2020.1/Manual/SL-Stencil.html2、Mask 组件在 OnEnable() 时将同级关联的 CanvasRenderer 的hasPopInstruction 字段置为 true。3、Mask 组件会在 GetModifiedMaterial 方法(实现自IM..

2021-06-26 20:05:16 961 2

原创 UGUI 源码之 MaskUtilities

全注释:using System.Collections.Generic;using UnityEngine.EventSystems;namespace UnityEngine.UI{ // Mask related utility class. This class provides masking-specific utility functions. // Mask 相关的工具类。该类提供了特定于 Mask 的工具函数。 // Mask 相关指:Mask 和 .

2021-06-19 22:35:30 378

原创 UGUI 源码之 RectMask2D、Clipping、RectangularVertexClipper

using System;using System.Collections.Generic;using UnityEngine.EventSystems;namespace UnityEngine.UI{ [AddComponentMenu("UI/Rect Mask 2D", 13)] [ExecuteAlways] [DisallowMultipleComponent] [RequireComponent(typeof(RectTransform))] .

2021-06-19 22:32:49 526

原创 UGUI 源码之 ClipperRegistry、IClipper、IClippable、

已知:1、目前实现了接口 IClipper的只有RectMask2D 。2、目前实现了接口 IClippable 的只有MaskableGraphic 。所以,这两个接口其实就是在描述RectMask2D 将通过怎样的方式对MaskableGraphic 产生裁剪或剔除效果。namespace UnityEngine.UI{ // Interface that can be used to recieve clipping callbacks as part of th...

2021-06-13 20:54:22 574

原创 UGUI 源码之 CanvasUpdateRegistry、ICanvasElement

UGUI 主要利用CanvasUpdateRegistry 对实现了 ICanvasElement 接口的元素进行布局和显示更新。大致更新步骤:一、注册更新1、实现 ICanvasElement 的类,都有LayoutUpdate(布局更新) 或 GraphicUpdate(图形更新)需求。2、实现 ICanvasElement 的类,都要将自身注册/取消注册到CanvasUpdateRegistry上。3、其中,继承于UIBehaviour 的类, 利用其生命周期,在元素各种状态改..

2021-06-13 20:44:10 848

原创 UGUI 源码之 Graphic

Graphic 是 UGUI 图形组件的基类。看见1000行的代码不要头疼,阅读步骤参考 如何阅读源码:先看 Ggraphic 的字段、属性;再看其构造方法、重写的 UIBehaviour 的生命周期方法;再看其实现的接口 ICanvasElement;再看其关联的类CanvasUpdateRegistry、GraphicRegistry、LayoutRebuilder。还有一些出现的工具类 TweenRunner、ListPool、ObjectPool。------------..

2021-06-13 20:23:21 837

原创 UGUI 源码之 UIBehaviour

UIBehaviour 中的生命周期要理解通透。因为其众多子类的行为严重依赖其生命周期。可以实际测试,因为光看命名可能有歧义,很容易理解错误。注意:源码中OnCanvasHierarchyChanged 的部分注释写到了IsDestroyed 上(错误)。更多 UGUI 注释已放入https://github.com/NRatel/uGUI。namespace UnityEngine.EventSystems{ // Base behaviour that has pro...

2021-06-13 20:06:03 408

原创 如何阅读源码?

最近打算再看一遍UGUI源码。发现还是有些茫然无绪。在突然面对大量 官方源码/他人代码 时,大多数人恐怕都是这样。探究 “如何科学地阅读源码?” 是有意义的!零、准备。1、明确自己阅读源码的原因。能解决自己的问题即可。2、戒急戒躁,做好长期阅读的准备。3、黑盒体验,重度使用、熟读文档。明白系统需求、痛点、重点、难点。4、做好笔记、总结。可以纳入版本管理,长期注解保存。5、疑问点可以自己动手实例验证、调试。一、从整体出发1、看类设计①、 利用 VS的 类..

2021-06-06 16:46:55 1047

原创 游戏开发与面向对象(OOP)

1、面向对象的一个重要作用是将属性和方法整理归类。 (极限情况下,让所有属性和方法都能找到其所属对象) 2、面向对象是符合人类思考方式的。尤其是实体,很容易理解。 3、继承,将各个子类的相同属性和方法抽象到父类中,是对对象的进一步整理和归类。可以大量减少重复代码。 (仅为了减少代码重复,定义一个全局的Util类存放各种杂乱的方法,是不好的) 1、面向接口是对面向对象的补充,它从整体出发,定义了各系统/模块之间的交互规范。 2、通过实现一组接口,可以快速拓展出适用于设计体系的模块。 3、实现接口的,要完成接口

2021-06-02 00:34:02 968

原创 利用协程或迭代器处理连续(串行)异步任务

前置文章:游戏开发与面向过程(POP)一:为面向过程正名游戏开发与面向过程(POP)二:串行步进系统

2021-05-30 15:25:23 282 1

原创 连续(串行)异步任务处理

上篇文章已经讲了面向过程思想的重要性。然而,最后的 lua 例子不算优雅(回调地狱了)。------------------------- NRatel割-------------------------一、解决方案为了解决这个问题。 NRatel先将 “过程” 这个概念抽象一下。将它称做 “步”(Step)。对于每一“步”,都有一个进入方法和完成回调(可以同步完成,也可以异步完成,这点无所谓)。using System;namespace NRatel{ pub..

2021-05-23 22:15:05 455 2

原创 游戏开发与面向过程(POP)

可能大多数人学习编程都是从C语言开始的。然后在学C++的时候听过这样一句话:C语言是面向过程的、C++是面向对象的。这让很多人潜意识里觉得, “面向对象比 面向过程 更高级”!其。实并不是这样,它俩的地位应该是平等的、缺一不可的。---------------------------------------NRatel割---------------------------------------“过程”在程序中无处不在。不管你写的是同步逻辑还是异步逻辑,都是一个个过程。而“面向过程..

2021-05-16 21:34:21 1420 3

原创 Unity接入激励视频广告,Admob+UnityAds+FacebookAudienceNetwork+Pangle。

前段时间用了两周时间接了这堆广告SDK,后来又改用其他方式接入了。浪费了工作量。记一下接入过程算是安慰吧。----------------------------------------------------

2021-05-16 19:46:56 5699 10

原创 Unity 扩展编辑器 笔记

文档原文: https://docs.unity3d.com/cn/2020.1/Manual/ExtendingTheEditor.htmlUnity 允许通过自定义 Inspector 和 Editor Windows 来扩展编辑器。并且可以通过自定义的 属性绘制器 来定义属性在 Inspector 中的显示方式。一、创建编辑器窗口 1、创建继承自 EditorWindow 的类 MyWindow。(脚本必须放在“Editor”文件夹下) 2、在 MyWindow 的 OnG...

2020-11-02 20:32:40 493

原创 Unity IMGUI 笔记

文档原文:https://docs.unity3d.com/cn/2020.1/Manual/GUIScriptingGuide.htmlIMGUI :即时模式 GUI用途: 1、创建游戏内调试显示和工具。(在每帧都会调用的 OnGUI() 中使用) 2、为脚本组件创建自定义检视面板。 3、创建新的编辑器窗口和工具以扩展 Unity 本身。一、IMGUI 基础知识 GUI 控件声明 关键:Type (Position, Content)。 1...

2020-10-30 12:30:56 452

原创 浅谈游戏客户端框架设计原则

一、前言“框架”,一个建筑学的概念,框和架,分别表 “约束” 和 “支撑”。在软件开发中,“框架” 通过总结 “确定的、公共的” 东西来提高开发效率。通过约定职责和交互,让系统变得规则、有条理。好的游戏不能拒绝创意,策划的脑洞让人痛且刺激。理想的框架可以在不同项目间快速复用,但实际要做到确实很难,因为 “之前情景下的约束” 与 “新的需求” 冲突是常有的事。一个框架的形成必然要经......

2020-01-20 12:57:17 1102

原创 时间戳和日期转换的相关问题(牵扯时区)

每次时间计算一扯上“时区”,都会让我懵一下。这个换算过程一定程度上依赖使用的库,lua里和C#里有所差别,做一下记录。一、基础1、“时间戳” 国际统一。就是指 格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。2、“日期” 受时区影响。同一时刻下,“不同时区的日期” 要比“0时区的日期”快 “时区数 * 3600 秒”。------------------...

2020-01-03 23:11:49 4219

原创 Unity资源管理——AssetBundle构建/打包

1、为资源设置 assetBundleName 和assetBundleVariant。 可以在资源的 Inspector 上手动设置,也可以通过 AssetImporter 进行设置。AssetImporter importer = AssetImporter.GetAtPath(assetPath);importer.assetBundleName = abName;im...

2019-12-10 17:53:23 5427

原创 Unity资源管理——基础知识整理

部分参考自:https://docs.unity3d.com/Manual/index.htmlhttps://www.uwa4d.com/一、Unity中常见的资源类型1、原始资源文件(从外部创建并导入Unity,每一个类型都对应一个AssetImporter): Texture、Model、AudioClip、VideoClip、TextAsset、Font、其他。...

2019-12-03 18:01:31 2232 2

TextureUnpacker-x86-64(v1.0)

基于Unity的plist+png解析工具。 将大图拆分/还原为小图。 windows 64位。

2018-12-15

TextureUnpacker-x86(v1.0)

基于Unity的plist+png解析工具。 将大图拆分/还原为小图。 windows 32位。

2018-12-15

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除