首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的角色控制器是自动统一应用重力的吗?

我的角色控制器是自动统一应用重力的吗?
EN

Stack Overflow用户
提问于 2020-09-30 22:57:34
回答 2查看 3.4K关注 0票数 0

我正在使用C#在团结中工作,我的代码遇到了一个问题。我附加到我的播放器上的角色控制器是自动拖拽播放机的。我知道CC造成了这种行为,因为没有CC启用或存在,我的玩家仍然固定在空间中。不幸的是,在阅读了CC上的Unity之后,我无法找到任何描述此功能或如何关闭它的地方。

我更愿意不用完全删除CC,因为它对许多第一人称机械师是有用的,但我很困惑,也不知道我哪里出了问题。我需要重力在我的控制之下,因为它是由我的跳跃机械引起的问题。谢谢您事先提出的任何想法,请看下面的视频来演示这个问题。

代码语言:javascript
复制
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进行交互。

https://youtu.be/8gprUJLzvHk

EN

回答 2

Stack Overflow用户

发布于 2022-05-26 01:34:30

我刚刚发现了同样的问题,“通常”字符控制器不应用重力.所有的信息和教程将告诉你,你自己的,我有。

但是如果你应用根运动并将Y烘焙到动画中,它就会应用Physics.Gravity.我只能猜测,如果应用根运动,但Y是烘焙的,那么它只是在内部应用SimpleMove(),而不是在CharacterController上移动()。

只有我能看到的解决办法是:

  1. 在项目设置中将重力设置为零(不太灵活)。

  1. 不要用根运动把Y烤成动画。
票数 1
EN

Stack Overflow用户

发布于 2020-10-01 20:41:47

好的,所以我采取了一种不同的方法,并改变了我的代码,下面的代码现在是可用的,尽管我仍然不知道是什么导致了最初的问题。

代码语言:javascript
复制
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);
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64146871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档