自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 收藏
  • 关注

原创 Unity编辑器相关

继承EditorWindow。

2025-08-21 18:05:28 551

原创 C#文件(夹)读取相关(完善中。。。)

阅读项目编辑器的代码时,发现好多与文件(夹)路径相关代码。本来自己之前对路径相关的东西就模模糊糊,希望通过这篇笔记能让自己模糊的地方明朗一下。

2025-08-21 11:30:42 379

原创 Unity常用工具及默认快捷键

轴心(Pivot),建模软件中确定的一个点,这个物体的移动、旋转、缩放都会基于这个点执行。中心(Center),指物体的几何中心,Unity根据游戏对象的形状自动计算的中心点。本地坐标系(Local),会随着游戏对象的旋转更改,即对象自身的坐标系。Left/RightArrow => 折叠/展开选中对象的。全局坐标系(Global),不会随着游戏对象的属性更改。Alt+鼠左 => 围绕对象转动视角。鼠右 + WASD => 自由移动视角。Alt+鼠右 => 拉近(远)视角。鼠左 => 框选3D游戏对象。

2025-08-19 15:38:42 375

原创 ++i与i++

但是一旦有中间变量去接收,比如var tempValue = ++i 或者 i++;tempValue中间值就是不一样的。1) i = 9,那经过i++或者++i,i的值都为10。如果还没理解,下面附带案例代码,看下Log或者断点看下即可。对于i的最终值,二者结果是一样的。

2025-08-11 17:30:08 167

原创 程序设计原则(SOLID)

S:Single,单一职责原则。O:Open,开闭原则。L:Liskov,里氏替换原则。I:Interface,接口隔离原则。D:Depend,依赖倒置原则。

2025-08-11 13:22:52 333

原创 开闭原则代码示例

对于上面的计算方法,考虑这样一种场景,用户想要计算一些其它形状的面积总和,比如三角形、矩形、五边形等等…… 您将不得不反复编辑此类以添加更多的if/else块,这就违反了开闭原则。

2025-08-11 10:49:29 322

原创 初识C#元组(Tuple)

看项目代码时,偶然间看见一个这样定义的数据结构,顿时人傻了(这啥玩楞)。我记着之前整理过Tuple,但是找不见了,而且之前整理的时候,对Tuple已经小彻小悟了。如今再回想Tuple,只记得有这么一个名词。那就重新再整理一次吧。。。其实在我看过元组的示例代码后有了新的感悟:元组就是一个临时构建的匿名对象(个人理解)。元组的创建可以使用基本的Tuple类或ValueTuple(推荐)创建元组。// 使用 Tuple 类创建元组// 使用 ValueTuple 创建元组元组的访问。

2025-08-09 10:51:28 228

原创 小白浅析Unity生命周期函数

OnEnable逻辑在游戏对象激活时,组件重复激活就重复执行;组件始终激活,游戏对象重复激活也重复执行。OnDisable与OnEnable执行相反。组件处于激活态销毁时,OnDestroy与OnDisable同一帧执行逻辑;组件非激活态销毁则只触发OnDestroy逻辑。OnEnable、Start:游戏对象和组件同时激活才生效。Awake:游戏对象激活就生效,与组件是否激活无关。Awake逻辑在挂载脚本后运行期间只执行。OnDestroy:是组件销毁的回调。游戏对象与组件处于激活态时。

2025-08-05 13:34:19 387

原创 初识NodeCanvas(施工中)

只执行最前面的,后面的相同Token阻断。相同Token的逻辑执行。详见下图Token"

2025-05-23 09:54:04 347

原创 QFramework框架底层逻辑学习

先是这行代码,通过CounterAppController层获取CounterAppModel层,在我看来,整个CounterApp架构的构建由此开始,为了方便管理,架构整体使用依赖注入的方式将各个子模块注入整个CounterApp的Architecture中。使用QF框架重构后的代码,给我这种小白一种很抽象的感觉,但好的代码就是抽象的,这是不可否认的。接下来初始化所有已经注入到CounterApp架构中的Model、System,并打上“已经初始化”标识。//TODO 未完待续...

2025-05-15 17:44:56 610

原创 私有委托&事件

【代码】私有委托&事件。

2025-05-15 10:55:48 269

原创 C#强类型枚举的入门理解

并不是一个官方的术语,但它通常用来描述。假设有一个非泛型的容器,存储的是。的作用就是将筛选出的。实例转换为具体的类型。中取出元素时,默认是。为什么需要强类型枚举?

2025-05-14 17:00:09 306

原创 C#扩展方法的入门理解

在学习QFramework时,看底层框架代码注意到这个函数,对于我一个小白来说不明所以,于是GPT了一下,才知道这是一个对ICanGetModel接口的扩展方法,于是想对C#扩展方法进行拆解理解一下,遂笔。示例代码Animal使用扩展方法。使用扩展方法前后代码对比。

2025-05-14 15:37:07 262

原创 关键字where

(Generic Constraints)中,目的是对泛型类型参数限制其必须满足的条件,从而保证类型参数具备特定的能力或特性,增强类型安全和代码可读性。表示类型参数必须有无参构造函数,必须放在所有其他约束的最后。可以有多个接口约束,写在基类约束之后,接口之间用逗号分隔。),它必须写在所有接口约束之前。如果存在继承类的约束(如。更严格,也只可单独使用。

2025-05-08 17:41:53 615

原创 CLR是什么

CLR 是(通用语言运行时)的缩写,它是.NET框架和.NET Core/.NET平台的核心运行环境。

2025-05-08 17:27:24 563

原创 obj = null; 赋值null之前没有其他引用指向obj对象,那么,当obj=null时,会被垃圾回收机制立即回收吗?

只是表示“该对象可回收了”,但什么时候回收,时间是不确定的,

2025-05-08 17:02:20 580

原创 事件的入门理解

event`关键字定义的事件会自动生成私有的“add”和“remove”访问器用于外部订阅(+=、-=等)(raise),这是一种封装机制,防止外部代码随意调用事件,保持了事件发布者对事件的控制权。但“raise”访问器(触发事件调用)是不公开的,只能在事件声明的类内部访问。`MyEvent`只能在`Publisher`类内部被调用(触发),这段代码在类外部订阅了事件,可以自由订阅,不受限制。事件的订阅者(Subscriber)在C#中,事件(event)1)事件的声明和触发限制。

2025-05-08 10:41:42 274

原创 为什么相机跟随逻辑在LateUpdate处理?

FixedUpdate(固定时间间隔) => Update(每帧) => LateUpdate(每帧最后)因为在Update中,目标可能还在移动中,如果在Update里更新相机位置,可能会造成画面抖动。在LateUpdate中,目标已经完成了当前帧的所有移动,相机跟随会更平滑。

2025-05-07 22:50:18 144

原创 为什么Update不受timeScale影响,但是加上了Time.deltaTime就被影响?

【代码】为什么Update不受timeScale影响,但是加上了Time.deltaTime就被影响?

2025-05-07 22:49:33 163

原创 协变(Covariance)与逆变(Contravariance)的入门理解

高级泛型类型系统特性,涉及。

2025-05-07 17:45:24 297

原创 public delegate void Action<in T>(T obj);这里in关键字的作用是什么?

in` 关键字是泛型中的协变(Covariance)修饰符。协变允许你使用比原始类型更具体的类型。简单来说,`in` 让泛型类型转换更宽松。- 不能将子类型的委托赋值给父类型的委托。- 允许将子类型的委托赋值给父类型的委托。- 委托类型必须完全匹配。- 提供更灵活的类型转换。

2025-05-07 09:21:28 218

原创 C#中不能通过new关键字创建实例的情况

6. 没有无参构造函数的类(如果要求必须使用特定参数的构造函数)- 抽象类、接口、静态类是最典型的不能new的类型。- 私有构造函数的类需要看是否提供了创建实例的方法。4. 带私有构造函数且没有提供创建实例方法的类。- 泛型类的实例化依赖于具体的类型参数。1. 抽象类(abstract)2. 接口(interface)5. 未指定具体类型的泛型类。

2025-05-06 14:06:19 413

原创 关键字sealed

sealed` 是一个重要的类型安全和性能优化关键字,- 防止类被继承、防止类被作为基类。- 提高性能(编译器可以进行优化)- 确保类的行为不被改变。- 防止方法被子类重写。- 不希望类被继承修改。2. 阻止方法被重写。- 明确类的设计意图。

2025-05-06 11:20:02 296

原创 水平布局组 (Horizontal Layout Group)

7)Child Force Expand(子对象强制展开)4)Reverse Arrangement(反向排列)3)Child Alignment(子对象对齐)1)Padding(内边距)2)Spacing(间距)

2025-04-29 17:38:22 342

原创 网格布局组 (Grid Layout Group)

6)Child Alignment(子对象对齐)4)Start Corner(起始角落)2) Cell Size(单元格大小)5)Start Axis(其实轴)7)Constraint(约束)3)Spacing(间距)

2025-04-29 14:07:23 250

原创 布局元素组件 (Layout Element)

1)Ignore Layout(忽视布局)

2025-04-29 13:07:12 428

原创 LitJson

序列化API:JsonMapper.ToJson(object);反序列化API:JsonMapper.ToObject<T>(string);注意:JsonMapper.ToObject(string);如果不指定转换类型结果是JsonData类型并非T类型!JsonType枚举值:JsonData操作:SetJsonType()必须使用的情况:不需要使用SetJsonType()的情况:记住:尽管直接赋值基本类型不需要SetJsonType(),但如果要创建对象或数组结构,SetJsonType

2025-04-23 16:07:32 438

原创 C#条件判断语句中分别有两个相同命名的var变量,表没问题但是读表后对var变量赋值,结果为null并且后续逻辑执行混乱

解决方案:将变量向上提取。

2025-04-23 14:28:30 404

原创 序列化&反序列化

将对象转换为可存储或传输的格式(如字符串、二进制数据)将存储或传输的数据重新转换为对象。把"冷冻"的对象"解冻"还原。

2025-04-23 14:19:48 150

原创 Canvas的3种渲染模式

Screen Space - Overlay (默认模式)UI可以被3D物体遮挡,取决于UI和3D物体与相机的距离。UI变成3D世界中的一个物体,完全遵循3D空间规则。UI永远显示在3D物体之上,不会被遮挡。

2025-04-22 19:50:41 163

原创 杂乱的ref、out、tuple代码理解

【代码】杂乱的ref、out、tuple代码理解。

2025-04-08 18:15:38 153

原创 变量、数据、值类型&引用类型的存储方式

数据是实际存储的内容:对于值类型,数据直接存储在变量对应的栈内存位置。对于引用类型,数据存储在堆内存中,变量存储的是指向这个数据的地址。这就解释了为什么:值类型赋值会复制数据:因为是直接复制栈上的内容。引用类型赋值只复制地址:因为只是复制了指向堆内存的地址。修改引用类型时多个变量会看到同样的变化:因为它们指向同一个堆内存位置。

2025-04-08 16:46:37 446

原创 空值处理操作符

当值类型使用?可空操作符时,它依然是值类型,只是被包装成了结构体,并不会变成引用类型。内存分配值类型:直接在栈上分配可空值类型:在栈上分配,但有额外的标志位引用类型:在堆上分配,栈上存储引用性能特征值类型:最高性能略有性能开销引用类型:需要垃圾回收。

2025-04-07 17:13:50 280

原创 C#partial关键字

set;set;// 发送邮件逻辑set;set;// 更新地址逻辑set;set;

2025-04-07 14:19:41 515

原创 Unity中锚点学习

Unity中锚点学习

2025-03-25 17:59:25 355

原创 Unity中的位置属性

【代码】Unity中的位置属性。

2025-03-25 16:12:56 149

原创 DOTween序列

/ 路径点改变时回调。.InsertCallback(2f, () => {}) // 在指定时间点插入回调。.OnStep(() => {}) // 每步更新时回调。.OnStepComplete(() => {}) // 每步完成时回调。.OnStart(() => {}) // 开始时回调。.OnComplete(() => {}) // 完成时回调。.OnKill(() => {}) // 销毁时回调。

2025-03-25 14:41:20 572

原创 C#协同程序的入门理解

C#协同程序

2025-02-28 11:27:18 151

原创 C#闭包分析

C#闭包原理:编译器在背后生成了一个私有的密封类,它将外部变量包装成私有密封类的成员变量,而委托方法包装成私有密封类的方法。涉及到外部变量的地方都替换成了私有密封类的成员变量,所以,每次循环修改的始终是私有密封类的成员变量的值,那么调用委托时输出的自然都是相同的值了。捕获迭代变量:当捕获的外部变量为for循环(注意是for而不是foreach)的迭代变量时,C#认为变量i是定义在循环体外的。捕获变量:捕获的变量会在真正调用委托时“赋值”,而不是在捕获时“赋值”,即总是使用捕获变量的最新的值。

2025-02-28 11:22:53 325

原创 摸爬滚打的开发总结

Unity游戏开发随笔

2025-02-15 09:31:17 241

空空如也

空空如也

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

TA关注的人

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