六角タイルをStaticMeshで構成した理由
ProceduralMeshが必ずしも必要ではない
本ブログ作成文は、講義を目指して製作されました。 また、作成された文章の情報も間違っている可能性がありますので、ご注意ください。
六角タイルをランタイムに直接計算してProceduralMeshにすることもできます。 しかし、形状が固定されている場合、毎回頂点とインデックスを生成する理由はありません。
ProjectTBではタイル表示UStaticMeshComponentベースに変えた。
UPROPERTY(VisibleAnywhere, BlueprintReadOnly)
TObjectPtr<UStaticMeshComponent> TileMesh;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly)
TObjectPtr<UStaticMeshComponent> TileOutlineMesh;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly)
TObjectPtr<UStaticMeshComponent> CenterIconMeshComponent;
StaticMeshが似合う場合
- タイルの外観が実行中に変わりません。
- エディタで作成したMeshとLODを再利用します。
- 衝突とマテリアルスロットを資産で管理する。
- 同じメッシュを複数のタイルが共有する。
ProceduralMeshは、地形自体が変形したり、ユーザー入力で図形を生成するときに意味があります。 固定六角形を単にサイズと色だけ変更するときは、StaticMeshがより単純です。
視覚状態とゲームルールは分離する
bool bIsMovementRangeHighlighted = false;
bool bIsAttackRangeHighlighted = false;
void SetRangeHighlights(
bool bMovement,
bool bAttack,
FLinearColor MovementColor,
FLinearColor AttackColor
);
可用性はGridルールによって決定され、タイルは結果に合わせてMaterialの色を変更します。 Mesh ComponentがあるとタイルActorの中にパス探索まで入れる必要はない。
タイル数がはるかに多くなると、ActorとComponent個数自体が負担になることがある。 その段階では、InstancedStaticMeshまたはHierarchicalInstancedStaticMeshで囲む方向を検討する必要があります。