Hi,
I’m trying to write a simple script to get my player jump once at a time while hovering. I’m new to unity and just learning how this all works. I’ve tried to find answers but I couldn’t find an answer that I could use in my script.
So I have a hovering boat as a player which controls fine and jumps once when pressing space. After jumping once the jump doesn’t work anymore. Any idea how to get the player to jump again and again when it’s back from the previous jump? The player needs to hover all the time and not touch the ground.
public class BoatJump : MonoBehaviour
{
public PlayerControls controller;
public float thrustSpeed;
public float turnSpeed;
public float hoverPower;
public float hoverHeight;
public float jumpForce = 5f;
private float thrustInput;
private float turnInput;
private Rigidbody shipRigidBody;
private bool OnGround;
// Start is called before the first frame update
void Start()
{
controller = GetComponent<PlayerControls>();
shipRigidBody = GetComponent<Rigidbody>();
OnGround = true;
}
// Update is called once per frame
void Update()
{
thrustInput = Input.GetAxis("Vertical");
turnInput = Input.GetAxis("Horizontal");
}
void FixedUpdate()
{
// Turning the ship
shipRigidBody.AddRelativeTorque(0f, turnInput * turnSpeed, 0f);
// Moving the ship
shipRigidBody.AddRelativeForce(0f, 0f, thrustInput * thrustSpeed);
// Jumping
if (Input.GetButton("Jump") && OnGround == true)
{
shipRigidBody.velocity = new Vector3(0f, jumpForce, 0f);
OnGround = false;
}
// Hovering
Ray ray = new Ray(transform.position, -transform.up);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, hoverHeight))
{
float proportionalHeight = (hoverHeight - hit.distance) / hoverHeight;
Vector3 appliedHoverForce = Vector3.up * proportionalHeight * hoverPower;
shipRigidBody.AddForce(appliedHoverForce, ForceMode.Acceleration);
}
}
}