2017-05-16 11:13:28 qq_26151341 阅读数 303
  • 从这里开始虚幻4-第2辑-蓝图 v4.18

    本课程系列取名英译系列,是录制人员参考国外英文原版经典教程,结合中国人的习惯录制而成。希望能够给大家以帮助。从这里开始虚幻4系列教程,是Unreal的官方发布的入门教学,非常经典,是学习Unreal的佳入口。

    2270 人正在学习 去看看 杨石兴

最终效果

最终效果

“希望直接拖入编辑生成Actor的类”定义:

NOTE:这边只处理了蓝图类的情况,请在编辑器里用蓝图类继承该类做实验

UCLASS(Blueprintable)
class PROJECTNAME_API UItem : public UObject
{
    GENERATED_BODY()
public:
    UPROPERTY(EditAnywhere, Category = "Item")
    UStaticMesh* StaticMesh;
};

继承UActorFactory

1、继承UActorFactory
2、修改构造函数,给NewActorClass 赋值
3、重写UActorFactory中的函数,CanCreateActorFrom, PostSpawnActor

类定义

UCLASS()
class PROJECTNAME_API UActorFactoryItem : public UActorFactory
{
    GENERATED_BODY()

public:
    UActorFactoryItem();

    virtual void PostSpawnActor(UObject* Asset, AActor* NewActor) override;//该函数用于处理产生的Actor

    virtual bool CanCreateActorFrom(const FAssetData& AssetData, FText& OutErrorMsg) override; //该函数用于判断是否能SpawnActor于视图中
};

类实现

UActorFactoryItem::UActorFactoryItem()
{
    DisplayName = NSLOCTEXT("Item", "Item", "Item Static Mesh");
    NewActorClass = AStaticMeshActor::StaticClass(); //设置拖入场景Spawn的Actor
    bUseSurfaceOrientation = true;
}

bool UActorFactoryItem::CanCreateActorFrom(const FAssetData& AssetData, FText& OutErrorMsg)
{
    if (!AssetData.IsValid() || !AssetData.GetClass()->IsChildOf(UBlueprint::StaticClass()))
    {
        OutErrorMsg = NSLOCTEXT("CanCreateActor", "NoStaticMesh", "A valid static mesh must be specified.");
        return false;
    }

    const FString* ParentClassPath = AssetData.TagsAndValues.Find(TEXT("ParentClass"));
    if (ParentClassPath == NULL || ParentClassPath->IsEmpty())
    {
        OutErrorMsg = NSLOCTEXT("CanCreateActor", "NoBlueprint", "No Blueprint was specified, or the specified Blueprint needs to be compiled.");
        return false;
    }
    UClass* ParentClass = FindObject<UClass>(NULL, **ParentClassPath);

    bool bIsActorBased = false;
    if (ParentClass != NULL)
    {
        // The parent class is loaded. Make sure it is derived from AActor
        bIsActorBased = ParentClass->IsChildOf(UItem::StaticClass());
        return bIsActorBased;
    }

    return false;
}

void UActorFactoryItem::PostSpawnActor(UObject* Asset, AActor* NewActor)
{
    Super::PostSpawnActor(Asset, NewActor);

    UBlueprint* ItemBlueprint = CastChecked<UBlueprint>(Asset);

    UClass* ItemClass = CastChecked<UClass>(ItemBlueprint->GeneratedClass); //从蓝图类中生成UClass

    UItem* Item = CastChecked<UItem>(ItemClass->GetDefaultObject());

    //UE_LOG(LogActorFactory, Log, TEXT("Actor Factory created %s"), *StaticMesh->GetName());

    // Change properties
    AStaticMeshActor* StaticMeshActor = CastChecked<AStaticMeshActor>(NewActor);
    UStaticMeshComponent* StaticMeshComponent = StaticMeshActor->GetStaticMeshComponent();
    check(StaticMeshComponent);

    StaticMeshComponent->UnregisterComponent();

    StaticMeshComponent->StaticMesh = Item->StaticMesh;
    //    StaticMeshComponent->StaticMeshDerivedDataKey = Item->StaticMesh->RenderData->DerivedDataKey;

    // Init Component
    StaticMeshComponent->RegisterComponent();
}

蓝图继承UItem,设置StaticMesh属性

最后将蓝图拖入编辑器的场景就可以看到效果。

2018-07-30 13:55:01 sky130054 阅读数 2092
  • 从这里开始虚幻4-第2辑-蓝图 v4.18

    本课程系列取名英译系列,是录制人员参考国外英文原版经典教程,结合中国人的习惯录制而成。希望能够给大家以帮助。从这里开始虚幻4系列教程,是Unreal的官方发布的入门教学,非常经典,是学习Unreal的佳入口。

    2270 人正在学习 去看看 杨石兴

本次实践是按照书本《Unreal Engine 4 蓝图可视化编程》用UE4自带的的初始项目中的FirstPersonExampleMap关卡做的。

1、编辑材质

图1.1 材质编辑器界面

UE4中的材质编辑也采用蓝图的方式完成,创建材质后双击进入材质编辑器。

(1)网格中右键找到VectorParameter定义材质颜色。

(2)右键找到ScalarParameter我定义了金属与粗糙度,但这个节点似乎是提供一个可以编辑最大最小范围的值输入到材质结果面板中,因此大部分的材质属性值都可以由该节点定义。ScalarParameter节点编辑界面如下:

图1.2 ScalarParameter节点编辑器界面

如此便完成了一个材质的创建及设置。

2、改变物体材质

(1)设置碰撞事件

右键创建事件Hit节点、Set Material(Static Mesh Component)节点并作如下连接

图2.1 连接图

除此之外还需要在Set Material节点的Material后面选择碰撞后变成哪种材质,因此作如下选择找到需要的材质即可

图2.2 材质选择

完成该操作后运行游戏可以发现无论是子弹还是玩家碰撞到物体后都会使物体改变颜色。因此还需要做如下优化:

在事件Hit节点与Set Material节点之间添加一个类型转换为FirstPersonProjectile节点做如下连接,使other输出引脚连接到Object输入引脚就能确保仅有子弹的碰撞可以触发该事件(原理还在研究中T。T!...)。

完成以上操作便可以使物体被子弹击中后改变颜色了!

2017-05-02 16:53:00 weixin_34308389 阅读数 7
  • 从这里开始虚幻4-第2辑-蓝图 v4.18

    本课程系列取名英译系列,是录制人员参考国外英文原版经典教程,结合中国人的习惯录制而成。希望能够给大家以帮助。从这里开始虚幻4系列教程,是Unreal的官方发布的入门教学,非常经典,是学习Unreal的佳入口。

    2270 人正在学习 去看看 杨石兴

本节书摘来异步社区《Unreal Engine 4蓝图可视化编程》一书中的第1章,第1.2节,作者: Brenden Sewell 译者: 陈东林 责编: 胡俊英,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.2 为关卡添加对象

现在我们希望添加自定义对象到关卡中。在关卡编辑器的中心面板是3D视口,视口为我们呈现游戏的3D内容。这时,熟悉在3D视口中的移动很重要。可以通过使用鼠标按键和拖动鼠标向周围移动控制摄像机来改变视角。在视口中按住鼠标左键并拖动光标将可以操控摄像机向前后左右移动,按住鼠标右键拖动光标将会旋转相机的视角。最后,按住鼠标中键并拖动光标将可以调整相机的位置(上下左右)。[2]

UE4中最简单的对象称为actor。它可以被拖曳到游戏世界中。actor是最基本的对象,除了能够旋转、移动、缩放之外,没有继承其他的行为,但是可以通过添加组件来获取更多的复杂的行为。我们的想法是创建一个简单的目标actor,当使用枪发射子弹击中它时能够改变自身颜色。我们可以在模式(Modes)面板创建一个简单的actor,选中模式(Place)标签,单击基本(Basic)然后拖曳Cylinder到3D视口当中。这个操作将创建一个新的圆柱体(cylinder)actor并置入到关卡中,你将在3D视口和世界大纲视图中看到它,单击鼠标右键>>编辑>>Rename将默认的名称Cylinder重命名为CylinderTarget,如图1.6所示。[3]


6

2016-11-30 08:46:12 qq_27481603 阅读数 4226
  • 从这里开始虚幻4-第2辑-蓝图 v4.18

    本课程系列取名英译系列,是录制人员参考国外英文原版经典教程,结合中国人的习惯录制而成。希望能够给大家以帮助。从这里开始虚幻4系列教程,是Unreal的官方发布的入门教学,非常经典,是学习Unreal的佳入口。

    2270 人正在学习 去看看 杨石兴

unreal官网 右上角获取虚幻引擎


安装全程不需要翻墙, 安装完这个样子:


点击unreal engine页  下载引擎的最新版本,全程也不需要翻墙. 安装完就可以启动啦!



unreal开发  分蓝图和c++代码两种形式.蓝图就是可以不用写代码直接用工具的形式构建项目,不过显然代码功能更强 编辑器右上角有个帽子是教程.


新建c++项目时需要安装visual studio 2015  否则可能会报各种错误, 我一开始装完Unity3D自带了vs2015但是可能因为走了默认安装配置所以报错: 缺少windows8.1 sdk 或者缺少32位的vs文件  安装的默认配置中是不勾选c++环境的   要自定义安装  把c++开发环境勾上


安装ue4时有个勾选选项: 用于编辑器的符号显示  很大,有13个g  是编写c++代码时的提示,在崩溃时也会有用,有什么用群里大神没说..

2017-12-18 16:33:25 UWA4D 阅读数 638
  • 从这里开始虚幻4-第2辑-蓝图 v4.18

    本课程系列取名英译系列,是录制人员参考国外英文原版经典教程,结合中国人的习惯录制而成。希望能够给大家以帮助。从这里开始虚幻4系列教程,是Unreal的官方发布的入门教学,非常经典,是学习Unreal的佳入口。

    2270 人正在学习 去看看 杨石兴

原文链接:https://blog.uwa4d.com/archives/Study_Unreal4_Animation_1.html

在之前的微信文章推送中,我们陆续为大家详细介绍了Unreal 4引擎的渲染模块(包括光照系统材质系统相机后处理全局光照明),接下来我们将讲解动画模块的基础功能,并且将在后续文章中陆续推出该模块中进阶功能和特殊用途的介绍。

在此,特别感谢Unreal中国团队对于本篇文章中Unreal引擎相关内容的审核,并在UWA团队学习其引擎的道路上提供的大力支持。


前言

动画模块是游戏引擎中的重要部分,是驱动游戏中场景、角色能够活灵活现地做出动作的基础。UWA将分三块内容介绍Unreal 4引擎中的动画模块功能,其中包括:基础功能、进阶功能以及特殊功能。在介绍基础和进阶功能时,UWA不仅会对其功能进行重点讲解,同时也将结合Unity引擎中的相似功能进行类比,以求让大家可以更明晰地掌握Unreal引擎动画模块的功能使用。在特殊功能中,UWA将对Unreal 4引擎中针对特殊用途提供的功能进行重点解读。

本节主要介绍Unreal 4引擎动画模块中提供的基础功能。其中主要包括以下几个部分:

  • 蒙皮网格
  • 骨骼文件
  • 动画文件
  • 加粗文字动画逻辑

Unreal 4引擎的动画模块提供了四个编辑器:蒙皮网格编辑器、骨骼编辑器、动画文件编辑器和动画蓝图编辑器。上述基础功能可以分别在这四个编辑器中完成。在接下来的内容中,本文将在介绍基础功能的同时对相应编辑器的使用进行介绍。


一、 蒙皮网格

Unreal 4引擎支持从外部FBX文件中导入蒙皮网格和动画。导入操作可通过Content Browser->Import按钮完成。导入界面如下图所示:

请输入图片描述

其中,包含了网格、动画以及材质相关的导入设置。默认情况下Unreal 4引擎会为网格创建材质、物理以及骨骼文件。若选择导入动画,也会同时创建相应动画文件。

蒙皮网格在Unreal 4引擎中被称为Skeletal Mesh,其相当于Unity引擎中的Skinned Mesh,表示了带有蒙皮信息的网格。双击Content Browser中的蒙皮网格文件,即可打开蒙皮网格编辑器,如下图所示:

请输入图片描述

其中,左边区域(1区)是Skeletal Mesh的参数设置,右边区域(2区)是Morph Target(Blend Shape)以及预览场景设置。在Skeletal Mesh参数设置中,可以设置模型的材质、LOD、Clothing、骨骼、物理(Rigidbody)、Capsule Shadow等相关参数。其中,Clothing支持Nvidia的apex文件。骨骼文件即为下文中将介绍的Skeleton Asset。Capsule Shadow是Unreal 4引擎中Skeletal Mesh特有的软阴影。它使用形状不同的Capsule对Mesh进行近似表示,在渲染阴影时则使用该近似表示进行渲染,从而节省了渲染开销。右上角区域(3区)显示了与当面Skeletal Mesh相关的文件,点击即可快速打开相关文件。


二、骨骼文件

Unreal 4引擎中的骨骼文件被称为Skeleton Asset,其相当于Unity引擎中的Avatar文件。双击Content Browser中的Skeleton Asset文件即可打开该文件,如下图所示:

请输入图片描述

其中,左边区域(1区)显示了当前Skeletal Mesh的骨骼信息,可以选中其中某一骨骼进行编辑。同时,还可进行Retargeting的设置。右上角区域(2区)显示了选中骨骼的详细信息以及预览场景设置。在骨骼详细信息中可以设置其Transform和Name参数。右下角区域(3区)显示了动画事件和Animation Curve。其中,Animation Curve可以用于在动画过程中修改模型材质以及修改Morph Target曲线。Animation Curve的具体修改过程需要在动画编辑器中完成,此处只提供了预览。

在Unity引擎中,查看骨骼信息的方式是将其拖入场景,即可在左边Hierarchy页面中看到骨骼信息,如下图所示。需要注意的是,FBX模型不要开启Optimize GameObject选项。

请输入图片描述

在Unreal 4引擎中,共用Skeleton Asset的网格可以共享动画文件,即动画重定向(Animation Retargeting)。但要共享Skeleton Asset需要满足一定条件,即两个网格中的骨骼命名顺序要保持一致,如下图所示:
请输入图片描述

其中,骨骼(1,2,3)与骨骼(1,2,3,4)可以共用Skeleton Asset,但是与骨骼(1,3,2)无法共用。

在Unity引擎中,通过对Humanoid类型动画网格的骨骼进行映射也可以支持动画重定向。但是Unity中的动画重定向只能支持骨骼长度相近的网格,对于骨骼相差较大的网格会出现穿插或者分离的现象。Unreal 4引擎提供了该问题的解决方案,我们将在后续文章的动画重定向一节中进行介绍。


三、动画文件

Unreal 4引擎中的动画文件被称为Animation Sequence,其相当于Unity引擎中的Animation Clip。双击Content Browser中的Animation Sequence文件即可打开该文件,如下图所示:

请输入图片描述

其中,左边区域(1区)显示了动画文件的相关参数和骨骼结构信息。右边区域(2区)的上半部分显示了选中骨骼的参数以及预览场景设置,下半部分显示了该模型的动画文件列表。下部区域(3区)显示了动画事件、Animation Curve以及Animation Layers Track。其中,Animation Layers Track支持对动画中单个骨骼的Transform进行修改,从而生成新的动画序列。

Animation Curve以及Animation Layers Track的功能类似于Unity中创建Animation Clip的功能。在Unity中也可以通过对蒙皮网格创建Animation Clip来修改其材质以及单个骨骼的Transform,如下图所示:

请输入图片描述


四、动画逻辑

在引擎中播放动画需要处理动画逻辑。Unreal 4引擎提供了动画专用的蓝图资源:Animation Blueprint。在Animation Blueprint中包含两种节点图:Event Graph和Anim Graph。两者分别用于提供动画数值计算逻辑以及动画状态机的功能。本节将介绍Unreal 4引擎中动画逻辑的功能,主要包括:动画数值计算,动画状态机,动画事件以及动画逻辑重用。

4.1 动画数值计算
Event Graph节点图用于计算播放动画的逻辑中所需要的数值变量,并提供给后续状态机使用。其中,Event Blueprint Update Animation节点会在每帧被调用。通过该节点可以在动画播放期间每帧更新逻辑数值,如下图所示:

请输入图片描述

其中,该节点图每帧计算了两个数值:IsInAir和Speed。IsInAir用于表示角色目前是否在空中,Speed表示当前角色的速度。IsInAir可以用于在空中切换角色动画,而Speed则可用于切换角色Idle,Walk以及Run等动画。

4.2 动画状态机
Anim Graph节点图用于计算角色最后输出的动作,其本质就是动画状态机,类似于Unity引擎中的Animator Controller资源,如下图所示:

请输入图片描述

其中,该节点图包含了一个状态名字为Default的状态机,并且将状态机计算的角色Pose作为最终结果。双击State Machine节点,可查看其内容,如下图所示:
请输入图片描述

其中,该节点图包含了默认起始节点Entry以及角色的移动以及跳跃等状态,在不同状态之间根据不同的条件进行跳转。这与Unity引擎中的Animator Controller动画状态机过渡颇为相似。由上图可知从移动节点跳转到起跳状态的判定条件即为IsInAir变量值,该数值由Event Graph每帧更新。

双击Idle/Run节点可以看到其内容,如下图所示:

请输入图片描述

该节点图根据Speed变量的数值输出不同的移动动作。其最终结果是通过Blend Space将Idle、Walk和Run三个动作进行插值的计算结果。Blend Space动画融合将在本文接下来内容中进行介绍。

Unreal 4引擎动画状态机不仅提供了动画状态以及跳转的功能,也在动画跳转过程中提供了状态过渡时的动画融合的功能,其融合时间和融合方式可设置。并且,其还提供了Conduits节点作为分支节点,支持对同一类型多个状态的管理,如下图所示:

请输入图片描述
上图取自Unreal 4官方网站

其中,Killed为Conduits节点,连接了不同死亡方式的动画节点。如果同一节点有多个跳转条件可能同时满足,通过设置跳转条件的优先级解决。

4.3 动画事件
动画逻辑中一个重要的功能就是动画事件,在Unreal 4引擎中被称为Animation Notification,其相当于Unity引擎中的Animation Event。其中一种动画事件是在动画状态跳转中触发,可在转移条件的详细属性中设置,如下图所示:

请输入图片描述

其中,Custom Blueprint Event可以在Event Graph中定义。

另一种动画事件是在动画播放过程中触发,可在动画编辑器中设置。在动画编辑器的Notifies轨道上点击右键即可添加动画该种事件,如下图所示:

请输入图片描述

其中,这种动画事件支持三种类型:Play Particle Effect,Play Sound以及Custom。其中,Play Particle Effect和Play Sound分别用于在动画播放过程中触发粒子系统和音频的播放。Custom则可自定义功能。

此外,Unreal 4引擎还提供了Notify State功能。它分别在动画播放的开始、播放中、结束触发事件。在开始和结束时各触发一次,在播放中每帧触发一次。其添加方式如同Notification一样,如下图所示:

请输入图片描述

其中,Notify State包含三种类型:Timed Particle Effect、Trail和Custom。Timed Particle Effect支持在动画播放中添加粒子特效,并且粒子特效的播放时长可设置。Trail支持在蒙皮网格上实现拖尾特效。Custom类型需要通过AnimNotifyState Blueprint实现。

4.4 动画逻辑重用
对于行为相似的角色,有的时候只需要更换不同的动画文件,而不需要重新制作类似的逻辑,或者可重用部分逻辑。Unreal 4引擎提供了动画逻辑重用功能提高开发效率。接下来,本节将介绍两种动画逻辑重用的方式:Child Animation Blueprint和Sub Animation Blueprint Instance。

- Child Animation Blueprint 主要用于重用所有动画逻辑,仅替换不同的动画文件。其使用方式是通过原始Animation Blueprint创建Child Animation Blueprint,如下图所示:

请输入图片描述

然后,双击打开Child Animation Blueprint,并打开Asset Override Editor窗口,即可在Asset一列对应原动画位置的下拉菜单中选择新的动画文件,下图则显示了用BS_Jog替换原始Jog动画文件的设置过程。

请输入图片描述

- Sub Animation Blueprint Instance 主要用于将动画逻辑分解成模块,然后方便重用。其使用方式是:首先将通用功能动画逻辑编辑保存成Animation Blueprint,然后在需要引用的节点图中添加Sub Anim Instance节点,并指向通用功能Animation Blueprint,如下图所示:

请输入图片描述

其中,上图显示了在Animation Blueprint中引用Sub Anim Instance的过程。Sub Anim Instance的内部参数可以通过设置暴露给外部Animation Blueprint作为输入,如上图中的Effect Alpha参数。其设置在Sub Anim Instance节点的详细信息页面,如下图所示:

请输入图片描述

外部的Pose数据可通过在Sub Anim Instance节点图中添加Sub-Graph Input节点传入,如上图中的In Pose参数。其设置如下图所示:

请输入图片描述

其中,上图为上述例子中Sub Anim Instance的节点图。Sub Graph Input节点为其提供了外部输入Pose数据。


以上则为Unreal 4引擎动画模块的基础篇介绍,我们重点讲解了动画模块的主要编辑和视图模块,希望通过上述内容,可以让您对Unreal引擎的动画模块产生明晰的感性认识。下周,UWA将为您带来Unreal 4引擎更为高级的进阶功能,欢迎关注!


文章标题

阅读数 84

没有更多推荐了,返回首页