我正在使用C#在团结中工作,我的代码遇到了一个问题。我附加到我的播放器上的角色控制器是自动拖拽播放机的。我知道CC造成了这种行为,因为没有CC启用或存在,我的玩家仍然固定在空间中。不幸的是,在阅读了CC上的Unity之后,我无法找到任何描述此功能或如何关闭它的地方。
我更愿意不用完全删除CC,因为它对许多第一人称机械师是有用的,但我很困惑,也不知道我哪里出了问题。我需要重力在我的控制之下,因为它是由我的跳跃机械引起的问题。谢谢您事先提出的任何想法,请看下面的视频来演示这个问题。
public CharacterController controller;
public float walkSpeed = 3f;
public float runSpeed = 6f;
public float gravity = -9.81f;
public float jumpHeight = 4f;
void Start()
{
}
void Update()
{
if ((Input.GetButtonDown("Jump")))
{
Vector3 antigravity = new Vector3(0, Mathf.Sqrt(jumpHeight * -2f * gravity), 0);
controller.Move(antigravity);
}
if ((Input.GetAxis("Horizontal") != 0) || (Input.GetAxis("Vertical") != 0))
{
float xInput = Input.GetAxis("Horizontal");
float zInput = Input.GetAxis("Vertical");
float running = Input.GetAxis("Fire3");
Vector3 move = transform.right * xInput + transform.forward * zInput;
if (running > 0)
{
controller.Move((move * runSpeed * Time.deltaTime));
}
else
{
controller.Move(move * walkSpeed * Time.deltaTime);
}
}
}除上述代码外,我没有以任何其他方式与CC进行交互。
发布于 2022-05-26 01:34:30
我刚刚发现了同样的问题,“通常”字符控制器不应用重力.所有的信息和教程将告诉你,你自己的,我有。
但是如果你应用根运动并将Y烘焙到动画中,它就会应用Physics.Gravity.我只能猜测,如果应用根运动,但Y是烘焙的,那么它只是在内部应用SimpleMove(),而不是在CharacterController上移动()。
只有我能看到的解决办法是:
发布于 2020-10-01 20:41:47
好的,所以我采取了一种不同的方法,并改变了我的代码,下面的代码现在是可用的,尽管我仍然不知道是什么导致了最初的问题。
public CharacterController controller;
private float speed;
public float walkSpeed = 5f;
public float runSpeed = 10f;
public float turnSpeed = 90f;
public float jumpSpeed = 8f;
public float gravity = 9.8f;
private float vSpeed = 0f;
void Update()
{
if (Input.GetButton("Fire3"))
{
transform.Rotate(0, Input.GetAxis("Horizontal") * turnSpeed * Time.deltaTime, 0);
Vector3 vel = transform.forward * Input.GetAxis("Vertical") * runSpeed;
if (controller.isGrounded)
{
vSpeed = 0;
if (Input.GetButtonDown("Jump"))
{
vSpeed = jumpSpeed;
}
}
vSpeed -= gravity * Time.deltaTime;
vel.y = vSpeed;
controller.Move(vel * Time.deltaTime);
}
else
{
speed = walkSpeed;
transform.Rotate(0, Input.GetAxis("Horizontal") * turnSpeed * Time.deltaTime, 0);
Vector3 vel = transform.forward * Input.GetAxis("Vertical") * walkSpeed;
if (controller.isGrounded)
{
vSpeed = 0;
if (Input.GetButtonDown("Jump"))
{
vSpeed = jumpSpeed;
}
}
vSpeed -= gravity * Time.deltaTime;
vel.y = vSpeed;
controller.Move(vel * Time.deltaTime);
}https://stackoverflow.com/questions/64146871
复制相似问题