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

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

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

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

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

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

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


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

2018-06-08 14:17:24 zp288105109a 阅读数 647
  • 从这里开始虚幻4-Editor介绍 v4.18

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

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

    断断续续学习Unreal很久了,但工作用的是Unity,Unreal很多API都记不住,就分类记录下。

    C++获取UMG组件有2种方式,目前知道的,一个是通过属性宏(BindWidget),另一个则类似Unity的Transform.Find(string name),Unreal用的是UWidget* GetWidgetFromName(const FName& Name) const

    .h:

#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "Components/Button.h"
#include "StartUserWidget.generated.h"

/**
 * 
 */
UCLASS()
class RPGPROJECT_API UStartUserWidget : public UUserWidget
{
	GENERATED_BODY()
	
public:
	virtual bool Initialize() override;
	
	UFUNCTION()
		void OnStartBtnClick();
	UFUNCTION()
		void OnQuitBtnClick();

public:
	UPROPERTY()
		UButton* StartBtn;
	UPROPERTY(Meta = (BindWidget))
		UButton* QuitBtn;
};

    .cpp:

#include "UI/StartUserWidget.h"
#include "Runtime/Engine/Classes/Kismet/KismetSystemLibrary.h"

bool UStartUserWidget::Initialize()
{
	if (!Super::Initialize())
		return false;

	StartBtn = Cast<UButton>(GetWidgetFromName(TEXT("StartBtn")));
	if (StartBtn != nullptr)
		StartBtn->OnClicked.AddDynamic(this, &UStartUserWidget::OnStartBtnClick);
	if (QuitBtn != nullptr)
		QuitBtn->OnClicked.AddDynamic(this, &UStartUserWidget::OnQuitBtnClick);

	return true;
}

void UStartUserWidget::OnStartBtnClick()
{
	UE_LOG(LogTemp, Error, TEXT("OnStartBtnClick"));
}

void UStartUserWidget::OnQuitBtnClick()
{
	UE_LOG(LogTemp, Error, TEXT("OnQuitBtnClick"));

	// Quit game
	UKismetSystemLibrary::QuitGame(GetWorld(), nullptr, EQuitPreference::Quit);
}

    自己也写了个UI管理的,本来想写个单例来着,不知道Unreal怎么写,就放在GameInstance中来管理,估计随着学习还会改:

#include "GameInstance/MainGameInstance.h"
#include "Runtime/Engine/Classes/Kismet/GameplayStatics.h"
#include "UI/MessageUserWidget.h"

void UMainGameInstance::Init()
{
	UGameInstance::Init();

	FCoreUObjectDelegates::PreLoadMap.AddUObject(this, &UMainGameInstance::BeginLoadingScene);
	FCoreUObjectDelegates::PostLoadMapWithWorld.AddUObject(this, &UMainGameInstance::EndLoadingScene);

	InitializeUserWidgetMap();
	InitializeSceneMap();
	UserWidgetList.Reset();
}

void UMainGameInstance::BeginLoadingScene(const FString& Map)
{
	Release();
}

void UMainGameInstance::EndLoadingScene(UWorld* World)
{
}

UUserWidget* UMainGameInstance::ShowWidget(int UserWidgetId, bool bIsAddToViewport)
{
	if (!UserWidgetMap.Contains(UserWidgetId))
		return nullptr;

	UUserWidget* CurrentWidget = nullptr;

	if(UserWidgetList.Contains(UserWidgetId))
		CurrentWidget = UserWidgetList[UserWidgetId];
	else
	{
		const TCHAR* UserWidgetClassName = UserWidgetMap[UserWidgetId];
		CurrentWidget = CreateWidget<UUserWidget>(this, LoadClass<UUserWidget>(this, UserWidgetClassName));
	}

	if (CurrentWidget != nullptr && bIsAddToViewport && !CurrentWidget->IsInViewport())
		CurrentWidget->AddToViewport();

	if (CurrentWidget != nullptr && !UserWidgetList.Contains(UserWidgetId))
		UserWidgetList.Add(UserWidgetId, CurrentWidget);

	return CurrentWidget;
}

void UMainGameInstance::RemoveWidget(int UserWidgetId)
{
	if (!UserWidgetList.Contains(UserWidgetId))
		return;

	UUserWidget* TempUserWidget = UserWidgetList[UserWidgetId];
	if(TempUserWidget != nullptr && TempUserWidget->IsInViewport())
		TempUserWidget->RemoveFromViewport();
}

void UMainGameInstance::ShowMessageView(FString Msg)
{
	UMessageUserWidget* MessageUserWidget = Cast<UMessageUserWidget>(ShowWidget((int)EUserWidget::MessageView));
	if (MessageUserWidget != nullptr)
		MessageUserWidget->ShowMessage(Msg);
}

void UMainGameInstance::LoadScene(int SceneId)
{
	if (!SceneMap.Contains(SceneId))
		return;

	UWorld* World = GetWorld();
	if (World != nullptr)
		UGameplayStatics::OpenLevel(World, SceneMap[SceneId]);
	else
		UE_LOG(LogTemp, Error, TEXT("World == nullptr"));
}

void UMainGameInstance::Release()
{
	if (UserWidgetList.Num() > 0)
	{
		for (TMap<int, UUserWidget*>::TIterator it = UserWidgetList.CreateIterator(); it; ++it)
		{
			if (it->Value->IsInViewport())
				it->Value->RemoveFromViewport();
		}
	}
	UserWidgetList.Reset();
}

void UMainGameInstance::InitializeUserWidgetMap()
{
	UserWidgetMap.Reset();
	UserWidgetMap.Add((int)EUserWidget::StartView, TEXT("WidgetBlueprint'/Game/UI/StartView.StartView_C'"));//需要加上_C
	UserWidgetMap.Add((int)EUserWidget::MainView, TEXT("WidgetBlueprint'/Game/UI/MainView.MainView_C'"));
	UserWidgetMap.Add((int)EUserWidget::MessageView, TEXT("WidgetBlueprint'/Game/UI/MessageView.MessageView_C'"));
}

void UMainGameInstance::InitializeSceneMap()
{
	SceneMap.Reset();
	SceneMap.Add((int)EScene::StartScene, TEXT("/Game/Scene/Start"));
	SceneMap.Add((int)EScene::MainScene, TEXT("/Game/Scene/Main"));
}


2019-10-28 18:51:39 LightStarLL 阅读数 96
  • 从这里开始虚幻4-Editor介绍 v4.18

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

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

前言

对Unreal Engine 4的认识还只是在第八周开始,虽然一开学的时候就已经下载了,但是真正的去使用和了解还只是在Unreal 4老师上课的这一周开始。
接下来可能会很久吧,也可能只是这一年,会用CSDN记录我的Unreal Engine学习进度。

开篇

Unreal Engine 中文是虚幻引擎,简称我们学习的课程叫UE 4或者虚幻4;虽然我也不知道为什么有个4,可能是第四版了吧。而Unreal则是Epic开发的游戏引擎,是UNREAL ENGINE(虚幻引擎)的简写,由Epic开发,是目前世界知名授权最广的游戏引擎之一,占有全球商用游戏引擎80%的市场份额。

虚幻4的主要页面和操作等同于Unity,一学期的Unity课程学习对Unity有点了解。也用Unity做了一些项目,一些页面跟Unity有些类似,
如Unreal Engine 关键字:
QuickStart、 Actor、 Component、 Blueprint、 Material、 Lighting、 Camaera、 HUD 、 Slate、 Particle主要内容其实相似,明天补录一些内容把,插入图片后就不怎么会用了,。但是Unreal更优秀和直接的地方相比于Unity而言有一部分在于Unreal的页面渲染更加厉害,牛掰。同时在蓝图上也更为便捷,省去了很多麻烦。,、主页面介绍

Unreal 4 术语简介

阅读数 923

unreal

阅读数 255

Unreal学习心得

博文 来自: liuqiqi0071

unreal component

阅读数 441

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