国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【虛幻引擎】UE4/UE5插件

這篇具有很好參考價值的文章主要介紹了【虛幻引擎】UE4/UE5插件。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、插件分類

插件分為七大類

  • Blank:空白插件,可以從頭開始自己定義想要的插件風(fēng)格和內(nèi)容,用此模板創(chuàng)建的插件不會有注冊或者菜單輸入。
  • BlueprintLibrary:創(chuàng)建一個含有藍圖函數(shù)庫的插件,此模板函數(shù)都是靜態(tài)全局函數(shù),可以在藍圖中直接調(diào)用。
  • ContentOnly:創(chuàng)建一個只包含內(nèi)容的空白文件
  • Editor Toolbar Button:創(chuàng)建關(guān)卡編輯器的工具欄中的按鈕插件,首先在創(chuàng)建的點擊事件中實現(xiàn)一些內(nèi)容
  • Editor Standalone Window:創(chuàng)建關(guān)卡編輯器的工具欄中的按鈕插件,點擊按鈕可調(diào)出一個空白選項獨立卡窗口
  • Editor Mode:創(chuàng)建一個含有編輯器模式的插件
  • Third Party Library:創(chuàng)建一個已包含第三方庫的插件

【虛幻引擎】UE4/UE5插件

二、插件模塊?

插件可含有任意數(shù)量的模塊源目錄。多數(shù)插件僅有一個模塊(但可創(chuàng)建多個模塊,例如插件包含純編輯器功能時),及游戲期間要運行的其他代碼。

插件源文件的大部分布局與引擎中其他C++模塊相同。

在模塊的?Source?目錄(或其子目錄)內(nèi),插件可在標頭文件中聲明新反映的類型(UCLASS、USTRUCT?等)。引擎的構(gòu)建系統(tǒng)將檢測此類文件,并按需要生成代碼支持新類型。需遵守C++模塊中使用?Uobjects?時的一般規(guī)則,例如在模塊的源文件中包含生成的標頭文件和模塊?generated.inl?文件。

UE4支持共生模塊和插件。通過在自身.uproject文件中啟用插件,項目模塊可依賴插件。類似地,通過在自身.uplugin文件中啟用其他插件,插件可表明依賴性。但其中有一項重要限制:插件和模塊將拆分為若干層級,僅能依賴同一級或更高級的其他插件或模塊。例如,項目模塊可依賴引擎模塊,但引擎模塊無法依賴項目模塊。這是因為引擎(及其所有插件和模塊)的級別高于項目,須能在無項目的情況下編譯。

三、引擎插件和項目插件

虛幻引擎4的?Engine?目錄下包含部分內(nèi)置插件。引擎插件和項目插件類似,但可用于所有項目。此類插件通常由引擎和工具程序員創(chuàng)建,目的在于提供可在多個項目中使用并能在單一位置維護的基線功能。利用此功能,用戶可直接添加或覆蓋引擎功能,而無需修改引擎代碼。

【虛幻引擎】UE4/UE5插件

項目插件位于項目目錄的?Plugins?子文件夾下,將在引擎或編輯器啟動時被探測和加載。如插件包含具有?Source?文件夾(和?.Build.cs?文件)的模塊,插件代碼將被自動添加到生成的C++項目文件,以便在開發(fā)項目時開發(fā)插件。編譯項目時,有可用源的插件都被作為游戲依賴項進行編譯。項目生成器將忽略無?Source?文件夾的插件,其不會出現(xiàn)在C++項目文件中,但若存在二進制文件,啟動時仍將加載此類插件。

【虛幻引擎】UE4/UE5插件

插件的描述,描述的文件是Json格式,以官方案例為準

{
    "FileVersion" :3,
    "Version" :1,
    "VersionName" :"1.0",
    "FriendlyName" :"UObject Example Plugin",
    "Description" :"An example of a plugin which declares its own UObject type.This can be used as a starting point when creating your own plugin.",
    "Category" :"Examples",
    "CreatedBy" :"Epic Games, Inc.",
    "CreatedByURL" :"http://epicgames.com",
    "DocsURL" :"",
    "MarketplaceURL" :"",
    "SupportURL" :"",
    "EnabledByDefault" : true,
    "CanContainContent" : false,
    "IsBetaVersion" : false,
    "Installed" : false,
    "Modules" :
    [
        {
            "Name" :"UObjectPlugin",
            "Type" :"Developer",
            "LoadingPhase" :"Default"
        }
    ]
}

?四、案例分析Editor Standalone Window

? 創(chuàng)建一個Editor Standalone Window插件,命名為:MyEditorStandaloneWindow

【虛幻引擎】UE4/UE5插件

創(chuàng)建成功之后VS會出現(xiàn)Plugins

【虛幻引擎】UE4/UE5插件?出現(xiàn)三個cpp文件

MyEditorStandaloneWindow:主函數(shù)所有的主要邏輯都是寫在這里,包含了注冊命令,布局分布,按鈕點擊事件等。

【虛幻引擎】UE4/UE5插件

MyEditorStandaloneWindowCommand:聲明一些命令變量,注冊函數(shù)等。

【虛幻引擎】UE4/UE5插件

MyEditorStandaloneWindowStyle:插件的樣式風(fēng)格。

【虛幻引擎】UE4/UE5插件

創(chuàng)建好之后我們會在編輯器工具欄中看到我們的插件

【虛幻引擎】UE4/UE5插件

?點擊這個按鈕觸發(fā)的事件通過MapAction創(chuàng)建代理函數(shù)綁定,執(zhí)行

【虛幻引擎】UE4/UE5插件

?創(chuàng)建獨立窗口

void FMyEditorStandaloneWindowModule::PluginButtonClicked()
{
	FGlobalTabmanager::Get()->TryInvokeTab(MyEditorStandaloneWindowTabName);
}

?內(nèi)容的注冊通過FGlobalTabmanager::Get()->RegisterNomadTabSpawner

FGlobalTabmanager::Get()->RegisterNomadTabSpawner(MyEditorStandaloneWindowTabName, FOnSpawnTab::CreateRaw(this, &FMyEditorStandaloneWindowModule::OnSpawnPluginTab))
		.SetDisplayName(LOCTEXT("FMyEditorStandaloneWindowTabTitle", "MyEditorStandaloneWindow"))
		.SetMenuType(ETabSpawnerMenuType::Hidden);

【虛幻引擎】UE4/UE5插件

他本質(zhì)上就是一個SDockTab,返回的是一個TSharedRef<SDockTab>的引用,

TSharedRef<SDockTab> FMyEditorStandaloneWindowModule::OnSpawnPluginTab(const FSpawnTabArgs& SpawnTabArgs)
{
	FText WidgetText = FText::Format(
		LOCTEXT("WindowWidgetText", "Add code to {0} in {1} to override this window's contents"),
		FText::FromString(TEXT("FMyEditorStandaloneWindowModule::OnSpawnPluginTab")),
		FText::FromString(TEXT("MyEditorStandaloneWindow.cpp"))
		);

	return SNew(SDockTab)
		.TabRole(ETabRole::NomadTab)
		[
			// Put your tab content here!
			SNew(SBox)
			.HAlign(HAlign_Center)
			.VAlign(VAlign_Center)
			[
				SNew(STextBlock)
				.Text(WidgetText)
			]
		];
}

五、自定義插件內(nèi)容?

首先打開UI擴展點

【虛幻引擎】UE4/UE5插件

【虛幻引擎】UE4/UE5插件

這些綠色的擴展點主要是用于菜單按鈕和工具按鈕的排序的,添加一個綠色的擴展點統(tǒng)管N個菜單按鈕,如果你可以自定義自己的UI擴展點,并將自己的擴展點下的菜單按鈕安插在某個擴展點之后。也就是UI擴展點是用于布局菜單欄和工具欄的順序的。

第一步:首先加載模塊

//首先加載模塊FExtend最后都在FLevelEditorModule中管理
	FLevelEditorModule& LevelEditorModule = FModuleManager::LoadModuleChecked<FLevelEditorModule>("LevelEditor");

第二步:創(chuàng)建對象

{
		TSharedPtr<FExtender> MenuExtender = MakeShareable(new FExtender());
		MenuExtender->AddMenuExtension("WindowLayout", EExtensionHook::After, PluginCommands, FMenuExtensionDelegate::CreateRaw(this, &FMyEditorStandaloneWindowModule::AddMenuExtension));

		LevelEditorModule.GetMenuExtensibilityManager()->AddExtender(MenuExtender);
	}
	{
		TSharedPtr<FExtender> ToolbarExtender = MakeShareable(new FExtender);
		ToolbarExtender->AddToolBarExtension("Settings", EExtensionHook::After, PluginCommands, FToolBarExtensionDelegate::CreateRaw(this, &FMyEditorStandaloneWindowModule::AddToolbarExtension));

		LevelEditorModule.GetToolBarExtensibilityManager()->AddExtender(ToolbarExtender);

	}

?第三步:注冊綁定對象事件

FGlobalTabmanager::Get()->RegisterNomadTabSpawner(MyEditorStandaloneWindowTabName, FOnSpawnTab::CreateRaw(this, &FMyEditorStandaloneWindowModule::OnSpawnPluginTab))
		.SetDisplayName(LOCTEXT("FMyEditorStandaloneWindowTabTitle", "MyTestWindow"))
		.SetMenuType(ETabSpawnerMenuType::Hidden);
	FGlobalTabmanager::Get()->RegisterNomadTabSpawner("MyWindow1", FOnSpawnTab::CreateRaw(this, &FMyEditorStandaloneWindowModule::SpawnCustomTab))
		.SetDisplayName(LOCTEXT("FMyEditorStandaloneWindowTabTitle", "MyWindow1"))
		.SetMenuType(ETabSpawnerMenuType::Hidden);
	FGlobalTabmanager::Get()->RegisterNomadTabSpawner("MyWindow2", FOnSpawnTab::CreateRaw(this, &FMyEditorStandaloneWindowModule::SpawnCustomTab))
		.SetDisplayName(LOCTEXT("FMyEditorStandaloneWindowTabTitle", "MyWindow2"))
		.SetMenuType(ETabSpawnerMenuType::Hidden);

第四步:FTabManager重新布局

const TSharedRef<SDockTab> NomadTab = SNew(SDockTab)
		.TabRole(ETabRole::NomadTab);
	if (!MyWindowTabManager.IsValid())
	{
		MyWindowTabManager = FGlobalTabmanager::Get()->NewTabManager(NomadTab);
	}
	if (!MyWindowLayout.IsValid())
	{
		MyWindowLayout = FTabManager::NewLayout("TestLayoutWindow")
			->AddArea
			(
				FTabManager::NewPrimaryArea()
				->SetOrientation(Orient_Vertical)
				->Split
				(
					FTabManager::NewStack()
					->SetSizeCoefficient(.5f)
					->AddTab("MyWindow1", ETabState::OpenedTab)
				)
				->Split
				(
					FTabManager::NewStack()
					->SetSizeCoefficient(.5f)
					->AddTab("MyWindow2", ETabState::OpenedTab)
				)
			);
		
	}
	
	TSharedRef<SWidget> TabContents = MyWindowTabManager->RestoreFrom(MyWindowLayout.ToSharedRef(), TSharedPtr<SWindow>()).ToSharedRef();
	NomadTab->SetContent(TabContents);

?效果如下:

【虛幻引擎】UE4/UE5插件

?完整代碼附上:

MyEditorStandaloneWindow.h文件

// Copyright Epic Games, Inc. All Rights Reserved.

#pragma once

#include "CoreMinimal.h"
#include "Modules/ModuleManager.h"

class FToolBarBuilder;
class FMenuBuilder;

class FMyEditorStandaloneWindowModule : public IModuleInterface
{
public:

	/** IModuleInterface implementation */
	virtual void StartupModule() override;
	virtual void ShutdownModule() override;
	
	/** This function will be bound to Command (by default it will bring up plugin window) */
	void PluginButtonClicked();
	
private:

	void RegisterMenus();

	TSharedRef<class SDockTab> OnSpawnPluginTab(const class FSpawnTabArgs& SpawnTabArgs);

private:
	TSharedPtr<class FUICommandList> PluginCommands;


	void AddMenuExtension(FMenuBuilder& Builder);
	void AddToolbarExtension(FToolBarBuilder& Builder);
	TSharedRef<SDockTab> SpawnCustomTab(const FSpawnTabArgs& Arg);
	TSharedPtr<FTabManager> MyWindowTabManager;
	TSharedPtr<FTabManager::FLayout> MyWindowLayout;

};

MyEditorStandaloneWindow.cpp文件文章來源地址http://www.zghlxwxcb.cn/news/detail-449427.html

// Copyright Epic Games, Inc. All Rights Reserved.

#include "MyEditorStandaloneWindow.h"
#include "MyEditorStandaloneWindowStyle.h"
#include "MyEditorStandaloneWindowCommands.h"
#include "LevelEditor.h"
#include "Widgets/Docking/SDockTab.h"
#include "Widgets/Layout/SBox.h"
#include "Widgets/Text/STextBlock.h"
#include "ToolMenus.h"

static const FName MyEditorStandaloneWindowTabName("MyEditorStandaloneWindow");

#define LOCTEXT_NAMESPACE "FMyEditorStandaloneWindowModule"

void FMyEditorStandaloneWindowModule::StartupModule()
{
	// This code will execute after your module is loaded into memory; the exact timing is specified in the .uplugin file per-module
	
	FMyEditorStandaloneWindowStyle::Initialize();
	FMyEditorStandaloneWindowStyle::ReloadTextures();

	FMyEditorStandaloneWindowCommands::Register();
	
	PluginCommands = MakeShareable(new FUICommandList);

	PluginCommands->MapAction(
		FMyEditorStandaloneWindowCommands::Get().OpenPluginWindow,
		FExecuteAction::CreateRaw(this, &FMyEditorStandaloneWindowModule::PluginButtonClicked),
		FCanExecuteAction());

	//UToolMenus::RegisterStartupCallback(FSimpleMulticastDelegate::FDelegate::CreateRaw(this, &FMyEditorStandaloneWindowModule::RegisterMenus));
	
	//首先加載模塊FExtend最后都在FLevelEditorModule中管理
	FLevelEditorModule& LevelEditorModule = FModuleManager::LoadModuleChecked<FLevelEditorModule>("LevelEditor");
	{
		TSharedPtr<FExtender> MenuExtender = MakeShareable(new FExtender());
		MenuExtender->AddMenuExtension("WindowLayout", EExtensionHook::After, PluginCommands, FMenuExtensionDelegate::CreateRaw(this, &FMyEditorStandaloneWindowModule::AddMenuExtension));

		LevelEditorModule.GetMenuExtensibilityManager()->AddExtender(MenuExtender);
	}
	{
		TSharedPtr<FExtender> ToolbarExtender = MakeShareable(new FExtender);
		ToolbarExtender->AddToolBarExtension("Settings", EExtensionHook::After, PluginCommands, FToolBarExtensionDelegate::CreateRaw(this, &FMyEditorStandaloneWindowModule::AddToolbarExtension));

		LevelEditorModule.GetToolBarExtensibilityManager()->AddExtender(ToolbarExtender);

	}
	FGlobalTabmanager::Get()->RegisterNomadTabSpawner(MyEditorStandaloneWindowTabName, FOnSpawnTab::CreateRaw(this, &FMyEditorStandaloneWindowModule::OnSpawnPluginTab))
		.SetDisplayName(LOCTEXT("FMyEditorStandaloneWindowTabTitle", "MyTestWindow"))
		.SetMenuType(ETabSpawnerMenuType::Hidden);
	FGlobalTabmanager::Get()->RegisterNomadTabSpawner("MyWindow1", FOnSpawnTab::CreateRaw(this, &FMyEditorStandaloneWindowModule::SpawnCustomTab))
		.SetDisplayName(LOCTEXT("FMyEditorStandaloneWindowTabTitle", "MyWindow1"))
		.SetMenuType(ETabSpawnerMenuType::Hidden);
	FGlobalTabmanager::Get()->RegisterNomadTabSpawner("MyWindow2", FOnSpawnTab::CreateRaw(this, &FMyEditorStandaloneWindowModule::SpawnCustomTab))
		.SetDisplayName(LOCTEXT("FMyEditorStandaloneWindowTabTitle", "MyWindow2"))
		.SetMenuType(ETabSpawnerMenuType::Hidden);
	
}

void FMyEditorStandaloneWindowModule::ShutdownModule()
{
	// This function may be called during shutdown to clean up your module.  For modules that support dynamic reloading,
	// we call this function before unloading the module.

	UToolMenus::UnRegisterStartupCallback(this);

	UToolMenus::UnregisterOwner(this);

	FMyEditorStandaloneWindowStyle::Shutdown();

	FMyEditorStandaloneWindowCommands::Unregister();

	FGlobalTabmanager::Get()->UnregisterNomadTabSpawner(MyEditorStandaloneWindowTabName);
}

TSharedRef<SDockTab> FMyEditorStandaloneWindowModule::OnSpawnPluginTab(const FSpawnTabArgs& SpawnTabArgs)
{
	/*FText WidgetText = FText::Format(
		LOCTEXT("WindowWidgetText", "Add code to {0} in {1} to override this window's contents"),
		FText::FromString(TEXT("FMyEditorStandaloneWindowModule::OnSpawnPluginTab")),
		FText::FromString(TEXT("MyEditorStandaloneWindow.cpp"))
		);*/

	//return SNew(SDockTab)
	//	.TabRole(ETabRole::NomadTab)
	//	[
	//		// Put your tab content here!
	//		SNew(SBox)
	//		.HAlign(HAlign_Center)
	//		.VAlign(VAlign_Center)
	//		[
	//			SNew(STextBlock)
	//			.Text(WidgetText)
	//		]
	//	];
	const TSharedRef<SDockTab> NomadTab = SNew(SDockTab)
		.TabRole(ETabRole::NomadTab);
	if (!MyWindowTabManager.IsValid())
	{
		MyWindowTabManager = FGlobalTabmanager::Get()->NewTabManager(NomadTab);
	}
	if (!MyWindowLayout.IsValid())
	{
		MyWindowLayout = FTabManager::NewLayout("TestLayoutWindow")
			->AddArea
			(
				FTabManager::NewPrimaryArea()
				->SetOrientation(Orient_Vertical)
				->Split
				(
					FTabManager::NewStack()
					->SetSizeCoefficient(.5f)
					->AddTab("MyWindow1", ETabState::OpenedTab)
				)
				->Split
				(
					FTabManager::NewStack()
					->SetSizeCoefficient(.5f)
					->AddTab("MyWindow2", ETabState::OpenedTab)
				)
			);
		
	}
	
	TSharedRef<SWidget> TabContents = MyWindowTabManager->RestoreFrom(MyWindowLayout.ToSharedRef(), TSharedPtr<SWindow>()).ToSharedRef();
	NomadTab->SetContent(TabContents);
	return NomadTab;
}

void FMyEditorStandaloneWindowModule::AddMenuExtension(FMenuBuilder& Builder)
{
	Builder.AddMenuEntry(FMyEditorStandaloneWindowCommands::Get().OpenPluginWindow);
}

void FMyEditorStandaloneWindowModule::AddToolbarExtension(FToolBarBuilder& Builder)
{
	Builder.AddToolBarButton(FMyEditorStandaloneWindowCommands::Get().OpenPluginWindow);
}

TSharedRef<SDockTab> FMyEditorStandaloneWindowModule::SpawnCustomTab(const FSpawnTabArgs& Arg)
{

	return SNew(SDockTab);
}

void FMyEditorStandaloneWindowModule::PluginButtonClicked()
{
	FGlobalTabmanager::Get()->TryInvokeTab(MyEditorStandaloneWindowTabName);
}

void FMyEditorStandaloneWindowModule::RegisterMenus()
{
	// Owner will be used for cleanup in call to UToolMenus::UnregisterOwner
	FToolMenuOwnerScoped OwnerScoped(this);

	{
		UToolMenu* Menu = UToolMenus::Get()->ExtendMenu("LevelEditor.MainMenu.Window");
		{
			FToolMenuSection& Section = Menu->FindOrAddSection("WindowLayout");
			Section.AddMenuEntryWithCommandList(FMyEditorStandaloneWindowCommands::Get().OpenPluginWindow, PluginCommands);
		}
	}

	{
		UToolMenu* ToolbarMenu = UToolMenus::Get()->ExtendMenu("LevelEditor.LevelEditorToolBar");
		{
			FToolMenuSection& Section = ToolbarMenu->FindOrAddSection("Settings");
			{
				FToolMenuEntry& Entry = Section.AddEntry(FToolMenuEntry::InitToolBarButton(FMyEditorStandaloneWindowCommands::Get().OpenPluginWindow));
				Entry.SetCommandList(PluginCommands);
			}
		}
	}
}

#undef LOCTEXT_NAMESPACE
	
IMPLEMENT_MODULE(FMyEditorStandaloneWindowModule, MyEditorStandaloneWindow)

到了這里,關(guān)于【虛幻引擎】UE4/UE5插件的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【虛幻引擎】UE4/UE5 pak掛載

    【虛幻引擎】UE4/UE5 pak掛載

    ?找到:D:UEUE_4.27EngineBinariesWin64, ?WindowS+R打開CMD命令 運行UnrealPak,運行結(jié)果如下 ? ? ?注意如果想要加載Pak內(nèi)資源,那么這些資源必須是經(jīng)過Cook的。如果打包的是未Cook的資源,那么即使Pak掛載成功,也不可能會成功加載Pak內(nèi)資源。 ?Cook好之后,存儲的路徑在你的I:DBJ

    2024年02月10日
    瀏覽(108)
  • 【虛幻引擎UE】UE4/UE5 新人科普向

    【虛幻引擎UE】UE4/UE5 新人科普向

    Unreal Engine是當(dāng)前最為流行的游戲引擎之一,具有豐富的游戲開發(fā)功能和強大的游戲引擎渲染能力。 UE5官方文檔:UE5官方文檔非常詳細,介紹了UE5的各個功能和應(yīng)用,適合入門學(xué)習(xí)和深入探究。鏈接:https://docs.unrealengine.com/5.1/zh-CN/ UE5中文社區(qū):該社區(qū)聚集了大量的UE5開發(fā)者,

    2024年02月09日
    瀏覽(119)
  • 【虛幻引擎】UE4/UE5科大訊飛文字合成語音

    【虛幻引擎】UE4/UE5科大訊飛文字合成語音

    B站視頻鏈接:https://space.bilibili.com/449549424?spm_id_from=333.1007.0.0 ? 第一步:首先進入訊飛開放平臺注冊一個賬號,然后創(chuàng)建一個 創(chuàng)建一個應(yīng)用,命名按照你自己的想法來,會產(chǎn)生一個APPID,具體參考UE4如何接入科大訊飛的語音識別_ue4 科大訊飛的語音識別_飛起的豬的博客-CSDN博

    2024年02月13日
    瀏覽(101)
  • 【虛幻引擎】UE4/UE5鼠標點擊事件實現(xiàn)物體移動

    【虛幻引擎】UE4/UE5鼠標點擊事件實現(xiàn)物體移動

    ?在UE4/UE5中,引擎有它自己的一套框架體系,虛幻就是基于這一個框架體系來實現(xiàn)的。其中就有PlayerController(玩家控制器),玩家控制器中就有對鼠標的一系列設(shè)置,包括顯示鼠標,允許點擊事件等。 ?1.創(chuàng)建PlayerController,命名為MyPlayerController 2.打開MyPlayerController,勾選參數(shù)

    2024年02月10日
    瀏覽(317)
  • 【虛幻引擎】UE4/UE5數(shù)字孿生與前端Web頁面匹配

    【虛幻引擎】UE4/UE5數(shù)字孿生與前端Web頁面匹配

    ? ? ? ? 數(shù)字孿生是一種多維動態(tài)的數(shù)字映射,可大幅提高效能。數(shù)字孿生是充分利用物理模型、傳感器更新、運行歷史等數(shù)據(jù),集成多學(xué)科、多物理量、多尺度、多概率的仿真過程,在虛擬空間中完成對現(xiàn)實體的復(fù)制和映射,從而反映物理實體的全生命周期過程。數(shù)字孿生

    2024年02月03日
    瀏覽(102)
  • UE4,UE5虛幻引擎,Command Console控制臺命令,參數(shù)集

    UE4,UE5虛幻引擎,Command Console控制臺命令,參數(shù)集

    1、Command Console控制臺命令,虛幻官方文檔 https://docs.unrealengine.com/5.0/zh-CN/unreal-editor-interface/ 2、在cmd控制臺 help 并按 Enter 3、自動跳轉(zhuǎn)到網(wǎng)頁,在網(wǎng)頁中,可以查找所有的命令行參數(shù)。

    2024年02月15日
    瀏覽(33)
  • 解決UE4 UE5 虛幻引擎 關(guān)卡內(nèi)或sequence 播放多個視頻卡頓問題

    解決UE4 UE5 虛幻引擎 關(guān)卡內(nèi)或sequence 播放多個視頻卡頓問題

    在項目設(shè)置中搜索緩存,修改其中的參數(shù)即可解決問題,默認為1G,詳細見圖 經(jīng)測試,單個關(guān)卡內(nèi)使用藍圖或在sequence內(nèi)創(chuàng)建媒體,播放30個mp4視頻或者序列幀分辨率為1080p,可流暢播放,實時幀數(shù)40fps,使用設(shè)備(2080ti,內(nèi)存64G)

    2024年02月11日
    瀏覽(104)
  • UE4/UE5 虛幻引擎,Pawn的碰撞,怎么防止Pawn移動的時候穿透物體。

    UE4/UE5 虛幻引擎,Pawn的碰撞,怎么防止Pawn移動的時候穿透物體。

    前言:在UE項目開發(fā)中,有些我們需要自己新建一個Pawn來控制視角,但是如果我們沒有設(shè)置Pawn的碰撞,那么Pawn在移動的過程中,很容易穿到Actor里面。而有的時候我們并不需要Pawn穿過物體,就必須要給Pawn增加碰撞。 1、新建一個Pawn類。 2、 添加FloatingPawnMovement(必須添加這

    2023年04月12日
    瀏覽(210)
  • 【虛幻引擎UE】UE4/UE5 基于2D屏幕坐標獲取場景3D坐標 射線檢測(藍圖/C++)

    【虛幻引擎UE】UE4/UE5 基于2D屏幕坐標獲取場景3D坐標 射線檢測(藍圖/C++)

    射線檢測(Ray Casting) 是一種計算機圖形和計算機圖形學(xué)中的基本技術(shù),用于檢測光線或射線是否與三維場景中的物體相交,以確定相交點的位置和其他相關(guān)信息。射線檢測通常用于實現(xiàn)各種交互功能、渲染效果和物理模擬,包括但不限于鼠標拾取、光線追蹤、碰撞檢測和物

    2024年02月07日
    瀏覽(183)
  • UE4,UE5虛幻引擎,怎么在藍圖中獲取FPS幀速率,顯示在UMG(UI)上

    UE4,UE5虛幻引擎,怎么在藍圖中獲取FPS幀速率,顯示在UMG(UI)上

    前言:在UE中可以使用命令行比如stat fps顯示幀率,但只是顯示在界面,假設(shè)我們要在藍圖中獲取FPS幀率,并且顯示在我們創(chuàng)建的UMG控件藍圖。這種stat fps命令行的形式就不行了,因為它只會固定顯示在右上角的位置。 1、在Tick中獲取DeltaSeconds,用1除InDeltaTime,得到幀速率。

    2024年02月11日
    瀏覽(63)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包