勾选刚体组件的重力选项
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CSmove : MonoBehaviour
{
public Rigidbody rigidbody;
public Transform cameraTF;
public float speed = 5f;
public float rotateSpeed = 5f;
public float maxRotate, minRotate;//限制角度
public float rotateHead;//相机方向
public float headSpeed;//相机移动速度
//重力/Jump
private float gravity = -9.8f;
public float jumpAddSpeed = 15f;
private float upSpeed;//竖直方向的速度
private bool jumping = false;
// Use this for initialization
void _jump()
{
upSpeed = jumpAddSpeed;
jumping = true;
}
void Start()
{
rigidbody = GetComponent<Rigidbody>();
}
// Update is called once per frame
void Update()
{
if (jumping == false)
{
if (Input.GetKeyDown("space"))
{
_jump();
}
}
else
{
upSpeed += gravity * Time.deltaTime;
if (upSpeed <= 0.5f)
{
upSpeed = 0;
jumping = false;
}
}
float hor = Input.GetAxisRaw("Horizontal");
float ver = Input.GetAxisRaw("Vertical");
Vector3 morDir = hor * transform.right + ver * transform.forward;
Vector3 norHor_Ver = morDir.normalized;//斜向移动速度等于正向移动速度
Vector3 Up = upSpeed * transform.up;//跳跃方向即大小
rigidbody.MovePosition(norHor_Ver * speed * Time.deltaTime+Up*Time.deltaTime + transform.position);
// rigidbody.transform.position = (Up * Time.deltaTime + transform.position);//y轴方向移动
//视角移动
float mouseX = Input.GetAxisRaw("Mouse X");
float mouseY = Input.GetAxisRaw("Mouse Y");
rigidbody.MoveRotation(transform.rotation * Quaternion.Euler(new Vector3(0, mouseX * rotateSpeed, 0) * Time.deltaTime));
rotateHead += mouseY * headSpeed * Time.deltaTime;
if (rotateHead > maxRotate) rotateHead = maxRotate;
if (rotateHead < minRotate) rotateHead = minRotate;
cameraTF.localEulerAngles = new Vector3(-rotateHead, 0, 0);
}
}