2016-09-06 16:09:31 sgnyyy 阅读数 1627
  • 从这里开始虚幻4-Editor介绍 v4.18

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

    2396 人正在学习 去看看 杨石兴
  FVector2D thisMouse;
    FVector2D dMouse;
    APlayerController* PController = GetWorld()->GetFirstPlayerController();
    PController->GetMousePosition( thisMouse.X, thisMouse.Y );
获取鼠标按下去的时间
float time = PController->GetInputKeyTimeDown(  EKeys::LeftMouseButton );

2016-09-05 15:06:49 sgnyyy 阅读数 435
  • 从这里开始虚幻4-Editor介绍 v4.18

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

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

    FString screenXY = GEngine->GameViewport->Viewport->GetSizeXY().ToString();
    UE_LOG(LogClass, Warning, TEXT("ScreenXY>>>>>>>>%s"), *screenXY);

    
    FVector2D Result = FVector2D( 1, 1 );
    
    if ( GEngine && GEngine->GameViewport )
    {
        GEngine->GameViewport->GetViewportSize( /*out*/Result );
    }
    UE_LOG(LogClass, Warning, TEXT("GetViewportSize>>>>>>>>%s"), *Result.ToString());
    
    UE_LOG(LogClass, Warning, TEXT("GetViewportSize>>>>>>>>%d%d"), GSystemResolution.ResX, GSystemResolution.ResY);

    //UE_LOG(LogClass, Warning, TEXT("Canvas XY>>>>>>>>%d%d"), Canvas-, Canvas->SizeY);

    UE_LOG(LogClass, Warning, TEXT(" UObject::GetWorld()>>>>>>>>%s"), *((GetWorld()->GetGameViewport()->Viewport->GetSizeXY()).ToString()));


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

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

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

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

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

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

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

    断断续续学习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"));
}


2017-08-05 10:53:11 qq_35534985 阅读数 6631
  • 从这里开始虚幻4-Editor介绍 v4.18

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

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

《学习笔记记录》

新人接触UE4,在此发帖主要用于记录学习内容,同时希望可以帮助其他朋友

在网上看到很多AR的视频,感觉很有意思,就研究了一下,感觉UE4好像不能直接进行AR的开发。通过查找资料,看到一款UE4开发AR的插件,感觉可能很强大,就下载下来尝试一下。

插件名称:Unreal4AR

官方网址:http://www.unreal4ar.com/

打开后出现如下所示界面

此处简要介绍了一下插件的功能,说明插件可以让开发人员使用UE4的蓝图脚本进行项目开发。

点击橙色按钮“GET THE PLUGIN NOW!”获取插件。然后弹出如下界面

该界面显示了UNREAL4AR插件的特性和支持的UE4版本,及目前插件的最新版本v1.8。要想获得插件,还需选择权限,这里分为三种。


第一种Editor demo是免费的,应该只能编辑学习使用,不能打包生成。

第二种是个人开发使用,收费99欧元,用于个人开发

第三种是商业开发使用,收费249欧元,用于商业开发

我这里选择的是第一种,然后点击按钮“ADD TO CART”

然后点击“Proceed to checkout”,进行确认,下一个界面会要求填写信息,我随便写的也可以通过。

然后点击“PLACE ORDER”按钮,即可进入下载页面

然后再点击Download后面的连接就可以下载插件了。

unreal

阅读数 239

Unreal里的动画

阅读数 1623

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