角色控制器组件 : 不会像rigidbody刚体被弹开, 穿模.
- 在3d物体上添加"Character Controller"组件
- isGrounded:判断是否在地面上
- Move(Vector3 dir * speed Time.deltaTime):类似Transform.Translate,没有重力,需要传递一个方向和速度,所以**需要Time.deltaTime**
- SimpleMove(Vector3 dir speed): 自带重力,本身按照时间来计算的,**不需要Time.deltaTime**
public class pilotController : MonoBehaviour {
private CharacterController characterController;
private Rigidbody rb;
public int moveSpeed = 1;
public int rotateSpeed = 200;
public int jumpSpeed = 8;
private bool isGround = false;
Vector3 dir = Vector3.zero;
void Start () {
characterController = GetComponent<CharacterController>();
rb = GetComponent<Rigidbody>();
//Debug.Log(characterController.isGrounded); //判断物体是否在地面
}
// Update is called once per frame
void Update () {
if (characterController.isGrounded)
{
float horizontal = Input.GetAxis("左右移动");
float vertical = Input.GetAxis("前后移动");
dir = new Vector3(horizontal,0,vertical);
dir = transform.TransformDirection(dir);//物体xyz朝向随左右前后变化而变化
transform.eulerAngles = new Vector3(0,transform.eulerAngles.y + horizontal* Time.deltaTime* rotateSpeed, 0);
if (Input.GetKeyDown(KeyCode.Space))
{
Debug.Log("跳跃");
}
}
characterController.SimpleMove(dir * moveSpeed);
}
}