- 博客(51)
- 资源 (4)
- 收藏
- 关注
原创 关于二维和三维空间旋转差异
二维旋转描述为绕点旋转,而三维旋转描述为绕轴旋转,本质源于不同维度的几何特性。在二维平面中,旋转围绕一个固定点进行(如原点),数学上可用2×2矩阵表达;若说绕轴旋转会涉及第三维,超出纯二维范畴。三维空间则遵循欧拉旋转定理,任何旋转都可表示为绕某条轴的转动,并用3×3矩阵描述。这种差异反映了旋转在不同维度所需"剩余空间"的不同:二维旋转只需一个中心点,三维则需要垂直于旋转轴的平面。更高维度的旋转会呈现更复杂的几何特征。
2025-11-20 15:13:10
234
原创 Git 同一个文件多次修改的 revert 的顺序
在Git中回退(revert)同一文件的多次修改时,必须按照从新到旧的逆序操作才能避免冲突。摘要指出:1) 应先revert最新提交,再逐步回退早期修改;2) 推荐使用git revert --no-commit 旧commit^..新commit批量处理;3) 遇到冲突可通过--continue、--skip或策略选项解决。关键原则是"最新的修改最先撤销",这是保证操作顺利的核心要点。操作前建议备份分支并做好测试验证。
2025-11-05 20:28:58
238
原创 Unity 中隐藏文件规则
Unity项目默认隐藏以点开头的文件,这类文件不会在Project视图中显示且不会生成.meta文件。这是Unity遵循Unix系统的隐藏文件约定,过滤系统临时文件和版本控制文件的设计。遇到此问题可通过重命名文件、代码访问或强制导入解决,但最佳实践是避免在Assets文件夹创建此类文件,而将配置文件放在特殊目录或项目根目录下。
2025-11-05 17:16:42
362
原创 Unity TextMeshPro 文本对齐方式详解
本文详细解析了Unity TextMeshPro (TMP) 中的文本对齐方式,包括水平对齐和垂直对齐两大部分。水平对齐部分介绍了Justified(两端对齐)、Flush(边缘对齐)和Geometry Center(几何中心对齐)三种高级选项,分析了它们的视觉特征、代码设置方式和使用场景。垂直对齐部分则深入讲解了Baseline(基线)、Midline(中线)和Capline(大写线)的区别,通过直观的图示展示了不同对齐方式下文本的排列效果。文章还提供了C#代码示例,帮助开发者快速实现各种对齐效果。
2025-11-05 16:43:18
1286
原创 浅析数据结构系列(五)
本文介绍了双链表的C#实现方式。通过定义DoubleLinkNode类包含前驱、后继节点指针和数据域,实现双向连接。DoubleLinkedList类提供核心操作:在头尾添加节点、删除指定节点以及将节点移至头部,并维护头尾指针和节点计数。代码注释详细,适合初学者理解双链表的基本原理和操作方法。
2020-02-28 18:15:45
312
原创 浅析数据结构系列(四)
本文介绍了队列数据结构的基本概念与两种实现方式。队列是一种先进先出(FIFO)的线性表,操作限定在头部删除、尾部插入。通过生活实例(如排队取钱)说明其特性。 文章详细讲解了顺序队列(循环顺序队列)的实现,包括数组存储、头尾指针管理以及解决"假溢出"问题的循环结构。同时介绍了链式队列的单链表实现方式,指出其结点结构与操作特点。
2020-02-20 11:24:33
254
原创 浅析数据结构系列(三)
摘要: 栈是一种后进先出(LIFO)的线性表,操作限定在表尾(栈顶)进行。本文介绍了顺序栈和链栈的实现: 顺序栈通过数组存储数据,维护栈顶指针top实现入栈(Push)和出栈(Pop)操作,核心代码包括初始化、判空、清空及元素访问。 链栈基于链表实现,通过头插法维护栈顶结点,动态管理内存,同样提供Push/Pop等基本操作。两种实现均遵循LIFO原则,适用于不同场景(如固定容量需顺序栈,动态扩展需链栈)。代码以C#为例,封装了栈的通用接口方法。
2020-02-20 11:23:52
256
原创 浅析数据结构系列(二)
摘要: 本文介绍了线性表的基本概念和顺序表的实现方式。线性表是最基础的数据结构,其特点是元素按线性顺序排列,实现方式包括顺序表、链表等。顺序表通过连续内存空间存储元素,具有随机存取特性。文章提供了C#实现的顺序表接口和类代码,包含添加、删除、插入等基本操作,并详细说明了各方法的功能和实现逻辑。顺序表类通过数组存储数据,实现了长度获取、清空、判空、元素查找等核心功能,为后续数据结构的实现奠定了基础。
2020-02-20 11:22:27
243
原创 浅析数据结构系列(一)
数据结构是数据的组织方式,决定了程序的效率。学习数据结构能优化问题解决方法。基础概念包括数据、数据元素、数据项和数据对象。数据结构分为集合、线性结构、树形结构和图状结构。算法是解决问题的步骤,基于数据结构实现。数据结构是算法的基础,共同决定程序性能。
2020-02-20 11:21:22
265
原创 游戏开发之网络篇_10 Socket总结
本文简要介绍了Socket通信的基本应用框架,涵盖异步连接、收发消息、消息编解码、Protobuf处理、大小端问题等技术点。文章着重讲解了客户端Socket实现的关键功能,同时也指出当前框架尚缺心跳机制等功能的不足,建议读者可自行扩展实现。文章旨在为Socket入门提供参考,欢迎指正讨论。
2020-02-06 14:05:04
410
原创 游戏开发之网络篇_09 Socket通信客户端框架搭建和使用
本文介绍了一个通用的Socket客户端网络管理框架实现。主要包含以下功能:1)通过事件监听机制处理连接成功、失败和关闭等网络事件;2)使用消息队列和协议缓冲实现高效的消息处理;3)提供线程安全的消息监听和分发机制。核心类NetManager_Pro使用C#实现,封装了Socket连接、数据收发和消息处理功能,支持异步操作和最大消息数限制。该框架可用于Unity等游戏开发场景,支持Protobuf协议,并可通过Add/Remove方法灵活注册事件和消息回调。
2020-02-06 13:56:52
273
原创 游戏开发之网络篇_08 Socket中数据的编码和解码
本文介绍了一个解决TCP粘包问题的方案,通过使用Protobuf序列化类(ProMsgHelp)来实现数据包的封装和解封。该类提供了编码(Encode)和解码(Decode)方法处理消息内容,以及编码(EncodeName)和解码(DecodeName)方法处理协议名。其中协议名采用"2字节长度+字符串"的格式,使用小端编码确保跨平台兼容性。该方案简化了TCP通信中的数据封装过程,避免了手动处理包头信息的繁琐操作,提高了开发效率。代码注释详细,便于理解和使用。
2020-02-06 13:47:02
391
原创 游戏开发之网络篇_07 Socket中收发数据内容
文章摘要: 本文介绍了一个用于网络消息收发的ByteArray类,它解决了直接使用byte数组处理消息带来的维护性问题。该类实现了消息缓冲区的动态管理,包含读取/写入位置索引、容量检查、动态扩容等功能。主要特点包括:默认1024字节初始容量、自动数据移动优化、支持基础数据类型读取(Int16/Int32)以及缓冲区状态监控。通过封装消息处理逻辑,提高了代码的可维护性,符合单一职责原则,适用于大型网络项目的开发需求。
2020-02-06 13:41:44
224
原创 游戏开发之网络篇_06 Socket中使用的数据类型和数据协议
本文介绍了使用Protobuf进行网络数据传输的方法。针对直接发送字符串数据的局限性,推荐采用Google的Protobuf协议来实现结构化数据交换。在Unity中,通过引入"protobuf-net"程序集,并使用Proto编译工具将.proto文件转换为.cs代码文件。文中提供了MsgMove_Pro(包含x,y,z坐标)和MsgAttack_Pro(包含描述字段)两个示例协议定义,展示了从proto文件到C#类的完整转换过程,实现了类型安全的高效网络通信。
2020-02-06 13:30:01
290
原创 游戏开发之网络篇_05 Socket异步发送接收数据介绍和使用
本文介绍了使用C#和Unity通过Socket实现客户端与服务器异步通信的方法。代码展示了如何建立连接、发送接收数据及处理回调:1)创建Socket对象并异步连接到服务器;2)实现连接回调开始接收数据;3)在接收回调中处理服务器返回的数据;4)提供发送方法将UTF8编码的字符串异步发送到服务器。所有网络操作均采用异步方式,包含错误处理机制,适用于实时网络应用开发。演示了完整的客户端通信流程,包括连接建立、数据收发和异常处理。
2020-02-06 13:13:11
323
原创 游戏开发之网络篇_04 Socket简单服务器搭建
本文介绍了使用VS控制台程序搭建本地简易服务器的方法。服务器采用同步监听连接与Poll检测机制配合,实现非阻塞服务端功能。核心代码展示了Socket监听、客户端连接处理(包括异常检测和断开处理)以及消息转发功能。服务器仅作为Demo演示基础网络通信,不包含复杂业务逻辑。该实现使用C#的Socket类,通过Poll机制轮询检测可读Socket,处理客户端连接和消息转发,并解决了粘包问题。文中提供了完整的服务端核心代码和客户端状态类实现,可作为后续博客开发的基础框架。
2020-02-06 12:58:39
632
原创 游戏开发之网络篇_03 Socket异步服务器连接和使用
摘要: 本文从理论转向实践,介绍异步Socket连接在Unity中的实现。作者强调商业游戏开发中异步通信的重要性,并提供了客户端异步连接服务器的C#代码示例。代码展示了如何创建Socket、发起异步连接及处理回调,成功时输出连接信息,失败时捕获异常。最后预告下一节将实现简易服务器端代码。全文以实践为导向,适合开发者快速上手网络通信编程。
2020-02-06 12:36:06
512
原创 游戏开发之网络篇_01 网络游戏简单介绍
本文介绍了网络游戏开发中的Socket技术应用。文章首先区分了强联网游戏(如吃鸡、MMO)和弱联网游戏的特点,指出实时性对网络游戏体验的重要性。随后通过系列教程详细讲解了Socket套接字的使用方法,包括服务器搭建、异步连接、数据收发、协议处理、编码解码等内容,最终完成客户端框架搭建,为游戏网络通信提供完整解决方案。该系列适合游戏开发者系统学习网络编程技术。
2020-02-06 12:17:53
435
原创 游戏开发之网络篇_02 Socket简单介绍
本文介绍了Socket通信的基本概念。Socket是网络通信的端点,包含协议、本地/远程IP和端口等信息,可类比电话通信。IP地址用于识别网络主机,端口则区分不同应用程序。TCP和UDP是主要传输协议,TCP可靠但较慢,UDP快速但不可靠。文章还探讨了TCP粘包问题,即多条数据堆积导致解析错误,并提出通过添加数据长度包头(16位或32位)的解决方案,建议游戏开发使用16位整数表示长度。全文从概念层面讲解了Socket通信的要素和常见问题。
2020-02-06 12:14:38
531
原创 Unity一键打包APP
本文介绍了一个简化Unity项目打包流程的脚本工具类BuildApp。该脚本提供了跨平台(Android/iOS/Windows)的一键打包功能,支持自动生成带时间戳的输出路径,并能自动获取当前激活的场景配置。核心方法使用BuildPipeline.BuildPlayer实现打包,同时处理了不同平台的输出路径格式。该工具旨在帮助非技术人员(如测试、策划)快速完成打包操作,但作者指出对于需要处理SDK等定制化需求的复杂项目还需要进一步扩展功能。整个脚本简洁实用,适合作为基础打包工具的参考实现。
2019-11-16 17:45:17
824
1
原创 一键复制组件的材质球等信息
Unity一键替换材质球工具脚本,提供高效组件替换功能。核心功能包括:1)复制单物体组件到剪贴板;2)粘贴组件到目标物体(保留原有组件);3)递归复制层级物体所有组件;4)智能处理SkinnedMeshRenderer等特殊组件。代码通过ComponentUtility实现安全替换,避免Transform等关键组件被覆盖,并输出详细日志。特别适合频繁修改材质球的开发场景,提升美术工作流程效率。(149字)
2019-09-28 11:56:38
1067
原创 c# 装箱与拆箱知识小结
本文探讨了C#中的装箱(boxing)与拆箱(unboxing)操作。装箱是将值类型隐式转换为引用类型,拆箱则是显式地将引用类型转换回值类型。文章通过代码示例展示了基本操作过程,并分析了这两种转换的性能开销:装箱需要分配新对象,拆箱需要进行类型检查。为解决性能问题,建议避免在集合中频繁装箱值类型,推荐使用泛型集合替代。最后通过项目实例说明了如何通过分离数据类型存储来避免不必要的装箱操作,从而提高程序运行效率。
2019-09-16 19:31:43
325
原创 Unity之QTE快速反应事件
QTE(快速反应事件)是一种常见的游戏交互方式,要求玩家在限定时间内按下对应按键。本文展示了在Unity中实现QTE系统的核心代码。
2019-03-16 16:07:44
4300
原创 UGUI中给按钮绑定鼠标划过的事件
本文介绍了两种在UGUI中监听鼠标悬停按钮事件的方法。第一种是继承Button类并重写DoStateTransition方法,通过检测SelectionState.Highlighted状态来判断鼠标悬停。第二种使用EventTrigger组件,添加PointerEnter事件监听来实现。两种方法均避免了使用OnMouseEnter()的局限性(需要Collider组件),提供了更可靠的解决方案。第一种方法适合扩展自定义按钮,第二种则适用于不继承Button的情况。
2019-03-14 18:48:24
1825
原创 使用批处理一键打包Unity安卓APK文件
本文介绍了一种通过Windows批处理实现Unity项目一键打包APK的方法。作者首先说明了工具类程序的意义在于让非技术人员也能完成特定功能操作。接着详细讲解了准备工作、参数配置和关键函数(如BuildPlayer)的使用说明。文章提供了完整的C#脚本代码,演示如何获取场景路径并执行打包操作。最后给出了批处理文件(.bat)的编写方法,包括设置路径变量、调用Unity命令等步骤,实现不打开Unity编辑器直接生成APK文件的功能。该方法特别适合测试人员等非开发人员快速打包使用。
2018-11-12 15:38:22
1865
2
原创 C# List集合排序方法小结
本文介绍了C#中List集合的三种排序方法:1) 通过实现IComparer接口创建比较类;2) 使用委托(Comparison)进行排序;3) 使用Lambda表达式简化排序代码。以People类(包含name和age属性)为例,演示了如何按年龄对对象列表进行排序。第一种方法需要创建单独的PeopleCompare类,第二种采用委托方式更简洁,第三种Lambda表达式最为精简。这三种方式都能实现自定义排序,开发者可根据需求选择最适合的方法。
2018-09-26 15:01:53
19398
原创 Unity中使用Protobuf 来传输消息
其实说白了,probuf’用于前后端通信的时候就是通过规定的语法内容来进行二进制的一些数据处理,这样比利用json和xml传输效率要高一点,可能第一次接触这个东西有点不太懂,但是公司中既然使用了protobuf这种数据交换格式,肯定会有一套成熟的机制来处理这些文件的,但是一定要明白如何定制消息,发送消息,然后服务器会给我们的是什么样子的内容,搞清楚了这些东西后,管他用什么来传输呢。协议号的作用就是用来确定用于解析数据的解析类,所以也可以称为协议类型名,可以是string和int类型的数据。
2018-09-14 18:18:21
3556
原创 Unity中移动平台读取配置文件总结
本文总结了Unity3D中不同平台读取配置文件的方式差异。主要介绍了Android和iOS平台下的四种常用路径:dataPath、streamingAssetsPath、persistentDataPath和temporaryCachePath,并对比了它们的读写特性和适用场景。文章重点讲解了移动端读取XML文件时遇到的编码问题及解决方案,同时详细说明了在Android和Windows平台下使用WWW类加载配置文件的路径格式差异。
2018-05-02 19:02:28
2868
5
原创 优化技术---场景光影效果优化
本文分享了优化场景光影效果的技术方法。首先建议删除用户不可见区域的模型渲染,减少GPU/CPU负担;其次使用静态烘焙代替实时光照,具体操作包括:1)将静态物体标记为Static;2)在Lighting面板勾选Lightmap Static和Preserve Uvs选项;3)将所有灯光设为Baked类型;最后通过预烘焙测试效果后正式生成光影贴图。这种方法通过烘焙贴图代替实时灯光渲染,能显著提升性能,同时保持视觉效果。
2018-04-16 11:31:57
1598
原创 优化技术------对象池
摘要: 本文介绍了Unity游戏开发中对象池技术的应用,通过重复利用游戏对象来优化内存管理。传统频繁创建销毁对象的方式会消耗大量内存,而对象池技术通过禁用(SetActive(false))替代销毁,需要时重新激活使用。文章以第一人称射击游戏的子弹管理为例,展示了对象池的实现:创建一个全局Pool类管理对象字典,提供Get()获取/创建对象和Return()回收对象的方法。同时给出了子弹创建和自动回收的示例代码,并指出可使用不同数据结构(如List)实现对象池。最后补充了更完善的基类对象池设计思路,强调需手
2018-03-11 20:56:54
571
原创 UI框架简介(六)
文章摘要:本文介绍了游戏开发中背包模块的实现过程,重点讲解了数据层开发。首先概述了公司项目开发流程(需求分析、框架搭建等),然后通过继承BaseProxy父类创建BagModule子类,使用单例模式管理背包数据。类中包含服务器数据接收处理(OnSetAllData等)、事件监听注册与移除等功能,并通过事件分发机制实现数据层与显示层的交互。代码展示了如何通过事件系统处理背包物品的增删改查操作。
2018-02-06 14:09:51
605
原创 UI框架简介(五)
文章摘要: 本文介绍了游戏开发中事件层代码的设计与实现,重点讲解了前后端通信协议的定义方式。首先通过枚举类型CEventType定义了各类消息(如游戏事件、背包操作、设置修改等),包括客户端到服务端(C2S)和服务端到客户端(S2C)的交互协议。随后展示了事件派发器CEventDispatcher的核心代码,实现事件的注册、移除和派发功能,采用委托机制管理事件监听。该设计解耦了模块间的直接调用,开发者只需关注协议定义与事件处理逻辑即可。(149字) 关键词: 事件系统、前后端协议、委托机制、游戏开发
2018-02-06 13:55:55
445
原创 UI框架简介(四)
文章摘要: 本文介绍了Unity中的UI管理系统,以任务面板(TaskPanel)为例,演示了继承BasePanel的子类实现方式。TaskPanel通过CanvasGroup控制面板显示/隐藏,并注册关闭按钮事件。UIManager作为核心单例类,采用栈结构管理面板层级,实现面板入栈(PushPanel)和出栈(PopPanel)功能,确保面板按需加载和关闭。通过字典存储面板路径和实例,动态加载资源并维护面板状态切换(OnEnter/OnExit)。
2018-02-06 13:48:13
656
5
原创 UI框架简介(三)
摘要: 本文介绍了如何从框架的工具层开始学习,以简化理解难度。工具类(如Const、Resource等)提供封装方法,调用时无需关注内部实现,体现了面向对象的封装思想。通过示例代码讲解了加载精灵图片和添加脚本组件的工具方法实现。接着讲解了管理层的读表功能,以ItemData为例展示了如何解析JSON配置表并存储数据。全文强调从简单工具类入手,逐步理解框架设计。
2018-02-06 13:41:08
623
原创 UI框架简介(二)
本文介绍了Unity UI框架的文件结构及功能划分。通过多张图片展示框架目录,详细说明了每个文件夹的作用:事件管理(Events)、公共工具类(Tools)、数据存储(Data)、JSON解析(Json)、管理器集合(Managers)、UI层(UI)、基础类(Base)以及模拟服务器(Server)。作者建议读者先熟悉目录结构,后续将逐步分析具体脚本功能。文章还提供了框架入口提示(GameRoot)和资源获取方式(QQ联系)。全文旨在帮助开发者快速理解该UI框架的模块化设计思想。
2018-02-06 13:20:56
1841
原创 UI框架简介(一)
本文介绍了游戏开发中UI框架的重要性与应用。作者从一个程序员的工作日常切入,分享了自己搭建简单UI框架的经验。文章首先解释了框架存在的必要性:管理复杂的UI通讯、降低耦合性、便于多人协作开发。接着对比了传统开发模式与框架化管理的区别,并推荐了StrangeIocMVC、PureMVC等成熟框架。最后展示了MVC三层架构示意图,说明其数据层、显示层、控制层的分工关系。作者表示将分期讲解这个自建UI框架的具体实现,本文主要阐述框架的作用与价值。文章附有框架源码下载链接,适合游戏开发初学者了解框架基础知识。
2018-02-06 13:05:02
10788
1
原创 利用XML制作UGUI登陆界面
本文分享了使用UGUI系统开发账户登录界面的实现过程。通过XML文件存储用户数据,实现了登录验证、注册校验等功能。关键代码展示了如何创建XML文档存储用户信息,包括用户名、密码、电话等字段。界面包含登录主界面、注册面板和安全校验界面,通过输入框验证和提示框反馈操作结果。完整代码提供了用户注册时的密码校验、信息完整性检查等核心功能,并支持XML文件的读取与写入,为Unity开发者提供了一个可扩展的登录系统实现方案。
2018-01-09 15:56:31
2305
3
原创 unity中XML和JSON文档的解析
摘要: 本文介绍了在Unity中解析XML和JSON配置文件的方法,重点演示了XML文件的读取、节点增删改操作。通过XmlDocument类加载XML文件后,使用SelectSingleNode获取根节点,遍历输出内容。新增节点通过CreateElement创建并AppendChild添加,删除节点需先暂存目标节点再RemoveChild移除,修改节点则替换InnerText实现。所有操作最后需Save保存文件。代码示例展示了完整流程,并附有操作前后的XML结构对比图。
2017-12-07 16:55:27
2083
Trails FX 拖尾特效!
2023-12-29
【一步解决Visual Studio 编译器不能使用scanf()函数的方法】
2022-10-08
非常好用的日志管理器系统
2019-11-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅