C# 如何在Unity中锁定y轴上的playercontroller

C# 如何在Unity中锁定y轴上的playercontroller,c#,unity3d,C#,Unity3d,我正在制作一个小的第三人称游戏演示,在y轴上没有玩家移动。没有跳跃,没有攀爬,什么都没有。没有山。没有山谷。没有楼梯。没什么 但是有一小堆木头,玩家控制者一直在上面爬。我在那里只是为了看起来,但事实证明这是一个令人沮丧的挑战。我试图找出一种方法来阻止角色控制器在Y轴上上升/下降 这是我为玩家移动设置的代码,它是直接从Brackeys的第一人称移动视频中撕下来的 public class PlayerMovementScript : MonoBehaviour { public Chara

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

但是有一小堆木头,玩家控制者一直在上面爬。我在那里只是为了看起来,但事实证明这是一个令人沮丧的挑战。我试图找出一种方法来阻止角色控制器在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个月后,我仍然没有完全理解整个编码过程。但是,我觉得这不应该这么复杂


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

如果你有一堆木头只是为了看起来,简单的解决方法是禁用它上面的碰撞器。但这样它就不会与场景中的其他任何东西发生碰撞。另一个解决方案是,您可以将您不希望玩家与之碰撞的障碍物指定给“障碍物”层,将玩家指定给另一层,例如“玩家”。然后可以在“项目设置”->“物理”中禁用玩家层和障碍层之间的碰撞。

这肯定会奏效,我想我也可以在那里放置一个不可见的网格碰撞器立方体,玩家将无法通过。我也可以在玩家头部上方制作一个大型网格对撞机来锁定他们。我最想知道的是,是否有可能将玩家控制器锁定到某个轴上。