C# 如何在Unity中锁定y轴上的playercontroller
我正在制作一个小的第三人称游戏演示,在y轴上没有玩家移动。没有跳跃,没有攀爬,什么都没有。没有山。没有山谷。没有楼梯。没什么 但是有一小堆木头,玩家控制者一直在上面爬。我在那里只是为了看起来,但事实证明这是一个令人沮丧的挑战。我试图找出一种方法来阻止角色控制器在Y轴上上升/下降 这是我为玩家移动设置的代码,它是直接从Brackeys的第一人称移动视频中撕下来的C# 如何在Unity中锁定y轴上的playercontroller,c#,unity3d,C#,Unity3d,我正在制作一个小的第三人称游戏演示,在y轴上没有玩家移动。没有跳跃,没有攀爬,什么都没有。没有山。没有山谷。没有楼梯。没什么 但是有一小堆木头,玩家控制者一直在上面爬。我在那里只是为了看起来,但事实证明这是一个令人沮丧的挑战。我试图找出一种方法来阻止角色控制器在Y轴上上升/下降 这是我为玩家移动设置的代码,它是直接从Brackeys的第一人称移动视频中撕下来的 public class PlayerMovementScript : MonoBehaviour { public Chara
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个月后,我仍然没有完全理解整个编码过程。但是,我觉得这不应该这么复杂
我错过什么了吗?如何防止角色控制器向上或向下移动?我是否需要切换到刚体并完成它?如果你有一堆木头只是为了看起来,简单的解决方法是禁用它上面的碰撞器。但这样它就不会与场景中的其他任何东西发生碰撞。另一个解决方案是,您可以将您不希望玩家与之碰撞的障碍物指定给“障碍物”层,将玩家指定给另一层,例如“玩家”。然后可以在“项目设置”->“物理”中禁用玩家层和障碍层之间的碰撞。
这肯定会奏效,我想我也可以在那里放置一个不可见的网格碰撞器立方体,玩家将无法通过。我也可以在玩家头部上方制作一个大型网格对撞机来锁定他们。我最想知道的是,是否有可能将玩家控制器锁定到某个轴上。