Я создаю простую 2-ю игру, чтобы узнать Unity. У меня есть скрипт, который перемещает игрока влево и вправо по оси x. Кроме того, я добавил элементы управления движением в одном сценарии. Однако у меня есть проблема. Когда я играю в игру и нажимаю клавишу D, чтобы переместить плеер вправо, он движется вправо, но как только я отпустил, он отскакивает назад на 1/2 пути. Я потратил часы, глядя на этот код, но игрок продолжает прыгать назад примерно на 1/2 пути по оси х. Почему это? Пожалуйста, помогите, большое вам спасибо!Сценарий с управляющим игроком в Unity
using UnityEngine;
using System.Collections;
[System.Serializable]
public class BoundaryOne
{
public float xMin, xMax, yMin, yMax;
}
public class Done_PlayerController : MonoBehaviour
{
public float speed;
public BoundaryOne boundary;
void Update()
{
transform.Translate(Input.acceleration.x/4, 0, 0);
}
// void Start()
//{
//GetComponent<Rigidbody>().velocity = transform.right * speed;
//}
void FixedUpdate()
{
float moveHorizontal = Input.GetAxis ("Horizontal");
Vector3 movement = new Vector3 (moveHorizontal,0);
GetComponent<Rigidbody>().velocity = movement * speed;
GetComponent<Rigidbody>().position = new Vector3
(
Mathf.Clamp (GetComponent<Rigidbody>().position.x, boundary.xMin, boundary.xMax),
Mathf.Clamp (GetComponent<Rigidbody>().position.y, boundary.yMin, boundary.yMax)
);
}
}
Прежде всего переместить контрольный код 'Update' вместо' FixedUpdate'. Получение ввода в FixedUpdate может вызвать лагги. Во-вторых, вы используете 'GetComponent' в gameloop, что не является хорошей практикой. Возьмите «Жесткое тело» в переменной в начале и используйте это. И последнее, что я хочу спросить, что вы разрабатываете 2D-игру и используете 3D-компоненты, такие как «Rigidbody», а не «Rigidbody2D»? –
Да, я использую 3D-компоненты в 2D-игре. Проверьте мой ответ ниже для нового кода. Я просто не вижу, что заставляет объект игрока прыгать назад! И элементы управления работают лучше после перехода на обновление, они немного отставали. –
Вы не должны отвечать таким образом, вместо этого вы должны изменить свой вопрос. –