游戏
文章平均质量分 78
tkokof1
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
捉虫(Bug)再记
本文记录了游戏开发中因协作沟通不足导致的Actor生成Bug。开发过程中,客户端与服务器功能拆分粗糙,小组间未充分对齐接口,导致实际Actor生成流程与预期不符。作者通过本地测试发现,蓝图组件仅负责配置,实际生成由服务器额外代码处理,流程比预想的复杂。问题根源在于跨部门协作时忽视了接口对齐的重要性,最终不得不花费额外时间调试。文章警示开发中不能因赶工期而忽略沟通成本,否则终将为此付出代价。原创 2026-05-25 15:00:29 · 370 阅读 · 0 评论 -
捉虫(Bug)又记
摘要:本文记录了作者在UE5项目中定位一个旁白动画Bug的过程。最初调用脚本接口只能触发音频而无法播放动画,经过多次排查发现调用C++接口却正常。深入对比后发现两个接口对应不同事件参数(A.B.C和A.B.C.D),而项目中存在两套旁白功能逻辑,其中响应A.B.C.D参数的版本默认隐藏导致动画无法播放但音频仍可触发。最终确认是事件参数匹配问题导致,凸显了复杂系统中隐藏逻辑带来的排查难度,也体现了工具辅助与人工判断相结合的重要性。原创 2026-05-07 17:47:56 · 231 阅读 · 0 评论 -
捉虫(Bug)小记
,于是当游戏中一次同步包含大量玩家的时候,部分玩家就不会收到同步信息,于是便出现了问题(而一般的游戏流程中,基本不会触发上述的接口问题,而出问题的多人副本玩法本身比较特殊,所以容易触发这个问题).至此我不禁想起了多年前另一个让我印象深刻的 Bug,这个 Bug 的表现是玩家会在某个多人副本游玩过程中出现’卡死’情况,这里说的’卡死’并不是指玩家死机了,而是指玩家的游戏界面状态会和实际游戏状态不一致,继而导致玩家无法继续游戏,并且这个’卡死’是概率性的,本地测试时极难重现,线上环境也是偶尔重现.原创 2026-04-17 20:53:43 · 384 阅读 · 0 评论 -
漫漫游戏汉化路
本文分享了作者汉化游戏《卡牌之声:残次的巫女》的经历和感想。原创 2026-04-01 20:42:56 · 431 阅读 · 0 评论 -
浅尝一下 AI 游戏开发
网上 AI 一键生成游戏的案例一大把,自己平时工作中虽然也会使用 AI 工具,但大抵以辅助为主,完全放手让 AI 来生成一个完整游戏确实还没试过,所以决定简单尝试一下看看(娱乐为主) ~原创 2026-03-22 17:20:47 · 500 阅读 · 0 评论 -
动画通知(Anim Notify)问题小记
本文简单记录了使用 动画通知(Anim Notify) 过程中遇到的一些问题和可能的解决方法。原创 2023-02-14 12:08:01 · 2940 阅读 · 0 评论 -
UE4 微笔记 之 调整网格材质参数
简单记录一下调整网格(Mesh)材质参数的方法修改网格材质参数一般有以下几个步骤:首先创建材质参数(这里有较详细的说明)创建动态材质实例(UMaterialInstanceDynamic)设置动态材质参数(通过 SetVectorParameterValue 等方法)以下是一段简单的代码示例:void SetMeshMaterial(UMeshComponent* MeshComponent, int MaterialIndex){ if (MeshComponent) { a.原创 2021-12-03 17:56:37 · 1256 阅读 · 0 评论 -
Sweet Snippet 之 PlayerPrefs for UE4
在 Unity 中进行本地存储,我们一般会用到 PlayerPrefs,而在 UE4 中,我们一般会使用 USaveGame,不过 USaveGame 在使用上和 PlayerPrefs 相差较大,这里给出一个 UE4 的 PlayerPrefs 实现,原理上仅是对 USaveGame 做了进一步的封装首先我们继承 USaveGame 创建 UPlayerPrefsSaveGame 类型#include "CoreMinimal.h"#include "GameFramework/SaveGa.原创 2021-08-17 19:46:49 · 422 阅读 · 0 评论 -
C++(UE4) Memory Management Review
以下是关于 C++(UE4) 内存管理的一点简单分享原始方式(Raw)malloc/free 是 C 中用于分配内存和释放内存的主要方式new/delete 是 C++ 中用于分配内存和释放内存的主要方式,除了内存管理之外, new/delete 还负责调用对象的构造函数和析构函数new[]/delete[] 是 new/delete 的数组形式比较重要的一点是, new/delete 等内存管理的调用一定要匹配,譬如调用了 new 就一定要调用 delete(而不能 不调用 delete.原创 2021-08-15 22:27:31 · 470 阅读 · 0 评论 -
MiniGame 之 扫雷实现
本文是 扫雷(MiniGame) 的一个实现样例(使用 Unity/C#),主要以代码为主,辅以一点简单的注解实现样例中的扫雷实现主要是两个类型(BombGame 和 BombGrid),下面是完整代码:// desc bomb game implementation// maintainer hugoyuusing System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngi.原创 2021-07-18 16:15:41 · 349 阅读 · 1 评论 -
UE4 微笔记 之 HitResult (持续更新)
UE4 中使用 FHitResult 结构来存储碰撞检测后的相关数据,在此简单记录一下该结构中各个成员的含义.FHitResult 结构对应于蓝图中有一个 Break Hit Result 节点,我们可以参照该节点来了解 FHitResult 中各个成员数据(为了便于理解,下面记录的成员数据顺序有所调整):Blocking Hit如果发生了碰撞则为 true, 否则为 falseInitial Overlap用于表示碰撞检测起始处是否与碰撞体发生了重叠, 发生了重叠为 true, 否则.原创 2021-06-20 07:25:54 · 5174 阅读 · 1 评论 -
C++ 标准库の使用迷思
转眼 2020 已经过去,回顾来看总有些迷幻,新年之际,自己倒不打算写些什么年终总结,想想还是记一小篇技术小文: C++ 标准库的使用迷思.了解 C++ 的朋友对于标准模板库肯定不陌生,平日用 C++ 开发时基本也是离不开标准模板库的,举个最普遍的例子:当我们需要动态数组时,甚至于仅需要静态数组时,我们都会第一个想到 vector :#include <vector>std::vector<int> int_array;原因就在于使用 vector 方便且稳定,不用自.原创 2021-01-02 17:35:02 · 402 阅读 · 0 评论 -
[译]寻路优化
看到一篇关于寻路优化的文章,简单翻译了一下,原文在这里译文并未照搬原文翻译,多处是意译原文图片已经失效,不过其他转载网址仍有图片,我对应着补了一下寻路对很多游戏来讲都是不可或缺的元素,在一般的游戏中,使用一些基本的寻路算法(譬如 BFS, Dijkstra 或者 A* 等等)就可以很好的解决寻路问题,但是在另一些游戏中,尤其是在游戏地图比较庞大的情况下,这些基本寻路算法需要耗费大量的时间进行寻路,进而造成游戏卡顿,这使得寻路优化变得非常重要.在这篇文章中,我会简单介绍一下 A* 算法以及该算.翻译 2020-12-16 17:56:41 · 3224 阅读 · 5 评论 -
Sweet Snippet 之 Timeslice Update
本文简述了一种基于时间片(Timeslice)的对象更新(Update)方法游戏开发中,我们一般都要进行大量的对象更新(Update)操作,拿 Unity 中的 MonoBehavior 举例,其便支持定义专门的 Update 方法来处理相关 Component 的更新:using UnityEngine;public class CustomScript : MonoBehaviou...原创 2020-04-29 19:02:00 · 329 阅读 · 0 评论 -
编程小知识之 Object.Destroy
本文简单描述了 Unity 中 Object.Destroy 的一些知识~Object.Destroy 应该是 Unity 开发中最常用的函数之一了,对于该函数的一个基本认知是:Object.Destroy 是异步执行的,并不会立即生效Object.Destroy 的异步特性让下面这种销毁代码成为了可能:for (int i = 0; i < transform.childC...原创 2019-10-23 12:12:05 · 1282 阅读 · 0 评论 -
小聊聊NGUI中Panel的Clip功能(之二)
上篇简单聊了一下NGUI中Panel裁剪的实现原理,总结来看其实比较简单,就是通过Shader计算fragment关于Panel裁剪区域的相对位置,然后通过调整alpha值来实现裁剪效果~ 那么依样画瓢,如果我们想要实现非NGUI元素的裁剪,也可以考虑使用Shader的方式,在此以ParticleSystem为例,看看我们如何将其挂接到UI之上,并且实现裁剪效果~ 回忆一下原创 2016-08-03 21:29:39 · 5638 阅读 · 2 评论 -
一个游戏程序员的代码书写观(一)
一个游戏程序员的代码书写观(一)故事游戏中基本都有MessageBox的需求,虽然可以使用OS层面的MessageBox,但是一般而言都不能满足游戏的需求,有鉴于此,我们实现了第一版的定制MessageBox:public class MessageBoxManager{ public enum Mode { Confirm, ConfirmCan原创 2017-04-11 21:06:25 · 733 阅读 · 0 评论 -
一个游戏程序员的代码书写观(二)
一个游戏程序员的代码书写观(二)引子对于稍有工作经验的程序员而言,或多或少都会关注到一个老生常谈的问题:代码风格(ProgrammingStyle),而这个话题可能也是程序员间争论最多的话题之一,不过争论归争论,一个原则大家基本都还是认同的:风格保持统一网上对于这个话题自然也有大量的信息,其中最出名的还是Google的代码风格指南,里面详细记录了很多语言风格的细节,有兴趣的朋友估计也都看过了,这里不原创 2017-04-28 21:40:03 · 722 阅读 · 0 评论 -
游戏中的富文本
游戏中的富文本游戏中使用富文本并不少见,网上资料也有不少,就Unity而言,其也内建了一些对于富文本的支持,NGUI也对富文本有不少功能支持,如果游戏对富文本的需求有限,这些内建的功能应该可以满足,但是如果有更复杂的富文本功能要求(例如复杂的图文混排),那么内建功能就有些捉襟见肘了~一个解决方案便是扩展,随便google了一下,找到一些挺有意思的实现:例如通过使用两个UILabel来实现图文混排原创 2017-03-23 12:20:01 · 1219 阅读 · 0 评论 -
又一篇杂记
很久以前写过一篇感想,当时表达了一些对于Cocos2d-x引擎即将3d化的担忧,之后自己也基本完全投入了Unity3D的怀抱,对于Cocos2d-x(或者现在应该叫Cocos吧)的关注便比较有限了,近来又不经意想起,遂而又简单的去了解了下Cocos2d-x的现状~ 最新版本是3.14.1,改动内容都是Fix,毕竟是小版本,基本都是用于修复较严重的Bug,往前看下3.14,changel原创 2017-02-22 14:16:59 · 510 阅读 · 0 评论 -
关于Unity ParticleSystem的一些"冷"知识
目前的游戏开发中,粒子系统的使用想必是标配了,Unity自然也提供了相应的解决方案:ParticleSystem,网上对ParticleSystem的介绍也非常之多(譬如这里,这里,这里还有这里),虽然相关的资料教程不少,但多是一些如何使用之类的常规信息,对于一些虽然有些“生冷”,但仍然可能遇到的粒子知识,网上涉及的资源便不多了,本篇就随便讲讲自己遇到的几个ParticleSystem的“冷”知识原创 2017-01-04 21:46:33 · 14987 阅读 · 0 评论 -
foreach, 用还是不用,这是一个问题~
接触过C#循环的朋友,想来对foreach应该不会陌生,相比一般的for循环方式,foreach显得更加优雅简洁,Unity支持C#脚本,平日使用中数组列表什么的自然也会遇到不少,想来foreach定然大有用武之地呀! 可惜网上大家的共识却是:不要用foreach! WTF? 原因其实也简单,就是为了避免GC,因为foreach会“偷偷”申请内存,使用过度的话自原创 2016-12-17 11:55:25 · 2202 阅读 · 0 评论 -
疑难杂症小记
说来其实也不算什么疑难杂症,原因后面再叙,只是最近遇到个代码问题确实令我犯了好一阵疑难,在此简单一记,算作总结吧~ 起因颇为简单,平时工作时无意瞟了一眼NGUI的UILabel实现,其中有段实现字体阴影的代码,原理来说其实挺清晰的,就是将原先用以渲染文本的顶点数据原样拷贝一份,然后做些位置偏移和颜色改变即可,代码大概是这副样子~// generate origianl ve原创 2016-11-10 19:52:57 · 530 阅读 · 0 评论 -
小聊聊NGUI中Panel的Clip功能(之一)
NGUI中的Panel具有裁剪的功能,操作上便是设置一个Panel类型即可~ 原理上,该裁剪功能是基于Shader来实现的,简单列一下相关的着色器代码: v2f vert (appdata_t v){ o.vertex = mul(UNITY_MATRIX_MVP, v.vertex); o.color = v.color; o.texcoord = v.texcoord原创 2016-08-01 21:31:32 · 8158 阅读 · 5 评论 -
Sweet Snippet系列之 Print Lua Table
引子Lua中唯一的内建数据结构就是关联数组(table),平时我们使用Lua时自然也一直在和table打交道,由于Lua中table的灵活性,使其拥有了强大的数据表达能力,但同时也让Lua的调试变的困难. 很多时候在运行时打印Lua table的内容会非常有助于我们纠错或者检查程序的正确性,不过Lua内建的函数库并没有提供相关的print table函数,不过我们自然可以自己实现一个~一般的pri原创 2017-07-12 20:42:47 · 388 阅读 · 0 评论 -
NGUI AnchorPoint与Camera CullingMask的结合之痛
问题NGUI内建的Anchor系统可以方便的定位UI(底层的一个支持结构是AnchorPoint),例如一些需要全屏显示的游戏界面一般都需要借助这项功能;另外的,对于稍复杂的UI设计,我们可能会将UI进行分层处理,一些游戏状态下我们可能也会主动显示或者隐藏其中的某些层级.而要实现这种UI的分层显示,一种自然的方式便是采用Camera的CullingMask. 两个系统单独来看好像都没有什么问题,但原创 2017-09-04 21:19:28 · 636 阅读 · 0 评论 -
随便聊聊Lambda
C#用多了,对于Lambda肯定不陌生,作为创建委托的一种简易方式,使用上确实相当顺手,不过用的多了,难免也会踩坑,下面这个坑可能就有不少朋友踩过:var count = 8;var Func = new List<Action>(count);for (int i = 0; i < count; ++i){ Func.Add(() => { Console.WriteLine(i);原创 2017-09-11 21:11:52 · 371 阅读 · 0 评论 -
朝花夕拾
朝花夕拾 记得大学那会儿对游戏编程突然有了兴致( 当然,现在仍然保持着——杜绝喜新厌旧! ),于是趁着课余时间自己搞了些玩意,由于当时自个儿没有电脑,所以不得不常跑去学校机房,可恨这机房身处八楼,楼道电梯又时常罢工,导致我隔三差五的老是能得到身体锻炼,不知这是有幸还是不幸......不过现在想来还真不得不唏嘘:“忆往昔爬楼岁月稠......”,至于搞出来的那些个“破烂”,虽然可执行程序原创 2009-12-29 14:24:00 · 1275 阅读 · 0 评论 -
[译]Unity 实用技巧
网上看到一篇关于 Unity 实用技巧的博文,觉得颇有意思,这里简单翻译一下,原文在这里(PS: 部分技巧仅适用于 Unity 较新版本,有兴趣的朋友注意一下)TextArea 特性TextArea 特性可以让我们更加方便的在 Inspector 中编辑字符串文本.Header, Tooltip 和 Space 特性Header, Tooltip 和 Space 特性可以帮助我们更好...翻译 2019-07-14 18:34:44 · 1031 阅读 · 0 评论 -
业务逻辑中如何处理断线重连
本篇文章简单介绍了在业务逻辑中处理断线重连的一种方法之前一直对如何在业务逻辑中处理断线重连没有一个清晰的认识,后来做了一些思考,这里简单记录一下~假设存在一段业务逻辑 AAA ,整体实现上分为两部分:服务器逻辑部分 ASA_SAS客户端逻辑部分 ACA_CAC一般来讲都是 ASA_SAS 负责维护逻辑状态与事件分发,ACA_CAC 则主要负责显示,输入等表现层的处理.假...原创 2019-06-21 21:53:54 · 984 阅读 · 0 评论 -
编程小知识之 CanvasScaler 的一点知识
本文简述了 Unity 中 CanvasScaler 的一点知识制作 UI 时,一般都需要进行多分辨率适配,基本的方法大概有以下几种:UI 参照单一的分辨率(参考分辨率)进行制作,实际显示时按照某种方式调整到实际的设备分辨率UI 按照所有可能的分辨率分别进行制作,实际显示时选择对应的设备分辨率显示上述两种方法(间)的某种平衡方式(譬如根据占比较高的几种分辨率来制作UI)UGUI ...原创 2019-05-16 18:07:16 · 703 阅读 · 3 评论 -
[译]OpenGL投影矩阵
这是关于OpenGL投影矩阵的一篇译文,原文在这里.概览(Overview)电脑显示屏是一个2D平面,为了能够在这个2D平面上显示OpenGL渲染的3D场景,我们必须将3D场景当作2D图像投影到这个2D平面(计算机屏幕)上.GL_PROJECTION 矩阵就是用来做这种投影变换的.首先,该矩阵将所有观察空间的顶点坐标变换到裁剪空间,接着,将变换后的顶点坐标(即裁剪坐标)的每个分量(x,y,...翻译 2019-04-09 16:07:36 · 921 阅读 · 0 评论 -
小议斜透视投影矩阵(oblique projection matrix)
本文简介了斜透视投影矩阵(oblique projection matrix)相关的一些知识Unity 的这篇文档提及了斜透视投影的一些内容,还列出了示例代码:using UnityEngine;using System.Collections;public class ExampleScript : MonoBehaviour { void SetObliqueness(f...原创 2019-04-07 20:59:19 · 2567 阅读 · 1 评论 -
法向量变换矩阵的推导
本文简述了一种法向量变换矩阵的推导过程使用矩阵对点进行空间变换是图形学中的常见操作,假设变换矩阵为 MMM ,我们需要变换切向量 TTT(由 点 P2P_2P2 - 点 P1P_1P1 定义) 以及与其垂直的法向量 NNN .(TTT 和 NNN 皆为列向量)假设 点 P2P_2P2 经过 MMM 变换后为 P2′P_2&#x27;P2′, 点 P1P_1P1 经过 MM...原创 2019-03-13 14:34:59 · 3110 阅读 · 0 评论 -
简单理解伽马校正
伽马校正相关的资料说明很多,但其中不少内容都写的比较繁杂,令人难以理解, 本文尝试简单解释一下伽马校正的相关内容~早期的 CRT 显示器存在非线性输出的问题,简单来说,你给 CRT 显示器输入(input)一个 0.5(**注意,输入范围为[0,1]), CRT 显示器的输出(output)并不是 0.5,而是约等于 0.218,输入与输出间存在一个指数大概为 2.2 的幂次关系:outp...原创 2019-02-22 14:50:54 · 6945 阅读 · 4 评论 -
疑难杂症又一记
本文简述了一种 OGRE 示例程序 SampleBrowser 运行出错的解决方法下了 OGRE 的 1.10.11 版本,使用 CMake 生成了相应的工程文件,遂而编译源码和示例,一切都挺顺利,但是当尝试 Debug 模式下执行 SampleBrowser 时却报了错: Unable to read zip file …简单google了一下,大部分的说法都是配置的资源路径有问题,尝...原创 2018-11-02 14:54:07 · 308 阅读 · 0 评论 -
随便再聊一点点Coroutine(确实只是一点点~)
之前写过一点Coroutine相关的东西(这里和这里),大致讲了些自己关于Unity协程的理解,自己在平日的工作中也确实用到了不少相关的知识,遂而引发了一个比较细节或者说微妙(subtle)的思考:StartCoroutine中的协程是否会立即执行? 考虑以下代码:IEnumerator TestCoroutine(){ Debug.LogError("Before")原创 2016-06-22 21:25:39 · 888 阅读 · 0 评论 -
爬坑笔记
引子 游戏开发过程中遇坑在所难免,没遇到的话基本上也是因为爬的不够远不够深罢了,近日自己便遇到一坑,虽小但又觉的挺微妙(subtle),在此一记~ 问题 按钮点击事件的重复触发问题:项目目前使用NGUI,逻辑中创建了一个按钮B1,并绑定了点击委托D1,E1中的处理逻辑则是销毁按钮B1并创建一个新的按钮B2,并绑定新按钮的点击委托为D2 伪代码表示一下大概原创 2016-04-15 22:09:30 · 626 阅读 · 0 评论 -
HGE系列之九 管中窥豹(精灵动画)
HGE系列之九 管中窥豹(精灵动画) 这次的HGE之旅,让我们来看看精灵及动画的实现,毕竟对于一款2D游戏引擎来说,恐怕精灵和动画不是最重要的,也可算是最重要之一了吧:)HGE内部对于精灵以及动画的实现其实相对简单,主要都是有hgeSprite(精灵)和hgeAnimation(动画)这两个类来完成所需的操作,内部使用的接口也都是hge基类所提供的(具体细节请参看源码实现),基本的原理也并无什么特殊的地方:精灵也便是一张贴图,动画也是传统的逐帧动画 :) 好了,让我们闲话少叙,先来看一看hgeSprit原创 2011-01-02 22:19:00 · 5567 阅读 · 2 评论 -
HGE系列之八管中窥豹(粒子系统)
<br /> <br />HGE系列之八管中窥豹(粒子系统)<br /> <br /> 这次的HGE系列让我们一起来学习一下HGE引擎的粒子系统部分,对于粒子系统不甚了解的朋友可以从这里开始了解。<br /> <br /> 首先还是让我们从头文件开始:<br /> <br /> 类名:hgeParticle<br /> 功能:单个粒子的属性结构<br /> 头文件:hge/hge181/include/hgeParticle.h<br /> 实现文件:无 <br /> <br /> <br原创 2010-10-05 11:09:00 · 5488 阅读 · 2 评论
分享