📐
[Unreal Engine 5] 座標から mesh を生成する
結論
MyDynamicMeshActor.cpp
#include "MyDynamicMeshActor.h"
#include "DynamicMesh/DynamicMesh3.h"
void AMyDynamicMeshActor::BeginPlay()
{
auto meshCmp = GetDynamicMeshComponent();
auto mesh = meshCmp->GetMesh();
const FVector3d vertex[] = { {0,0,0},{0,1,0},{1,0,0},{1,1,0.5} };
double s = 200.0;
mesh->AppendVertex(vertex[0] * s);
mesh->AppendVertex(vertex[1] * s);
mesh->AppendVertex(vertex[2] * s);
mesh->AppendVertex(vertex[3] * s);
mesh->AppendTriangle(0, 1, 2);
mesh->AppendTriangle(3, 2, 1);
meshCmp->NotifyMeshUpdated();
meshCmp->EnableComplexAsSimpleCollision();
meshCmp->UpdateCollision();
}
MyDynamicMeshActor.h
#pragma once
#include "CoreMinimal.h"
#include "DynamicMeshActor.h"
#include "MyDynamicMeshActor.generated.h"
UCLASS()
class MYPROJECTCPP_API AMyDynamicMeshActor : public ADynamicMeshActor
{
GENERATED_BODY()
protected:
void BeginPlay() override;
};
MyProjectCpp.Build.cs
public class MyProjectCpp : ModuleRules
{
public MyProjectCpp(ReadOnlyTargetRules Target) : base(Target)
{
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "EnhancedInput", "GeometryCore" });
}
}
補足
-
GeometryCore
をモジュールとして追加する。 -
AppendTriangle
の引数の順番によってポリゴンの表裏が決まる。裏からは見えない。頂点インデックスの指定は時計回りか反時計回りか統一する。 -
Collision の設定を省くとこうなる。
参考にしたページ
- https://zenn.dev/posita33/books/ue5_starter_cpp_and_bp_001/viewer/chap_02_cpp_create_actor_class
- https://forums.unrealengine.com/t/where-to-even-start-with-fdynamicmesh3/499463
- https://forums.unrealengine.com/t/dynamicmeshcomponent-is-slower-then-proceduralmeshcomponent/1603522
- https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/GeometryFramework/Components/UDynamicMeshComponent
Discussion