
游戏
文章平均质量分 74
tkokof1
这个作者很懒,什么都没留下…
展开
-
动画通知(Anim Notify)问题小记
本文简单记录了使用 动画通知(Anim Notify) 过程中遇到的一些问题和可能的解决方法。原创 2023-02-14 12:08:01 · 2044 阅读 · 0 评论 -
UE4 微笔记 之 调整网格材质参数
简单记录一下调整网格(Mesh)材质参数的方法修改网格材质参数一般有以下几个步骤:首先创建材质参数(这里有较详细的说明)创建动态材质实例(UMaterialInstanceDynamic)设置动态材质参数(通过 SetVectorParameterValue 等方法)以下是一段简单的代码示例:void SetMeshMaterial(UMeshComponent* MeshComponent, int MaterialIndex){ if (MeshComponent) { a.原创 2021-12-03 17:56:37 · 1083 阅读 · 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 · 326 阅读 · 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 · 359 阅读 · 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 · 259 阅读 · 1 评论 -
UE4 微笔记 之 HitResult (持续更新)
UE4 中使用 FHitResult 结构来存储碰撞检测后的相关数据,在此简单记录一下该结构中各个成员的含义.FHitResult 结构对应于蓝图中有一个 Break Hit Result 节点,我们可以参照该节点来了解 FHitResult 中各个成员数据(为了便于理解,下面记录的成员数据顺序有所调整):Blocking Hit如果发生了碰撞则为 true, 否则为 falseInitial Overlap用于表示碰撞检测起始处是否与碰撞体发生了重叠, 发生了重叠为 true, 否则.原创 2021-06-20 07:25:54 · 4224 阅读 · 1 评论 -
C++ 标准库の使用迷思
转眼 2020 已经过去,回顾来看总有些迷幻,新年之际,自己倒不打算写些什么年终总结,想想还是记一小篇技术小文: C++ 标准库的使用迷思.了解 C++ 的朋友对于标准模板库肯定不陌生,平日用 C++ 开发时基本也是离不开标准模板库的,举个最普遍的例子:当我们需要动态数组时,甚至于仅需要静态数组时,我们都会第一个想到 vector :#include <vector>std::vector<int> int_array;原因就在于使用 vector 方便且稳定,不用自.原创 2021-01-02 17:35:02 · 305 阅读 · 0 评论 -
[译]寻路优化
看到一篇关于寻路优化的文章,简单翻译了一下,原文在这里译文并未照搬原文翻译,多处是意译原文图片已经失效,不过其他转载网址仍有图片,我对应着补了一下寻路对很多游戏来讲都是不可或缺的元素,在一般的游戏中,使用一些基本的寻路算法(譬如 BFS, Dijkstra 或者 A* 等等)就可以很好的解决寻路问题,但是在另一些游戏中,尤其是在游戏地图比较庞大的情况下,这些基本寻路算法需要耗费大量的时间进行寻路,进而造成游戏卡顿,这使得寻路优化变得非常重要.在这篇文章中,我会简单介绍一下 A* 算法以及该算.翻译 2020-12-16 17:56:41 · 2930 阅读 · 5 评论 -
Sweet Snippet 之 Timeslice Update
本文简述了一种基于时间片(Timeslice)的对象更新(Update)方法游戏开发中,我们一般都要进行大量的对象更新(Update)操作,拿 Unity 中的 MonoBehavior 举例,其便支持定义专门的 Update 方法来处理相关 Component 的更新:using UnityEngine;public class CustomScript : MonoBehaviou...原创 2020-04-29 19:02:00 · 287 阅读 · 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 · 1187 阅读 · 0 评论 -
爬坑笔记
引子 游戏开发过程中遇坑在所难免,没遇到的话基本上也是因为爬的不够远不够深罢了,近日自己便遇到一坑,虽小但又觉的挺微妙(subtle),在此一记~ 问题 按钮点击事件的重复触发问题:项目目前使用NGUI,逻辑中创建了一个按钮B1,并绑定了点击委托D1,E1中的处理逻辑则是销毁按钮B1并创建一个新的按钮B2,并绑定新按钮的点击委托为D2 伪代码表示一下大概原创 2016-04-15 22:09:30 · 558 阅读 · 0 评论 -
一个游戏程序员的代码书写观(二)
一个游戏程序员的代码书写观(二)引子对于稍有工作经验的程序员而言,或多或少都会关注到一个老生常谈的问题:代码风格(ProgrammingStyle),而这个话题可能也是程序员间争论最多的话题之一,不过争论归争论,一个原则大家基本都还是认同的:风格保持统一网上对于这个话题自然也有大量的信息,其中最出名的还是Google的代码风格指南,里面详细记录了很多语言风格的细节,有兴趣的朋友估计也都看过了,这里不原创 2017-04-28 21:40:03 · 628 阅读 · 0 评论 -
游戏中的富文本
游戏中的富文本游戏中使用富文本并不少见,网上资料也有不少,就Unity而言,其也内建了一些对于富文本的支持,NGUI也对富文本有不少功能支持,如果游戏对富文本的需求有限,这些内建的功能应该可以满足,但是如果有更复杂的富文本功能要求(例如复杂的图文混排),那么内建功能就有些捉襟见肘了~一个解决方案便是扩展,随便google了一下,找到一些挺有意思的实现:例如通过使用两个UILabel来实现图文混排原创 2017-03-23 12:20:01 · 1140 阅读 · 0 评论 -
又一篇杂记
很久以前写过一篇感想,当时表达了一些对于Cocos2d-x引擎即将3d化的担忧,之后自己也基本完全投入了Unity3D的怀抱,对于Cocos2d-x(或者现在应该叫Cocos吧)的关注便比较有限了,近来又不经意想起,遂而又简单的去了解了下Cocos2d-x的现状~ 最新版本是3.14.1,改动内容都是Fix,毕竟是小版本,基本都是用于修复较严重的Bug,往前看下3.14,changel原创 2017-02-22 14:16:59 · 438 阅读 · 0 评论 -
关于Unity ParticleSystem的一些"冷"知识
目前的游戏开发中,粒子系统的使用想必是标配了,Unity自然也提供了相应的解决方案:ParticleSystem,网上对ParticleSystem的介绍也非常之多(譬如这里,这里,这里还有这里),虽然相关的资料教程不少,但多是一些如何使用之类的常规信息,对于一些虽然有些“生冷”,但仍然可能遇到的粒子知识,网上涉及的资源便不多了,本篇就随便讲讲自己遇到的几个ParticleSystem的“冷”知识原创 2017-01-04 21:46:33 · 14700 阅读 · 0 评论 -
foreach, 用还是不用,这是一个问题~
接触过C#循环的朋友,想来对foreach应该不会陌生,相比一般的for循环方式,foreach显得更加优雅简洁,Unity支持C#脚本,平日使用中数组列表什么的自然也会遇到不少,想来foreach定然大有用武之地呀! 可惜网上大家的共识却是:不要用foreach! WTF? 原因其实也简单,就是为了避免GC,因为foreach会“偷偷”申请内存,使用过度的话自原创 2016-12-17 11:55:25 · 2102 阅读 · 0 评论 -
疑难杂症小记
说来其实也不算什么疑难杂症,原因后面再叙,只是最近遇到个代码问题确实令我犯了好一阵疑难,在此简单一记,算作总结吧~ 起因颇为简单,平时工作时无意瞟了一眼NGUI的UILabel实现,其中有段实现字体阴影的代码,原理来说其实挺清晰的,就是将原先用以渲染文本的顶点数据原样拷贝一份,然后做些位置偏移和颜色改变即可,代码大概是这副样子~// generate origianl ve原创 2016-11-10 19:52:57 · 493 阅读 · 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 · 7950 阅读 · 5 评论 -
小聊聊NGUI中Panel的Clip功能(之二)
上篇简单聊了一下NGUI中Panel裁剪的实现原理,总结来看其实比较简单,就是通过Shader计算fragment关于Panel裁剪区域的相对位置,然后通过调整alpha值来实现裁剪效果~ 那么依样画瓢,如果我们想要实现非NGUI元素的裁剪,也可以考虑使用Shader的方式,在此以ParticleSystem为例,看看我们如何将其挂接到UI之上,并且实现裁剪效果~ 回忆一下原创 2016-08-03 21:29:39 · 5483 阅读 · 2 评论 -
随便再聊一点点Coroutine(确实只是一点点~)
之前写过一点Coroutine相关的东西(这里和这里),大致讲了些自己关于Unity协程的理解,自己在平日的工作中也确实用到了不少相关的知识,遂而引发了一个比较细节或者说微妙(subtle)的思考:StartCoroutine中的协程是否会立即执行? 考虑以下代码:IEnumerator TestCoroutine(){ Debug.LogError("Before")原创 2016-06-22 21:25:39 · 835 阅读 · 0 评论 -
一个游戏程序员的代码书写观(一)
一个游戏程序员的代码书写观(一)故事游戏中基本都有MessageBox的需求,虽然可以使用OS层面的MessageBox,但是一般而言都不能满足游戏的需求,有鉴于此,我们实现了第一版的定制MessageBox:public class MessageBoxManager{ public enum Mode { Confirm, ConfirmCan原创 2017-04-11 21:06:25 · 683 阅读 · 0 评论 -
Sweet Snippet系列之 Print Lua Table
引子Lua中唯一的内建数据结构就是关联数组(table),平时我们使用Lua时自然也一直在和table打交道,由于Lua中table的灵活性,使其拥有了强大的数据表达能力,但同时也让Lua的调试变的困难. 很多时候在运行时打印Lua table的内容会非常有助于我们纠错或者检查程序的正确性,不过Lua内建的函数库并没有提供相关的print table函数,不过我们自然可以自己实现一个~一般的pri原创 2017-07-12 20:42:47 · 329 阅读 · 0 评论 -
NGUI AnchorPoint与Camera CullingMask的结合之痛
问题NGUI内建的Anchor系统可以方便的定位UI(底层的一个支持结构是AnchorPoint),例如一些需要全屏显示的游戏界面一般都需要借助这项功能;另外的,对于稍复杂的UI设计,我们可能会将UI进行分层处理,一些游戏状态下我们可能也会主动显示或者隐藏其中的某些层级.而要实现这种UI的分层显示,一种自然的方式便是采用Camera的CullingMask. 两个系统单独来看好像都没有什么问题,但原创 2017-09-04 21:19:28 · 578 阅读 · 0 评论 -
也说棋类游戏
也说棋类游戏 一.引子 之前自己编写过一点关于棋类游戏的代码,所以对于这类游戏的大致构成也算是有一些肤浅的认识,前一阵子突然想到应该将这些个零散知识好好总结一番,以算作为自己学习的一点交代。可恨这不总结还好,一总结才发现自己以前自认为通晓的知识原来还是一知半解,更是发现了一堆自己先前遗漏的知识,唉,真可谓学海无涯啊......不过本着学习“八成”原则(这是我前阵子原创 2010-02-16 13:25:00 · 2372 阅读 · 0 评论 -
[译]Unity 实用技巧
网上看到一篇关于 Unity 实用技巧的博文,觉得颇有意思,这里简单翻译一下,原文在这里(PS: 部分技巧仅适用于 Unity 较新版本,有兴趣的朋友注意一下)TextArea 特性TextArea 特性可以让我们更加方便的在 Inspector 中编辑字符串文本.Header, Tooltip 和 Space 特性Header, Tooltip 和 Space 特性可以帮助我们更好...翻译 2019-07-14 18:34:44 · 864 阅读 · 0 评论 -
业务逻辑中如何处理断线重连
本篇文章简单介绍了在业务逻辑中处理断线重连的一种方法之前一直对如何在业务逻辑中处理断线重连没有一个清晰的认识,后来做了一些思考,这里简单记录一下~假设存在一段业务逻辑 AAA ,整体实现上分为两部分:服务器逻辑部分 ASA_SAS客户端逻辑部分 ACA_CAC一般来讲都是 ASA_SAS 负责维护逻辑状态与事件分发,ACA_CAC 则主要负责显示,输入等表现层的处理.假...原创 2019-06-21 21:53:54 · 865 阅读 · 0 评论 -
编程小知识之 CanvasScaler 的一点知识
本文简述了 Unity 中 CanvasScaler 的一点知识制作 UI 时,一般都需要进行多分辨率适配,基本的方法大概有以下几种:UI 参照单一的分辨率(参考分辨率)进行制作,实际显示时按照某种方式调整到实际的设备分辨率UI 按照所有可能的分辨率分别进行制作,实际显示时选择对应的设备分辨率显示上述两种方法(间)的某种平衡方式(譬如根据占比较高的几种分辨率来制作UI)UGUI ...原创 2019-05-16 18:07:16 · 624 阅读 · 3 评论 -
[译]OpenGL投影矩阵
这是关于OpenGL投影矩阵的一篇译文,原文在这里.概览(Overview)电脑显示屏是一个2D平面,为了能够在这个2D平面上显示OpenGL渲染的3D场景,我们必须将3D场景当作2D图像投影到这个2D平面(计算机屏幕)上.GL_PROJECTION 矩阵就是用来做这种投影变换的.首先,该矩阵将所有观察空间的顶点坐标变换到裁剪空间,接着,将变换后的顶点坐标(即裁剪坐标)的每个分量(x,y,...翻译 2019-04-09 16:07:36 · 788 阅读 · 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 · 2334 阅读 · 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 · 2969 阅读 · 0 评论 -
简单理解伽马校正
伽马校正相关的资料说明很多,但其中不少内容都写的比较繁杂,令人难以理解, 本文尝试简单解释一下伽马校正的相关内容~早期的 CRT 显示器存在非线性输出的问题,简单来说,你给 CRT 显示器输入(input)一个 0.5(**注意,输入范围为[0,1]), CRT 显示器的输出(output)并不是 0.5,而是约等于 0.218,输入与输出间存在一个指数大概为 2.2 的幂次关系:outp...原创 2019-02-22 14:50:54 · 6660 阅读 · 4 评论 -
疑难杂症又一记
本文简述了一种 OGRE 示例程序 SampleBrowser 运行出错的解决方法下了 OGRE 的 1.10.11 版本,使用 CMake 生成了相应的工程文件,遂而编译源码和示例,一切都挺顺利,但是当尝试 Debug 模式下执行 SampleBrowser 时却报了错: Unable to read zip file …简单google了一下,大部分的说法都是配置的资源路径有问题,尝...原创 2018-11-02 14:54:07 · 241 阅读 · 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 · 324 阅读 · 0 评论 -
再谈谈列表元素的删除
之前(以及更早之前)都提到了列表元素的删除,也提到过几种方法,有兴趣的朋友可以去看看,其中一种个人比较倾向的写法大概是这个样子(C++):auto iter = vec.begin();while (iter != vec.end()) { if (isEven(*iter)) { iter = vec.erase(iter); } else { ++iter; }原创 2016-04-27 21:40:34 · 815 阅读 · 0 评论 -
数学笔记(三)之镜面矩阵
镜面变换在游戏中并不少见,相关资料网上也俯拾即是,不过自己总是感觉略显生疏,在此简单一记,算作是加深印象吧~ 问题很简单,假设存在点P(x, y, z)以及平面(n, D)(不太清楚为何平面如此表示的朋友可以参考这里),求解P相对与平面的镜像变换矩阵~ 为了方便推导,画张图先: 简单解释一下图中内容:设点P(x, y, z)为平面正方向上的一点,点原创 2015-12-10 20:53:05 · 4775 阅读 · 0 评论 -
数学笔记(二)之平面表示
关于平面的表示方法,之前也有些模糊的地方,在此顺便一记吧~ 假设我们知道垂直于平面的法向量n,以及平面上的一点p0,如何使用这两个元素来表示该平面呢? 取平面上的任意一点p,并设d为从点p0到点p的向量,以坐标表示如下: n = (xn, yn, zn) p0 = (x0, y0, z0) p = (x, y, z) d = p - p0 = (x原创 2015-11-22 15:37:30 · 4083 阅读 · 0 评论 -
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 · 5395 阅读 · 2 评论 -
HGE系列之七 管中窥豹(图形界面)
<br /> HGE系列之七管中窥豹(图形界面)<br /> <br /> 这次的HGE源码之旅,让我们来看看HGE的图形用户界面(GUI)的实现,话说电脑技术发展至今,当年轰动一时的图形用户界面,而今早已司空见惯,想来不得不感叹一下技术的日新月异啊……HGE作为一款出色的2D游戏引擎,GUI方面的支持自然不在话下,并且从实现方面来说还是相当具有扩展性的:)好了,简略的介绍就到此为止吧,就让我们马上来看看源码:)<br /> <br /> 类名:hgeGUIObject<br /> 功能:界面对原创 2010-08-31 07:22:00 · 4517 阅读 · 5 评论 -
HGE系列之六 管中窥豹(资源管理)
<br /> HGE系列之六管中窥豹(资源管理)<br /> <br /> 记的上次浮光掠影的讲了一些HGE中的基础类别,不知大家了解了多少,仔细看过的朋友肯定知道当时在讲述一个类别的构造函数时我打了个马虎,直接略过了,原因说的好像是比较繁琐,想起来了吗?对,就是hgeStringTable ,为了免去“避重就轻”的嫌疑,我想这次也该好好的将他说一说了(但说实话,讲解这个函数确实比较繁琐……),而hgeStringTable 是HGE资源管理中的一个基础(Base)类别,所以我想顺着讲述一下HGE的原创 2010-06-07 08:58:00 · 3487 阅读 · 0 评论 -
Singleton模式小探
<br /> <br />Singleton模式小探<br /><br /> 一.缘起<br /> <br /> 设计模式,这个多年前因为《设计模式》这本书而开始名声鹊起的软件名词,相信在当今年代早已为相关人士耳熟能详,你可以像大多数人那样对他顶礼膜拜,你也可以如极少数人一般对其嗤之以鼻,但是有一点是可以肯定的,那就是你肯定曾经听说过他、接触过他甚至运用过他(什么,你不知道什么是“设计模式”?……好吧,我是武断了点,请点击这里开始了解……)<br /> 说来有趣,我本人最初开始接触设计模式并非始于《原创 2010-07-25 14:44:00 · 1287 阅读 · 0 评论