Yerha's blog

归档 · 2024

首页

归档

loading..
UnrealSlateEditor

Slate 入门及开发编辑器工具

Slate 是虚幻引擎的用户界面框架,作为开发编辑器工具和游戏界面的模块。然而在实际的开发中,开发者更愿意使用 UMG 来设计界面,在相同的需求中还实现了所见即所得的实时预览效果,而编写 Slate 相关的代码还要经过编译(一般至少 5 秒)才能看到最终效果(热编译有可能无法正确显示),这会在复杂界面或者涉及到对齐组件(涉及 margin 或 padding)时尤为痛苦。所以从个人的角度来看,Slate 代码的编写需求会缩小到一个较窄的领域内,那就是需要在编辑器某个位置(称之为 Extension Point)插入界面类组件时才使用 Slate。如果不是这个需求的话,使用编辑器提供的 Editor Utility Blueprint 或者 Editor Utility Widget 会使开发工具的工作更轻松..

继续阅读
UnrealItemSystemNetReplication

道具使用 UObject 还是 UStruct

尽管 C++ 本身视 class 和 struct 都为类类型,区别只在默认访问修饰符(class 默认为 private,struct 默认为 public)。但在虚幻引擎中却有所不同,UObject 使用 class 作为类类型的修饰符,而 UStruct 使用 struct 作为类类型的修饰符(请注意这里没有讨论 Slate 相关的类体系结构),就会在反射机制、网络复制方面产生不同的区分,本博文在构建道具类型的基础下,讨论以下内容: 如何维护它们的生命周期; 如何在网络中复制它们。 物品的信息在绝大多数情况下,物品信息可以用一个结构体来定义(C++中需要派生自 FTableRowBase),然后定义基于该结构体的 DataTable,这种方式不仅可以实现统一的数据管理,还允许从外界来修改物品信息,..

继续阅读
loading..
UnrealSkyWeatherVolumetricClouds

实现昼夜变化

时间系统是游戏世界(尤其是开放类游戏)常见到的机制,除了为模拟现实世界的情况外,也经常作为衬托游戏剧情发展的因素。将它们封装起来并提供可配置的简单参数,有一定的必要性。本博文主要讨论以下几点: 如何自定义日出和日落时间,在此期间可以看到日光,不在此期间时看到月亮; 如何将天空有关的组件进行封装,可以方便地迁移到不同关卡或项目中; 天体相关的组件打开一个基础关卡,在大纲视图中通常可以看到一些组成天体的组件: Directional Light:方向光源,在这里指示着太阳的方向。这种光源在参与光源计算时只会使用其旋转信息,其位置不会影响到光源的计算。在虚幻引擎中,任意时刻都要保证至多一个方向光源可见。本例中在白天中仅 SunDirectionalLight 可见,黑色中仅 MoonDirectional..

继续阅读
UnrealGASEnhancedInputSystem

如何用 InputAction 来触发 GameplayAbility 的激活

GAS 作为管理技能和属性相关的灵活插件,使得开发制作角色扮演游戏、多人在线战术竞技游戏不再那么繁琐。另一方面,虚幻引擎将增强输入系统作为了默认输入组件,这不仅使得按下、按下并按住等常见功能逻辑作为了内置功能,还引入了上下文和优先级机制,使得我们可以将同一个按键在不同的上下文中发挥不同的效果。 如果有机会通过增强输入系统中的输入动作映射到 GAS 的技能激活,那么就可以以很优雅的方式在不同上下文中激活不同的技能。例如鼠标左键在未装备武器时激活挥拳技能、装备枪械时变为开火技能;空格键可以先作为跳跃技能的触发按钮,后期又可以灵活地替换成翻滚技能的触发按钮。本博文将讨论以下几点内容: 何时应该赋予角色技能,以及输入事件的绑定; 如何保证所有技能任务都正确工作,尤其是等待输入 ID 按下和释放的技能任务; 有些技..

继续阅读