#c# #unity3d
Вопрос:
новый человек Unity и новый программист в целом. Я пытаюсь заставить объект двигаться взад и вперед между двумя точками. У меня это прямо сейчас идет от пункта 1 к пункту 2, но это останавливается. Я попробовал сделать цикл и снова вызвать функцию Move (), но она просто заморозила Unity.
Я предполагаю, что мне нужна какая-то петля, но не знаю, где это сделать? Я бы не возражал против возможности добавить еще несколько мест. У меня есть путевые точки в самом Единстве, привязанные к Объекту. Спасибо!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ZombiePathing : MonoBehaviour
{
[SerializeField] List<Transform> waypoints;
[SerializeField] float moveSpeed = 2f;
int waypointIndex = 0;
void Start()
{
transform.position = waypoints[waypointIndex].transform.position;
}
// Update is called once per frame
void Update()
{
Move();
}
private void Move()
{
if (waypointIndex <= waypoints.Count -1)
{
var targetPosition = waypoints[waypointIndex].transform.position;
var movementThisFrame = moveSpeed * Time.deltaTime;
transform.position = Vector2.MoveTowards
(transform.position, targetPosition, movementThisFrame);
if (transform.position == targetPosition)
{
waypointIndex ;
}
}
}
}
Комментарии:
1. Пожалуйста, отредактируйте вопрос, чтобы ограничить его конкретной проблемой с достаточной детализацией для определения адекватного ответа.
Ответ №1:
просто добавьте индекс, равный 1 или -1, в зависимости от текущего преобразования, я написал этот код очень быстро, поэтому он несортирован, и я делаю все возможное, чтобы он был очень близок к вашему коду с некоторыми изменениями.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ZombiePathing : MonoBehaviour
{
[SerializeField] List<Transform> waypoints;
[SerializeField] float moveSpeed = 2f;
Vector3 targetPosition;
int waypointIndex = 0;
int index = 1;
void Start()
{
transform.position = waypoints[waypointIndex].position;
UpdateTransform();
}
void Update()
{ transform.position = Vector2.MoveTowards
(transform.position, targetPosition, moveSpeed * Time.deltaTime);
if (transform.position == targetPosition) UpdateTransform();
}
private void UpdateTransform()
{
waypointIndex = index;
targetPosition = waypoints[waypointIndex].position;
if (waypointIndex >= waypoints.Count -1) index = -1;
else if (waypointIndex <= 0 amp;amp; index == -1)index = 1;
}
}
Комментарии:
1. Спасибо! Вот и все 🙂 Еще лучше, я могу добавить дополнительные точки маршрута.