UnrealEngine摄像机系统简析 1. 摄像机系统的主要功能在游戏中,摄像机是玩家观察游戏世界的眼睛。 区别一下玩家和角色的概念,玩家是指通过输入设备体验游戏的真实个体,而角色则是指游戏世界中被操纵的虚拟个体。 摄像机的位置和朝向分别决定了玩家观察的位置和方向,而摄像机的视野、远近裁剪面等属性则决定了玩家观察的范围。UnrealEngine使用POV(Point of View)来代指这些会影响玩家观察游戏世界的属性。 PO 2024-02-29 UnrealEngine的苦痛之路 #UE4 #摄像机
载具的物理同步方案 1. 载具的物理模拟游戏中经常被使用的载具种类有很多,如汽车、摩托、船艇和飞机等。其中,汽车是最为常见的载具。在没有特别说明的前提下,载具通常默认表示汽车。 当然,无论是哪种载具,其在现实世界中的运动状态都很复杂。如何对载具的运动状态进行合理的简化和解耦,建立合适的物理模拟模型,让玩家能感受到真实的物理效果,对载具的物理模拟至关重要。 以游戏中最常见的汽车为例,为了最大程度还原真实的驾驶体验,需要 2024-02-28 UnrealEngine的苦痛之路 #UE4 #载具
《Space Engineers》基于物理的预测同步方案 1. 背景介绍《Space Engineers》[1]是一款发行于2013年的沙盒类多人游戏。玩家可以建造功能各异且大小不一的太空船、太空站、行星哨所,也可以驾驶飞船在太空中畅游,在星球上探索并收集生存所需的资源。 用于开发《Space Engineers》的游戏引擎,是Keen Software自研的游戏引擎VRAGE。VARGE是一个基于体素(Voxel)的游戏引擎,并使用了Havok作为其物 2023-11-11 GDC #网络同步
从零开始部署waline服务器 前言waline 是一款简洁、安全、支持多种部署方式的评论系统。网上关于如何使用Vercel+LeanCloud进行部署的资料很多很详细,但这类免费平台的稳定性很差。如果自己有服务器,在自己服务器上部署无疑是更好的选择。遗憾的是,很少有文章会详细地记录如何使用独立服务器部署waline,大多数只记录了其中某些关键的步骤,容易让新手感到困惑。 因此在看了官方文档和一些独立部署的文章之后,这里总结了如 2023-06-03 个人博客 #waline
UE4的物理同步 1. 为什么需要物理同步在网络游戏中,如果场景中某个可以与玩家所操作的对象发生交互的物体需要借助物理引擎的模拟来得到正确的位置和朝向,那么需要确保在不同客户端上的模拟结果一致。 如果可以保证物理引擎的每一次模拟结果是确定的,那么仅需要同步每次玩家操作,就能保证不同客户端的模拟结果一致。但大部分物理引擎(如UE4使用的PhysX物理引擎)都是不确定性物理引擎,其模拟结果受不同平台浮点数精度不同等问题 2023-05-29 UnrealEngine的苦痛之路 #UE4 #物理
《C++回顾笔记》取模运算与取余运算 对于整型数a,b来说,取模运算和取余运算的计算方法是一样的: 求整数商:c = a/b; 取余和取模:r = a - c * b; 取模运算和取余运算的区别在于第一步对计算结果舍入的方式不同:取模运算在计算c的值时,会将结果向负无穷方向舍入,而取余运算在取c的值时,向0方向舍入。 例如-1对256取模和取余时: 求整数商c,取模将结果向负无穷方向舍入得到-1, 2021-05-18 《C++回顾笔记》 #C++
漫话帧同步 前言  帧同步作为网络游戏经常使用的一种同步方案,网络上介绍帧同步原理和具体实现的技术文章俯拾皆是。因此,本文也不再班门弄斧,而只是将一些写得很好的文章加以归纳整理,并结合自己在实际应用中对帧同步的一些理解对一些观点进行补充,以期达到让没接触过帧同步的人在看完本文章之后能快速了解帧同步的相关知识。 网络游戏究竟在同步什么   2021-04-30 编程随笔 #网络同步 #帧同步
《C++回顾笔记》进程的内存空间分配   现代操作系统会为每个进程都分配一个虚拟内存地址空间,虚拟内存技术使得每个进程都可以独占整个内存空间,地址从零开始,直到内存上限。进程会把整个地址空间(从低地址到高地址)分为不同的区间用于不同的用途:   如上图所示,一般来讲,进程会将其虚拟内存地址空间分为六个部分,它们的用途分别如下: TEXT段(代码段):代码段用来存 2021-04-28 《C++回顾笔记》 #C++
《C++回顾笔记》声明、定义与初始化 声明(Declaration)所谓声明,是告诉编译器某个东西的名称和类型,但略去某些细节。在程序中,允许重复声明多次。下面的都是声明式: 12345678910extern int x; /// 声明一个变量class Widget; /// 声明一个类std::size_t numDigits(int 2021-04-25 《C++回顾笔记》 #C++
《重构--改善既有代码的设计》读书笔记(一)重构的原则 前言  在前段时间,我被安排去负责一个重要模块的重构工作。惭愧的是,在开始这项重要的重构工作之前,虽然我曾花费过一些时间仔细翻阅本书,但后面重构的过程依旧十分坎坷,而且在最后进行测试的时候,发现了很多重构时新引入的bug。尽管这些bug都是一些小问题,但这足以说明这是一次颇为失败的重构(ノへ ̄、)。 一次失败的重构  在重构 2021-04-18 笔记 #重构