С поставленной задачей справился, но понимаю, что сделал не правильно.
Задача:
Объект прилетает в кадр и начинает кружить по периметру кадра.
(под кадром подразумеваю отображаемое камерой пространство т.е. камеру).
Перелопатил весь форум и другие сайты, но так и не смог найти конкретного решения.
Решил задачу при помощи вот таких вот самодельных костылей:
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PerimeterMotion : MonoBehaviour
{
[SerializeField]
private float speed = 5;
[SerializeField]
private Transform endPoint_0, endPoint_1, endPoint_2, endPoint_3;
void Start()
{
transform.position = new Vector2(-15, -4);
endPoint_0.transform.position = new Vector2(-7, -4);
endPoint_1.transform.position = new Vector2(7, -4);
endPoint_2.transform.position = new Vector2(7, 5);
endPoint_3.transform.position = new Vector2(-7, 5);
Debug.Log("Start programm. Position: -5, -1");
}
void FixedUpdate()
{
if(transform.position.x <=7)
{
transform.position = Vector3.MoveTowards(transform.position, endPoint_1.position, Time.deltaTime * speed);
Debug.Log("Move to right");
}
if (transform.position == endPoint_1.position)
{
endPoint_1.transform.position = endPoint_2.transform.position;
endPoint_2.transform.position = endPoint_1.transform.position;
Debug.Log("Move to up");
}
if (transform.position == endPoint_2.position)
{
endPoint_2.transform.position = endPoint_3.transform.position;
Debug.Log("Move to left");
}
if (transform.position == endPoint_3.position)
{
endPoint_3.transform.position = endPoint_0.transform.position;
Debug.Log("Move to down");
}
if (transform.position == endPoint_0.position)
{
endPoint_1.transform.position = new Vector2(7, -4);
endPoint_2.transform.position = new Vector2(7, 5);
endPoint_3.transform.position = new Vector2(-7, 5);
}
}
}
using System.Collections.Generic;
using UnityEngine;
public class PerimeterMotion : MonoBehaviour
{
[SerializeField]
private float speed = 5;
[SerializeField]
private Transform endPoint_0, endPoint_1, endPoint_2, endPoint_3;
void Start()
{
transform.position = new Vector2(-15, -4);
endPoint_0.transform.position = new Vector2(-7, -4);
endPoint_1.transform.position = new Vector2(7, -4);
endPoint_2.transform.position = new Vector2(7, 5);
endPoint_3.transform.position = new Vector2(-7, 5);
Debug.Log("Start programm. Position: -5, -1");
}
void FixedUpdate()
{
if(transform.position.x <=7)
{
transform.position = Vector3.MoveTowards(transform.position, endPoint_1.position, Time.deltaTime * speed);
Debug.Log("Move to right");
}
if (transform.position == endPoint_1.position)
{
endPoint_1.transform.position = endPoint_2.transform.position;
endPoint_2.transform.position = endPoint_1.transform.position;
Debug.Log("Move to up");
}
if (transform.position == endPoint_2.position)
{
endPoint_2.transform.position = endPoint_3.transform.position;
Debug.Log("Move to left");
}
if (transform.position == endPoint_3.position)
{
endPoint_3.transform.position = endPoint_0.transform.position;
Debug.Log("Move to down");
}
if (transform.position == endPoint_0.position)
{
endPoint_1.transform.position = new Vector2(7, -4);
endPoint_2.transform.position = new Vector2(7, 5);
endPoint_3.transform.position = new Vector2(-7, 5);
}
}
}
Как можно это сделать более грамотным способом?