这个问题可能已经在某个地方被问过并得到了回答,但我在 StackOverflow 上没有看到提到这样的情况。
问题:几天后,我的游戏对象附加了一个角色控制器组件,它们不再服从重力了。它们可以按预期在 X 和 Z 上移动,但 在任何情况下都不会掉落到地面。
我不认为问题出在我制作的脚本上,因为我用一个完全没有任何代码的对象进行了测试,但它仍然卡在空中。我以为这是我只在一个项目中意外修改的属性,但事实证明该问题影响了我的所有 Unity 项目。
我应该重新安装 Unity,还是从头开始重新创建所有项目?
“第三人称玩家”对象是一个空物体,圆柱体和头部是它的父级。
编辑:根据 amitklein 的要求,这是视图和检查器的图像:
[
编辑2:根据reddit上的询问,这是移动脚本:
[代码]
// Character Controller
public CharacterController devonController;
//Values and movement tools
public float walkSpeed = 4.0f;
public float unchargedJumpForce = 10.0f;
public float chargedJumpForce;
public Vector3 floorMotionVector;
public Vector3 jumpVector;
public float Gravity = -9.81f;
void Start()
{
devonController = GetComponent<CharacterController>();
}
void Update()
{
float horizontal = Input.GetAxisRaw("Horizontal");
float vertical = Input.GetAxisRaw("Vertical");
floorMotionVector = new Vector3(horizontal, 0, vertical).normalized;
if(floorMotionVector.magnitude >= 0.1f && Input.GetKey(KeyCode.LeftShift))
{
devonController.Move(floorMotionVector * (6 * walkSpeed) * Time.deltaTime);
}
else
{
devonController.Move(floorMotionVector * walkSpeed * Time.deltaTime);
}
}
[/代码]
您需要自己为CharacterController.Move()函数添加重力。
*注意:如果您使用刚体,则需要以不同的方式创建运动。我不会混合使用 CharacterController 和 Rigidbody 组件。它们的内置功能会发生冲突并给您带来问题。我建议选择其中之一。
对于 CharacterController,在类中创建两个属性,分别称为
private float ySpeed;
和 public float gravity = 20;
float horizontal = Input.GetAxisRaw("Horizontal");
float vertical = Input.GetAxisRaw("Vertical");
floorMotionVector = new Vector3(horizontal, 0, vertical).normalized;
ySpeed -= gravity * Time.deltaTime; // Apply a constant gravity every frame
floorMotionVector.y = ySpeed; // Apply gravity to your movement vector
// update your CharacterController
CharacterController.Move(MoveInput * Time.deltaTime);
ySpeed
将单独跟踪您的运动矢量的 Y 轴。这可以让你做重力和跳跃之类的事情。希望有帮助!快乐编码。