【スクリプト】ファイナルソードにならない為の移動床(動く床)メモ【unity】

【スクリプト】ファイナルソードにならない為の移動床(動く床)メモ【unity】

2020年8月15日
Unity

記述日 2020/8/15

ファイナルソードの移動床

クソゲーの超新星「ファイナルソード」ですが、

このゲームの数あるアイデンティティの一つに

”移動床にキャラが着いていかないのでぼさっと立っていたら落下死する”

というすごい(笑える)特徴があります。

このゲームでは動く床から落下死しないように、

歩き・走り・ローリングを駆使して床から落ちないように必死についていく必要があるのですが、

普通のゲームは床に乗っているだけでキャラクターは運ばれるものです。

 

床から落ちないようにする

ファイナルソードはunityで作られているのですが、何も処理しないと移動床から落ちる…つまりファイソってしまいます。

しかし、ちょっとした処理を加えるだけで床から落ちない様にできます。

移動床から落ちないようにするためにはいくつかアプローチありますが、この記事では、

Rigidbody.GetPointVelocity を使用します。

public Vector3 GetPointVelocity (Vector3 worldPoint);

Rigidbody-GetPointVelocity - Unity スクリプトリファレンス

ワールド座標における、Rigidbody オブジェクトの速度を取得します
docs.unity3d.com

ワールド座標における、Rigidbody オブジェクトの速度を取得します
GetPointVelocity は、速度を計算する時 Rigidbody の角運動速度 (angularVelocity) を取得します。

引数のwoldpointはvector.zeroで大丈夫です。

Vector3 rvel = mRigidbody.GetPointVelocity(Vector3.zero);

ここで取得した値(rvel)にTime.deltatimeをかけ、その値をプレイヤー座標に足す事で移動床の動きをプレイヤーに伝える事ができます。

■移動床

上の関数を使う為には移動床の方もRigidbodyを使う必要があるので、rigidbodyをつけてIsKinematicをON、

Rigidbody.MovePositionで、動かします。

Rigidbody-MovePosition - Unity スクリプトリファレンス

Rigidbody オブジェクトを指定する位置へ移動します
docs.unity3d.com

 

床に乗っている時だけ、上記したRigidbody.GetPointVelocityの値をプレイヤーに加えてあげることで床から落ちない様になります。

最後に

ファイナルソードは今のまま動く床に自力でついていかないと落ちる仕様のままでいて欲しいです!