【问题标题】:How to lock a playercontroller on the y axis in Unity如何在 Unity 中将玩家控制器锁定在 y 轴上
【发布时间】:2022-04-03 19:11:48
【问题描述】:

我正在 Unity 中制作一个小型第三人称游戏演示,玩家在 y 轴上没有移动。没有跳跃,没有攀登,什么都没有。没有丘陵。没有山谷。没有楼梯。什么都没有。

但是IS是一小堆玩家控制器不断爬上去的木头。我把它放在那里只是为了好看,但事实证明这是一个令人沮丧的挑战。我正在尝试找出一种方法来阻止角色控制器在 Y 轴上完全上升/下降。

这是我为玩家移动设置的代码,它直接来自 Brackeys 的第一人称移动视频。

public class PlayerMovementScript : MonoBehaviour
{
    public CharacterController controller;
    //here a function of unity called CharacterController was used.
    //it created another "reference" in unity that a game object can be assigned to
    //this is used below

    public float speed = 5f;
    public float strafe = 1f;

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

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

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

        controller.Move(move * speed * Time.deltaTime);
    }
}

我尝试了几种不同的解决方案,但都没有奏效。 我已经连接了一个刚体来锁定 y 位置,然后是一个可配置的关节。 我尝试了一些不同的代码来尝试将对象的位置更新为每帧 y=1。 角色控制器组件附带的设置似乎与现实无关。我将坡度限制和步距偏移都设置为 0,由于某种原因,我的角色仍然可以爬上非常陡峭的斜坡(例如 140 度)并采取相当大的步骤。 我想可能是东西被卡在了胶囊底部的圆形边缘下并允许它被向上推,所以我尝试将一个圆柱体的网状对撞机连接到播放器上,以消除胶囊下方的小空间。无论如何,玩家一直在攀爬。

我对编码还是很陌生,大概只有 2 个月的时间,而且我还没有完全理解整个编码。但是,我觉得这不应该这么复杂。

我错过了什么吗?如何防止角色控制器向上或向下移动?我需要切换到刚体并完成它吗?

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    如果你有一堆木头只是为了好看,简单的解决方案是禁用它上面的碰撞器。但它不会与场景中的其他任何东西发生碰撞。另一种解决方案是,您可以将不希望玩家碰撞的障碍物分配给“障碍物”等层,将玩家分配给“玩家”等另一层。然后您可以在 Project settings -> Physics 中禁用 Player 层和 Obstacle 层之间的碰撞。 Click here to see

    【讨论】:

    • 那肯定行得通,而且我想我也可以在那里放置一个玩家无法穿过的隐形网格对撞机立方体。我也可以在玩家头顶上方制作一个大型网状对撞机来锁定他们。我主要想知道是否有可能将玩家控制器实际锁定到某个轴。
    猜你喜欢
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多