unity第一人称漫游
unity 基于characterController,写一个第一视角漫游的可运行脚本,里面要求可以按坐shift快跑,空格跳跃,鼠标旋转视角
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FirstPersonController : MonoBehaviour
{
public float walkSpeed = 5.0f;
public float runSpeed = 10.0f;
public float jumpSpeed = 8.0f;
public float gravity = 20.0f;
public float mouseSensitivity = 5.0f;
private CharacterController controller;
private Camera playerCam;
private Vector3 moveDirection = Vector3.zero;
private float verticalRotation = 0;
private float verticalVelocity = 0;
void Start()
{
controller = GetComponent<CharacterController>();
playerCam = transform.Find("Camera").GetComponent<Camera>();
Cursor.lockState = CursorLockMode.Locked;
}
void Update()
{
// Rotate player based on mouse movement
float horizontalRotation = Input.GetAxis("Mouse X") * mouseSensitivity;
transform.Rotate(0, horizontalRotation, 0);
verticalRotation -= Input.GetAxis("Mouse Y") * mouseSensitivity;
verticalRotation = Mathf.Clamp(verticalRotation, -90, 90);
playerCam.transform.localRotation = Quaternion.Euler(verticalRotation, 0, 0);
// Move player
float speed = Input.GetKey(KeyCode.LeftShift) ? runSpeed : walkSpeed;
float horizontalMovement = Input.GetAxis("Horizontal") * speed;
float verticalMovement = Input.GetAxis("Vertical") * speed;
moveDirection = new Vector3(horizontalMovement, 0, verticalMovement);
moveDirection = transform.TransformDirection(moveDirection);
if (controller.isGrounded)
{
verticalVelocity = 0;
if (Input.GetButtonDown("Jump"))
{
verticalVelocity = jumpSpeed;
}
}
verticalVelocity -= gravity * Time.deltaTime;
moveDirection.y = verticalVelocity;
controller.Move(moveDirection * Time.deltaTime);
}
}