如何删除3D统一运动中的滑行?

问题描述 投票:0回答:2

统一的3D运动有这个内置的功能,它滑行,当你停止持有的关键,我怎么删除这个滑行? 提醒你,我还没有尝试任何东西,我很新的统一,最有可能是一些按钮,我需要点击,所以请帮助。

这里的代码。

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

public class movement : MonoBehaviour
{

    float moveSpeed;
    float walkSpeed = 3;
    float sprintSpeed = 6;


    public CharacterController controller;
    public float gravity = -9.81f;

    public Transform groundCheck;
    public float groundDistance = 8.4f;
    public LayerMask groundMask;
        Vector3 velocity;
    bool isGrounded;
    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {

        if (Input.GetKey(KeyCode.LeftShift))
        {
            moveSpeed = sprintSpeed;
        }
        else
        {
            moveSpeed = walkSpeed;
        }


        isGrounded = Physics.CheckSphere(groundCheck.position, groundDistance, groundMask);

        if(isGrounded && velocity.y < 0)
        {
            velocity.y = -2f;
        }

        float x = Input.GetAxis("Horizontal");
        float z = Input.GetAxis("Vertical");

        Vector3 move = transform.right * x + transform.forward * z;

         controller.Move(move * moveSpeed * Time.deltaTime);

        velocity.y += gravity * Time.deltaTime;

        controller.Move(velocity * Time.deltaTime);

    }

}

unity3d
2个回答
0
投票

我很乐意回答你的问题,但我不能漏掉这个小插曲。我无法强调这一点。如果你是团结的新手,你应该尽量避免发布这样的问题。我并不是不鼓励你提问,但既然你是新手,那么在你发帖之前真的要先试一试。你会学到更多的东西,去掉变量和代码行,自己想办法解决,而不是马上得到答案。

无论如何我相信答案就在你代码的最后两行。

    velocity.y += gravity * Time.deltaTime;
    controller.Move(velocity * Time.deltaTime);

让我们一行一行地思考这个问题吧 剖析每一行,试着真正理解它们的意思。当你运行你的代码时,你从用户那里收到了三个主要的输入。

    if (Input.GetKey(KeyCode.LeftShift))
    float x = Input.GetAxis("Horizontal");
    float z = Input.GetAxis("Vertical");

if (Input.GetKey(KeyCode.LeftShift)) 一个是检查你的用户是否要运行的检查。另外两个是接收可能是鼠标移动的输入。这些主要是用来定义用户的移动。我们知道这一点,因为它们直接与接下来的这两行联系在一起。

    Vector3 move = transform.right * x + transform.forward * z;
    controller.Move(move * moveSpeed * Time.deltaTime);

现在当你仔细看这个的时候,它告诉我们,如果用户没有移动鼠标,那就说明 Vector3 move 这意味着我们的球员将停止移动,他们应该没有理由滑行。但是,看看接下来的两个。

    velocity.y += gravity * Time.deltaTime;
    controller.Move(velocity * Time.deltaTime);

这些不一定是由用户输入驱动的。这意味着,考虑到它们是与你的 controller 和其他移动调用在没有用户输入的情况下并没有运行,这两行字 必须 是你的滑行问题的罪魁祸首。

所以删除这些,你应该是好的。 然而,我必须明确,提出问题是好的,但打破代码,了解更多关于它的信息是更好的。作为一个挑战,我认为你应该研究一下是什么原因导致了 velocity.y...也许 isGrounded......这将告诉你更多关于为什么会发生滑行!

希望这能帮到你!


0
投票

检查输入管理器中 "水平 "和 "垂直 "轴上的 "重力 "字段(编辑> 项目设置,然后选择输入类别)。如果不是0,它将平滑键盘输入。

© www.soinside.com 2019 - 2024. All rights reserved.