最新文章野外生存游戏【6. 消耗品】
本系列教程逻辑繁杂,细节很多,本文更多的是作为大纲指引和逻辑梳理,可能笔记中还存在部分操作上缺漏,还请多包涵,有意者可下载工程文件(SurvivalCraft_06)自行对照学习 UE版本:5.2.1 消耗品 数据准备 我们先创建两个结构,用于定义消耗品 再根据上面定义的结构体,创建一个数据表,用于存储消耗品的信息 其中 InstantEffect? 是表示该消耗品是瞬间恢复,还是随时间推移缓慢恢复 Row Name 则与 DT_Itmes 数据表对应,这里创建了一个浆果作为示例,在 DT_Itmes 中,浆果的 ID 为6,所以这里的 Row Name 也为6 别忘了把 DT_Itmes 中,浆果的类型改成消耗品 核心逻辑 我们在使用 Hotbar 里面的物品时,都会调用 Use Hotbar Function。所以这里就打开这个函数,补充消耗品的相关逻辑 Consume Item Function 的逻辑如下: 根据传入的 Container 类型和索引,找到需要消耗的那个物品; 将这个物品的数量减1 根据这个物品, ...
野外生存游戏【5. 玩家资料】
本系列教程逻辑繁杂,细节很多,本文更多的是作为大纲指引和逻辑梳理,可能笔记中还存在部分操作上缺漏,还请多包涵,有意者可下载工程文件(SurvivalCraft_05)自行对照学习 UE版本:5.2.1 玩家伤害 预期效果:可以攻击其他玩家,并设计一个状态框,实时展示玩家状态 UI层 首先创建一个 W_PlayerStatsWindow 组件,用于展示目前的玩家状态 将这个 widget 放到 main_widget 里面 接着新建一个结构体和一个枚举,用于存储和传递玩家资料 然后在刚刚创建的 widget 里面新建一个自定义事件,用于更新组件内容 逻辑层 打开之前的斧头蓝图(BP_TP_Hachet),补充上人物伤害相关的逻辑 打开 playercontroller,创建一个调用 widget 的事件 最后在 BP_FirstPersonCharacter 里完善接收伤害相关的逻辑就好了 新建一个 PlayerStats 的变量,用于存储玩家的初始状态 新建一个 ApplyDamageToPlayer 函数,用于应用伤 ...
远程抓取
视频教程已同步发布至B站:https://www.bilibili.com/video/BV16z4y1Y7Pf 创建VR项目 编写RemoteGrabActor 设置基本组件 创建一个父Actor,之后所有需要挂载的actor只需要继承父actor就可以实现远程抓取。 创建静态网格体,并添加GrabComponent 设置物理属性 设置静态网格体的碰撞属性,在子类蓝图中选择网格体模型后记得勾选模拟物理 创建函数SetItemProperties和SetItemFinishProperties 这两个函数是为了根据响应事件设置物体的物理属性。 ps:此处的SecondGrab变量请参考视频详细讲解。 设置贝赛尔曲线 创建函数SetBezierControlPoint,这个函数的作用是根据目标所在位置和要到达位置之间计算出贝赛尔点。 再创建一个宏CalculateBezier,用来根据时间时刻生成物体的位置用来生成物体的抛物轨迹 设置边缘发光 设置边缘发光是为了使得物体具有被选中的效果。 创建函数SetCustomDepth ...
No4.限时领取!最新Unreal商城免费资源!10月篇
本章介绍Unreal商城2023年10月份的免费资源和插件,可商用! Unreal商城链接: https://www.unrealengine.com/marketplace/en-US/assets?count=20&sortBy=effectiveDate&sortDir=DESC&start=0&tag=4910 已收入鲸拓资源库 角斗士竞技场环境套件 角斗士竞技场套件是以罗马角斗士竞技场/战斗竞技场为主题创建的环境。包含一组主题网格,包括柱子、建筑件、道具、旗帜等。使用 PBR 材料创建。包含屏幕和展示视频上呈现的所有网格和演示关卡。 Dreamscape:风格化环境塔 这是一个3A级资产的合集,非常合适用于构建广阔的开放世界游戏。这些环境已针对全平台进行了优化,包含一座模块化高塔,一个可定制的水体系统,一个基于样条的河流生成器,以及一张大型演示地图。凭借 150 多个高质量风格化网格、对虚拟纹理的支持、视差遮挡、带内饰的模块化塔、带有基于样条线的河流创建器的完全可定制水系统以及大型开放世界演示地图,该风格化环境得到了优化 ...
6. 光线追踪
本系列的主要目的是复盘并总结计算机图形学这个学科常用算法与原理,会从基本的数学理论讲起,同时会附带部分算法的代码实现,由浅入深,只需初中的数学基础就行。主要参考了GAMES101-现代计算机图形学入门这门课(具体引用见文章末尾),同时附加上自己的理解。有兴趣的也可直接看视频。 光线追踪 Shadow Mapping 在正式进入光线追踪之前,我们先了解一下Shadow Mapping。 这是一种生成阴影的方法,曾在游戏和电影中广泛使用。 它的本质是通过光栅化的思想,对比点与光源、点与相机的距离,从而判断是否有阴影。具体过程如下: 来看一个案例 上图的场景没有任何阴影,给人一种悬浮在空中的不真实感。针对上图的场景,从光源处拍摄一张深度图 然后在人眼处计算物体与光源之间的距离,再进行深度比对,可以看到绿色的地方就是光线能够照到的部分,非绿色的地方应该存在阴影 这里球面上的绿色看起来不均匀,是因为在计算机中浮点数之间很难判断相等,容易有误差,所以才会造成这种看起来有点脏的现象。 这种生成阴影的方法很经典,但是也存在一些 ...
5. 几何
本系列的主要目的是复盘并总结计算机图形学这个学科常用算法与原理,会从基本的数学理论讲起,同时会附带部分算法的代码实现,由浅入深,只需初中的数学基础就行。主要参考了GAMES101-现代计算机图形学入门这门课(具体引用见文章末尾),同时附加上自己的理解。有兴趣的也可直接看视频。 几何 学完了上面这些东西之后,我们已经能够把一些简单模型渲染出来了。但是你可能也想过,如果模型都是三角形组成的话,那不会有瓶颈么?对于一些复杂或特殊的模型怎么办呢?比如下图,还是用三角形硬刚吗? 很明显,这玩意很难用三角形组装起来。这个时候,我们就可以引入一些几何方法了。 隐式表达 隐式表达,也就是字面意思,你并不知道实际的点在哪里,只知道点与模型之间的关系。就比如说一个球的隐式表达式是这样的: 你并不知道这个球面上的点具体在哪里,但是对于任意一个,你都能知道它是否在这个球上。 隐式表达有好处也有坏处,你可以很容易的判断一个点是否在表面,内部或者外部,但是想对它采样却很困难。 显式表达 与之相对的是显式表达,它会用uv的方式,告诉你模型上的所有的点,但是与之相应 ...
4.纹理映射
本系列的主要目的是复盘并总结计算机图形学这个学科常用算法与原理,会从基本的数学理论讲起,同时会附带部分算法的代码实现,由浅入深,只需初中的数学基础就行。主要参考了GAMES101-现代计算机图形学入门这门课(具体引用见文章末尾),同时附加上自己的理解。有兴趣的也可直接看视频。 纹理映射 上面我们说完了着色,可以知道一个模型反射出来的颜色是由一个系数k来决定的。但是你想想,一个模型只有一个颜色系数吗?那这样的话是不是一个模型只有一个颜色呢?如果是每一个点都有一个自己的颜色系数的话,怎么存储这么多系数呢?关于这类问题,我们用纹理映射来解决。 首先举个简单的例子,我们都知道地球仪,如果把地球仪的表层去掉,那它就是一个球体。这个球体就相当于模型本身,而被去掉的表层,就是它的纹理。所以说,纹理就是一个二维的平面。 我们只需要把三维的地球仪上的任意一个地方(一点),对应到二维地图上,就可以显示出正确的纹理了。 下面我们拿这个手来举例子,可以看到这个手上看起来挺真实的 它对应的纹理贴图如下 纹理与模型之间的对应关系,我们通常用二维坐标系来表达,不过不是xy,而是uv ...
VR天文馆
视频教程已同步发布至B站:https://www.bilibili.com/video/BV1v8411C7Cv 环境搭建 贴图与材质 首先导入如下贴图 首先看地球的材质 其中下面多出的一块逻辑是让星球上的灯光更真实(白天的地区无灯,黑夜的地区亮灯) 核心思路是导入灯光贴图,通过计算光照与顶点法线之间的点积(两个向量越接近,点积越大;向量垂直则点积为0),控制自发光强度 然后其他几个星球的材质就比较容易了,这里就不再一一介绍,大家看图就好 放置模型 创建三个Actor如下 另外两个是空的,Planet 里面实现了自转逻辑 把这些贴图应用到模型上,这些模型都继承自 Planet 这里以地球为例,都是一样的,就不一一截图了 将这些模型按照如下位置放到场景里 DirectionalLight 按照自己的喜好调整光强就好 后期处理体积需要打开手动曝光和 Infinite Extent 天空球需要指定 Static Mesh 和 Materials 这个 M_Sky_Stars_Mat 的逻辑如下,也是基 ...
3.着色
本系列的主要目的是复盘并总结计算机图形学这个学科常用算法与原理,会从基本的数学理论讲起,同时会附带部分算法的代码实现,由浅入深,只需初中的数学基础就行。主要参考了GAMES101-现代计算机图形学入门这门课(具体引用见文章末尾),同时附加上自己的理解。有兴趣的也可直接看视频。 着色 通过上面的光栅化和深度缓存,我们已经能够把模型正确的渲染在屏幕上了。如下图所示,这是一排排的正方形。是不是看着总感觉缺了点什么 没有明暗交替,没有阴影,没有现实生活中的材质感。我们想看到的应该是下面这样的才对 这样就感觉真实了很多。再看看更复杂的案例 可以看到上图中的瓷器表面显示的有明有暗,其中甚至还有反射出来的倒影。而且我们一眼能看出图中的杯子是陶瓷杯子而不是金属杯子,塑料杯子,这都是因为着色结果给我们的材质感。 因此着色不仅仅只考虑物体本身的颜色,还要考虑物体的材质,环境的光照等等。 在图形学中,我们可以把着色定义为在不同物体上应用不同材质的过程。因为不同材质和光产生的相互作用就会不同,例如反射率,折射等。和光的不同作用就会显示出不同的结果,因为我们能看见物体都是因 ...
2.光栅化
本系列的主要目的是复盘并总结计算机图形学这个学科常用算法与原理,会从基本的数学理论讲起,同时会附带部分算法的代码实现,由浅入深,只需初中的数学基础就行。主要参考了GAMES101-现代计算机图形学入门这门课(具体引用见文章末尾),同时附加上自己的理解。有兴趣的也可直接看视频。 光栅化 光栅化的过程就是把模型渲染在屏幕上的过程。 这里我们先定义什么是屏幕,屏幕就是一个二维数组,数组里的每一个元素都代表一个像素点,一个像素能表示一种颜色,在一般情况下一个像素在同一时间只能发出一种颜色(有些屏幕可以发出多种) 屏幕中的每一个像素点我们都用整数坐标进行表示,最大最小值与分辨率相对应,考虑到每个像素都有一定的面积,我们定义(x+0.5,y+0.5)为该(x,y)像素的中心,如图中黑圈所示。 直线光栅化 DDA数值微分算法 首先当任何一条直线知道任意两点时都可以用来表示,其中k代表斜率,如果 ,那么它的主要行进方向就是x轴,即x轴的变化要比y轴快,相反如果如果 ,那么它的主要行进方向就是y轴,即y轴的变化要比x轴快。如下图所示: 我们分别就图上两种情况进行考虑( ...