64 lines
1.3 KiB
C#
64 lines
1.3 KiB
C#
using UnityEngine;
|
|
|
|
namespace Kryz.CharacterStats.Examples
|
|
{
|
|
[RequireComponent(typeof(Rigidbody))]
|
|
public class Movement : MonoBehaviour
|
|
{
|
|
public Rigidbody Rigidbody;
|
|
public float MovementSpeed = 6;
|
|
public float JumpForce = 6;
|
|
public float JumpControlMultiplier = 0.05f;
|
|
|
|
private bool isGrounded = false;
|
|
|
|
void FixedUpdate()
|
|
{
|
|
Move();
|
|
Jump();
|
|
}
|
|
|
|
void OnValidate()
|
|
{
|
|
if (Rigidbody == null)
|
|
Rigidbody = GetComponent<Rigidbody>();
|
|
}
|
|
|
|
void OnCollisionStay()
|
|
{
|
|
isGrounded = true;
|
|
}
|
|
|
|
void OnCollisionExit()
|
|
{
|
|
isGrounded = false;
|
|
}
|
|
|
|
private void Move()
|
|
{
|
|
Vector3 velocity = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
|
|
Vector3 transformedVelocity = transform.TransformDirection(velocity);
|
|
transformedVelocity *= MovementSpeed;
|
|
|
|
Vector3 velocityChange = transformedVelocity - Rigidbody.velocity;
|
|
velocityChange.y = 0;
|
|
|
|
if (isGrounded) {
|
|
Rigidbody.AddForce(velocityChange, ForceMode.VelocityChange);
|
|
} else {
|
|
Rigidbody.AddForce(velocityChange * JumpControlMultiplier, ForceMode.VelocityChange);
|
|
}
|
|
}
|
|
|
|
private void Jump()
|
|
{
|
|
if (!isGrounded) return;
|
|
|
|
if (Input.GetButton("Jump"))
|
|
{
|
|
Rigidbody.AddForce(0, JumpForce, 0, ForceMode.Impulse);
|
|
}
|
|
}
|
|
}
|
|
}
|