UE4插件开发总结
前言 UE4的插件开发包含很多零散的知识点,包括Moudles,Plugins,Slate,UI_COMMAND等各类知识,为了方便自己和他人查阅,在此记录一些零碎的知识点以及优秀的文章。 正文 显示UI拓展点 通过开启Editor Preferences-General-Miscellaneous-Display UI Extension Points即可以在UI面板看到用绿色字符标识出的可拓展点。 利用UI反射器查看Slate绘制方式 我们在进行复杂的编辑器拓展开发时往往会需要参考UE4引擎已有的UI样式,或者说对自己绘制的Slate进行Debug,这时就需要点击Window-Developer Tools-Widget Reflector来进行操作。 利用UMG设计Slate基础样式 因为UMG就是基于Slate的封装,但他是可视化的,正好弥补了Slate不是所见即所得的短板,所以我们可以先用UMG拼出想要的Slate样式,然后再去根据这个样式去写Slate代码。 UI_COMMAND基础认知 其实和UI_COMMAND相关模块有三个,分别是FUICommandList,F...
UE4网络学习资源汇总
⚠️upload failed, check dev console 前言 本博客搜集博主在学习UE4过程中找到的优秀网络学习资源,供参考。 环境配置 使用Rider开发UE4 视频教程 UE4官方UP号 一周入门UE4教程 技术博客 《Inside UE4》知乎专栏 《Exploring in UE4》知乎专栏 《虚幻引擎》知乎专栏 《UE4性能优化》 官方文档相关 **从Unity角度入门UE4 ** **C++编程教程(含第一人称FPS游戏) ** **动作RPG Sample文档 ** 三消例子文档 推荐阅读 《C++ Primer》 C++模板元编程入门 UE4插件开发总结 UE4个人知乎收藏
解决血条在透视相机下的偏移
起因 我在为Moba项目开发人物头顶血条同步逻辑时,出现了一些问题。 Moba项目链接: 前提条件 UI工具:FGUI Unity版本:2018.4 自己计算同步血条的位置,这样相比于直接在人物身上挂载Canvas做血条显示的优点是不必考虑远大近小的情况(参考LOL中戏命师烬开大,咖喱奥开大跃起时的屏幕缩放而血条大小不变),并且更便于管理和维护。 问题描述 当人物与当前屏幕中心点不重合时,头顶血条会出现偏移的情况。 当人物基本上都在中央时 当偏离屏幕中央过远时(右边人物为屏幕中央) 参照目标 要解决问题很多时候需要一个参照模型,这里就拿LOL来举例。可以看到即使圣枪和最右边那一坨辨识度极低的英雄他们的血条都没有发生偏移。这里不理他是具体怎么实现的,只需要朝这个结果靠拢就行了。 问题定位 发现了问题就应该去找问题的根源。 遥想当年,自己写一个用手拖动2D小飞机的功能都觉得自己要起飞了(老飞行员了),回看今天,怎么2D变成3D的就拉了胯呢。 有一个很明显的不同点,2D的使用的是正交相机,3D的使用的是透视相机。 然后就有以下几个重要的信息点: Moba游戏的相机一般而言都是有...
Unity拖动2D和3D物体
/* 首先说一下,Input.mousePosition是鼠标所在像素平面内的坐标,需要根据自己的需求转变成世界坐标。 Description 描述 The current mouse position in pixel coordinates. (Read Only) 在屏幕坐标空间当前鼠标的位置(只读)。 The bottom-left of the screen or window is at (0, 0). The top-right of the screen or window is at (Screen.width, Screen.height). 屏幕或窗口的左下角是坐标系的(0,0)坐标。右上角的坐标是(屏幕宽度值,屏幕高度值)。 */ 123456789101112131415161718192021222324252627//这里用于2D场景物体的移动,可以参考一下。private bool isMouseDown;private Vector3 lastMousePosition = Vector3.zero;private void TwoDMove()...
AssetBundle热更新完整工作流与知识点解析
前言 虽然这一块内容是比较基础的,但是知识点比较分散,所以我还是决定写一篇博客来记录梳理一下。 环境:Unity 2018.4.0 参考文献 Unity官方文档:https://docs.unity3d.com/Manual/index.html 不会C++的码农知乎文章:https://zhuanlan.zhihu.com/p/25111851 AssetBundle相关知识 什么是AssetBundle? 一个AssetBundle可以当做一个文件集合,它包含了Unity可以在运行时加载的特定于平台的非代码资产(例如模型、纹理、预制组件、音频,甚至整个场景)。AssetBundle可以表示彼此之间的依赖关系;例如,一个AssetBundle中的material可以引用另一个AssetBundle中的texture。为了在减轻网络传输压力,您可以根据需求选择内置算法(LZMA和LZ4)来压缩AssetBundle。 AssetBundle对于可下载内容(DLC)、减少初始安装大小、加载针对最终用户平台优化的资产以及减少运行时内存压力都很有用。 AssetBundle里有什么? ...
Unity DOTS:ECS的核心部分
ECS的概念 实体组件系统(ECS)架构将身份(Entities,实体),数据(Components,组件)和行为(Systems,系统)分开。该架构专注于数据。Systems读取Components数据流,然后将数据从输入状态转换为输出状态,然后对这些实体进行索引。 下图说明了这三个基本部分如何协同工作: 在此图中,系统读取Translation和Rotation部分,将它们相乘,然后更新相应的LocalToWorld成分(L2W = T*R)。 实体A和B具有Renderer组件,而实体C则没有,但是这不会影响系统,因为系统并不关心Renderer组件。 您可以设置一个系统,使其需要一个Renderer组件,在这种情况下,系统将忽略实体C的组件。或者,您也可以设置系统以排除具有Renderer组件的实体,然后忽略实体A和B的组件。 Archetypes(原型) 组件类型的组合称为“原型”。例如,一个3D对象可能具有一个用于其世界变换的组件,一个用于其线性运动的组件,一个用于旋转的组件和一个用于渲染的组件。这些3D对象的每个实例都对应一个实体,但是由于它们共享相同的组件集,因...
Unity DOTS:Components部分
组件 Components是ECS体系结构的三个主要元素之一。它们代表您的游戏或应用程序的数据。Entities是索引您的components集合的标识符,而systems提供了行为。 ECS中的Components是具有以下“标记接口”之一的结构体类型: IComponentData —用于通用和[chunk components]。 IBufferElementData —将[动态缓冲区(dynamic buffers)]与entities相关联。 ISharedComponentData —按archetype中的值对entities进行分类或分组。有关更多信息,请参见[Shared Component Data]。 ISystemStateComponentData —将特定system的状态与entity相关联,并检测何时创建或销毁单个实体。有关更多信息,请参见System State Component。 ISharedSystemStateComponentData —共享状态和System状态 数据的组合。请参阅System State Component。 B...
Unity DOTS:ECS拓展内容
Sync points synchronization poin(sync point)是程序执行中的一个点,它等待到目前为止已调度的所有job的完成。同步点会限制您一段时间内使用Job System中所有可用工作线程的能力。因此,通常应避免同步点。 Structural changes(结构变化) 同步点是由 您在任何其他job正在操作components时不能安全执行自己的操作所引起的。ECS中数据的结构更改是引发Sync points的主要原因。以下所有都是结构上的变化: 创建entities 删除entities 向entity添加component 从entity中删除component 更改sharedcomponent的value 广义上讲,任何更改entity archetype或导致chunk中entities顺序更改的操作都是结构性更改。这些结构更改只能在主线程上执行。 结构更改不仅需要Sync points,而且还会使对任何component数据的所有直接引用无效。这包括DynamicBuffer的实例以及提供对component(例如Component...
Unity DOTS:Entities部分
Entities Entities是实体组件系统体系结构的三个主要元素之一。它们代表游戏或应用程序中的各个“事物”。Entities既没有行为也没有数据;取而代之的是,它担任索引各种数据的职责。Systems提供行为,而Components存储数据。 entity本质上是一个ID。最简单方法是把它作为一个超轻量级GameObject甚至没有名称。实体ID稳定;您可以使用它们来存储对另一个component或entities的引用。例如,Hierarchy中的子entity可能需要引用其父entity。 一个EntityManager管理在一个World中所有的entities。EntityManager维护entities列表并组织与entities相关联的数据以实现最佳性能。 尽管实体没有类型,但是可以按与entities相关联的components的类型对其进行分组。创建entities并向其添加components时,EntityManager会持续跟踪监控entities上components的唯一组合。这种独特的组合称为Archetype(原型)。将components...
Unity DOTS:目录
前言 本篇博客汇总个人Unity DOTS相关文章,方便好兄弟们查看 目录 Unity DOTS:入门简介:https://www.lfzxb.top/unity-dots-ecs-burst-complier-jobsystem/ Unity DOTS:ECS的核心部分:https://www.lfzxb.top/unity-dots-core-of-ecs/ Unity DOTS:拓展内容:https://www.lfzxb.top/unity-dots-extension/ Unity DOTS:Entities部分:https://www.lfzxb.top/unity-dots-part-of-entities/ Unity DOTS:Components部分:https://www.lfzxb.top/unity-dots-part-of-components/ Unity DOTS:Systems部分:https://www.lfzxb.top/unity-dots-systems/ Unity DOTS:使用ECS进行GamePlay开发:https://www....