【UQ1】落ちる床【BP Only】

使用UE:Ver.5.0.3

Chikuwa

2種類の落ちる床を作成しました。
乗るとすぐに落ちる床と、一定時間後に落ちる床です。
前回のZiplineでは、複数のActorを動かすのにRateComponentを使いました。
今回は、連続した処理に対してRateComponentを使用します。
Blueprintと自作のPluginだけで作成しています。

👇公式の解説動画です。

【解説編】アンリアルクエスト-グレイマンからの5つの挑戦状-【落ちる床・シーソー】


👇自作したPluginを使用しています。
KishiroRateComponent

Blueprint

BP_FallingFloor

実装内容

1.乗ると少し揺れる。
2.落ちる。
3.下がりきると消える。
4.元の位置に戻ってきて初期状態に戻る。

Viewport

RateはRateComponent。Pluginを導入すれば使えます。

Index0は揺れる運動に使用。
Index1は落ちる運動に使用。
Indexの変数名をそれぞれVibrate Index、Fall Indexとした。

TextureはTextures.comからダウンロード。
これをMaterial Instanceにして少し調整。

Construction Script

初期状態を記録。

Event Graph

RunOnServerで実行。

Vibrate IndexのCanPlayをtrueにしたことにより、揺れる運動が開始する。

揺れてから落ちる。
下がりきったとき(Rateが1のとき)消える。
戻ってきたとき(Rateが0のとき)初期状態に戻る。

Set Relative Locationだと、Replicate MovementではReplicateされないので、Set Actor Locationにした。
VibMovementは、初期位置からの最大の揺れ幅。

Vibrate IndexのRateが0になったとき(少し揺れて元に戻ったとき)、CanPlayの値をセットすることで揺れる運動を止めて落ちる運動を開始する。

Fall Movementは初期位置からの最大の移動量。

Replicate MovementではReplicateできないものは、Multicastのカスタムイベントを使う。

初期状態に戻す。

BP_FallingBlock

実装内容

1-a.乗ると色が変化して、一定時間揺れる。
1-b.揺れているとき離れると元に戻る。
2.一定時間揺れた後落ちる。
3.下がりきると消える。
4.元の位置で初期状態に戻る。

Viewport

Blockの上にFloorをおくことで、振動してもキャラクターが揺れないようにした。
Box Collisionの大きさをBlockより少し大きくした。

Index0は揺れる運動に使用。
Index1は落ちる運動に使用。
Indexの変数名をそれぞれVibrate Index、Fall Indexとした。

EmissiveColorの0は真っ黒になるのだと勝手に思っていたけど、ただEmissiveColorの影響がなくなるだけみたい。

Construction Script

初期状態を保存しておく。

Event Graph

RunOnServerで実行。

ブロックに乗ったときの処理。
Can Overlapの値はtrueが初期値。
Vibrate IndexのCanPlayがtrueになることで、揺れる運動が開始。
Set Material Multiで色が赤く変化。

ブロックから離れたときの処理。
色やRateを初期値に戻す。

揺れる処理。
+-Rateは、Countが偶数のときはプラス、奇数のときはマイナスに符号が変わるConvertedRate。
Countは初期値が0で、Rateが0になるたびに1ずつ増える。
初期位置を中心とした運動をさせることができる。
Vib Quantityは中心からの最大の揺れ幅。

Countが特定の値を超えたときに、落ちる処理に移る。
落ちる処理に移ってからは、Overlapイベントは起きない。

落ちる処理。

ReplicateMovementではReplicateできなかったものたち。

マテリアルをセットする。

消える。

初期状態に戻す。

知識

C++のProjectを開く。
1.メインメニューのEditから、Pluginsを選択。
2.PluginのWindowで、+Addを選択。

3.テンプレートを選び、TextBoxを埋めて、Create Plugin。

1.BlankでPluginを作成。
2.ToolsのNew C++ Class…からActor Componentを選んでNext。

3.名前を決め、右のプルダウンメニューから作ったBlankのPluginを選択。

4.ActorComponentに処理を記述。
(ActorComponentに限らず、他のClassでもこの方法で作れるはず。複数のClassを一つのPluginに入れることも多分可能。)

VisualStudioのSolutionから下記のようなファイルを選択する。

Solution Explorer

ここを書き換える。

{
	"FileVersion": 3,
	"Version": 1,
	"VersionName": "1.1",
	"FriendlyName": "KishiroRateComponent",
	"Description": "You can control Rates.",
	"Category": "Other",
	"CreatedBy": "Kishiro",
	"CreatedByURL": "https://japanese-rooster.com",
	"DocsURL": "",
	"MarketplaceURL": "",
	"SupportURL": "",
	"CanContainContent": true,
	"IsBetaVersion": true,
	"IsExperimentalVersion": false,
	"Installed": false,
	"Modules": [
		{
			"Name": "KishiroRateComponent",
			"Type": "Runtime",
			"LoadingPhase": "Default"
		}
	]
}

パッケージ化することで配布できる。パッケージ化しなくても使うことはできる。
1.自作のプラグインにPackageのボタンがあるので、そこをクリック。

2.パッケージ化したものを入れるフォルダを求められるので、UEプロジェクトのエクスプローラー上にPackageという名前のフォルダを作り選択。
その中にPluginが作られる。思っていたより重い。

DefaultのBreak/Make関数は、BlueprintReadWriteなどの指定子で、何をピンとして残すか決められる。
例えばBlueprintReadOnlyの変数を作成したならば、その変数はBreak関数のピンにはあるがMake関数のピンにはない。

参考

マリオで乗ると落ちる床2種類を解説!【ナビつき! つくってわかる はじめてゲームプログラミング(はじプロ)】【スーパーマリオワールド】【ゆっくり実況】

[UE4]独自プラグインを作成する - Qiita
今回は自作プラグインの作成例を紹介したいと思います。アンリアルエンジンにおけるプラグインは、ゲームプロジェクトそのもの、もしくはエディタに追加の機能を持たせることができます。これを覚える事でより…

Twitterしてます

ブログの更新をお知らせ

コメント

タイトルとURLをコピーしました