キャラクターをジャンプさせるには AddForce() を使って上方向に力を加えます。
目次
準備
プレイヤーにRigidbodyコンポーネントを追加します(上画像の赤い箱がプレイヤー)。
※プレイヤーにColliderコンポーネントがついていない場合は、それも付けておきます。
方法
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
Rigidbody rb;
public float jumpForce;
private void Awake()
{
rb = GetComponent<Rigidbody>();
}
void Update()
{
// 画面がタップされたら
if(Input.GetMouseButtonDown(0))
{
// 上にジャンプさせる
rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);
}
}
このスクリプトをPlayerオブジェクトにアタッチし、動作を確認すると下の動画のように画面をタップすることで赤い箱(プレイヤー)がジャンプします。
ただし、このスクリプトの場合、プレイヤーがジャンプしているときに、画面をタップすると更に上にジャンプしてしまいます。
キャラクターの空中ジャンプを制限する
キャラクターの空中ジャンプを制限するには、キャラクターが地面から離れているときにボタンを効かなくすれば解決できます。
- 床にタグを追加します。
2. 床から離れている場合、ジャンプを禁止します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
Rigidbody rb;
public float jumpForce;
bool canJump; // 追加
private void Awake()
{
rb = GetComponent<Rigidbody>();
}
void Update()
{
// クリックされた & ジャンプ可能な状態(キャラクターが地面にいる)である
if(Input.GetMouseButtonDown(0) && canJump)
{
// 上にジャンプさせる
rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);
}
}
// 追加
private void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.tag == "Ground")
{
canJump = true;
}
}
// 追加
private void OnCollisionExit(Collision collision)
{
canJump = false;
}
}
以上で、空中ジャンプができないように制御できます。
Comment