(サンプルコード)
using UnityEngine;
public class Ball : MonoBehaviour
{
private InputSystem_Actions isa;
public float moveSpeed;
private Rigidbody rb;
public float jumpPower;
// ★空中ジャンプ禁止
private bool isJumping = false;
void Start()
{
isa = new InputSystem_Actions();
isa.Enable();
rb = GetComponent<Rigidbody>();
}
void Update()
{
Vector2 movement2 = isa.Player.Move.ReadValue();
Vector3 movement3 = new Vector3(movement2.x, 0, movement2.y);
rb.AddForce(movement3 * moveSpeed);
// ★空中ジャンプ禁止
if (isa.Player.Jump.triggered && isJumping == false)
{
rb.linearVelocity += Vector3.up * jumpPower;
// ★空中ジャンプ禁止
isJumping = true;
}
}
}
(実行確認)
・たった「1回だけ」ジャンプできれば成功
(床に触れるとジャンプの復活)
using UnityEngine;
public class Ball : MonoBehaviour
{
private InputSystem_Actions isa;
public float moveSpeed;
private Rigidbody rb;
public float jumpPower;
// ★空中ジャンプ禁止
private bool isJumping = false;
void Start()
{
isa = new InputSystem_Actions();
isa.Enable();
rb = GetComponent<Rigidbody>();
}
void Update()
{
Vector2 movement2 = isa.Player.Move.ReadValue();
Vector3 movement3 = new Vector3(movement2.x, 0, movement2.y);
rb.AddForce(movement3 * moveSpeed);
// ★空中ジャンプ禁止
if (isa.Player.Jump.triggered && isJumping == false)
{
rb.linearVelocity += Vector3.up * jumpPower;
// ★空中ジャンプ禁止
isJumping = true;
}
}
// ★★ジャンプの復活
// 今回の条件は、「Floor」という「Tag」の付いたオブジェクトにぶつかった時
private void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.CompareTag("Floor"))
{
isJumping = false;
}
}
}
(設定)
・Floorオブジェクトに「Floor」タグを追加
(実行確認)
・空中ではジャンプできないが、床に着地するとジャンプが復活すれば成功