Skip to content

dtl::shape::PerlinIsland in Unreal Engine (形状クラス) 詳しい解説

As Project edited this page Sep 17, 2023 · 7 revisions

クラスの概要

>> dtl::shape::PerlinIsland (形状クラス)

導入方法

>> クラス in Unreal Engine

上記のリンクに飛び、DTLのダウンロードから(プロジェクト名)Build.csの追加記述を行う。


1. BlueprintFunctionLibraryを継承したC++クラスを作成

BP

コンテンツブラウザ の空白部分を右クリックし、 新規C++クラス を選択する。

BP

親クラスを選択 という画面が出てくるので、 BlueprintFunctionLibrary を選択する。 そして、 次へ を選択する。

BP

今回は BlueprintFunctionLibraryを継承したC++クラスを作成 する。

BP

この解説では PerlinIsland という名前を付ける。 そして、 クラスを作成 を選択する。

PerlinIsland.hPerlinIsland.cpp が生成される。

※別の名前を付けた場合は、 (付けた名前).h(付けた名前).cpp が生成される。

BP

しばらく待つ。

BP

生成された PerlinIsland.h

BP

生成された PerlinIsland.cpp

BP

PerlinIsland.h を以下のように変更する。

PerlinIsland.h

#pragma once

#include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "PerlinIsland.generated.h"

UCLASS()
class (プロジェクト名マクロ)_API UPerlinIsland : public UBlueprintFunctionLibrary
{
	GENERATED_BODY()

		UFUNCTION(BlueprintCallable, Category = DTL, meta = (HidePin = "worldContextObject_", DefaultToSelf = "worldContextObject_"))
		static bool perlinIsland(const UObject* worldContextObject_, float frequency, int32 octaves, int32 max_value, int32 min_value);
};

(プロジェクト名マクロ)_API の部分は適宜変更する。

BP

PerlinIsland.cpp を以下のように変更する。

PerlinIsland.cpp

#include "PerlinIsland.h"

#include "EngineUtils.h"
#include "Landscape.h"
#include "LandscapeInfo.h"
#include "LandscapeEditor/Public/LandscapeEditorUtils.h"

#include <DTL.hpp>

bool UPerlinIsland::perlinIsland(const UObject* worldContextObject_, float frequency, int32 octaves, int32 max_value, int32 min_value) {

	dtl::shape::PerlinIsland<uint16> generator(
		static_cast<double>(frequency),
		static_cast<size_t>(octaves),
		static_cast<uint16>(max_value),
		static_cast<uint16>(min_value));

	::UWorld* world{ worldContextObject_->GetWorld() };
	for (TActorIterator<ALandscape> actorItr(world); actorItr; ++actorItr) {
		::ALandscape* landscape{ *actorItr };
		if (landscape == nullptr) continue;
		::ULandscapeInfo::RecreateLandscapeInfo(world, false);

		::FIntRect rect{ landscape->GetBoundingRect() };
		const int32 w{ rect.Width() + 1 };
		const int32 h{ rect.Height() + 1 };

		::TArray<uint16> Data;
		Data.Init(0, w * h);
		generator.draw(Data, w, h);
		LandscapeEditorUtils::SetHeightmapData(landscape, Data);
		return true;
	}
	return false;
}

BP

Unreal Engineに戻り、画面上部の コンパイル を選択する。

BP

コンパイル中。

BP

コンパイルが成功しました!


2.Actorを継承したブループリントクラスを作成

BP

画面上部にある ブループリント から 新規の空のブループリントクラス を選択する。

BP

Actor を選択する。

BP

今回は名前を PerlinIsland として、 OK を選択する。

BP

ブループリントの編集画面が開くので、画面上部にある イベントグラフ を選択する。

BP

イベントグラフが開きました。元々あるノードを選択して、Deleteキーを押して削除します。

BP

綺麗になりました。

BP

真ん中の画面で右クリックして、出てくる入力欄に custom を打ちます。 そうすると、 カスタムイベントを追加 と出てくるので、それを選択します。

BP

カスタムイベントノードが生成されました。

BP

今回の解説では、 EventPerlinIsland と名前をつけます。

BP

EventPerlinIsland を選択した後、画面右上にある 詳細 にある エディタで呼び出す(Call in Editor) にチェックを入れます。

BP

次に先ほどと同様に右クリックして、出てくる入力欄に Perlin を打ちます。 そうすると、先ほど追加したC++の関数 PerlinIsland と出てくるので、それを選択します。

BP

PerlinIsland ノードが生成されました。

BP

EventPerlinIslandPerlinIsland を繋ぎます。

BP

次に画面左にある 変数 に変数を追加します。 +変数 を押して4つ新しい変数を追加します。

BP

初期の変数。

これからこの4つの変数を以下のように定義します。

変数名 デフォルト値
frequency Float 2.0
octaves Integer 10
max value Integer 20000
min value Integer 0

BP

この変数を、

BP

上図のように変更します。 今回定義する変数は インスタンス編集可能(Instance Editable)スポーン時に公開(Expose on Spawn) にチェックを入れます。

BP

この変数を、

BP

上図のように変更します。 今回定義する変数は インスタンス編集可能(Instance Editable)スポーン時に公開(Expose on Spawn) にチェックを入れます。

BP

この変数を、

BP

上図のように変更します。 今回定義する変数は インスタンス編集可能(Instance Editable)スポーン時に公開(Expose on Spawn) にチェックを入れます。

BP

この変数を、

BP

上図のように変更します。 今回定義する変数は インスタンス編集可能(Instance Editable)スポーン時に公開(Expose on Spawn) にチェックを入れます。

BP

これで4つの変数の基礎部分は完成しました。

BP

全体から見るとこんな感じです。 今作った変数を画面に配置します。

ctrlを押しながら、ドラッグアンドドロップすると画面に配置することが出来ます。

BP

配置できました。次はこれらの変数を PerlinIsland ノードと結合します。

BP

結合できました。

BP

次に画面上部にある コンパイル を押して、コンパイルします。

BP

コンパイルが完了しました。 次に、追加した4つの変数のデフォルト値を定義します。

これからこの4つの変数のデフォルト値を以下のように定義します。

変数名 デフォルト値
frequency Float 2.0
octaves Integer 10
max value Integer 20000
min value Integer 0

BP

frequency のデフォルト値を 2.0 にします。

BP

octaves のデフォルト値を 10 にします。

BP

max value のデフォルト値を 20000 にします。

BP

min value のデフォルト値を 0 にします。

BP

もう一度、次に画面上部にある コンパイル を押して、コンパイルします。

BP

コンパイルが完了しました。

BP

今回作成したブループリントは上図のようになります。


3. 完成

Landscape を作成し、その後に作成したActorをテキトーにレベルに配置します。

BP

画面左にある モード 画面にある、山のようなアイコンを選択します。

BP

作成する ボタンを選択します。ここを押すと地形が生成されます。

BP

地形が生成されました。

BP

次に、先ほど作成したブループリントを探します。 Blueprints フォルダに作成したので、フォルダを選択します。

BP

PerlinIsland ブループリントがありました。

BP

ブループリントをドラッグアンドドロップで画面真ん中のビューポートへ設置します。

BP

設置できました。画面右上にある アウトライナ から PerlinIsland を選択します。 選択したら、画面右下にある 詳細 にある Event Perlin Island ボタンを押します。

BP

そうすると PerlinIsland の地形が適応されます。

BP

無事に地形が生成されました!

Clone this wiki locally