向Unreal编辑器关卡中拖入自定义类型
来源:互联网 发布:java设置pdf打印格式 编辑:程序博客网 时间:2024/05/22 02:21
- 最终效果
- 希望直接拖入编辑生成Actor的类定义
- 继承UActorFactory
- 蓝图继承UItem设置StaticMesh属性
最终效果
“希望直接拖入编辑生成Actor的类”定义:
NOTE:这边只处理了蓝图类的情况,请在编辑器里用蓝图类继承该类做实验
UCLASS(Blueprintable)class PROJECTNAME_API UItem : public UObject{ GENERATED_BODY()public: UPROPERTY(EditAnywhere, Category = "Item") UStaticMesh* StaticMesh;};
继承UActorFactory
1、继承UActorFactory
2、修改构造函数,给NewActorClass 赋值
3、重写UActorFactory中的函数,CanCreateActorFrom, PostSpawnActor
类定义
UCLASS()class PROJECTNAME_API UActorFactoryItem : public UActorFactory{ GENERATED_BODY()public: UActorFactoryItem(); virtual void PostSpawnActor(UObject* Asset, AActor* NewActor) override;//该函数用于处理产生的Actor virtual bool CanCreateActorFrom(const FAssetData& AssetData, FText& OutErrorMsg) override; //该函数用于判断是否能SpawnActor于视图中};
类实现
UActorFactoryItem::UActorFactoryItem(){ DisplayName = NSLOCTEXT("Item", "Item", "Item Static Mesh"); NewActorClass = AStaticMeshActor::StaticClass(); //设置拖入场景Spawn的Actor bUseSurfaceOrientation = true;}bool UActorFactoryItem::CanCreateActorFrom(const FAssetData& AssetData, FText& OutErrorMsg){ if (!AssetData.IsValid() || !AssetData.GetClass()->IsChildOf(UBlueprint::StaticClass())) { OutErrorMsg = NSLOCTEXT("CanCreateActor", "NoStaticMesh", "A valid static mesh must be specified."); return false; } const FString* ParentClassPath = AssetData.TagsAndValues.Find(TEXT("ParentClass")); if (ParentClassPath == NULL || ParentClassPath->IsEmpty()) { OutErrorMsg = NSLOCTEXT("CanCreateActor", "NoBlueprint", "No Blueprint was specified, or the specified Blueprint needs to be compiled."); return false; } UClass* ParentClass = FindObject<UClass>(NULL, **ParentClassPath); bool bIsActorBased = false; if (ParentClass != NULL) { // The parent class is loaded. Make sure it is derived from AActor bIsActorBased = ParentClass->IsChildOf(UItem::StaticClass()); return bIsActorBased; } return false;}void UActorFactoryItem::PostSpawnActor(UObject* Asset, AActor* NewActor){ Super::PostSpawnActor(Asset, NewActor); UBlueprint* ItemBlueprint = CastChecked<UBlueprint>(Asset); UClass* ItemClass = CastChecked<UClass>(ItemBlueprint->GeneratedClass); //从蓝图类中生成UClass UItem* Item = CastChecked<UItem>(ItemClass->GetDefaultObject()); //UE_LOG(LogActorFactory, Log, TEXT("Actor Factory created %s"), *StaticMesh->GetName()); // Change properties AStaticMeshActor* StaticMeshActor = CastChecked<AStaticMeshActor>(NewActor); UStaticMeshComponent* StaticMeshComponent = StaticMeshActor->GetStaticMeshComponent(); check(StaticMeshComponent); StaticMeshComponent->UnregisterComponent(); StaticMeshComponent->StaticMesh = Item->StaticMesh; // StaticMeshComponent->StaticMeshDerivedDataKey = Item->StaticMesh->RenderData->DerivedDataKey; // Init Component StaticMeshComponent->RegisterComponent();}
蓝图继承UItem,设置StaticMesh属性
最后将蓝图拖入编辑器的场景就可以看到效果。
阅读全文
0 0
- 向Unreal编辑器关卡中拖入自定义类型
- Unreal Engine 4 C++ 动态加载关卡
- 自定义控件 类型编辑器
- UNREAL编辑器果然强大
- ue4-自定义关卡类
- 次世代关卡制作流程:使用Unreal Engine 4
- Unreal Engine 4 C++ 为编辑器中Actor创建自定义图标
- IBATIS 向procedure传入自定义类型
- 向广播发送自定义类型的对象
- doom3关卡编辑器代码的一些分析
- (4)关卡编辑器之工具条
- (5)关卡编辑器之视口
- (11)关卡编辑器之细节列表
- (12)关卡编辑器之摆放模式
- (13)关卡编辑器之大纲视图
- (14)关卡编辑器之图层
- 关卡
- Unreal Engine 4/虚幻4 视频纹理或者在关卡中播放视频
- 发光二极管压降, 也就是最小导通电压
- 【简记】大规模Web开发技术(第一章)
- Android:res之selector背景选择器
- 如何将最短时间将Github上的开源项目导入到android studio中
- java中方法是否属于类成员?面试题
- 向Unreal编辑器关卡中拖入自定义类型
- centos7下tomcat7 或tomcat8启动超慢原因
- HUST 1625 Chessboard 并查集
- React组件生命周期过程说明
- python基础之文件操作
- python多线程中join的用法
- blog 第一天
- centos 7.1安装docker
- 理解图像卷积操作的意义