characterController.Move与transform.TransformDirection(Vector3)
在这之前的准备工作
给player添加CharacterController
m_cam_ang为Vector3,用来存储摄像机旋转数据
m_cam是摄像机
m_transform = this.transform
player.cs
//更新摄像机旋转角度
m_cam_ang.y += Input.GetAxis("Mouse X");
m_cam_ang.x -= Input.GetAxis("Mouse Y");
m_cam.eulerAngles = m_cam_ang;
//更新人物的旋转角度
Vector3 ang = Vector3.zero;
ang.y = m_cam.eulerAngles.y;
m_transform.eulerAngles = ang;
//人物移动
Vector3 motion = Vector3.zero;
motion.x = Input.GetAxis("Horizontal") * Time.deltaTime * 5;
motion.z = Input.GetAxis("Vertical") * Time.deltaTime * 5;
m_characterController.Move(m_transform.TransformDirection(motion));
player.cs直接复制版
复制前准备工作
a.给player添加CharacterController
b.给环境物体添加conllider
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;
public class player : MonoBehaviour
{
[HideInInspector]
public Transform m_transform;
CharacterController m_characterController;
Transform m_cam;
Vector3 m_cam_ang = Vector3.zero;
void Start() {
m_transform = this.transform;
m_characterController = GetComponent<CharacterController>();
m_cam = Camera.main.transform;
}
void Update() {
//更新摄像机旋转角度
m_cam_ang.y += Input.GetAxis("Mouse X");
m_cam_ang.x -= Input.GetAxis("Mouse Y");
m_cam.eulerAngles = m_cam_ang;
//更新人物的旋转角度
Vector3 ang = Vector3.zero;
ang.y = m_cam.eulerAngles.y;
m_transform.eulerAngles = ang;
//人物移动
Vector3 motion = Vector3.zero;
motion.x = Input.GetAxis("Horizontal")*Time.deltaTime*5;
motion.z = Input.GetAxis("Vertical")*Time.deltaTime * 5;
m_characterController.Move(m_transform.TransformDirection(motion));
}
}