| Как создать безье путь для Tower Defense на Unity? | 
|  | 
| 
| RobitI | Дата: Среда, 04 Января 2023, 17:04 | Сообщение # 1 |  | был не раз Сейчас нет на сайте | Я хочу сделать плавное передвижение противников на округленных путях, но у меня не получается объединить скрипт с передвижением объекта по безье со скриптом по составляющей Tower Defense 
 Скрипт для создания безье:
 
 [SerializeField]
 private Transform[] controlPoints;
 
 private Vector3 gizmosPosition;
 
 private void OnDrawGizmos()
 {
 for (float t = 0; t <= 1; t += 0.05f)
 {
 gizmosPosition = Mathf.Pow(1 - t, 3) * controlPoints[0].position + 3 * Mathf.Pow(1 - t, 2) * t * controlPoints[1].position + 3 * (1 - t) * Mathf.Pow(t, 2) * controlPoints[2].position + Mathf.Pow(t, 3) * controlPoints[3].position;
 
 Gizmos.DrawSphere(gizmosPosition, 0.25f);
 }
 
 Gizmos.DrawLine(new Vector3(controlPoints[0].position.x, controlPoints[0].position.y, controlPoints[0].position.z), new Vector3(controlPoints[1].position.x, controlPoints[1].position.y, controlPoints[1].position.z));
 Gizmos.DrawLine(new Vector3(controlPoints[2].position.x, controlPoints[2].position.y, controlPoints[2].position.z), new Vector3(controlPoints[3].position.x, controlPoints[3].position.y, controlPoints[3].position.z));
 
 }
 
 Скрипт для передвижения объекта по безье:
 
 [SerializeField]
 private Transform[] routes;
 
 private int routeToGo;
 
 private float tParam;
 
 private Vector3 objectPosition;
 
 private float speedModifier;
 
 private bool coroutineAllowed;
 
 // Start is called before the first frame update
 void Start()
 {
 routeToGo = 0;
 tParam = 0f;
 speedModifier = 0.5f;
 coroutineAllowed = true;
 }
 
 // Update is called once per frame
 void Update()
 {
 if (coroutineAllowed)
 {
 StartCoroutine(GoByTheRoute(routeToGo));
 }
 }
 
 private IEnumerator GoByTheRoute(int routeNum)
 {
 coroutineAllowed = false;
 
 Vector3 p0 = routes[routeNum].GetChild(0).position;
 Vector3 p1 = routes[routeNum].GetChild(1).position;
 Vector3 p2 = routes[routeNum].GetChild(2).position;
 Vector3 p3 = routes[routeNum].GetChild(3).position;
 
 while (tParam < 1)
 {
 tParam += Time.deltaTime * speedModifier;
 
 objectPosition = Mathf.Pow(1 - tParam, 3) * p0 + 3 * Mathf.Pow(1 - tParam, 2) * tParam * p1 + 3 * (1 - tParam) * Mathf.Pow(tParam, 2) * p2 + Mathf.Pow(tParam, 3) * p3;
 
 transform.position = objectPosition;
 yield return new WaitForEndOfFrame();
 }
 
 tParam = 0;
 routeToGo += 1;
 
 if (routeToGo > routes.Length - 1)
 {
 routeToGo = 0;
 }
 
 coroutineAllowed = true;
 
 }
 Пожалуйста, скажите, как переделать эти скрипты для нужного результата
 |  |  |  |  | 
| 
| GMassta | Дата: Среда, 04 Января 2023, 17:21 | Сообщение # 2 |  |   частый гость Сейчас нет на сайте | Привет! ты используешь точки безье в обоих скриптах, но ты хочешь использовать только те, которые находятся в первом скрипте? 
 Make games, not war
 Посмотри мои игры для мобилок, влепи лукаса!
 Тут я делаю игры на Unity
 |  |  |  |  | 
| 
| falcoware | Дата: Среда, 04 Января 2023, 23:00 | Сообщение # 3 |  |   старожил Сейчас нет на сайте | 
 У нас проще делается: https://falco3d.com/documentation/d7/dd3/class_falco_engine_1_1_spline.html
 |  |  |  |  | 
| 
| Core | Дата: Среда, 04 Января 2023, 23:40 | Сообщение # 4 |  |   заслуженный участник Сейчас нет на сайте | Цитата RobitI (  )  Скрипт для создания безьеКак я вижу, в этом скрипте идет только отрисовка gizmos. Логически безье тут не создается.
 PS. код в сообщении не читабельный. Используйте тег [codе]
 
 
 Цитата falcoware (  )  У нас проще делаетсяВопрос был явно по Unity. Хватит оффтопить своим движком где попало
 
 Игры: justcore.itch.io
 Сайт: justcore.space
 |  |  |  |  | 
| 
| RobitI | Дата: Четверг, 05 Января 2023, 13:47 | Сообщение # 5 |  | был не раз Сейчас нет на сайте | Цитата Core (  )  Как я вижу, в этом скрипте идет только отрисовка gizmos. Логически безье тут не создается.Я это и имел в виду, просто неправильно выразился.
 |  |  |  |  |