虚幻蓝图4如何用蓝图实现这个效果:使玩家始终向朝向方向移动?

& & & & 虚幻4的蓝图,其实是一种可视化编程,它是将一些东西封装成小框框,然后靠一条条线来链接起来,这个的好处就是很直观,给很多对写代码天生不感冒的人,提供了一种新的创造游戏的方法。
& & & & 虚幻4的蓝图分为两种,Level Blueprint和class Blueprint,Level Blueprint用编程的角度来解释,就像是子在一个文件里,或者是场景里,写的面向过程的代码,说有代码按自身的顺序依次执行,而class Blueprint 用编程的角度来解释,就是将我们所需要的东西,操作,封装成一个类,我们可以在以后直接使用它的对象,十分方便,也十分强大
& & & & 首先,我们先来认识一下虚幻4蓝图的变量,虚幻4 的蓝图的变量,跟我们编程里的变量基本一致,并且,他还给封装了好多类和结构体,这些东西我们在用到的时候再来说
& & & & &接下来是开关门的蓝图,具体做法请看官方视频
& & & & & OnActorBeginOverlap是进入触发器时,触发事件,然后走到Timeline,这个蓝图是说,给对象两个状态之间一个过度,之后链接到Set'ActorLocation,设置门的位置。
& & & & & OnActorEndeOverlap是离开触发器,触发事件,让门回去,只不过是相反方向移动。
& & & & & Event BeginPlay是游戏一开始就触发的事件,之后是一个Vector的set方法,他的值就来自于门的Location。这个蓝图还是比较好理解的,大家哪里不明白可以在下面的留言里回复,我会第一时间解答
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:4628次
排名:千里之外
原创:18篇
(3)(4)(4)(7)虚幻4 蓝图里的接口(Interface)我感觉,其实和JAVA里的接口有点像,都是让多个类继承它,并且它只有方法的定义不具体实现,调用接口的时候,继承这个接口的所有蓝图也会被调用,所以,我理解蓝图里的接口的时候,就直接把它当成JAVA里的接口来理解了,当然,暂时我还没有发现什么特别的区别,也是因为我现在比较菜,好的,我们来看下具体怎么使用接口蓝图
首先新建一个蓝图接口,然后新建个方法,我把里面的方法改名为On Instracted
之后,我们新建两个蓝图,分别继承这个蓝图,在class setting里面设置,加入这个Interface
然后我们在这两个蓝图里添加一些简单的内容
之后,我们在角色蓝图里添加一些功能并且调用这个接口
这个蓝图也是很简单的,首先右击触发事件,射出一条射线,起点是第一人称摄像机的位置,终点是第一人称这相机+5000这个位置,也就是这个射线的长度是5000,然后判断这个是否触碰到继承我们刚刚定义那个接口,如果触碰到,就是触发我们刚刚定义的接口。触发接口后,自然就触发了继承这个接口的两个蓝图。
之后就是利用RandomStream来控制随机方法了,我们知道,假如我们用如下蓝图的话
基本上,我们把蓝图拖到场景里,随便一改变位置,随便一动,里面的Static Mash 都会变,完全没法控制,也不是我们大多数情况下想要的结果,所以,这时候,我们就需要用到RamdomStream 了,首先,我们新建个变量,类型是RandomStream,然后我们将刚才的蓝图做如下修改
将Random float in range换成Random Float in Range Stream,并且加入Random Stream就可以了,这时候,我没除非控制它的Intial seed和数量,否则,我们不管怎么移动,它都不会再变,而是整体向某个方向移。
总之,学习虚幻重点是多练,我这些只是个例子而已,要掌握还是要自己多想点东西多做
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:4629次
排名:千里之外
原创:18篇
(3)(4)(4)(7)来自youku:
中文视频教程
1.自定义角色
2.跳 导入官方动画实力包
3.走路 迁移资产 可破坏网格物体
4.简单的UMG开始游戏 结束游戏
5.天假触发物体移动动画
6.UE4 软件界面介绍
7.蓝图常用逻辑节点整理
8.地形编辑器操作入门
9.植被编辑器基本使用
10.添加声音并进行控制
11.设置角色冲刺速度
12.为角色添加血量UI
13.添加脚步声和粒子效果
发表您的评论
请您先之后再进行评论!发表回复
莫夏夜雨,
09:13 来自优酷
求高清版啊,找了一天才找到了一部好教程啊
土豆用户_,
09:13 来自优酷
要是有超清的就好了 不过视频真的很好 赞一个
令狐中二_,
09:13 来自优酷
能不能做个捏人的教程?听说是用UI来修改骨骼的大小和位置
京ICP备号-15 / 京公网安备10
Powered byUnreal Engine4(虚幻4)学习心得-Ambient Cubemap 环境立方体贴图
如何创建新的项目在这里就不做过多说明了,打开UE4 Editor,就可以选择是创建blueprint项目,还是C++项目。
blueprint蓝图项目
blueprint蓝图项目,使用图形化编程方式,供非程序员可以不通过代码,就可以做出一个不错的UE4项目,可以用作demo,甚至是上线项目使用。
C++项目,也就是通过代码来完成一个项目的开发。不过其实说白了,蓝图中使用到的函数、变量,都是底层C++写好之后,选择性的暴漏给蓝图的。
创建了项目之后,从Editor左侧将一些static mesh、light之类的拖到关卡编辑器中,点击播放,也就可以看到场景的效果了。
Ambient Cubemap 环境立方体贴图
在标准光照模型(Blinn-Phong模型)中,进入摄像机的光线分为4种,自发光、高光反射、漫反射、环境光。其中环境光适用于描述物体所收到的间接光照的。而Ambient Cubemap用于高质量光照环境的立方体贴图。
其实就是对物体的六个方向拍照,得到一个cubemap,然后根据不同的光泽度,生成不同模糊程度的图片保存在不同mipmap中,然后根据物体的粗糙度、法线等因素,在shader中针对cubemap编写算法,然后将计算出来的结果,参与最终颜色的生成上。
由于环境光并非一般的方向光,可以认为它的光照来自四面八方。所以不能对其使用shadow map,而只能使用SSAO,建议与带阴影的动态光照产生的直接光照组合使用。
UE4中的使用方法
很多地方可以使用Ambient Cubemap,这里只说一种使用方式:在后处理中对全场景使用ambient cubemap:
首先在关卡中拖进一个Post Process Volume,并对其Unbound属性的checkbox进行勾选,目的是是的这个后处理将影响整个世界
如果不将Post Process Volume与整个世界关联,也可以不勾选其Unbound选项,而是调整其blend Radius即可
在Post Process Volume的Settings的Ambient Cubemap属性中,赋给其一个Cubemap Texture(),设置其Intensity,用于影响其光的强度,设置Tint用于影响颜色。
这里赋予的Cubemap就是我们刚才一直说的ambient cubemap,这里用的是预先准备好的cubemap,其实也可以在游戏中生成cubemap,但是会比较耗费性能
Intensity和Tint这俩属性与原生的Ambient Cubemap算法无关,只是UE4给这个算法添加的两个属性,用于,比如我们准备了一个场景白天时候的Ambient Cubemap,然后可以通过修改这个Intensity和Tint,然后不修改Cubemap,就可以获取到这个场景晚上的Cubemap了。
设置世界中物体的材质,将其金属度设置为1,这个值是用于blend直接光和cubemap的,值越高,cubemap的比重越大;将其粗糙度设置为0,这样将使用清晰的Cubemap mipmap。
在这里还可以设置法线,但是一般使用默认法线就好,如果设置其他法线可能会造成扭曲的效果
这里还能获取到上一步设置的Ambient Cubemap Intensity和Tint,用于设计更复杂的算法
UE4源码中相关的类
FCubemapShaderParameters:
AmbientCubemapColor,由于AmbiendCubemap的实际使用方法还是将Cubemap中的RGBA值采样出来,参与到最终颜色的计算,所以通过设置这个参数,可以设置使用Cubemap的哪几个通道,各个通道采样的比例、颜色偏移等
AmbiendCubemapMipAdjust,由于需要根据绘制物体的粗糙度等因素,计算出来使用cubemap的哪层mipmap,而设置这个参数,可以对此进行修正
AmbientCubemap和AmbientCubemapSampler用于指定Ambient Cubemap指的Cubemap texture。
函数Bind,用于将4个成员变量与shader中对应的变量进行bind
函数SetParameters/SetParametersTemplate通过给4个成员变量赋值进而给shader中的对应变量赋值
PostProcessAmbient类,正如刚才举到的例子,后处理中可以使用Ambient Cubemap,所以在这个后处理类中使用到了该类。
FInjectAmbientCubemapPS类。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:2083次
排名:千里之外
原创:10篇用虚幻4开发搭积木的VR游戏 - 游戏开发,移动开发技术干货分享 - 泰课在线 - 国内专业的Unity在线学习平台|Unity3d培训|Unity教程|Unity教程 Unreal 虚幻 AR|移动开发|美术CG|UI平面设计|前端开发 - Powered By EduSoho
用虚幻4开发搭积木的VR游戏
虚幻引擎作为国际顶尖水平的3D引擎,一直是很多像我这样的技术人员的向往,感谢Epic Games采取了免费、开源的政策,使得&旧时王谢堂前燕,飞入寻常百姓家&。在当前VR开发如此火热的情况下,在VR方面一直保持着技术领先。笔者有幸在虚幻3时代就有机会深入地学习了这款引擎,目前也在从事虚幻4 VR领域的开发工作,所以希望把自己的一点经验分享给更多的对虚幻4引擎技术感兴趣的同学。
虚幻4 VR开发从何入手
很多人都听说&虚幻引擎比较难学&,其实我想说&对未知的恐惧是学习新知的最大障碍&,并且虚幻4在易用性上确实已经比前一代有大幅改进。所以,希望对虚幻4引擎技术已经动心的同学,放松心情,勇敢一点,其实没那么难。
无论是VR,还是游戏开发,首先我们都需要对引擎中的概念有一个基础的理解,把基础知识掌握好。这包括基本的编辑器操作、资源管理流程、C++/Blueprint蓝图编程,以及Actor、ActorComponent等基础入门知识。由于大量的入门知识并不适合使用文字表达,所以我正在泰课在线播出虚幻4入门的系列视频教学课程(/course/417)。对于没有接触过虚幻4开发的读者,我建议先看看此视频教程,再继续阅读本文。
对引擎有了基本掌握之后,VR开发也就水到渠成了。VR开发在技术上,主要是需要对接主流的VR硬件,包括头戴式显示(HMD)、手柄等。例如Oculus和HTC Vive都提供了自己的SDK,让软件开发者可以访问他们的硬件。而整合这些SDK的工作,引擎已经做好了,我们只要开启指定的插件即可(如图1所示)。虚幻4引擎在上层,针对VR硬件提供统一的抽象接口,在下面的示例中我们详细讲解。
内置了主流VR硬件支持插件
在Gear VR上开发搭积木的小游戏
下面我们通过在Gear VR上运行一个简单的搭积木小游戏,来讲述使用虚幻4开发VR游戏的基本知识。
在这个小游戏中,我们使用视线瞄准一个积木块,然后点击Gear VR头盔右侧的Touch Pad即可拿起积木;这时,转动头盔,拿起的积木块会跟随视线移动;再次点击Touch Pad,将这块积木放下。之后,使用物理刚体模拟,来进行状态更新。你可以尝试把很多积木块堆积起来。
Gear VR项目创建
首先我们需要使用C++ Basic Code工程模板来创建一个新的工程,基本设置要选择:Mobile/Tablet,以及Scalable 2D/3D。这里要注意,必须选择C++的工程模板,使用Blueprint模板的话,在打包到Gear VR后将无法正常运行。
然后,必须向引擎中添加一个Oculus签名文件。具体的方法是:
■ 手机使用USB线连接电脑;&
■ 使用&adb devices&命令获取Device ID,例如:0b05;&
■ 打开网址/osig/,把签名的Device ID粘贴进输入框,然后点Download按钮;&
■ 将获取到的文件(例如oculussig_0b05)放入:引擎安装目录\引擎版本号\Engine\Build\Android\Java\assets(如图2所示)。&
■ 最后,需要在编辑器中打开&Project Settings&-&&Android&,修改以下选项:
Minimum SDK Version:设置为19;
Target SDK Version:设置为19;
Conf igure the AndroidMani fest for
deployment to GearVR。
OSIG文件存储路径
这样配置之后,这个UE4项目就可以打包到Gear VR上运行了。
尽管引擎中默认带了一些基本形状的几何体,不过,我还是使用3ds Max生成了一套自己的几何体FBX文件。另外,还有几个表情图标作为这些几何体的贴图,我们将使用不同的表情来标识对象的不同状态。将这些FBX、TGA文件拖入Content Browser中,即可导入。
积木的材质
接下来,我们要在引擎中创建一个材质,如图3所示。请注意,贴图的节点&TextureSampleParameter2D&是一个Parameter,这使得我们可以在运行时改变这个节点的内容。
Gear VR开发基础功能
首先,创建一个叫作VRPlayerBase的C++类,它从Pawn派生,作为我们的玩家角色。开发Gear VR游戏的话,如果每次测试都要打包到手机上去运行,实在是相当忧伤,因为每次打包的时间&&呵呵。所以,我写了一段C++代码,使用鼠标来模拟HMD头盔转动,这样就可以很方便地在编辑器中测试视线焦点相关的操作了。另外,Gear VR Touch Pad相关的操作,也封装了一下,一起放到这个类里面。关键代码如下:
void AVRPlayerBase(class UInputComponent* InputComponent)
Super(InputComponent);
UPlayerInput(FInputAxisKeyMapping(&Turn&, EKeys, 1.f));
UPlayerInput(FInputAxisKeyMapping(&LookUp&, EKeys, -1.f));
UPlayerInput(FInputActionKeyMapping(&MouseLMB&, EKeys));
InputComponent-&BindAxis(&Turn&, this, &AVRPlayerBase);
InputComponent-&BindAxis(&LookUp&, this, &AVRPlayerBase);
InputComponent-&BindAction(&MouseLMB&, IE_Pressed, this, &AVRPlayerBase);
InputComponent-&BindTouch(IE_Pressed, this, &AVRPlayerBase);
InputComponent-&BindTouch(IE_Released, this, &AVRPlayerBase);
InputComponent-&BindTouch(IE_Repeat, this, &AVRPlayerBase);
那么,在Gear VR真机运行时,如何使得摄像机跟随头显转动呢?这就简单了,因为引擎已经实现了这个功能,只不过它是实现在PlayerController上,这里设置一下VR Player的转动与Controller一致即可(见下图)。
Pawn的朝向设置
接下来我们实现视线焦点检测的功能,这部分使用Blueprint来开发,具体情况见下图。
视线检测功能
在此蓝图中,我们调用了引擎所提供的&LineTraceByChannel&来进行射线检测,下图。
LineTraceByChannel
我们需要指定这条线段的起点和终点。起点就是玩家的眼睛所在的位置:使用GetActorEyeViewPoint节点取得;终点就是沿着玩家的面朝向(GetForwardVector)一定距离的一个点。LineTraceByChannel有两个返回值,其中&Out Hit&是一个结构体,我们使用Break节点来取出结构体中我们需要的项:射线击中的最近的那个Actor;然后我们检测它是否实现了&BPI_VRObject&蓝图接口(这是我们自己定义的一个蓝图接口,后面详述);最后我们调用自定义事件:&OnFocusActorChanged&来处理具体的逻辑。
现在,可以设置一个新的GameMode,来指定这个类作为Player Pawn,然后把它设置成默认的GameMode。
创建一个新的蓝图类,用来实现积木块的相关功能,选择从Static Mesh Actor来派生。首先,为了实现动态改变积木块贴图的功能,要在Construction Script中创建Dynamic Material Instance,如下图所示。
创建Dynamic Material Instance
在上图所示Blueprint脚本中,我使用&CreateDynamicMaterialInstance&节点,为StaticMeshComponent创建了一个动态材质实例,并把它保存到一个名为&BlockMaterial&的变量之中。
另外,考虑到今后可能添加其他的对象类型,创建了一个Blueprint Interface,命名为:用来定义玩家对场景中物体的交互,主要就是下图中的四项。
Blueprint Interface
接下来,我们做一个简单的功能:当玩家注视着这个积木块时,它就向玩家眨个眼(换张贴图)。首先,要在积木块的Blueprint的Class Settings中,添加上述Blueprint Interface。然后,就可以在EventGraph中使用Add Event菜单,添加OnFocus和LostFocus事件处理了(如下图所示)。
Focus相关事件处理
在上述蓝图中,我们实现了&BPI_VRObject&的两个接口事件,分别是:OnFocus和LostFocus,在焦点获得或者焦点失去的时候,我们调用&SetTextureParameterValue&节点,来改变材质中的BaseColor所使用的贴图资源对象。&
接下来,就要实现一个有趣的功能:当积木块坠落的时候,显示一个害怕的表情;当积木块静止不动后,显示微笑表情。这个功能,通过刚体(Rigid Body)的Wake、Sleep状态来实现。从物理引擎的角度说,当物体静止不动时,物理引擎会把这个物体设置到Sleep状态,以节省运算量;当需要物理引擎计算其运动状态时,再把它叫醒。注意:要设置StaticMesh组件的&Generate WakeEvent&才能收到这两个事件,见下图。
刚体的Wake、Sleep事件处理
在这个Blueprint脚本中,我们通过响应&OnComponentWake&和&OnComponentSleep&来变更了自定义变量&IsSleeping&,然后调用自定义事件&ChangeTextureByState&来变更材质的贴图参数。
接下来,还可以做一个小功能:当玩家抓起这个积木时,它就开始哭。这个实现方法和上面的思路完全一样,在此不多赘述。
在玩家周围随机生成一些积木块OK,既然的积木已经准备好了,就可以在关卡启动时,随机地生成一些积木,供玩家玩耍。这个功能可以在Level Blueprint或Game Mode中实现。这里,我们假设这是本测试关卡的功能,所以把它放在Level Blueprint中去实现。
在Level Blueprint中随时生成积木块
图11展示的这段Blueprint代码,即是在PlayerStart对象周围随机产生了10个积木块。响应关卡的BeginPlay事件:通过ForLoop节点,调用10次SpawnActor节点,这个节点的Class参数选择成我们的积木块(BP_Block);积木块的出生点通过MakeTransform节点来生成。在MakeTransform节点中,使用了3种不同的随时方式来产生位置、旋转和缩放这三个参数。
拿起和放下积木
接下来,我们继续完善玩家类,添加拿起、放下积木块的功能,具体操作是:玩家首先要注视着某个积木,然后轻点Touch Pad可以拿起积木;转动头盔,积木会随其移动;如果再次轻点TouchPad,则放下这个积木。
首先,我们在Touch Pad的Tap事件中实现上述流程。注意,这个Tap事件是在VRPlayerBase那个C++类中触发的,见下图。
Touch Pad的Tap事件响应
在此,我们判断如果PickActor是一个有效值,则调用DropActor,否则的话,调用PickFocusActor。
其中的Pickup Focus Actor和Drop Actor是两个自定义事件。在PickupFocusActor事件中,首先我们通知了这个积木块对象:调用它的OnPickup接口;然后使用一个TimeLine驱动的动画,来控制积木块的位置,使它从当前位置,平滑地移动到玩家面前的一个位置。在DropActor事件中,则首先通知了积木块对象:调用它的OnDrop接口;然后把PickedActor对象设为空值,代码见下图。
捡起正在注视着的对象
放下正在拿着的积木
通过上述过程,一个简单,但还有点意思的积木小游戏就准备好了(见下图)。你可以通过项目打包功能生成APK包,在Gear 上进行体验。由于篇幅所限,项目中一些细节无法在此完全详述。
游戏运行效果
本文所演示的项目,只是为了讲述最基本的开发方法,并没有在画面效果上做任何修饰。实际上,现在手机上已然可以支持PBR材质效果。总之,各种酷炫的效果,还待大家去发掘。在今后的一段时间内我会持续更新关于虚幻4开发的视频教程,欢迎大家关注。
你还没有登录,请先或!
Unity3D技术交流1群
泰课Unity3D公开课
工作时间:9:00 - 17:00
北京客服:010 -
广州客服:020 -

我要回帖

更多关于 虚幻4蓝图 的文章

 

随机推荐