unity3d 我的角色只向左移动而我什么也没做

93ze6v8z  于 2022-12-23  发布在  其他
关注(0)|答案(1)|浏览(140)

我的角色在我不做任何事情的情况下自己移动,我已经检查了几次移动代码,我甚至尝试了具有相同功能的其他方法(移动角色),它们都继续出现相同的问题(代码工作在是,但我的角色无限地自己移动)我还安装和卸载了Unity客户端的版本,看看是否可以通过这样做来解决,但没有
你认为这可能是Unity客户端的问题吗?我使用的是2022版本,虽然在2021和2019版本中也发生了同样的事情,但这可能是我不小心接触到的一些配置吗?如果是这样,我如何将其恢复到原始状态?
这是我使用的代码之一,我也尝试了字符控制器

public class PlayerController : MonoBehaviour
{
    private new Rigidbody rigidbody;

    public float speed = 10f;

    void Start()
    {
        rigidbody = GetComponent<Rigidbody>();
    }

    void Update()
    {
        float hor = Input.GetAxisRaw("Horizontal");
        float ver = Input.GetAxisRaw("Vertical");

        if (hor != 0.0f || ver != 0.0f)
        {
            Vector3 dir = transform.forward * ver + transform.right * hor;

            rigidbody.MovePosition(transform.position + dir * speed * Time.deltaTime);
        }

    }
}

这是我尝试使用CharacterController的另一个脚本
公共类播放器控制器:单一行为{

public float horizontalMove;
public float verticalMove;
public CharacterController player;

public float playerspeed;

void Start() {
    player = GetComponent<CharacterController>();
    
}

void Update() {

    horizontalMove = Input.GetAxis("Horizontal");
    verticalMove = Input.GetAxis("Vertical");

    
}

private void FixedUpdate()
{
    player.Move(new Vector3(horizontalMove, 0, verticalMove) * playerspeed * Time.deltaTime);
}

}
当我看到他们没有解决问题时,我使用,我保存并从我的项目中删除,现在我创建了一个新文件,专注于寻找问题的解决方案,因为使用任何脚本移动角色时,刚体或CharacterController都会发生这种情况,我尝试使用Debug.Log来找出问题所在,但也不起作用。它位于平地上,我也关闭了重力,但问题仍然存在。没有外力施加到刚体,因为这是一个新的项目,我把重点放在这个问题。我没有任何其他脚本目前在我的项目。这是我使用的字符控制器脚本,它没有为我工作,我会给予你的链接,我得到了它
角色控制器:https://www.youtube.com/watch?v=FvvTDkJvBfA&t=1296s
刚体:https://www.youtube.com/watch?v=0oi8GzAm49k
我会非常感激,如果你帮我解决这个错误,我有,我一直在寻找一个解决方案或解释两天的论坛和youtube视频

9gm1akwq

9gm1akwq1#

虽然这并不是一个确切的答案,但这是您可以采取的第一步,以确定问题是什么,根据上面的评论:

void Update ( )
{
    var hor = Input.GetAxisRaw("Horizontal");
    var ver = Input.GetAxisRaw("Vertical");

    // If you're using a joystick that isn't quite calibrated, you might be getting a slight reading?
    // Here we could check if the value is ALMOST 0:
    // hor = Mathf.Approximately(hor, 0) ? 0 : hor;

    if ( hor != 0f || ver != 0f )
    {
        Debug.Log ( $"Horizontal: {hor}. Vertical {ver}." );
        var dir = (transform.forward * ver) + (transform.right * hor);
        rigidbody.MovePosition ( transform.position + Time.deltaTime * speed * dir );
    }

    var accumulatedForce = rigidbody.GetAccumulatedForce ( );
    if ( accumulatedForce != Vector3.zero )
    {
        Debug.Log ( $"accumulatedForce: {accumulatedForce}" );
    }
}

相关问题