【问题标题】:Unity 3D movement slidingunity 3D 运动滑动
【发布时间】:2021-05-25 19:19:55
【问题描述】:

我正在尝试制作一款 FPS 游戏,但是当我按下 w 一会儿然后松开它时,它会滑得比想要的更远。我对 Unity 很陌生,并认为它与更新有关。 代码:

public float moveSpeed = 5f;
public float jumpForce = 5f;
public CharacterController controller;

private Vector3  moveDirection;
public float gravityScale;

void Start()
{
    controller = GetComponent<CharacterController>();
}

void Update()
{
    float yStore = moveDirection.y;

    moveDirection = (transform.forward * Input.GetAxis("Vertical")) + (transform.right * Input.GetAxis("Horizontal"));
    moveDirection = moveDirection.normalized * moveSpeed;
    moveDirection.y = yStore;

    if (controller.isGrounded)
    {
        moveDirection.y = 0f;

        if (Input.GetButtonDown("Jump"))
        {
            moveDirection.y = jumpForce;
        }
    }

    moveDirection.y = moveDirection.y + (Physics.gravity.y * gravityScale);
    controller.Move(moveDirection * Time.deltaTime);
}

【问题讨论】:

  • 一般来说,一个问题可能出在moveDirection.normalized .. 这可以确保即使轴是例如0.0001, 0.0001 它仍将被归一化为幅度为 1 的向量 ...一般而言,此用例很少使用 ClampMagnitude
  • 好吧,然后它使用刚体 .. 不知道 CharacterController 在引擎盖下是如何工作的,但也许它不会立即停止刚体

标签: c# unity3d


【解决方案1】:

在地面上添加物理材质并将动摩擦力设置为 1。接下来,将静摩擦力从 0.5 设置为 1。最后但同样重要的是,将弹力设置为 0。

稍微调整一下这些值,直到找到满意的值。 这是文档的链接:

https://docs.unity3d.com/Manual/class-PhysicMaterial.html

它基本上解释了每个属性的作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-23
    • 1970-01-01
    • 2018-08-07
    相关资源
    最近更新 更多