如何在Unity中将游戏控制器锁定在y轴上



我正在Unity中制作一个第三人称游戏演示,玩家在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度(并迈出相当大的步伐。我想可能是东西卡在了太空舱底部的圆形边缘下面,让它被向上推,所以我试着把一个圆柱体的网格碰撞器连接到播放器上,以消除太空舱下面的小空间。不管怎样,球员一直在攀登。

我对编码还很陌生,大概两个月后,我还没有完全理解整个编码过程。但是,我觉得这不应该这么复杂。

我是不是错过了什么?如何防止角色控制器向上或向下移动?我需要换成一个刚体然后把它搞定吗?

如果你有一堆木头只是为了外观,简单的解决方案是禁用上面的碰撞器。但这样它就不会与场景中的任何其他东西碰撞。另一种解决方案是,你可以将你不希望玩家碰撞的障碍物分配给一个层,比如";障碍物";并将玩家转移到另一层,例如";玩家";。然后,您可以在项目设置中禁用播放器层和障碍物层之间的碰撞->物理学点击此处查看

最新更新