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

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

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

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

2017-09-12 10:45:00 OnafioO 阅读数 69
  • 从这里开始虚幻4-Editor介绍 v4.18

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

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

unreal4特性介绍


原文地址:   https://www.unrealengine.com/products/unreal-engine-4     unreal enginer介绍


我的UE4学习(一)


你曾想过用连线的形式来编写程序么;
你曾想过通过编辑工具就可以来创建类,并在vs中自动生成类和函数,头文件和cpp文件么;
你曾想过粒子效果可以成千上万的渲染,并且牛逼的粒子还可以反射光线么;
你做的效果可以能会超越电影画质的游戏;
你曾想象和意淫一下,C++不用编译可以实时的在编辑图形界面上调试和添加断点么;

我看了UE4代码的一个小小的角落,就觉得自己来到了一个无知的世界。你的想象,别人已经实现了。
自惭形秽的同时,希望能学到人家的一二。

Welcome To  The Future! 牛逼闪闪的UE4 来了!

ue4需要的基本电脑配置:
Win7 64位系统或Mac OSX10.9.2以上版本
Intel 或AMD处理器 2.5GHZ以上。
兼容DX11 的GPU。
8G内存,不够的请自动升级!
 

一、特性说明

特性

Ue4是一款专业开发高质量游戏的平台开发工具。Ue4的渲染加快可以满足开发者完成出色的画面,同时也可以匹配低端系统。

全新工作流的特性和深度的工具箱可让开发者快速的实现想法,并可以看到效果,同时c++开源带来了全新的体验。

Ue技术支持几百种游戏,实时3D电影,训练仿真,可视化等。在过去的15年中,成千上万的个人和团体围绕者ue开发技术建立了公司,成为了一种职业。

二、 具体特性

(一)

UE4支持更高级的DX11的渲染特性,比如:全屏的HDR映像,每个场景上千种动态光照,artis-可编程镶嵌技术和disPlacement(位移)技术,基于物理特性的阴影和材质,IES光照轮廓等等。

(二)

颗粒特效·

颗粒特效编辑器VFX为我们提供了创建精细的火、烟、血、尘土、污垢、碎石等的工具。颗粒管线包括的了快速低成本GPU粒子仿真,可与深度缓冲交互的碰撞系统。场景中数百万的动态粒子可以接受和反射光线,你可以控制各种粒子效果参数,包括有大小,颜色,密度,下降散开和反弹。

 

(三)

新材质管道

UE4通过使用基于物理模型的shading,提供了前所未有的控制方式,你可以观察和感受角色和对象。快速创建一个宽阔场景面,它是经得起对细节的考验。在像素级别上,层材质和微调值,可以满足你的任何想象。

  

(四) 

蓝图

蓝图可视脚本带把你有创造力的想法,展示到可视化的游戏中。使用蓝图,任何人不需要写一行代码,可以快速原型和建立玩家内容。蓝图可以在创建级别、对象和玩家行为,修改用户界面,调整输入控制等操作中发挥作用。

 

(五) 

实时的蓝图调试debugging

在游戏测试的中,通过蓝图可视化脚本内置了一个debugger,你可以与可视化的游戏流程交互并检查属性值。通过在蓝图的可视节点上设置断点,来随意的暂停游戏,查看游戏的各种状态。逐步的通过事件和功能,随意的变化,优化你的游戏。

你之前有想象过,不通过代码来调试程序么?你想过你能在编辑工具的界面上设置断点和调试么?

 

(六) 

内容浏览

使用UE4内容浏览器,用来导入,组织,搜索,标记,过滤,修改在unreal编辑器中的游戏的对象。实时动态预览图使用截屏功能,可以被修改保存。创建任何的对象集合,都可以被个人或共享给其他开发者。

 

(七) 

角色动画

使用角色动画工具集,可以来编辑骨骼动画,骨骼网格,sockets,动画蓝图等。这个是多用途工具,你可以预览动画序列,变形目标体,也可以设置动画混合空间和蒙太奇剪切。当然,也可以使用PHAT(物理编辑工具集)用来修改骨骼网格的物理和碰撞属性。

 

(八) 

过场动画

UE4的过场动画工具集提供了在场景级别的直接的级别控制,动态玩家镜头和电影。通过一个类似的非线性编辑器,能够是你在场景中设置精细的动作细节和动画场景属性,产生很棒的电影片段。

 

 

(九) 

地形和枝叶

我们使用景观系统可以创建大型开放的环境,然而平铺地形的方法的命令条数是巨大的,多亏了强大的LOD系统和高效的内存使用。使用枝叶工具,快速绘制或删除所有排序的地形组件,从而达到修改大型室外场景的目的。


(十)

后处理效果

UE4的后处理特性可以使你完美的体验对于场景的观感。电影般的效果,举几个例子:环境立方贴图,环境遮挡,bloom,颜色分级,景深,眼适应,镜头耀斑,光轴,抗锯齿,色调映射等。

 

 (十一) 

完全源码接入

UE4带有全部的C++代码,你可以修改和扩展UE编辑工具和UE的子系统,包括物理系统,声音系统,在线系统,动画系统,渲染系统和slate 界面系统。全部控制引擎和角色代码,你可以干任何事情。

 

(十二) 

专业的源码控制

UE4委托GitHub来源码开源,这样由很清晰的版本控制文档和版本跟踪。另,Perforce的版本控制和ApacheSubversion支持,对开发者而言都是用户条款的。不管,你的团队规模,均享有在UE基础版本上开发和设计的权利。

 

(十三) 

C++代码可视

在游戏角色和对象,UE4代码允许直接浏览c++函数功能,直接跳转到在vs的源代码行来做更改,从而节约了时间。

 

(十四)  

热重载功能

使用UE很受欢迎的热重载特性,你可以在你游戏运行的过程中,更新你的角色代码。这个工具你开业用C++编写代码,并且可以不用暂停游戏来观看代码的运行效果。

 

  

(十五) 

模拟和仿真

使用模拟仿真模式,可以快速调试和更新角色行为,这样你在编辑视口中,可以运行一下程序的逻辑,观察角色的表现。在模拟仿真的编辑环境下,全屏化运行游戏,你可以忽略UI,全身心的关注角色的变化。

 

(十六) 

即时游戏预演

更新游戏和使用即时预演系统可以立即在游戏中任意地方产生一格玩家,并且不用等待文件保存。

 

(十七) 

获取和丢失特性

获取和丢失特性,允许你在编辑的游戏中,可以在任何时间来以玩家视角来编辑和控制相机以便观察那些行为不正确。

 

(十八) 

人工智能

UE4的角色框架和AI系统,可以使角色拥有世界周围的空间意识,从而使他们更智能的行为。当你的运行对象在总是在优化路径,动态导航实时的更新网格

 

(十九) 

音频

使用UE4的音频编辑可以建立音频管线,定义游戏的重复音效。

 

(二十) 

 领先的中间件集成

UE4的主要的配件程序提供了很多的引领工业级的中间件技术,包括英伟达的PhysX,Autodesk的Gameware,Enlighten,暗影,Oculus VR等软件库。

 

三、 

样例使用说明

虚幻4的样例展示了引擎使用高要求粒子效果的能力。在运行样例之前,你需要安装vs2013runtimes.

使用批处理文件可以进行设置,比如:分辨率x=1920,分辨率y=1080等。

 

-------------------------------------

posted @ 2017-09-12 10:45 00000000O 阅读(...) 评论(...) 编辑 收藏
2016-11-21 11:36:51 qq_20309931 阅读数 788
  • 从这里开始虚幻4-Editor介绍 v4.18

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

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

Unreal Engine 4 C++ Component介绍——BrainComponent

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


BrainComponent简介

BrainComponent是Unreal Engine 4中AI模块中的一个比较重要的组件,游戏中AI的消息收发都可以用到了这个组件。

添加AIModule依赖

PublicDependencyModuleNames.AddRange(
    new string[] {
        "Core",
        "CoreUObject",
        "Engine",
        "InputCore",
        "AIModule"
    }
);

继承BrainComponent

  • MyBrainComponent.h
#pragma once

#include "BrainComponent.h"
#include "UMyBrainComponent.generated.h"
/**
 * 
 */
UCLASS()
class TEST UMyBrainComponent : public UBrainComponent
{
    GENERATED_BODY()


};

由于BrainComponent是一个抽象类,所以使用它需要重新创建个类,来继承他。

  • MyBrainComponent.cpp

#include "UMyBrainComponent.h"

// Set Default Attribute
UMyBrainComponent::UMyBrainComponent(const FObjectInitializer& ObjectInitializer)
    : Super(ObjectInitializer)
{

}

使用BrainComponent

然后在需要用到消息收发的AI控制器(AIController)中初始化它。

BrainComponent = CreateDefaultSubobject<UMyBrainComponent>(TEXT("UMyBrainComponent"));

初始化后我们就可以使用它来收发消息了

定义消息

我们可以再创建个头文件来定义消息:

#pragma once

#include "BrainComponent.h"

enum class MyAIState : uint8
{
    None,
    Sleep,
    Work
};

struct FMyAIMsg
{
    GENERATED_USTRUCT_BODY()

public:

    static const FName MyAIStateEnter;
};

监听消息

// 需要监听的h中
#include "BrainComponent.h"

// 类中添加
{
    // AIMessage
    TArray<FAIMessageObserverHandle> AIMessageHandlers;    

    // Test Observer
    void TestAIMessageObserver(UBrainComponent* BrainComp);

    // Handle AI Message
    virtual void HandleAIMessage(UBrainComponent*, const FAIMessage&);
}
// 需要监听的cpp中
void MyTestBrainComponent::TestAIMessageObserver(UBrainComponent* InBrainComp)
{

    FName MessageType = FMyAIMsg::MyAIStateEnter;

    FOnAIMessage Delegate = FOnAIMessage::CreateUObject(this, &MyTestBrainComponent::HandleAIMessage);
    FAIMessageObserverHandle MessageHandler = FAIMessageObserver::Create(InBrainComp, MessageType, FAIRequestID::AnyRequest.GetID(), Delegate);


    AIMessageHandlers.Add(MessageHandler);
}

void MyTestBrainComponent::HandleAIMessage(UBrainComponent* InBrainComp, const FAIMessage& Msg)
{

    FName MsgType = Msg.MessageName;

    if (FMyAIMsg::MyAIStateEnter == MsgType)
    {
        if (GEngine)
        {
            // 显示调试信息五秒。-1“键”值(首个参数)说明我们无需更新或刷新此消息。
            GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, TEXT("HandleAIMessage"));
        }

        uint8 MsgID = Msg.RequestID.GetID();

        switch (MsgID)
        {
        case MyAIState::Sleep:
            // handle
            break;
        case MyAIState::Work:
            // handle
            break;
        default:
            // handle
            break;
        }
    }
}

这样就完成了消息的监听,下一步我们要发送消息。

发送消息

发送消息就很简单了:

// 需要发送消息的地方

// 组装消息
FAIMessage Msg(FMyAIMsg::MyAIStateEnter, this);
Msg.RequestID = static_cast<uint32>(MyAIState::Work);
FAIMessage::Send(this, Msg);

之后就可以在处理函数HandleAIMessage收到消息并处理消息。(原理大家可以参考BrainComponent的源码。)

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

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

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

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,注意插件名称必须为大写。

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

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

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


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,资源导入,增加插件支持等,这里就不一一细说了。推荐看一下官网的文章吧,作为本文的补充偷笑

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