Движение игрока в Unity3D: взгляд вверх заставляет моего игрока прыгать - PullRequest
0 голосов
/ 26 марта 2020

Если я двигаюсь вперед, глядя вверх, мой игрок прыгает или, по крайней мере, пытается летать. Если я нажимаю пробел и двигаюсь вперед, глядя вверх, мой игрок прыгает еще выше. Я, честно говоря, понятия не имею, что происходит. Мой прогноз вперед. Если я смотрю вверх, то вперед относительно того, куда я смотрю.

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

public class P_MOVEMENT : MonoBehaviour
{
    private float ACCELERATION = 10.0f;
    private float GRAVITY = -5.0f;
    private float SPEED = 5.0f;

    private float RUNNING_SPEED = 2.0f;
    private float JUMP_IMPULSE = 2.5f;

    private bool isRunning = false;

    CharacterController P_CC;
    Vector3 P_MOVE;

    //Camera Moving Mouse
    private float X_AXIS = 0.0f;
    private float Y_AXIS = 0.0f;
    private float CAMERA_SPEED = 2.0f;

    // Start is called before the first frame update
    void Start()
    {
        P_CC = GetComponent<CharacterController>();    
    }

    // Update is called once per frame
    void Update()
    {
        if(P_CC.isGrounded)
        {
            // Player Movement
            P_MOVE = transform.forward * Input.GetAxis("Vertical") + transform.right * Input.GetAxis("Horizontal");

            // Special Cases Check

            // Running 
            isRunning = ( Input.GetKey(KeyCode.LeftShift) ) ? true : false;
            P_MOVE = (isRunning) ? P_MOVE * SPEED * RUNNING_SPEED : P_MOVE * SPEED;

            // Jumping
            if(Input.GetAxis("Jump") > 0)
            {
                P_MOVE += Vector3.up * JUMP_IMPULSE;
            }
        }
        else
        {
            P_MOVE += Vector3.up * GRAVITY * Time.deltaTime;
        }

        // Player Camera Movement
        X_AXIS += CAMERA_SPEED * Input.GetAxis("Mouse X");
        Y_AXIS -= CAMERA_SPEED * Input.GetAxis("Mouse Y");

        // Restrict 90 Degree Up and Down
        Y_AXIS = Mathf.Clamp(Y_AXIS, -60f, 90f);

        // Update Rotation
        transform.eulerAngles = new Vector3(Y_AXIS, X_AXIS, 0.0f);
    }

    void FixedUpdate()
    {
        P_CC.Move(P_MOVE * Time.deltaTime);
    }
}

1 Ответ

0 голосов
/ 26 марта 2020

Вы, наверное, правы. Ваш transform.forward относится к локальным координатам GameObject вместо глобальных.

Вы можете попробовать обновить только transform.forward.x и transform.forward.z. Таким образом, вы будете игнорировать transform.forward.y. Таким образом, игрок не должен двигаться вверх.

Примерно так:

P_MOVE = transfrom.forward.x * Input.GetAxis("Vertical") + transform.forward.z * Input.GetAxis("Vertical") + transform.right * Input.GetAxis("Horizontal");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...