Всем привет! Я пытаюсь сделать простой раннер. Сделал два отдельных скрипта для персонажа и участка дороги, по которому он движется. Скрипт персонажа двигает его влево, вправо и позволяет прыгать, а скрипт дороги двигает её назад, для создания иллюзии бега. В обоих скриптах движение вызывается с помощью rigidbody. Проблема заключается в том, что, когда начинается игра, персонаж (сейчас, на прототипе, его роль выполняет куб) немного погружается в дорогу и начинает подпрыгивать. Из-за этого каждый раз, когда я нажимаю на пробел, персонаж подпрыгивает на разную высоту. Помогите пожалуйста!!!
Если потребуется, смогу скинуть файл с ассетами. Останется только перетащить в окно иерархии персонажа, дорогу и камеру. Они уже настроены и сразу встанут в нужное положение.
Код управления персонажем:using UnityEngine;
public class PlayerController : MonoBehaviour
{
private Rigidbody playerRb;
public float turnSpeed = 10,
distanceBetweenLines = 1.5f,
x = 0,
gravityMod = 4,
jumpForce = 12;
public bool isOnGround = true;
void Start()
{
playerRb = GetComponent<Rigidbody>();
Physics.gravity *= gravityMod;
}
void Update()
{
// Повороты в стороны
if (Input.GetKeyDown(KeyCode.A) && x > -distanceBetweenLines)
{
x -= distanceBetweenLines;
}
else if (Input.GetKeyDown(KeyCode.D) && x < distanceBetweenLines)
{
x += distanceBetweenLines;
}
// Прыжки
if (Input.GetKey(KeyCode.Space) && isOnGround)
{
playerRb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);
isOnGround = false;
}
}
private void FixedUpdate()
{
playerRb.MovePosition(new Vector3(Mathf.Lerp(transform.position.x, x, turnSpeed * Time.deltaTime), transform.position.y, transform.position.z));
}
void OnCollisionEnter(Collision collision)
{
// Проверяем на дороге ли мы
if (collision.gameObject.CompareTag("Road"))
{
isOnGround = true;
}
}
}
Код движения дороги:using UnityEngine;
public class MoveBack : MonoBehaviour
{
private Rigidbody rb;
static float speed = 20;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
rb.velocity = (Vector3.back * speed);
}
}