![](https://img-blog.csdnimg.cn/7cc220f734e54c51a2ccc7809da796dc.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
游戏开发
记录自己在开发游戏时遇到的问题及解决方案,还有一些总结的经验
Gyp郭小帅
本人从事Unity客户端开发,工作过游戏开发、Unity编辑器开发和AR/VR领域。博客用来记录我的学习经历。
展开
-
Unity游戏客户端进阶路线(只针对本人)
1.掌握,一般都会学C#,需要掌握C#编程语言的基础内容以及Unity3D的引擎配置。2.掌握,对使用的引擎有深入的了解,掌握它的特性以及局限性。3.熟悉游戏开发相关的,在功能实现中的使用。4.从框架层面来思考。5.理解队友写的代码,需要理解协作伙伴的策划、美术、音乐、运营、测试等方面的专业术语,和他们越顺畅,游戏最终成型的状态就会越理想。1:需要了解并掌握Unity的高级功能,如Shader、自定义渲染管线、光照模型、高级着色器、次表面散射等。2.原创 2023-09-09 15:15:41 · 965 阅读 · 0 评论 -
游戏内存优化
通过使用对象池,可以预先创建一定数量的对象,并在需要时重复使用这些对象,从而减少内存分配和释放的开销。3.内存分析和优化工具:使用内存分析和优化工具,例如Unity自带的Profiler,可以实时监控游戏的内存使用情况,找出内存泄漏和优化点,从而进行针对性的优化。总之,在Unity游戏开发中,内存优化需要从多个方面入手,综合利用各种方法和工具,从而尽可能减少内存消耗,提高游戏的性能和稳定性。在Unity游戏开发中,内存优化是非常重要的一环,因为游戏通常需要处理大量的数据和资源。原创 2023-09-14 14:38:42 · 498 阅读 · 0 评论 -
10种寻路算法
这也是一种适用于带权重的图的寻路算法,但与Dijkstra算法不同的是,Bellman-Ford可以处理图中存在负权重边的情况。:这是一种使用启发式方法来指导搜索过程的寻路算法,通常用于找到从起点到目标点的最短路径。:这是一种递归算法,它沿着图的深度遍历路径,直到找到目标或到达无法进一步前进的位置。:这种算法会扩展所有的节点,即按宽度优先的顺序,因此它通常用于搜索无权重图。:这是一种适用于带权重的图的寻路算法,它会找到从起点到所有其他点的最短路径。:这是一种用于寻找所有顶点对之间的最短路径的算法。原创 2023-09-09 15:31:16 · 4228 阅读 · 0 评论 -
客户端开发常用框架
这些框架可以帮助我们进行游戏的联机对战、排行榜、跨平台等功能的设计和实现。5.Unity的协程:Unity的协程是一种特殊的方法,可以在Unity中实现异步编程,让复杂的异步操作更容易被理解和控制。9.物理引擎:Unity使用的是Box2D物理引擎,可以进行真实的物理模拟,这对于设计游戏中的物理互动非常有帮助。6.Unity的序列化系统:Unity的序列化系统可以让游戏的数据在不同的平台之间同步和传输。8.Unity的动画系统:Unity的动画系统可以让我们更方便地设计和控制角色的动画。原创 2023-09-09 15:27:01 · 737 阅读 · 0 评论 -
C# 垃圾回收机制
具体来说,垃圾回收器会从应用程序的root对象出发,利用相互引用关系,遍历在Heap上动态分配的所有对象,没有被引用的对象不被标记,即成为垃圾,而存活的对象被标记,即维护成了一张“根-对象可达图”。完成标记后,垃圾回收器会启用压缩(Compact)算法,对内存中存活的对象进行移动,修改它们的指针,使之在内存中连续,这样空闲的内存也就连续了,这就解决了内存碎片问题,当再次为新对象分配内存时,垃圾回收器不必在充满碎片的内存中寻找适合新对象的内存空间,所以分配速度会大大提高。C#的垃圾回收机制原理是。原创 2023-09-09 15:24:30 · 438 阅读 · 0 评论 -
游戏性能优化
包括减少Draw Calls、减少三角面数、使用LOD、使用批处理技术、减少实时光源等,以提高游戏的帧率和渲染效率。包括使用对象池、使用合适的纹理、使用异步加载资源等,以减少内存占用和提高游戏的流畅度。包括使用正确的脚本编写方式、避免频繁的垃圾回收等,以提高游戏的逻辑处理效率和性能。包括使用正确的碰撞检测方式、使用物理引擎的最佳实践等,以提高游戏的物理效果和性能。包括使用正确的网络通信方式、优化网络数据包传输等,以提高游戏的联网效果和性能。原创 2023-09-09 15:22:13 · 612 阅读 · 0 评论 -
单例和静态类
该类包含一个静态属性和一个静态方法。由于静态类不能被实例化,因此不能包含实例方法和实例属性。在上面的代码中,我们使用静态变量 instance 来保存单例实例,并通过静态属性 Instance 提供全局访问点。单例模式是一种设计模式,它确保一个类只有一个实例,并提供全局访问点。C#中的单例(Singleton)和静态类(Static Class)是两种不同的设计模式,它们各自有不同的用途和特点。静态类是一种特殊的类,它不能被实例化。静态类通常用于提供静态方法和属性,以便于在程序中共享数据或执行某些操作。原创 2023-09-07 23:31:58 · 633 阅读 · 0 评论 -
状态机和行为树
通过遍历行为树,对象可以根据节点的逻辑规则来选择合适的行为进行执行。它将对象的行为建模为一系列状态,通过定义状态之间的转换条件和动作来控制对象的行为。状态机由多个状态组成,每个状态表示对象在特定情况下的行为。状态机适合用于描述对象的状态转换和执行顺序,例如角色的各种状态(如站立、奔跑、攻击等)之间的切换和相应的动作。而行为树则适合用于描述对象的复杂行为决策过程,例如角色在特定情况下应该采取何种行为(如追逐、逃避、攻击等)。而行为树更加灵活可扩展,适用于描述复杂的决策流程和行为逻辑。原创 2023-09-07 22:51:07 · 655 阅读 · 0 评论 -
帧同步和状态同步
总结起来,帧同步确保在游戏中的每个时间点上玩家都执行相同的游戏逻辑,而状态同步确保所有客户端都具有相同的游戏状态。这两个概念在多人游戏中都是非常重要的,以确保游戏的公平性、一致性和流畅性。在状态同步中,服务器充当了游戏世界的“真相”来源,负责更新和同步游戏对象的状态,而客户端则接收并应用这些状态更新,以保持游戏的同步性。在帧同步中,所有玩家在每个固定的时间间隔内,比如每秒更新60次,同时接收并应用来自服务器的游戏状态更新,以确保每个客户端都具有相同的游戏进程和一致的玩法体验。原创 2023-09-07 23:15:33 · 211 阅读 · 0 评论 -
C# 协程的底层原理
协程的挂起和恢复通过异步操作来实现。当挂起条件满足时,异步操作会通知状态机恢复执行,并将保存的状态变量还原,从而实现协程的继续执行。在运行时阶段,协程的执行由编译器生成的状态机类来控制。当调用协程时,会创建一个状态机实例,并从协程的入口点开始执行。状态机根据当前的状态变量,在执行过程中切换不同的代码逻辑,实现协程的挂起和恢复。每个协程都会被编译为一个状态机类,该类包含了协程的状态变量和对应的代码逻辑。总结来说,C#协程的底层原理是通过编译器生成状态机类来控制协程的执行,利用异步操作实现协程的挂起和恢复。原创 2023-09-07 22:55:49 · 539 阅读 · 0 评论 -
CPU和GPU性能优化
总之,优化CPU和GPU性能需要综合考虑多个方面,包括游戏逻辑、算法、Unity引擎和编辑器、图形渲染、并行计算和多线程技术等。在Unity游戏开发中,优化CPU和GPU的性能是非常重要的,可以提高游戏的运行效率、降低功耗和延迟,并提高用户体验。使用更高效的算法和数据结构,例如使用合适的数据结构来存储游戏对象和碰撞信息,使用动态规划来优化复杂的算法。减少不必要的计算和内存操作,例如避免频繁的分配和释放内存,减少不必要的数据结构和循环。减少Unity编辑器中的场景和游戏对象的数量,以减少内存占用和渲染时间。原创 2023-09-07 23:27:28 · 906 阅读 · 0 评论 -
将一个数组元素打乱(洗牌算法)
这段代码使用了Fisher-Yates随机洗牌算法,通过遍历数组并与随机位置的元素交换来实现乱序。运行代码后,将输出一个乱序的数组。可以使用随机洗牌算法来将数组中的元素乱序。# 交换当前位置的元素与随机位置的元素。# 生成一个随机索引。# 遍历数组中的每个元素。原创 2023-09-07 22:59:16 · 143 阅读 · 0 评论 -
常用设计模式
7. 组合模式(Composite Pattern):将对象组织成树状结构,可以以相同的方式处理单个对象和对象组合,比如游戏中的场景和场景中的物体。1. 单例模式(Singleton Pattern):用于创建一个全局唯一的对象实例,比如游戏中的资源管理器或者游戏设置。5. 命令模式(Command Pattern):将请求封装为一个对象,可以进行撤销和重做操作,比如游戏中的输入处理系统。3. 观察者模式(Observer Pattern):用于对象之间的消息传递和通知机制,比如游戏中的事件系统。原创 2023-09-07 22:53:04 · 603 阅读 · 0 评论