【问题标题】:Is Character movement with changing Transform directly and involving Character Controller OK?直接改变Transform并涉及角色控制器的角色移动可以吗?
【发布时间】:2020-10-29 19:58:12
【问题描述】:

我是初学者,所以如果这个问题没有意义,具体等,请耐心等待。谢谢! 编程对我来说仍然是一个抽象的东西。

我尝试制作一个包含 CharacterController 组件(用于 isGrounded 和 Move())的角色控制脚本,用于跳跃目的。

我还需要一种在轨道上移动角色的方法,所以我尝试了在 Lerping x 值末尾使用变换组件移动它的解决方案。

我的问题是这是一个很好的解决方案。会不会给引擎带来一些问题?

\\\
  void Start()
    {
        myTransform = GetComponent<Transform>();
        characterController = GetComponent<CharacterController>();
        input = GetComponent<SimpleInput>();
        moveStep = myTransform.position;
    }

    // Update is called once per frame
    void Update()
    {
        
        

        if (characterController.isGrounded)
        {
            yVelocity = -1f;

            if (Input.GetKeyDown(KeyCode.Space))
            {
                Jump();
            }

            SelectTrack();
            xVelocity = Mathf.Lerp(transform.position.x, currentTrack * TrackWidth, 0.5f);
           


        }

        else
        {
            yVelocity += -gravity * Time.deltaTime;
            yVelocity = Mathf.Clamp(yVelocity, -gravity, JumpForce);
        }
        

        

        
        
        moveStep.y = yVelocity;
        characterController.Move(moveStep * Time.deltaTime);

        transform.position = new Vector3(xVelocity, transform.position.y, transform.position.z);
        //myTransform.position = moveStep;
    }

    void SelectTrack()
    {


        if (Input.GetKeyDown(KeyCode.A))
        {
            currentTrack -=1;
        }
        if (Input.GetKeyDown(KeyCode.D))
        {
            currentTrack += 1;
        }
        currentTrack = Mathf.Clamp(currentTrack, -1, 1);
    }

    void Jump()
    {
        yVelocity = JumpForce;
    }
}
\\\

【问题讨论】:

  • 既然团结可以为你做,为什么要实施你自己的重力
  • 嗨,BugFinder。你的意思是我可以使用刚体?我想我这样做是为了学习。另外,我希望事情尽可能紧凑、精确。

标签: unity3d controller transform infinite runner


【解决方案1】:

据我所知,有两种移动角色的方法,就像你所做的那样,改变变换或使用暗示力的刚体。 由于力系统可能变得不稳定,混合这两种方法不是一个好习惯。但是,角色控制器不受力的影响,因此如果您始终与变换进行交互,则不会有问题。 此外,我看到您正在尝试模拟重力,也许使用刚体和力会使其更容易并获得更好的结果。

看看。 https://docs.unity3d.com/es/current/Manual/class-Rigidbody.html https://docs.unity3d.com/ScriptReference/CharacterController.html

【讨论】:

  • 嘿,谢谢丹尼尔的帮助!如果您需要游戏对象在某个位置(例如赛道中心)结束,我不确定它是否会随着力移动而得到很好的解决方案?
  • 在不了解您的项目的情况下回答这个问题有点困难。我不明白你为什么需要跳槽,所以我认为我不能更有用
  • 只要添加这个东西就可以了。它给了我一个很好的结果,除了有时跳跃的高度不同。
  • 我基本上是在尝试制作无限的跑步者,在那里东西会被扔向玩家而不是玩家向前移动。
  • 这个想法是将移动限制在三个轨道(左、中、右),没什么特别的。并跳过障碍物。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-23
  • 1970-01-01
相关资源
最近更新 更多