2018-11-15 17:21:01 xiaoxiaolooi 阅读数 266
  • 从这里开始虚幻4-Editor介绍 v4.18

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

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

unreal GIS 模块

unreal4 源代码模块

自从unreal4 开源以来,osg ogre 渐渐不能用来吃饭,于是本着听人劝吃饱饭的思想,转头unreal门下,继续为混口饭事业,投身革命。可是unreal的c++编程基本没有什么例子可看,只好自己从头做起。

  1. 开发者驱动
  2. 编辑器
  3. 工程目录
  4. 基础框架代码
  5. 第三方库

在这里插入图片描述
这个是文档目录,代码量难以阅读,决定从以下三方向入手,第一次写文字,真心不容易。
1.案例编写使用unreal4 的普通界面搭建自定义三维场景 介绍 editor层的基础代码
2.添加GIS地图属性信息 介绍 驱动层的基础代码
3.程序化植物合成 介绍 与unreal基础平台结合
以后会陆续跟新到这里
推荐大家使用 阿里云 https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=ic4sfgeu

2014-07-24 21:11:24 u010153703 阅读数 1632
  • 从这里开始虚幻4-Editor介绍 v4.18

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

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

Unreal里的动画这么理解:

动画资源:AnimSequence, AnimMontage, BlendSpace...  其中,AnimSequence是我们导入的最基础的AnimClip,AnimMontage和BlendSpace都是在Unreal的Personal里用AnimSequence进一步制作的。

动画控制:AnimationBlueprint。 

AnimationBlueprint包含两部分:Anim Graph和Event Graph。  

Anim Graph: 动画状态转换(动画状态机)、动画混合(支持简单混合,目前还没有强大的混合树功能)。

Event Graph:可以自定义一些Event。或者处理某些AnimSequence、AnimMontage里插入的某些Event。

Unreal将角色逻辑和动画逻辑分开来处理,这样子处理有他的道理,只不过用户需要多了解Character和AnimInstance的通信机制。以CharacterBlueprint和AnimationBlueprint为例。

用户输入控制行走:

CharacterBlueprint里接受用户输入,由Character的MovementComponent得到Character的Speed。 而这个Speed是决定AnimationBlueprint里Idle-Walk-Run的参数。AnimationBlueprint如何从CharacterBlueprint获取信息呢?


其实看到了两种模式,(1)Try Get Pawn Owner节点得到当前的Player,由Player可以得到Velocity设置给AnimBP的Speed; 

(2)另一个就是需要做类型转换,将获取的Character转换为我们的MyCharacter,也就是我们已经用到的CharacterBP类型,此时就能获取MyCharacter 这个CharacterBP里的成员,变量、函数、Event,只要有访问权限,都能调用。

另外Try Get Pawn Owner节点可以换为Get Owning Actor节点。Get Owning Actor获取的是使用这个AnimationBlueprint的Actor。在这里这两个节点获取的对象是相同的。


动画状态机里一些动画状态的转换条件由AnimationBlueprint的一些Variable控制。而这些Variable又经常受用户输入影响,也就是这些Variable的值需要从CharacterBlueprint获取。 本质和前文的“用户输入控制行走”无差。


不用状态机转换,用Slot来控制:

需要制作AnimMontage,在AnimGraph里将Slot连接到Final Animation Pose。那么接下来不管是在AnimationBlueprint里的Event Graph里用Montage Play节点调用Montage,还是在CharacterBlueprint里用Play Anim Montage节点调用Montage,都可行!

注意,但在CharacterBlueprint里用PlayAnimMontage节点调用带RootMotion的Montage时,播放时可能会出现角色只出现位移没有播放相应动作的现象。 建议动画的处理还是尽量放在AnimBlueprint里。CharacterBlueprint只是告诉AnimBlueprint播放什么动画就好了。



完全不用AnimationBluerpint,直接在CharacterBlueprint里用Play Animation节点调用最原始的AnimSequence

注意,Play Animation节点是可以在CharacterBlueprint里用的,不过得注意去掉Context Sensitive。








2015-07-02 19:38:32 Neil3D 阅读数 3997
  • 从这里开始虚幻4-Editor介绍 v4.18

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

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


Unreal Engine 4发布好长好长时间了,直到最近才有时间仔细去看一下。

TimSweeney老大一句话“IF YOU LOVE SOMETHING, SET IT FREE”,原来需要几十万授权金才能拿到的东西,就从$19,变成免费了,而且开源。作为一个国际顶尖的引擎,能走出这一步,对我等普通开发者真是福音啊。如此的牛X,再加上开源,相信Unreal Engine 4会火起来的,你看看最近E3上的产品展示也能感觉到。不过,Unreal的定位毕竟是“国际顶尖”,而非Unity3D那样的“开发大众化”,所以上手是有一定难度的。

下面我把对Unreal Engine 4的初步印象总结一下,特别针对像我一样有Unreal Engine 3的同学,希望更多的同学来已经学习Unreal。


UnrealScript去掉了

开发语言上最大的变化,莫过于把UnrealScript去掉了。
UnrealScript吧,当年来看还是一个非常NB的东西,要知道Unreal一代发布是1998年的事儿,而JAVA语言也就是95年才发布的。据说Tim Sweeney在开始设计Unreal的时候曾经考虑过使用Java作为上层语言,不过那时候Java还不成熟,所以他参考Java,实现了这个一个面向对象的,单根继承的脚本语言。不过,随着时间流转,Epic似乎并没有花太大的力气去演进UnrealScript。在Unreal Engine 3的时代,它确实显得有点老旧了,书写起来比一些现代语言确实有很多不方便的地方。所以,去掉就去掉吧。不过,值得注意的是,官方也留出了整合其他脚本语言的接口,例如LUA。


C++11

底层很多基础代码看上去有很强的亲切感,底层架构设计思路沿用了许多。底层依然是使用C++,不过用了很多C++11的特性,代码看上去简洁了不少。
项目的编译、构建使用UnrealBuildTool,这应该是从3代延续过来;另外,就是增加了一个UnrealHeaderTool工具,猜想是根据UCLASS,UPROPERTY等宏,生成自定义反射信息用的,具体的还待进一步研究。


Blueprint Visual Scripting

据说这是UE4最牛X的改进了。看了看,原来是Kismet的延伸,连源代码很多都是UKismentXXX那一套。UE3里面的Kistmet只限于在一个关卡中使用,而Blueprint扩展了。关卡可以有唯一的一个Level Blueprint,相当于原来的Kismet;另外增加了Blueprint Class,大概就是用Blueprint创建自定义的Actor、Pown之类的,由于有了这个功能所以原来的Archetype顺带也就被替代了。其实,作为老一代屌丝Coder,我一直对Kismet那种表达式层级可视化编程,一直不太感冒(像Unity的PlayMaker那样,提供更高层级抽象的可视化工具更好)。不过,既然是UE4主推的个东东,还是得看看。
不过,总体上给Designer一套可视化编程的东西,让他们自己实现一些关卡逻辑、游戏规则之类的,还真是一个特别好的方法。当然,我们这些Coder的工作还是不会丢掉的,例如游戏框架,游戏一些底层功能、常用模块还是要C++写好(或者使用LUA脚本?),封装给Blueprint来使用的。


AnimTree哪去了

UE3的AnimTree给我震撼太大了,所以特别关心UE4的动画系统。看了一下,貌似被分解成了BlendSpace和AnimGraph。
  • BlendSpace
    好比说“站立、走、跑”这三个动作,在UE3的AnimTree里面是有一个特定的node来混合的,根据移动速度不同。在UE4里,则需要创建一个BlendSpace1D资源,然后暴露出Speed参数。
  • AnimBlueprint
    使用Blueprint,AnimGraph,状态机等等控制角色的动画,怎么看上去和Unity的Mecanim有点像呢,唉~
看来AnimTree是真的不见了,很遗憾,因为我觉得那个使用树形结构来抽象的动画系统,实在是非常清晰而且强大。

渲染系统

基于物理的渲染(PBR:Physically-Based Rendering)效果真的是太NB了,Unity5虽然也是PBR,好像比UE4还是略逊一筹啊!这个无需多言了,各种DEMO视频大家都看了不少了。渲染流程也完全走延迟渲染了。但多线程渲染,SceneProxy、Material之类的基础架构没怎么变。

Behavior Tree

这个东西好像在国外的游戏AI领域这几年挺流行了,是个很高大上的东西,UE4直接做了,太好了。

另外,还有很多重大改进,例如Package,资源导入,增加插件支持等,这里就不一一细说了。推荐看一下官网的文章吧,作为本文的补充偷笑

2014-07-31 18:37:23 u010153703 阅读数 1212
  • 从这里开始虚幻4-Editor介绍 v4.18

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

    2510 人正在学习 去看看 杨石兴
Unreal里的Input被我分为两类,(1)只控制Possesed Pawn的ActionEvent和AxisEvents,需要配合设置Project Settings里的Input。(2)可以控制整个场景的任何物体。用的比较多的是KeyEvents和MouseEvents,当然,如果你用摇杆外设,用的比较多的是GamepadEvents。

(1) ActionEvent和AxisEvents
在ProjectSetting的 Input里定义一堆键盘输入来做Action和Axis的Mapping。
在ProjectSetting里的Input有两种:
Action Events和Axis Events。
AxisEvent提供对应按键的Axis Value。


Action Event则不提供额外信息,只是触发事件。



(2) KeyEvents和MouseEvents
其实,还有很有用的Input种类是:KeyEvents和MouseEvents。


Action Events和Axis Events,按键消息只被Possessed的Pawn接收,也就是你只能控制PlayerPawn/PlayerCharacter。
但KeyEvents和MouseEvents的按键消息可以被场景中任何物体接收。

噢噢噢,有了KeyEvents,用来测试多么方便多么方便呀~ 


2016-12-12 16:10:30 qq_20309931 阅读数 3764
  • 从这里开始虚幻4-Editor介绍 v4.18

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

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

Unreal Engine 4 C++ 插件介绍

好记性不如烂笔头啊,还是记录一下!


1.创建插件

创建插件的步骤很简单,但是很容易出错:

  1. 关闭项目,在项目目录下创建Plugins文件夹
  2. 拷贝一个空白插件(BlankPlugin)到Plugins文件夹下(BlankPlugin位于路径Engine/Plugins/Developer/BlankPlugin)
  3. 把文件夹,文件名,文件内容里面所有的 BlankPlugin 替换为你的插件名字
  4. 重新生成项目
  5. 重新编译项目

会发现你的项目中已经自动检测出了插件:

项目示例

其中<插件名称>.uplugin为插件的描述文件:

{
    "FileVersion" : 3,
    "Version" : 1,
    "VersionName" : "1.0",
    "FriendlyName" : "MyTestPlugin",
    "Description" : "Test Plugin Develop",
    "Category" : "Tests",
    "CreatedBy" : "Colocasia",
    "CreatedByURL" : "",
    "DocsURL" : "",
    "MarketplaceURL" : "",
    "SupportURL" : "",
    "EnabledByDefault" : true,
    "CanContainContent" : false,
    "IsBetaVersion" : false,
    "Installed" : false,
    "Modules" :
    [
        {
            "Name" : "MyTestPlugin",
            "Type" : "Developer",
            "LoadingPhase" : "Default"
        }
    ]
}

描述文件不能乱改,否则会导致加载失败,需要修改可以参考官方文档:描述器文件格式

插件中也有项目的配置文件,<插件名称>.Build.cs

// Copyright 1998-2016 Epic Games, Inc. All Rights Reserved.

namespace UnrealBuildTool.Rules
{
    public class MyTestPlugin : ModuleRules
    {
        public MyTestPlugin(TargetInfo Target)
        {
            PublicIncludePaths.AddRange(
                new string[] {
                    // "MyTestPlugin/Public"
                    // ... add public include paths required here ...
                }
            );

            PrivateIncludePaths.AddRange(
                new string[] {
                    "MyTestPlugin/Private"
                    // ... add other private include paths required here ...
                }
            );

            PublicDependencyModuleNames.AddRange(
                new string[]
                {
                    "Core",
                    "CoreUObject"
                    // ... add other public dependencies that you statically link with here ...
                }
            );

            PrivateDependencyModuleNames.AddRange(
                new string[]
                {
                    // ... add private dependencies that you statically link with here ...
                }
            );

            DynamicallyLoadedModuleNames.AddRange(
                new string[]
                {
                    // ... add any modules that your module loads dynamically here ...
                }
            );
        }
    }
}

然后配置完后就可以像引擎编写模块一样,愉快的编写代码了。


2.C++静态链接插件

在说此方法之前,先引用下官网的说明,不是很推荐用这种方法:

为了使插件真正可插拔,我们通常不鼓励为插件添加依赖关系。

但是如果一个游戏各个系统都是一个个插件,或者有人发布了很好用的代码类的工具插件,就可以用下面的方式进行静态链接。(静态链接后如果找不到插件编译会报错)

在你需要依赖的模块的<模块名称>.Build.cs中加入下列代码:

PrivateDependencyModuleNames.AddRange(
    new string[] {
        "MyTestPlugin"
    }
);

PrivateIncludePathModuleNames.AddRange(
    new string[] {
        "MyTestPlugin"
    }
);

这样就可以访问插件中的接口了,不过这里有个大坑:

插件中的要让其他模块访问的接口要符合模块API的标准

这个问题曾经困扰了我很久:

/**
 * Example of declaring a UObject in a plugin module
 */
UCLASS()
class MYTESTPLUGIN_API UMyTestObject : public UObject
{
    GENERATED_UCLASS_BODY()
};

比如这个例子中:你想UMyTestObject被游戏中的模块创建,必须加入MYTESTPLUGIN_API这个标记,否则会报无法找到定义的LINK2019错误。加入的标记符合<插件名称>_API,注意插件名称必须为大写。

Unreal中的捏脸

阅读数 289

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