unity3d 当我的球员接触到另一个物体时,它会得到一个奇怪的恒定的后推运动

5vf7fwbs  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(117)

我有一个奇怪的问题,似乎无法解决它。我在Unity中创建了我的第一个游戏,在创建了一个移动系统后,我测试了一下,每当我触摸另一个物体(不管它是否有刚体)时,我的玩家突然开始自己移动。我有一个视频显示了具体发生了什么:https://youtu.be/WGrJ0KNYSr4
我已经尝试了一些不同的事情,我确定它必须与物理引擎做一些事情,因为它只发生在球员不是运动。所以,我试图增加项目设置中的物理求解器迭代,但错误仍然发生。我在互联网上寻找答案,但我唯一找到的是删除时间。deltaTime,虽然它仍然不起作用。我发现,它似乎很少发生,虽然当球员是快速移动。
如果有人能帮助我,我会非常感激。这是我第一个真正的游戏,我正在为itch.io上的Seajam制作它。
下面是我的playercontroller脚本的代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{
    public float playerSpeed = 3f;
    private Rigidbody playerRb;
    public GameObject cameraRotation;
    // Start is called before the first frame update
    void Start()
    {
        playerRb = GetComponent<Rigidbody>();
    }

    float verticalSpeed;
    float horizontalSpeed;
    bool isOnGround = true;

    // Update is called once per frame
    void Update()
    {
        //get controlled forward and backward motion
        verticalSpeed = Input.GetAxis("Vertical");
        transform.Translate(Vector3.forward * playerSpeed * verticalSpeed * Time.deltaTime);

        //get controlled sidewards motion
        horizontalSpeed = Input.GetAxis("Horizontal");
        transform.Translate(Vector3.right * playerSpeed * horizontalSpeed * Time.deltaTime);

        //lock the rotation of the player on the z and x axis
        transform.eulerAngles = new Vector3(0, cameraRotation.transform.eulerAngles.y, 0);

        //when pressing space jump and prevent air jump
        if (Input.GetKeyDown(KeyCode.Space) && isOnGround)
        {
            playerRb.AddForce(Vector3.up * 10, ForceMode.Impulse);
            isOnGround = false;
        }
    }

    //check if the player is on the ground
    private void OnCollisionEnter(Collision collision)
    {
        isOnGround = true;
    }
}
wlp8pajw

wlp8pajw1#

尝试不要通过脚本锁定玩家的旋转,可能是由于万向节锁定导致的问题。相反,请转到您的玩家的刚体-〉约束,然后锁定它。您可以在这里阅读更多关于它的信息https://fr.wikipedia.org/wiki/Blocage_de_cardan

相关问题