public class PlayerController : MonoBehaviour
{
public Rigidbody rig;
public float mutliVel=3f;
public Vector3 vel;
public float H;
public float V;
public Animator anima;
public float landHeight = -0.14f;
public float radius = 0.28f;
public bool onLand;
public float gravity = -9.81f;
public LayerMask layerMask;
public float jumpHeight=40f;
public float jumpTime;
// Update is called once per frame
void Update()
{
vel = transform.rotation * new Vector3(H = Input.GetAxis("Horizontal"), 0, V = Input.GetAxis("Vertical")) *
mutliVel;
rig.velocity = vel;
UpdateAnimator();
if (Input.GetKey(KeyCode.LeftShift))
{
anima.SetFloat("V",2);
mutliVel = 5;
vel = transform.rotation * new Vector3(H = Input.GetAxis("Horizontal"), 0, 1) *
mutliVel;
V = Mathf.Abs(V);
rig.velocity = vel;
}
else
{
mutliVel = 3;
}
OnLand();
OnJump();
}
void UpdateAnimator()
{
anima.SetFloat("V", V);
anima.SetFloat("H", H);
}
void OnLand()
{
if (Physics.CheckSphere(
new Vector3(transform.position.x, transform.position.y - landHeight, transform.position.z), radius,layerMask))
{
onLand = true;
anima.SetBool("onLand", true);
}
else
{
onLand = false;
anima.SetBool("onLand",false);
}
if (!onLand)
{
rig.AddForce(transform.up * gravity);
}
}
void OnJump()
{
if (Input.GetKeyDown(KeyCode.Space)&&onLand)
{
anima.SetBool("onJump", true);
jumpTime = 0.5f;
}
if (Input.GetKey(KeyCode.Space)&&jumpTime>0f&&anima.GetBool("onJump"))
{
rig.AddForce(new Vector3(0f,jumpHeight,0f));
jumpTime -= Time.deltaTime;
}
else
{
anima.SetBool("onJump", false);
}
}
}
unity 刚体移动跳跃动画参考代码
于 2023-11-22 12:59:12 首次发布