【UE4】编辑器开发(三)资源类型拓展

【UE4】编辑器开发(六)自定义预览视口 文章目录 第三章第5节 3分38秒 FEditorViewportClient -FPreviewScene SEditorViewport 创建两个类,分别继承FEditorViewportClient和SEditorViewport FEditorViewportClient子类 public: FCustAssetViewportClient(FPreviewScene& InPr... 阅读详情

一、创建一个自定义新资源

首先创建两个模块:NewAssets和AssetEditor,分别用于保存资源类和编辑器模块相关的类。
因为NewAssets模块在项目打包时需要打包进项目程序,而AssetEditor则不需要,所以AssetEditor的模块类型是Editor。因为我们需要用到UE4编辑器模块,所以需要包含UnrealEd模块。

在NewAssets模块中创建一个继承UObject的类,类名为UCustAsset。这个类就是我们定义的新资源类型。

UCLASS(Blueprintable, BlueprintType)
class NEWASSETS_API UCustAsset : public UObject
{
	GENERATED_BODY()
	
};

在AssetEditor创建一个继承UFactory的类,类名为UCustAssetFactory。这个类就是允许在UE4中创建自定义资源编辑器的工厂类,可以理解为这个类定义了资源创建的方式。首先,必须实现FactoryCreateNew这个父类抽象方法,否则资源会创建失败!

UNewAssetFactory::UNewAssetFactory()
{
	bCreateNew = true;				//当bCreateNew或者ShouldShowInNewMenu方法返回true时,该资源可以通过资源菜单创建
	bEditAfterNew = true;			//源码注解是创建资源后,打开关联编辑器,但没有发现有什么实际作用,后期发现作用后再补充	
	SupportedClass = UNewAsset::StaticClass();		//该资源对应或支持的对象类
	//这里注意一下,就是UE4自己实现的一些工厂类中,SupportedClass的类是资源蓝图类,而ParentClass(的子类)才是资源实例类。一个是资源蓝图类,一个是真正游戏中实例化的类。注意区分。
}

//当返回true时,该资源可以通过资源菜单创建。如果没有实现此方法,则会调用CanCreateNew方法来判断是否可以通过菜单创建,CanCreateNew是返回bCreateNew的值。
bool UCustAssetFactory::ShouldShowInNewMenu() const { return true; }	

//返回对象,这里一般返回SupportedClass的实例对象。当创建完资源并确认命名后,该方法将会被执行。
UObject* UNewAssetFactory::FactoryCreateNew(
	UClass* InClass,
	UObject* InParent;
	FName InName,
	EObjectFlags Flags,
	UObject* Context,
	FFeedbackContext* Warn,
	FName CallingContext
)
{
	return NewObject<UNewAsset>(InParent, InClass, InName, Flags | RF_Transactional);
}

创建资源菜单中会出现我们新定义的资源类型:
创建新资源
打开资源后,将会出现一个空(最基本)的资源编辑器窗口:
创建新资源
资源除了通过资源菜单创建,还可以从文件导入,下边几个是对文件导入支持的参数:

参数说明
bEditorImport是否支持通过文件导入资源
Formats支持导入的文件格式,格式为“ext;Description”,ext是扩展名
bText资源将从文本格式的文件导入的还是二进制文件导入的

二、设置新资源在ContentBrowser中的显示

创建两个类,分别继承FAssetTypeActions_Base和FAssetEditorToolkit。

1. 资源缩略图操作

继承FAssetTypeActions_Base的类,名为FCustAssetActions。它主要负责资源图标相关内容,包括显示样式和打开资源编辑器窗口等。下面我们实现一个必要方法,当双击打开资源(编辑器)时,将会执行此方法,并调出资源编辑器窗口。
FCustAssetActions.cpp:

void FCustAssetTypeActions::OpenAssetEditor(const TArray<UObject*>& InObjects, TSharedPtr<IToolkitHost> EditWithinLevelEditor)
{
	//这个ToolkitMode的作用待确认,一般情况都是无效,返回Standalone。
	EToolkitMode::Type Mode = EditWithinLevelEditor.IsValid() ? EToolkitMode::WorldCentric : EToolkitMode::Standalone;
	//变量对象数组,如果拿到我们的资源对象,就执行Toolkit初始化
	for (auto ObjIt = InObjects.CreateConstIterator(); ObjIt; ++ObjIt)
	{
		auto CustAsset = Cast<UCustAsset>(*ObjIt);

		if (CustAsset != nullptr)
		{
			TSharedRef<FCustAssetEditorToolkit> EditorToolkit = MakeShareable(new FCustAssetEditorToolkit());
			EditorToolkit->Initialize(CustAsset, Mode, EditWithinLevelEditor);
		}
	}
}

其它方法:

资源名

virtual FText GetName() const override;
资源名
资源名

资源描述

virtual FText GetAssetDescription(const struct FAssetData& AssetData) const override;
资源描述

资源类型颜色

virtual FColor GetTypeColor() const override;

资源类型颜色和缩略图背景色
资源类型颜色

筛选

virtual bool CanFilter() override;
筛选

资源缩略图图标

virtual TSharedPtr GetThumbnailOverlay(const struct FAssetData& AssetData) const override;
资源缩略图

2. 编辑器布局与设置

另外一个类继承FAssetEditorToolkit,是编辑器的工具集类,负责编辑器的样式、布局等功能。
需要实现的功能有两个RegisterTabSpawners和UnregisterTabSpawners,用于注册和卸载Tab。当然还有几个方法需要覆盖父类抽象方法,可以在父类中找到。

void FCustAssetEditorToolkit::RegisterTabSpawners(const TSharedRef<FTabManager>& InTabManager)
{
	Super::RegisterTabSpawners(InTabManager);

	InTabManager->RegisterTabSpawner(FName("TestTab"), FOnSpawnTab::CreateLambda(
		[&](const FSpawnTabArgs& Args)
	{
		return SNew(SDockTab)
			[
				SNew(STextBlock).Text(LOCTEXT("TestTab", "TestTab"))
			];
	}
	));
	InTabManager->RegisterTabSpawner(FName("CustTab"), FOnSpawnTab::CreateLambda(
	[&](const FSpawnTabArgs& Args)
	{
		return SNew(SDockTab)
			[
				SNew(SImage)
			];
	}
	));
}

void FCustAssetEditorToolkit::UnregisterTabSpawners(const TSharedRef<FTabManager>& InTabManager)
{
	Super::UnregisterTabSpawners(InTabManager);

	InTabManager->UnregisterTabSpawner(FName("CustTab"));
	InTabManager->UnregisterTabSpawner(FName("TestTab"));
}

注册的Tab会出现在菜单栏中,点击就可以打开。
Tab
当我们注册了Tab,还有一件事要做,就是设置我们的编辑器布局。这一方法在打开编辑器时可以调用。

void FCustAssetEditorToolkit::Initialize(UCustAsset* InAsset, const EToolkitMode::Type InMode, const TSharedPtr<IToolkitHost>& InToolkitHost)
{
	CustAsset = InAsset;

	const TSharedRef<FTabManager::FLayout> StandaloneCustLayout = FTabManager::NewLayout("StandaloneCustLayout_Layout")
			->AddArea
			(
				FTabManager::NewPrimaryArea()
				->Split(FTabManager::NewStack()->AddTab(FName("TestTab"), ETabState::OpenedTab))
			)
		);

	InitAssetEditor(InMode, InToolkitHost, CustAssetEditorToolkit::AppID, StandaloneCustLayout, true, true, InAsset);
	RegenerateMenusAndToolbars();
}

3. 注册Action

最后,还要把Action类注册一下。

void FAssetEditorModule::StartupModule()
{
	IAssetTools& AssetTools = FModuleManager::LoadModuleChecked<FAssetToolsModule>("AssetTools").Get();
	TSharedRef<IAssetTypeActions> CustAssetAction = MakeShareable(new FCustAssetTypeActions());
	RegisteredAssetTypeActions.Add(CustAssetAction);
	AssetTools.RegisterAssetTypeActions(CustAssetAction);
}

void FAssetEditorModule::ShutdownModule()
{
	FAssetToolsModule* AssetToolsModule = FModuleManager::GetModulePtr<FAssetToolsModule>("AssetTools");
	if (AssetToolsModule != nullptr)
	{
		IAssetTools& AssetTools = AssetToolsModule->Get();
		
		for (auto Action : RegisteredAssetTypeActions)
		{
			AssetTools.UnregisterAssetTypeActions(Action);
		}
	}
}

下边是初步设置的编辑器窗口样式。更多设置和说明在后续的文章中再详细解释,先初步了解大概流程。
编辑器窗口

参考文章:

UE4 创建自定义资源,导入与重新导入自定义资源
UE4项目记录(十一)自定义资源

Trae AI + UE 5.8 MCP:构建虚幻引擎Vibe Coding开发工作流 随着AI编程逐步走向工程化,开发者开始追求更深度的工具链融合,而不仅限于代码补全或片段生成。MCP(Model Context Protocol)作为一种标准化协议,打通了AI与外部工具间的数据与操作闭环,使得自然语言指令能够直接驱动引擎内部状态。当这一能力结合虚幻引擎(Unreal Engine)的Python脚本与Remote Control接口时,AI便能读取项目资源、创建Actor、触发编译并反馈结果。本文面向UE开发者,从MCP核心模型与Vibe Coding理念出发,演示如何以Trae AI作为 阅读详情

相关推荐

FModel:虚幻引擎UE5资源提取与逆向分析实战指南

虚幻引擎(UE)的资源封装机制(如.pak、.uasset)使项目调试与维护高度依赖源码,而FModel作为一款基于UE反射系统的离线资源查看工具,填补了无源码场景下的关键能力空白。其核心原理是解析UE二进制序列化结构,而非暴力解密或内存注入,因此具备高稳定性与工程安全性。技术价值体现在三类刚需场景:第三方插件黑盒排查、老项目资产抢救、UE底层资源组织学习。支持Texture2D、StaticMesh、Material等主流资源的结构化导出(PNG/JSON/FBX),尤其擅长材质分析与模型反编译类深度审计

weixin_33717117的博客 837

UE4指定一个Asset的编辑器界面

目标 一个Asset指内容浏览器中的一个资源,双击它将打开对应的编辑器。例如:“材质”将对应“材质编辑器”,“蓝图”将对应“蓝图编辑器”。假如一个Asset没有特别定义编辑器,那么双击它会默认打开细节面板以编辑UProperty。如果想要自定义一个Asset的编辑器,则需要: 大大大 大大大 本篇的目标是新建一个插件,在其中创建一个自定义的Asset,然后定义其编辑器界面。 0. 创建插件 用空白为模板创建插件,名字取为TestAssetEditorPlg 1.创建一个Asset 一个Asset,本质

主要记录了工作之余胡乱学习的知识,大部分是入门级别的内容。 主要是为了自己未来有用到时能快速上手,相当于是个备忘录。 当然,也很开心其他人可以从中找到对自己有用的信息。^_^ 5058

UnrealPakViewer:虚幻引擎Pak文件资源查看与提取实战指南

在游戏开发与资源管理中,归档压缩是组织大量资产(如模型、贴图、音频)的核心技术。其原理是通过特定格式将文件索引与数据打包,实现高效存储与分发。这项技术的价值在于优化资源加载速度、保护知识产权并简化部署流程,广泛应用于游戏打包、应用分发等场景。本文聚焦于虚幻引擎的Pak文件格式,深入解析其结构,并详细介绍如何使用UnrealPakViewer这一第三方工具进行资源查看与提取。通过实战操作,你将掌握处理加密Pak文件、分析资源构成以及进行批量提取等关键技能,为游戏性能优化、资源学习与分析提供强大支持。

chuange6363的博客 470

Unity编辑器拓展【编辑器简介】

为什么要写Unity编辑器Unity本身的功能已经很强大了,但是由于某些项目的特殊需求,需要拓展编辑器来提高工作效率,让程序去代替人工进行一些比较繁琐的操作,减少一些出错的可能性,比如我们可以写一些工具来定制更改动画曲线,也可以写工具来一键打包资源,压缩资源,检测资源冗余,统计资源信息等等。拓展编辑器也可以展示一些效果,比如人物模型的碰撞框可视化,地图网格AI的可视化等等,拓展编辑器也可以送入As...

2868

UE5.1_AssetEditorSubsystem&UE4_AssetEditorManager

虚幻引擎不同版本资产编辑器不同?UE4_AssetEditorManager 也并不是可正常使用呢?AssetEditorSubsystem引擎哪个版本替换的?

原在路上的博客。 1140

Asset-Editor:LibGDX 资产编辑器

资产编辑器 LibGDX 资产编辑器

【虚幻引擎】UE4 FTabmanager实现多窗口

UE4/UE5 FTabManaget实现多窗口

qq_43021038的博客 3029

AuroraAssetEditor:Aurora .asset文件的图形编辑器

Aurora资产编辑器 **注意:此项目的最新版本可以从现在开始在这里找到: : ** Aurora .asset文件的图形编辑器 当我发现需要这样做的时候,此工具将添加更多功能,第一个版本仅支持读取/写入Aurora .asset文件 非常感谢MaesterRowen为我解释格式,并制作了AuroraAsset.dll库来处理图像转换(在D3DTexture和Bitmap之间),非常感谢Mattie提供的占位符图像:) 还要感谢gavin_darkglider和felida帮助我测试了这件事:) 感谢RAP7HOR提供的1.1版应用程序中使用的图标!

UE5 UE4 无法保存资产The asset uasset failed to save解决

有时候,开发到一半,突然发现无法保存某些资源,出现The asset uasset failed to save...等提示 The asset '/Game/xxx/xxx/xxx' (xxx.uasset) failed to save. Cancel: Stop saving all assets and return to the editor. Retry: Attempt to ...

Deveuper的博客 2万+

setup time和hold time的计算

内容仅仅为了方便记忆,与原理无关

sddhyl的博客 7813

HFSS入门学习笔记——微带一分四功分器的设计与仿真

功率分配器是将输入信号功率分成相等或不相等的几路功率输出的一种多端口无源微波网络,用于功率分配和功率合成。工程上常用的微带功分器有T型功分器和威尔金森功分器。经典的威尔金森功分器有几个缺点:①、多应用于低频段,高频段时,波长会与隔离电阻的尺寸相比拟,此时需要考虑电阻的分布参数效应;②、大功率应用时,隔离电阻的耗散功率要很大,因此隔离电阻的体积也会比较大。

weixin_42126696的博客 2万+

UModel终极指南:快速解锁虚幻引擎资源的完整教程

UModel作为一款强大的虚幻引擎资源查看器和导出工具,为游戏开发者和爱好者提供了便捷的资源管理解决方案。无论您是UE4开发者还是游戏资源爱好者,这款工具都能帮助您快速访问和分析虚幻引擎中的各类资产。 ## 🎯 什么是UModel工具? UModel是一款专门用于查看和导出虚幻引擎1-4版本资源的开源工具。它能够解析`.uasset`、`.umap`等虚幻引擎特有的文件格式,让您无需启动编辑

gitblog_00268的博客 1229

Hi3516CV610硬件设计避坑指南:从电源模块到DDR布线实战解析

本文深入解析了Hi3516CV610硬件设计中的关键难点与实战技巧。重点剖析了电源架构的选型陷阱与PCB布局要点,详细阐述了DDR3/L高速布线的等长匹配、信号完整性及端接策略,并提供了MIPI接口与时钟电路的隔离设计指南。旨在帮助工程师规避常见设计错误,提升系统稳定性与可靠性。

ooo22的博客 255

虚幻引擎UE4编辑器介绍

今天主要谈谈虚幻引擎编辑器界面 1.类查看器 可从 窗口(Window) > 开发者工具(Developer Tools) > 类查看器(Class Viewer) 选项打开“类查看器(Class Viewer)”。 模式: ![在这里插入图片描述](https://img-blog.csdnimg.cn/2020061220110064.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0

爱片闲串,爱钓鱼,爱中医,爱分享 1739

一文讲透 .claude/ 文件夹:Claude Code 团队配置指南和最佳实践

本文系统梳理了ClaudeCode配置框架,旨在解决实际落地中的常见困惑。文章从五层作用域体系(组织策略、命令行参数、本地覆盖、项目级、用户级)切入,详细解析了CLAUDE.md、rules、skills、agents等核心组件的定位与配合关系。重点强调了"确定性规则"与"概率性建议"的分层设计:权限控制和安全边界应通过settings.json和hooks实现,而工作约定和编码规范适合放在CLAUDE.md。文中提供了可直接套用的最小配置方案,并总结了10大常见踩坑

974

Python驱动COMSOL自动化:从数据生成到DNN代理模型部署全流程解析

本文详细解析了如何利用Python驱动COMSOL实现全流程自动化,从参数化建模、批量仿真数据生成,到训练深度神经网络(DNN)代理模型并部署应用。该方案通过自动化闭环解放工程师生产力,并利用代理模型实现秒级性能预测,极大提升了多物理场仿真优化与设计探索的效率。

weixin_29041767的博客 209

虚幻的UI设计中有关“颜色”的规律总结

利用可见光的不同颜色来区分目标的类型,一直是业界常用的UI技巧,很大程度上能减少字符和图标的使用,让人一目了然。虚幻引擎IDE的UI界面似乎把颜色利用到了极致,在虚幻引擎中至少出现了5个...

全栈空间 2342

Cartographer从安装到实战:手把手教你运行2D/3D建图与定位

本文提供了一份详尽的Cartographer从零安装到实战应用的完整指南。内容涵盖环境准备、依赖编译、源码构建等关键步骤,并手把手指导读者运行2D/3D官方数据集进行建图与定位测试。文章深入解析了参数配置与自定义数据适配方法,帮助开发者快速掌握这一强大的实时同步定位与建图工具,并将其应用于机器人导航与自动驾驶等实际场景。

rice5的博客 949

阿赵UE学习笔记——7、导入资源

继续学习虚幻引擎的使用。这次将会把一个带动作和贴图的钢铁侠模型,导入的UE的项目中。

阿赵的博客 2803

图像增强算法:基于Retinex的图像增强算法

该算法对图像的亮度和颜色进行分离处理,然后通过调整它们的比例来提高图像的质量。滤波后的图像将保留颜色信息,并减少图像中的噪声。接下来,Retinex算法使用一个高通滤波器对原始图像进行滤波处理,以增强图像中的亮度信息。通过使用Retinex增强算法,我们可以有效地提高图像的质量,增强图像中的细节和颜色信息。最后,Retinex算法通过将颜色恢复和亮度调整后的图像进行比例调整,以获得最终的增强图像。Retinex算法是一种常用的图像增强算法,它通过对图像的亮度和颜色进行调整,以提高图像的视觉质量。

XsiJava的博客 435

[深入研究4G/5G/6G专题-31]: 5G NR开机流程5.2 - UE Attach流程(Registeration Request/Accept/Complete)

目录前言:前置条件:第1章 5G NR UE attach流程(从UE log的视角看)1.0 NAS消息解析器1.1 消息交互流程1.2 UE Registeration Request消息(AMF->基站->UE)1.3 AMF Registeration Accept消息(AMF->基站->UE)1.4 UE Register complete消息(UE->基站->AMF)第2章 UE Register...............

文火冰糖(王文兵)的博客 7万+

如何高效解析虚幻引擎Pak文件?2025年超实用的UnrealPakViewer完整指南

UnrealPakViewer是一款免费开源的**虚幻引擎Pak文件解析工具**,专为开发者和游戏爱好者设计,支持查看、搜索和导出UE4/UE5的`.pak`与`.ucas`文件资源。通过直观的图形界面,你可以轻松浏览游戏资产、分析文件结构,甚至处理加密Pak文件,让虚幻引擎资源管理变得前所未有的简单高效! ## ???? 核心功能一览:为什么选择UnrealPakViewer? ### 1️⃣ ...

gitblog_00906的博客 1049

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

UE4自定义资产类型编辑器实现

通过在 Visual Studio 中构建和调试项目并将构建配置设置为“开发编辑器”来重新启动虚幻编辑器,然后导航到顶部菜单栏中的“工具>新建 C++ 类…”。切换到对话框顶部的“All Classes”,然后选择“Object”作为父类。单击“下一步”,将“Class Type”设置为“Public”,输入“NormalDistribution”作为名称,然后从名称输入字段旁边的下拉菜单中选择“AssetTutorialPlugin (Runtime)”作为目标模块。然后点击“创建班级”。

新缸中之脑 3055

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

UAssetGUI终极指南:轻松实现虚幻引擎资源文件的深度编辑与转换

UAssetGUI是一款专为虚幻引擎开发者设计的强大工具,能够实现对UAsset资源文件的底层解析、格式转换和批量处理。无论您是游戏模组制作者、资源分析人员还是需要深度编辑游戏资产的技术人员,这款工具都能为您提供前所未有的便利。 ## 解决游戏资源编辑的痛点难题 虚幻引擎的UAsset文件采用二进制格式存储,直接编辑极其困难。传统方法需要依赖专业的编辑器或复杂的逆向工程,而UAssetGUI的

gitblog_00655的博客 685

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

虚幻引擎资源逆向分析:FModel高级使用指南

FModel是一款基于CUE4Parse核心解析库的虚幻引擎档案浏览器,专门用于UE4和UE5游戏资源的深度分析和逆向工程。作为一款开源工具,它提供了强大的资源预览、格式转换和数据结构解析能力,帮助开发者和技术爱好者深入理解游戏内部工作机制。 ## 技术背景与逆向分析需求 在游戏开发和逆向工程领域,理解游戏资源的内部结构至关重要。虚幻引擎游戏通常使用复杂的打包格式存储纹理、模型、音频和配置数据

gitblog_00317的博客 171

Pak文件解析工具3大突破点:虚幻引擎资源可视化方案

在虚幻引擎开发流程中,Pak文件作为资源打包的核心容器,其管理效率直接影响项目交付质量。然而传统工具在处理Pak文件时普遍存在资源结构不透明、依赖关系梳理困难、优化方向不明确等问题,导致开发者在资源调试和性能优化过程中耗费大量无效时间。本文将从问题发现到价值验证,全面测评UnrealPakViewer这款专为虚幻引擎设计的Pak文件解析工具,展示其如何通过可视化方案解决虚幻引擎资源管理痛点。 #

gitblog_00072的博客 470
上一篇: 【UE4】编辑器开发(二)ContentBrowser拓展
下一篇: 【UE4】编辑器开发(四)属性面板(Details)拓展
Im 胡嘿嘿
博客等级 码龄10年 148粉丝 38原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值