📐

[Unreal Engine 5] 座標から mesh を生成する

2025/01/14に公開

結論

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 の設定を省くとこうなる。

参考にしたページ

Discussion