動く足場
CoddyのUnityジャーニー「本格的なゲームを作る」セクションの一部。レッスン 49/56。
チャレンジ
中級青い足場は隙間の上を前後に滑るように動きます。前のレッスンの内容はすべて残してください。
MovingPlatformを完成させましょう。
- Inspectorで設定する2つのフィールド、
distance(3)とspeed(1.5)、およびpublic Vector3 deltaを追加します。 - 開始位置から+x方向に
distance単位、毎秒speed単位の速さで滑るように移動し、開始位置まで戻ります。これをずっと繰り返します。 - 毎フレーム、
deltaにはそのフレームに移動した距離を設定します。つまり、移動後の位置から移動前の位置を引いた値です。
CharacterControllerは、乗っているものに運ばれません。動く足場に乗っていてもその場にとどまり、足場が下を滑っていきます。transform.positionを動かしても機能しません。次のMoveは物理エンジンが最後に認識した位置から始まり、変更を元に戻してしまうからです。Playerが足場に乗って移動するようにしましょう。
OnControllerColliderHitを追加します。ヒットした面の法線が上向き(hit.normal.yが0.5より大きい、つまりプレイヤーがその上に立っている)で、オブジェクトがMovingPlatformを持っている場合、その足場をフィールドに保存します。Updateで、その足場のdeltaをcontroller.Moveに渡すモーションに加え、その後で足場を忘れます(フィールドをnullに設定します)。プレイヤーが足場の上にいる間は、Moveの呼び出しによって足場が再び見つかります。
Playを押し、足場にジャンプして乗り、そのまま移動してからCheckを押してください。
自分で試してみよう
using UnityEngine;
public class MovingPlatform : MonoBehaviour
{
// この部分は後のレッスンで実装します。前後に滑らかに移動する足場です。
}