@Ptichka007

Объект не двигается, что делать?

Нужно создать систему из N объектов, которые двигаются как бегуны на эстафете: бежит только один, пока не добегает до другого. Как только дистанция до следующего «бегуна» равна 0, объект перестаёт быть «бегуном», им становится следующий объект. И так по кругу.
Вот мой код:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Ex2 : MonoBehaviour
{
    public int n;
    public int i;
    public GameObject[] runners;
    public Transform[] points_runners;
    public Vector3 target;
    
    public GameObject runner;
    void Start()
    {
        i = 0;
        n = i + 1;
        runner = runners[i];
        target = points_runners[n].position;
        runner.transform.LookAt(target);
        
    }


    void Update()
    {
       if (runner.transform.position == target)
        {
            runner = runners[Get_runner()];
            target = points_runners[Get_Aim()].position;
            runner.transform.LookAt(target);

        }

        Move_to_next();


    }

    public void Move_to_next()
    {
        runner.transform.position = Vector3.MoveTowards(transform.position, target, Time.deltaTime * 2f);
    }

    public int Get_Aim()
    {

        n = n + 1;
        return n;
    }
    public int Get_runner()
    {
        i = i + 1;
        
        return i;
    }
}
  • Вопрос задан
  • 346 просмотров
Решения вопроса 1
@Ente
Unity developer
Сделай это все на триггерах, сделай один скрипт Runner.cs

1) повесь на каждого участника SphereCollider.
2) поставь галочку IsTrigger на нем.
3) добавь им rigidbody и сделай его кинематик.
4) в поле target впиши его цель, тот трансформ, до которого ему бежать.
5) поставь isReadyToRun галочку в инспектор на первого бегуна.

[SerializedField] private Transform target;
[SerializedField] private bool isReadyToRun;

private void OnTriggerEnter()
{
         isReadyToRun = !isReadyToRun;
}

private void Update()
{
      if (!isReadyToRun) return;
      transform.position = Vector3.MoveTowards(transform.position, target, Time.deltaTime * 2f);
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы