我有一个奇怪的问题,似乎无法解决它。我在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;
}
}
1条答案
按热度按时间wlp8pajw1#
尝试不要通过脚本锁定玩家的旋转,可能是由于万向节锁定导致的问题。相反,请转到您的玩家的刚体-〉约束,然后锁定它。您可以在这里阅读更多关于它的信息https://fr.wikipedia.org/wiki/Blocage_de_cardan