おさらい:二段ジャンプ
CoddyのUnityジャーニー「本格的なゲームを作る」セクションの一部。レッスン 43/60。
この章では、CharacterControllerを手動で動かしました。歩行にはMoveを使い、重力はフィールドに保持し、ジャンプの高さからジャンプの動きを計算しました。主人公は空中でもう一度ジャンプできます。
チャレンジ
中級ヒーローにジャンプと空中ジャンプを1回できるようにします。歩行処理は記述済みです。
- まず、接地している間は、
airJumpUsed = falseにし、落下中のverticalSpeedを-2fにします。 Input.GetButtonDown("Jump")のとき、接地していればverticalSpeed = Mathf.Sqrt(jumpHeight * -2f * gravity);を実行します。そうでなく、!airJumpUsedなら、airJumpHeightを使って同様にし、airJumpUsedを設定します。- 次に、
gravity * Time.deltaTimeをverticalSpeedに加えます。
「プレイ」を押して、二段ジャンプで足場に乗りましょう。その後、「確認」を押してください。
自分で試してみよう
using UnityEngine;
public class Hero : MonoBehaviour
{
public float speed = 5f;
public float gravity = -25f;
public float jumpHeight = 2f;
public float airJumpHeight = 1.28f;
CharacterController controller;
float verticalSpeed;
bool airJumpUsed;
void Start()
{
controller = GetComponent<CharacterController>();
}
void Update()
{
// 地面にいるときにリセットし、Spaceでジャンプまたは空中ジャンプしてから、重力を加える
Vector3 move = new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical")) * speed;
move.y = verticalSpeed;
controller.Move(move * Time.deltaTime);
}
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
本格的なゲームを作るのすべてのレッスン
自分で練習してみよう: Unityプレイグラウンド