Unity 2D — Перемещение Любого объекта Между Двумя (или более) Пространствами

#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. Спасибо! Вот и все 🙂 Еще лучше, я могу добавить дополнительные точки маршрута.