前情提要
1.创建Capsule,为其挂载如下物体及组件。
挂载物体:Main Camera、GroundCheck(空物体)
2.为Main Camera添加摄像机代码(CameraController)。
摄像机(角色)视角
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraController : MonoBehaviour {
public Transform player;
private float mouseX, mouseY; //获取鼠标移动的值
public float mouseSensitivity; //鼠标灵敏度
public float xRotation;
private void Start () {
Cursor.lockState = CursorLockMode.Locked;
}
private void Update () {
mouseX = Input.GetAxis ("Mouse X") * mouseSensitivity * Time.deltaTime;
mouseY = Input.GetAxis ("Mouse Y") * mouseSensitivity * Time.deltaTime;
xRotation -= mouseY;
xRotation = Mathf.Clamp (xRotation, -70f, 70f);
player.Rotate (Vector3.up * mouseX);
transform.localRotation = Quaternion.Euler (xRotation, 0, 0);
}
}
角色移动
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour {
private CharacterController cc;//CharacterController
public float moveSpeed;//移动速度
public float jumpSpeed;//跳跃速度
private float horizontalMove, verticalMove;
private Vector3 dir;
public float gravity;//重力
private Vector3 velocity;//速率
public Transform groundCheck;//地面检测
public float checkRadius;
public LayerMask groundLayer;
public bool isGround;
private void Start () {
cc = GetComponent<CharacterController> ();
}
private void Update () {
isGround = Physics.CheckSphere (groundCheck.position, checkRadius, groundLayer);
if (isGround && velocity.y < 0) {
velocity.y = -2f;
}
horizontalMove = Input.GetAxis ("Horizontal") * moveSpeed;//左右移动
verticalMove = Input.GetAxis ("Vertical") * moveSpeed;//前后移动
dir = transform.forward * verticalMove + transform.right * horizontalMove;
cc.Move (dir * Time.deltaTime);
if (Input.GetButtonDown ("Jump") && isGround) {
velocity.y += jumpSpeed;
}
velocity.y -= gravity * Time.deltaTime;
cc.Move (velocity * Time.deltaTime);
}
}