Как я могу заставить персонажа присесть, а также двигаться быстрее, когда левая клавиша Shift удерживается нажатой? - PullRequest
0 голосов
/ 22 апреля 2020

Это снимок экрана с настройками ввода в редакторе, где нет наклонов и сдвигов влево, чтобы заставить игрока двигаться быстрее.

Это мой контроллер имени персонажа. подключен к FPSController (Player).

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

public class CharacterController : MonoBehaviour
{
    public float moveSpeed = 10.0f;
    public float jumpForce = 2.0f;

    void Start()
    {

    }

    // Update is called once per frame
    void Update ()
    {
        float translatioin = Input.GetAxis("Vertical") * moveSpeed;
        float straffe = Input.GetAxis("Horizontal") * moveSpeed;
        translatioin *= Time.deltaTime;
        straffe *= Time.deltaTime;

        transform.Translate(straffe, 0, translatioin);

        if (Input.GetKeyDown("escape"))
        {
            Cursor.lockState = CursorLockMode.None;
        }

        transform.Translate(0, jumpForce * Input.GetAxis("Jump") * Time.deltaTime, 0);
    }
}

Я хочу добавить наклон и сдвиг влево для более быстрого перемещения.

Этот скрипт предназначен только для управления мышью, которая смотрит вокруг и блокирует состояние Курсор мыши прикреплен к основной камере (Player child).

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

public class camMouseLook : MonoBehaviour
{
    Vector2 mouseLook;
    Vector2 smoothV;

    public float sensitivity = 5.0f;
    public float smoothing = 2.0f;
    public bool mouseDown = false;
    public bool cursorLock = false;
    public HandleMouseCursor handleMouseCursor;

    GameObject character;

    // Use this for initialization
    void Start ()
    {
        if(cursorLock == false)
        {
            Cursor.lockState = CursorLockMode.None;
            handleMouseCursor.setMouse();
        }
        else
        {
            Cursor.lockState = CursorLockMode.Locked;
        }
        character = this.transform.parent.gameObject;
    }

    // Update is called once per frame
    void Update ()
    {
        if (Input.GetMouseButton(0) && mouseDown == true)
        {
            MouseLook();
        }
        else
        {
            if (mouseDown == false)
            {
                MouseLook();
            }
        }
    }

    private void MouseLook()
    {
        if (cursorLock == false)
        {
            Cursor.lockState = CursorLockMode.None;
            handleMouseCursor.setMouse();
        }
        else
        {
            Cursor.lockState = CursorLockMode.Locked;
        }

        var md = new Vector2(Input.GetAxisRaw("Mouse X"), Input.GetAxisRaw("Mouse Y"));

        md = Vector2.Scale(md, new Vector2(sensitivity * smoothing, sensitivity * smoothing));
        smoothV.x = Mathf.Lerp(smoothV.x, md.x, 1f / smoothing);
        smoothV.y = Mathf.Lerp(smoothV.y, md.y, 1f / smoothing);
        mouseLook += smoothV;

        mouseLook.y = Mathf.Clamp(mouseLook.y, -90f, 90f);

        transform.localRotation = Quaternion.AngleAxis(-mouseLook.y, Vector3.right);
        character.transform.localRotation = Quaternion.AngleAxis(mouseLook.x, character.transform.up);
    }
}

1 Ответ

0 голосов
/ 22 апреля 2020

Вы можете изменить скорость вашего движения в вашем скрипте CharacterController. Просто создайте переменную для скорости приседания и воспроизведите ее в векторе перевода.

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

public class CharacterController : MonoBehaviour
{
    public float moveSpeed = 10.0f;
    public float crouchSpeed = 20;
    public float jumpForce = 2.0f;

    void Start()
    {

    }

    // Update is called once per frame
    void Update ()
    {
        float finalMoveSpeed = moveSpeed;

        // you can add more IF statements for more actions like walking, running, jumping,...
        if(Input.GetKey(KeyCode.KeyCode.LeftShift))
              finalMoveSpeed = crouchSpeed ;

        float translatioin = Input.GetAxis("Vertical") * finalMoveSpeed ;
        float straffe = Input.GetAxis("Horizontal") * finalMoveSpeed ;
        translatioin *= Time.deltaTime;
        straffe *= Time.deltaTime;

        transform.Translate(straffe, 0, translatioin);

        if (Input.GetKeyDown("escape"))
        {
            Cursor.lockState = CursorLockMode.None;
        }

        transform.Translate(0, jumpForce * Input.GetAxis("Jump") * Time.deltaTime, 0);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...