Я создаю скрипт движения с вектором 2 и Rigidbody.velocity. Я хочу, чтобы мой игровой объект перемещался до определенного x pos, а затем возвращался к исходному pos, и все это продолжалось постоянно. Я достиг первой части, она идет в обратном направлении, когда он достигает определенной точки, а затем движение в обратном направлении никогда не останавливается:Unity C# vector 2 проблемы с движением
public float spawnPos;
public float currentPos;
public float constantSpeed = 3;
public float speed = 0;
KeyInput scriptBeholderKI;
Rigidbody2D squadRigidBody;
//Comprovation of spawnposition and KeyInput
//Script adquisition
void Start() {
spawnPos = transform.position.x;
scriptBeholderKI = gameObject.GetComponent <KeyInput>();
squadRigidBody = gameObject.GetComponent <Rigidbody2D>();
}
void FixedUpdate() {
//Movement
squadRigidBody.velocity = new Vector2 (constantSpeed + speed , 0);
//key inputs
if (Input.GetKeyDown (scriptBeholderKI.forward)) {
StopAllCoroutines();
StartCoroutine (RightMovement(0f));
}
if (Input.GetKeyDown (scriptBeholderKI.backwards)) {
StopAllCoroutines();
StartCoroutine (LeftMovement (0f));
}
}
//Speed values (Right, Left)
IEnumerator RightMovement (float Rloop) {
while (transform.position.x < constantSpeed * Time.time + spawnPos + 14) {
speed = 10f;
yield return new WaitForSeconds (Rloop);
}
if (transform.position.x> constantSpeed * Time.time + spawnPos + 14) {
StopAllCoroutines();
StartCoroutine (LeftMovement (0f));
}
}
IEnumerator LeftMovement (float Lloop) {
while (transform.position.x > constantSpeed * Time.time + spawnPos) {
speed = -7f;
yield return new WaitForSeconds (Lloop);
}
}
Если вы видите что-либо, что можно было бы улучшить Pls сделать мне отметить C:
редактировать :
Когда я нажимаю передний вход, мой игровой объект перемещается, пока он не достигнет точки, когда я нажимаю bacwards, и он перемещается влево без остановки.
также состоит в том, что я хочу, чтобы моя цель перемещалась по константе скорости в игровом объекте, поэтому я использую Time.time. движения, которые я делаю с входами, являются более правильными упомянутыми ускорениями. Я хочу, чтобы моя цель всегда находилась на одинаковом расстоянии от игрового объекта, так как игра начинается. По крайней мере, максимальный охват справа - тот, который я хочу ...
И я также попытался удалить остановку всех блоков сопрограмм и ничего, но я хотел, чтобы я мог отменить движение всякий раз, когда захочу (Тем не менее, я удалил одно в сопрограмме RightMovement.)
последнее, что я изменил «FixedUpdate» для «Update», потому что это дало мне проблемы с ответом на мои входы, я не знайте, если это релевантно, но на всякий случай.
идентификатор говорят это не делает то, что, по вашему мнению, делает 'transform.position.x "(Time.time is) Время в начале этого кадра (только для чтения). Это время в секундах ** с момента начала игры **." вместо этого, когда вы начинаете двигаться, вычисляйте свою цель, храните ее и проверяйте против этой позиции, когда поворачиваетесь, делайте то же самое. –
yes
Я уже вижу все, что должно измениться.Вы можете отредактировать свой вопрос и добавить, что происходит, когда нажата клавиша «вперед», и что происходит, когда нажата клавиша «назад». – Programmer
Почему вы не создаете функцию «Движение» и не переходите в «float» или «-float» в зависимости от того, какой путь вы хотите переместить? Похоже, что расстояние, которое вы хотите совершить, - это исправить ... (или bool, например if (doMoveLeft) mvSpeed * = -1; [код движения])? Кроме того, вы пытались выполнить debug.log значение, оцениваемое в выражении «while»? Что заставляет вас думать, что LeftMov ... остановится, если ему не хватает блока «StopAllCoroutines»? –