首页 > 解决方案 > Unity3D 播放器移动:抬头让我的播放器跳跃

问题描述

如果我在抬头时向前移动,我的玩家会跳跃或至少尝试飞行。如果我按下空格键并在抬头的同时向前移动,我的玩家会跳得更高。老实说,我不知道发生了什么。我的预测是前锋。如果我向上看,向前是相对于我正在寻找的地方。

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);
    }
}

标签: c#unity3d

解决方案


你可能是对的。您的 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");

推荐阅读