Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using UnityEngine;
- public class BetweenPoints : MonoBehaviour
- {
- public Vector3[] points =
- {
- new Vector3(0.0f, 0.0f , 0.0f),
- new Vector3(0.0f, 2.0f , 0.0f),
- new Vector3(1.0f, 1.5f , 0.0f),
- };
- public float speed = 1;
- private int _iterator;
- private float _path;
- // Update is called once per frame
- void Update ()
- {
- // Переменная содержащая путь (Скорость * deltaTime)
- _path = Time.deltaTime * speed;
- if (!isReachedPoint(_iterator))// Если объект не достиг точки, то двигайся к ней
- {
- MoveToPoint(_iterator);
- }
- if (isReachedPoint(_iterator) && _iterator != points.Length - 1) // Если объект достиг точки и это не последний вектор в списке,
- { // то увеличивай итератор
- _iterator++;
- }
- else if (isReachedPoint(points.Length - 1))// Предыдущее условие неверно и это последний объект,
- { // то возвращаемся к исходной точке
- _iterator = 0;
- }
- }
- // Проверка достижения координат с некоторой погрешностью из-за использования transform.Translate
- private bool isReachedPoint(int i)
- {
- return Math.Abs(transform.position.x - points[i].x) <= 0.1f
- && Math.Abs(transform.position.y - points[i].y) <= 0.1f
- && Math.Abs(transform.position.z - points[i].z) <= 0.1f;
- }
- // Фукнция запускающая перемещение объекта с параметром в виде итератора массива векторов
- private void MoveToPoint(int i)
- {
- transform.Translate((points[i] - transform.position).normalized * _path);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment