Controlador en primera persona de Unity (FirstPersonController)

estructura en primera persona

Insertar descripción de la imagen aquí

Colocación de la cámara

Insertar descripción de la imagen aquí

Controlador de personajes

Insertar descripción de la imagen aquí

La idea básica:
Controla la cámara alrededorrotación del eje x=> personajearriba y abajoVer rotación,
control del cuerpo (cilindro).acerca deRotación => Script para controlar el personaje.acerca deRotación de perspectiva.

Insertar descripción de la imagen aquí

simular la gravedad

(Desventajas de usar carácter
Insertar descripción de la imagen aquí

Insertar descripción de la imagen aquí

código

MouseLook.cs

Insertar descripción de la imagen aquí

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MouseLook : MonoBehaviour
{
    
    
    //sensitivity => 灵敏度
    public float MouseSensitivity = 100f;

    public Transform PlayerBody;

    private float XRotation = 0f;


    // Start is called before the first frame update
    void Start()
    {
    
    
        Cursor.lockState = CursorLockMode.Locked;
    }

    // Update is called once per frame
    void Update()
    {
    
    
        float MouseX = Input.GetAxis("Mouse X") * MouseSensitivity * Time.deltaTime;
        float MouseY = Input.GetAxis("Mouse Y") * MouseSensitivity * Time.deltaTime;

        XRotation -= MouseY;
        XRotation = Mathf.Clamp(XRotation, -90f, 90f);

        transform.localRotation = Quaternion.Euler(XRotation, 0f, 0f);

        PlayerBody.Rotate(Vector3.up * MouseX);

    }
}

PlayerMovement.cs

Insertar descripción de la imagen aquí

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    
    
    public CharacterController CharacterController;

    [Header("Move")]
    public float Speed = 12f;
    public float Gravity = 20f;
    private Vector3 m_Velocity;
    [Space]
    [Header("IsGrounded")]
    public Transform GroundCheck;
    public float GroundDistance;
    public LayerMask GroundMask;

    private bool m_IsGrounded;

    [Header("Jump")]
    public float JumpHeight;

    // Update is called once per frame
    void Update()
    {
    
    
        // 落地检测
        m_IsGrounded = Physics.CheckSphere(GroundCheck.position, GroundDistance, GroundMask);
        if (m_IsGrounded && m_Velocity.y < 0)
        {
    
    
            m_Velocity.y = -2;
        }

        //平面移动
        float x = Input.GetAxis("Horizontal");
        float y = Input.GetAxis("Vertical");

        Vector3 MoveDir = transform.right * x + transform.forward * y;

        CharacterController.Move(MoveDir * Speed * Time.deltaTime);

        //自由落体
        m_Velocity.y -= Time.deltaTime * Gravity;

        CharacterController.Move(m_Velocity * Time.deltaTime);

        //跳跃
        if (Input.GetButtonDown("Jump")
            && m_IsGrounded)
        {
    
    
            m_Velocity.y = Mathf.Sqrt(JumpHeight * 2f * Gravity);
        }

    }
}

algunas pequeñas extensiones

Cursor.LockState

Modo de bloqueo del cursor
Insertar descripción de la imagen aquí

Bloqueado: bloquea el cursor encentro de pantallaNo visualizable.
Confinado: bloquea el cursor enDentro de la interfaz del juego, no puede moverse, cursorserá mostrado

Supongo que te gusta

Origin blog.csdn.net/weixin_44293055/article/details/109523635
Recomendado
Clasificación