キャラクターが「一定以上に傾いて倒れたか」をスマートに判定する。
自分は、帆船の転覆判定に使用した。
倒れた時に、キャラクターのColliderを無効にすると、戦闘からの除外をクールに処理出来る。
更にRigidbody.dragの値を変更すると、ゆっくりと良い感じに落ちます。
使用方法
- 「倒れたか」を判定したいキャラクターに、アタッチしたスクリプトに、コードを追記。
- Updateや、コルーチンでCheckToppledを呼ぶ。
コード
//「倒れた」と判定するボーダーとなる、任意の値。
//Vector3.Angleの値は常に正数になるので、負数への対応は気にしなくて良い。
float angleThreshold = 60.0f;
void CheckToppled () {
if (angleThreshold < Vector3.Angle(Vector3.up, transform.up)) {
//倒れた時の処理をここに書く。
}
}
一応注意
transform.upを使用しているので、3Dモデルが立っている状態でRotation(0, 0, 0)になるように合わせる。
通常のキャラクターなら、一々弄らなくても大丈夫だが、ドミノ等の場合は注意が必要。
使用したUnity標準メソッドの説明
Transformの相対的な上方の座標を、常に保持(更新)している。
Transform-up - Unity スクリプトリファレンス
ワールド空間の Transform の緑軸
引数で渡した、Vector3間の角度を取得出来る。
Vector3-Angle - Unity スクリプトリファレンス
Calculates the angle between vectors from and.