【虚幻引擎】UE4/UE5插件

一、插件分类

插件分为七大类

  • Blank:空白插件,可以从头开始自己定义想要的插件风格和内容,用此模板创建的插件不会有注册或者菜单输入。
  • BlueprintLibrary:创建一个含有蓝图函数库的插件,此模板函数都是静态全局函数,可以在蓝图中直接调用。
  • ContentOnly:创建一个只包含内容的空白文件
  • Editor Toolbar Button:创建关卡编辑器的工具栏中的按钮插件,首先在创建的点击事件中实现一些内容
  • Editor Standalone Window:创建关卡编辑器的工具栏中的按钮插件,点击按钮可调出一个空白选项独立卡窗口
  • Editor Mode:创建一个含有编辑器模式的插件
  • Third Party Library:创建一个已包含第三方库的插件

二、插件模块 

插件可含有任意数量的模块源目录。多数插件仅有一个模块(但可创建多个模块,例如插件包含纯编辑器功能时),及游戏期间要运行的其他代码。

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

在模块的 Source 目录(或其子目录)内,插件可在标头文件中声明新反映的类型(UCLASSUSTRUCT 等)。引擎的构建系统将检测此类文件,并按需要生成代码支持新类型。需遵守C++模块中使用 Uobjects 时的一般规则,例如在模块的源文件中包含生成的标头文件和模块 generated.inl 文件。

UE4支持共生模块和插件。通过在自身.uproject文件中启用插件,项目模块可依赖插件。类似地,通过在自身.uplugin文件中启用其他插件,插件可表明依赖性。但其中有一项重要限制:插件和模块将拆分为若干层级,仅能依赖同一级或更高级的其他插件或模块。例如,项目模块可依赖引擎模块,但引擎模块无法依赖项目模块。这是因为引擎(及其所有插件和模块)的级别高于项目,须能在无项目的情况下编译。

三、引擎插件和项目插件

虚幻引擎4的 Engine 目录下包含部分内置插件。引擎插件和项目插件类似,但可用于所有项目。此类插件通常由引擎和工具程序员创建,目的在于提供可在多个项目中使用并能在单一位置维护的基线功能。利用此功能,用户可直接添加或覆盖引擎功能,而无需修改引擎代码。

项目插件位于项目目录的 Plugins 子文件夹下,将在引擎或编辑器启动时被探测和加载。如插件包含具有 Source 文件夹(和 .Build.cs 文件)的模块,插件代码将被自动添加到生成的C++项目文件,以便在开发项目时开发插件。编译项目时,有可用源的插件都被作为游戏依赖项进行编译。项目生成器将忽略无 Source 文件夹的插件,其不会出现在C++项目文件中,但若存在二进制文件,启动时仍将加载此类插件。

插件的描述,描述的文件是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

  创建一个Editor Standalone Window插件,命名为:MyEditorStandaloneWindow

创建成功之后VS会出现Plugins

 出现三个cpp文件

MyEditorStandaloneWindow:主函数所有的主要逻辑都是写在这里,包含了注册命令,布局分布,按钮点击事件等。

MyEditorStandaloneWindowCommand:声明一些命令变量,注册函数等。

MyEditorStandaloneWindowStyle:插件的样式风格。

创建好之后我们会在编辑器工具栏中看到我们的插件

 点击这个按钮触发的事件通过MapAction创建代理函数绑定,执行

 创建独立窗口

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

 内容的注册通过FGlobalTabmanager::Get()->RegisterNomadTabSpawner

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

他本质上就是一个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)]];
}

五、自定义插件内容 

首先打开UI扩展点

这些绿色的扩展点主要是用于菜单按钮和工具按钮的排序的,添加一个绿色的扩展点统管N个菜单按钮,如果你可以自定义自己的UI扩展点,并将自己的扩展点下的菜单按钮安插在某个扩展点之后。也就是UI扩展点是用于布局菜单栏和工具栏的顺序的。

第一步:首先加载模块

//首先加载模块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);

第四步: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);

 效果如下:

 完整代码附上:

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文件

// 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-moduleFMyEditorStandaloneWindowStyle::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::UnregisterOwnerFToolMenuOwnerScoped 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_NAMESPACEIMPLEMENT_MODULE(FMyEditorStandaloneWindowModule, MyEditorStandaloneWindow)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/17320.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

虚幻引擎5 C++游戏开发教程

虚幻引擎5 C游戏开发教程 与 Epic Games 合作创建。从基础开始学习 C&#xff0c;同时在 Unreal 中制作您的前 5 个视频游戏 课程英文名&#xff1a;Unreal Engine 5 C Developer Learn C & Make Video Games 此视频教程共5.5小时&#xff0c;中英双语字幕&#xff0c;画…

【虚幻引擎】带你了解UE4

行业前景 越来越多的开发者&#xff0c;开发商投入到UE4中&#xff0c;简单来说就是使用UE4的人越来越多&#xff0c;许多独立游戏&#xff0c;大型的游戏&#xff0c;大公司例如“腾讯&#xff0c;网易”都在使用UE4来开发&#xff0c;加上UE4对开发者来说使用完全免费&#…

【虚幻引擎】UE4/UE5 后期处理盒子(PostProcessVolume)

B站教学链接&#xff1a;https://space.bilibili.com/449549424?spm_id_from333.1007.0.0 一、简介 PostProcessVolume&#xff08;后期处理盒子&#xff09;&#xff1a;UE4非常强大的一个后期处理&#xff0c;可以调节画面的色彩&#xff0c;相机的景深&#xff0c;视频的输…

芒格-“永远不要有受害者心态”

我们应该以什么样的心态去对待我们的生活&#xff1f; 我不是受害者&#xff0c;我是幸存者。(ps :芒格深处利益之中&#xff0c;手握财富&#xff0c;应该见到过很多阴暗的人性。 他 可能也有魔鬼的一面)受害者的感觉&#xff1a;我认为这是一种反其道而行之的人类思考方式&…

巴菲特+查理芒格+投资理论+经典语录+给韭菜的启示

巴菲特查理芒格投资理论经典语录给韭菜的启示 巴菲特&#xff1a; 一个老年人在零售店里发现老婆丢了&#xff0c;恰好遇到一个年轻人也在找自己的另一半&#xff0c;老人问&#xff1a;你妻子长什么样&#xff1f;年轻人答&#xff1a;“她可真是个金发美人啊&#xff0c;身材…

git多账号切换

参考文档&#xff1a; https://blog.csdn.net/lqlqlq007/article/details/80613272 https://blog.csdn.net/qq_36602939/article/details/79794686 1.ssh-keygen -t rsa -C "你的邮箱" 回车&#xff0c;查看rsa目录&#xff0c;先进入该目录&#xff0c;将里面已…

git 用户的切换

需求场景: 某天已入职了 发现电脑上已经存在一个git的账号 这时候你需要登录你的 也就是账号切换 再比如 你的git换号了 养了个小的git号 或是从新建号了 但是电脑还存在老的号怎么办 就是需要账号的切换 目的就是登上我的账号 拉取我的私有仓库 第一步 准备 查看当前的git用配…

Git切换账号

用了新的电脑需要切换git到自己的账户 winR 输入 CMD 后运行以下命令 查看用户名&#xff1a; git config user.name查看用户邮箱&#xff1a; git config user.email修改用户名和邮箱&#xff0c;user.name/email后面千万记得加空格 git config --global user.name "…

拥抱生产力变革!GPT4接入Office,动嘴就能Excel到PPT!

梦晨 丰色 发自 凹非寺 量子位 | 公众号 QbitAI 一觉醒来&#xff0c;工作的方式被彻底改变。 微软把AI神器GPT-4全面接入Office&#xff0c;这下ChatPPT、ChatWord、ChatExcel一家整整齐齐。 CEO纳德拉在发布会上直接放话&#xff1a;今天&#xff0c;进入人机交互的新时代…

零代码编程:用ChatGPT合并多个表格中的内容到一个excel中

电脑有几百个excel表格&#xff1a; 表格里面表头是一样的&#xff0c;但是数据不一样 现在&#xff0c;想把每个表格中的内容合并到一张表中&#xff0c;然后进行数据处理分析&#xff0c;该怎么办呢&#xff1f; 用ChatGPTPython&#xff0c;很快就可以搞定。在ChatGPT中选中…

巴比特 | 元宇宙每日必读:美版权局判定用AI工具生成的图片不受版权保护,官方解释:AI生成具有不可预测性,但并非一刀切...

摘要&#xff1a;据GameLook报道&#xff0c;一名图书作者Kristina Kashtanova此前为其创作的漫画书《Zarya of the Dawn》向美国版权局提起注册&#xff0c;书中使用了部分由Midjourney创作的插图。版权局此前曾接受了这一注册&#xff0c;但在近日却宣布撤销这项授权。该机构…

虚拟邮箱怎么设置方法_商务邮箱一般用什么邮箱正式?VIP邮箱名怎么设置好?...

不管你处在什么身份&#xff0c;邮件都是对外沟通的重要途径之一&#xff0c;虽然你可能很早就接触了电子邮件&#xff0c;用过QQ邮箱、TOM邮箱等&#xff0c;但学生时代用到的真的也不多&#xff0c;很多时候用的也不讲究。不过&#xff0c;你一旦转变角色到职场&#xff0c;邮…

PHPMailer 发送163网易企业邮箱和个人邮箱, 163邮箱可能无法发送gmail邮箱,可使用qq邮箱解决问题

第一步&#xff1a;注册邮箱&#xff0c;获取客户端授权码 &#xff08;个人邮箱步骤类似&#xff09; 企业邮箱设置&#xff1a;客户端设置->开启客户端授权密码->生成授权密码->保存授权密码 第二步&#xff1a; 上代码 composer require phpmailer/phpmailer /…

mysql开启邮件服务_邮件服务之实现基于虚拟用户的虚拟域邮件系统

postfixdovecotSASLmysqlapacheextmailextman实现基于虚拟用户的虚拟域邮件系统 声明&#xff1a;省略了前面的基础配置包括安装MYSQL&#xff0c;postfix等&#xff0c;这里用的Apache&#xff0c;MYSQL是rpm的&#xff0c;postfix&#xff0c;courier-authlib是编译安装的&am…

基于虚拟用户的邮件系统配置

基于虚拟用户的邮件系统配置 实验说明&#xff1a; 操作系统&#xff1a;redhat5.8_x64bit 由postfix sasl courier-authlib MySQL(实现了虚拟用户、虚拟域) dovecot Webmail {extmail(extmain)} 组成的虚拟用户。 需要准备以下软件包&#xff1a; postfix-2.9.6.tar.gz co…

效果达OpenAI同规模模型96%,发布即开源!国内团队新发大模型,CEO上阵写代码...

明敏 发自 凹非寺量子位 | 公众号 QbitAI 国内自研大模型迎来新面孔&#xff0c;而且发布即开源&#xff01; 最新消息&#xff0c;多模态大语言模型TigerBot正式亮相&#xff0c;包含70亿参数和1800亿参数两个版本&#xff0c;均对外开源。 由该模型支持的对话AI同步上线。 写…

深聊丨第四范式陈雨强:如何用AI大模型打开万亿规模传统软件市场?

“GPT大模型到底能不能用&#xff1f;用在哪里&#xff1f;” 这是目前中国大型企业一把手最关心的问题之一。AI大模型也被媒体称为“一把手”工程。 大型企业会非常认真地考虑大模型的应用。最近个把月&#xff0c;大型企业客户对大模型的热烈反应让第四范式首席科学家陈雨强…

ChatGPT解释器详细教程|Bard上手指南|【2023-0716】【第六期】

点击加入->【智子纪元-AIGC】技术交流群 一、大咖观点&#xff1a; 《人民日报》&#xff1a;大模型的竞争&#xff0c;是国家科技战略的竞争WAIC 2023 | 张俊林&#xff1a;大语言模型带来的交互方式变革 三、大模型实用教程&#xff1a; 获星1.9k&#xff0c;LLM微调神…

百度AI模型“文心一言”新鲜体验

今天收到通知可以体验百度的AI模型“文心一言”&#xff0c;等了一个多月迫不及待的去体验了一把&#xff0c;以下是体验的相关记录。 1、简单介绍 通过文心一言官网链接https://yiyan.baidu.com/进入&#xff0c;看到如下界面&#xff1a; 在文心一言的自我介绍中&#xff0c…

【工具】1640- 这 5 款 AI 绘图工具,让你的绘图更高效!

关注 “AI 工具派” 探索最新 AI 工具&#xff0c;发现 AI 带来的无限可能性&#xff01; 大家好&#xff0c;我是 Chris。 最近我又发现了一些非常优秀的 AI 绘图工具&#xff0c;这些工具可以帮助我们更轻松地完成设计任务&#xff0c;提高设计效率。今天我向大家分享 5 款我…