统一的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);
}
}
我很乐意回答你的问题,但我不能漏掉这个小插曲。我无法强调这一点。如果你是团结的新手,你应该尽量避免发布这样的问题。我并不是不鼓励你提问,但既然你是新手,那么在你发帖之前真的要先试一试。你会学到更多的东西,去掉变量和代码行,自己想办法解决,而不是马上得到答案。
无论如何我相信答案就在你代码的最后两行。
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,它将平滑键盘输入。