UE4 手把手教你做插件(4)做一个可以拖入场景的小方块插件

news2024/11/17 4:55:41

0,前言

学习一下如何编写一个有actor的插件,能够将它拖入场景里面。

1,创建插件

(1)创建一个空白插件

添加之后vs里面就会多出一个目录:

(2)给插件添加一个actor

 

 

创建完actor之后,再给actor创建一个组件

 

 都创建完之后,你vs的目录如下:

 2,代码修改

(1)MyCubeActor

添加一个我们新建的组件声明

class UMyCubeComponent* MyCubeComponent;

在构造函数中增加组件的创建

AMyCubeActor::AMyCubeActor()
{
 	// Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
	PrimaryActorTick.bCanEverTick = true;
	MyCubeComponent = CreateDefaultSubobject<UMyCubeComponent>(TEXT("MyCubeComponent"));
	RootComponent = (USceneComponent*)MyCubeComponent;
}

(2)MyCubeComponent

在头文件中声明增加:

	virtual void OnRegister() override;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, BlueprintSetter = SetBallMesh, Category = "Ball")
	UStaticMesh* BallMesh;
	UFUNCTION(BlueprintCallable, Category = "Rendering|Components|WaterBall3D")
	void SetBallMesh(UStaticMesh* Value);
	UPROPERTY(EditAnywhere, BlueprintReadWrite,  Category = "Ball")
	UStaticMeshComponent* CubeMeshComponent;

在构造函数中添加获取网格的代码:

	BallMesh = (UStaticMesh*)StaticLoadObject(UStaticMesh::StaticClass(), NULL, TEXT("/Game/StarterContent/Shapes/Shape_Cube.Shape_Cube"), NULL, LOAD_None, NULL);

在onregister函数中添加:

void UMyCubeComponent::OnRegister()
{
		Super::OnRegister();
		if (!CubeMeshComponent)
		{
			FName CubeMeshComponentName = MakeUniqueObjectName(this, UMyCubeComponent::StaticClass(), TEXT("CubeMesh"));
			CubeMeshComponent = NewObject<UStaticMeshComponent>(this, CubeMeshComponentName, RF_Transactional);
			CubeMeshComponent->RegisterComponent();
			//GetOwner()->AddInstanceComponent(WaterComponent);
			CubeMeshComponent->AttachToComponent(this, FAttachmentTransformRules::KeepRelativeTransform);
			CubeMeshComponent->SetStaticMesh(BallMesh);
			CubeMeshComponent->SetRelativeLocation(FVector::ZeroVector);
			CubeMeshComponent->SetRelativeRotation(FRotator::ZeroRotator);
			CubeMeshComponent->SetRelativeScale3D(FVector(50 / 50.f));
		}	
}

注意:这部分不能加到构造函数中,不然 网格绑定不了actor和component,会导致把方块儿拖到场景中时,actor,component与网格的坐标中心不一致。

 3,运行结果

拖入场景就可以看到我们自己创建的插件啦! 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

渗透测试之交换式网络嗅探实验

渗透测试之交换式网络嗅探实验实验目的一、实验原理1.1 网络嗅探器Sniffer的工作原理1.2 网络嗅探器的分类1.3 网络嗅探器Sniffer的作用二、实验环境2.1 操作机器2.2 实验工具Sniffer2.3 安装工具Sniffer三、实验步骤1. 熟悉Sniffer工具的启动2. 进行监听3. 熟悉Sniffer工具的介…

Python数据结构与算法篇(四)-- 链表的实现

实现线性表的另一种常用方式就是基于链接结构&#xff0c;用链接关系显式表示元素之间的顺序关联。基于链接技术实现的线性表称为链接表或者链表。 采用链接方式实现线性表的基本想法如下: 把表中的元素分别存储在一批独立的存储块&#xff08;称为表的结点&#xff09;里。保…

刷题记录:牛客NC51112Stars in Your Window 扫描线

传送门:牛客 题目描述: Here comes the problem: Assume the sky is a flat plane. All the stars lie on it with a location (x, y). for each star, there is a grade ranging from 1 to 100, representing its brightness, where 100 is the brightest and 1 is the we…

数据库大量数据导出导入的操作

基于上一篇文章&#xff0c;我想到如果在数据库之间拥有大量数据的表数据的导入导出&#xff0c;该如何快速完成表的导入导出工作呢&#xff1f; 思路一:使用db软件工具导出数据&#xff0c;然后向新数据库导入数据。我用的是dbserver22.3.4&#xff0c;不出意外的是&#xff0…

【读书笔记】《深入浅出数据分析》第二章 检验你的理论

文章目录一&#xff0c;相关分析方法1&#xff0c;相关系数二&#xff0c;相关性不等于因果关系三&#xff0c;证明因果关系&#xff0c;“控制变量法”?本章主要说明了两个问题&#xff1a; 1&#xff0c;相关性不等于因果关系 2&#xff0c;如何判断两种数据之间是相关性&am…

深圳/东莞/惠州师资比较强的CPDA数据分析认证

深圳/东莞/惠州师资比较强的CPDA数据分析认证培训机构 CPDA数据分析师认证是中国大数据领域有一定权威度的中高端人才认证&#xff0c;它不仅是中国较早大数据专业技术人才认证、更是中国大数据时代先行者&#xff0c;具有广泛的社会认知度和权威性。 无论是地方政府引进人才、…

Android 高性能列表:RecyclerView + DiffUtil

文章目录背景介绍一般刷新 notifyDataSetChanged()局部刷新实现调用代码准备工作创建 MyDiffUtilCallback 类继承 DiffUtil.Callback 抽象类MyAdpter 类代码实现步骤总结通过 log 证实 diffutil 的局部刷新diffutil 优化后台线程参考主线程参考diff 更新优化后写法相关参考背景…

Spring的一些知识点

什么是Spring&#xff1f; Spring是一种轻量级的开发框架&#xff0c;旨在提高开发人员的开发效率以及系统的可维护性。 Spring的核心模块 Spring Core是基础模块&#xff0c;可以说Spring的其他功能都要依赖于该类库&#xff0c;主要提供IOC的依赖注入功能&#xff1b; Spri…

动手学深度学习v2—01数据操作+数据预处理

此次用到的虚拟环境&#xff1a;pytorchmwy项目名称&#xff1a;limuAI所需框架和工具&#xff1a;pytorch&#xff0c;pandas一、创建CSV文件所需工具&#xff1a;pandas在与项目同等目录下创建一个文件夹名为data&#xff0c;其中文件名称为house_tiny.csv。代码如下&#xf…

Java基础:拼图小游戏

涉及到的知识: 1.图形用户接口GUI(Graphical User Interface)用图形化的方式显示操作界面 两个体系: AWT包和Swing包 2.界面会用到JFrame类 3.界面中的菜单会用到JMenuBar, JMenu, JMenuItem 4.添加图片 在设置完JLabel的location之后还需要获得展示内容的窗体, 通过setLay…

吃鸡用什么蓝牙耳机效果好?手游吃鸡公认最好的几款蓝牙耳机

蓝牙耳机的作用很多&#xff0c;几乎每个人都需要一副很棒的耳机在通勤或锻炼途中使用&#xff0c;并且玩游戏也少不了它&#xff0c;手游近几年十分的流行&#xff0c;下面整理了几款性能不错的蓝牙耳机。 第一款&#xff1a;南卡小音舱蓝牙耳机 蓝牙版本&#xff1a;5.3 发…

【Linux】如何将ntfs硬盘挂载到home目录下并具有读写权限

步骤1. 查看当前挂载的硬盘及其挂载点2. 查看需要挂载到home下的磁盘类型信息3. 在home下新建一个空的文件夹作为该磁盘的新挂载点4. 以ntfs类型的硬盘为例&#xff0c;使用mount命令进行挂载5. 问题1&#xff1a;进程占用了磁盘6. 问题2&#xff1a;磁盘权限为只读的7. 永久挂…

[AI助力] 2022.2.23 考研英语学习 2010 英语二翻译

[AI助力] 2022.2.23 考研英语学习 2010 英语二翻译 文章目录[AI助力] 2022.2.23 考研英语学习 2010 英语二翻译2010年英语二翻译真题自己写的积累&#x1f9d0;看看AI的翻译&#xff0c;学习学习&#xff08;把自己当成阅卷老师来康康hhh&#x1f920;DeepL谷歌翻译ReadPaper里…

JavaUDP通信程序

2 UDP通信程序 2.1 UDP通信原理 UDP协议是一种不可靠的网络协议&#xff0c;它在通信的两端各建立一个Socket对象, 但是这两个Socket只是发送&#xff0c;接收数据的对象因此对于基于UDP协议的通信双方而言,没有所谓的客户端和服务器的概念 Java提供了DatagramSocket类作为基…

低代码选型,论协同开发的重要性

Git是一款用于分布式版本控制的免费开源软件: 它可以跟踪到所有文件集中任意的变更&#xff0c;通常用于在软件开发期间&#xff0c;协调配合程序员之间的代码程序开发工作。 Git 最初诞生的原因源于Linux 内核的开发&#xff0c;2005年Linus Torvalds 编写出了Git。其他内核开…

AI作画—中国画之山水画

山水画&#xff0c;简称“山水”&#xff0c;中国画的一种&#xff0c;描写山川自然景色为主体的绘画。山水画在我国绘画史中占有重要的地位。 山水画形成于魏晋南北朝时期&#xff0c;但尚未从人物画中完全分离。隋唐时始终独立&#xff0c;五代、北宋时趋于成熟&#xff0c;…

Solon2 之基础:四、应用启动过程与完整生命周期

串行的处理过程&#xff08;含六个事件扩展点 两个函数扩展点&#xff09;&#xff0c;代码直接、没有什么模式。易明 提醒&#xff1a; 启动过程完成后&#xff0c;项目才能正常运行&#xff08;启动过程中&#xff0c;不能把线程卡死了&#xff09;AppBeanLoadEndEvent 之前…

【C++】类和对象(完结篇)

文章目录1. 再谈构造函数1.1 初始化列表1.2 explicit关键字2. static 成员2.1 静态成员变量2.1 静态成员函数2.3 练习2.4 总结3. 匿名对象4. 友元4.1 友元函数4.2 友元类5. 内部类6. 拷贝对象时编译器的一些优化7. 再次理解类和对象这篇文章呢&#xff0c;我们来再来对类和对象…

TypeScript学习笔记(一)编译环境、数据类型、函数类型、联合类型

文章目录编译环境基本类型函数类型函数重载联合类型和函数重载编译环境 TypeScript最终会被编译成JavaScript来运行&#xff0c;所以我们需要搭建对应的环境。 首先我们要全局安装typescript # 安装命令 npm install typescript -g # 查看版本 tsc --version⭐️ 方式一&…

【2023-2-23】FastDeploy 安装教程

【2023-2-22】FastDeploy 安装编译教程 该测试 FastDeploy CPU版本。 1. fastDeploy库编译 1.1 官方预编译库下载 预编译库下载安装 1.2 自定义CPU版本库编译 官方编译FastDeploy教程 CMakeGUI VS 2019 IDE编译FastDeploy 本人编译教程 CMAKE_CONFIGURATION_TYPES 属性设…