Движение ИИ по поинтам

Форум для всего, что связано с ИИ.

Движение ИИ по поинтам

Сообщение Игорь1232 22 авг 2020, 20:24

У меня есть скрипт. И этот скрипт должен заставлять ИИ двигаться по точкам, которые я расположил на карте. Но когда я запускаю сцену, ИИ идёт прямо не замечая поинты. Юнити не выдаёт ошибок. Подскажите, может надо что-то заменить в скрипте? Помогите разобраться. Буду благодарен.

Синтаксис:
Используется csharp
public Transform[] movePoint;

    NavMeshAgent myAgent;
    Animator myAnim;

    public bool circularRoute;
    public int curWaypoint;

    public float distance;
    public Vector3 moveToPoint;

    public float speed;
    public float WalkSpeed;
    public float rotationSpeed;
    public float runspeed;
    public bool fast;
    void Start()
    {
        moveToPoint = transform.position;
        myAnim = GetComponent<Animator>();
        myAgent = GetComponent<NavMeshAgent>();
        myAgent.updatePosition = false;
    }


    public void Patrol()
    {
        if (movePoint.Length >= 1)
        {
            if (movePoint.Length > curWaypoint)
            {
                if (Vector3.Distance(transform.position, movePoint[curWaypoint].position) < 0.2)
                {
                    curWaypoint++;
                }

                else

                {
                    MoveToPoint(movePoint[curWaypoint].position);
                }

            }

            else if (movePoint.Length == curWaypoint)
            {
                if (circularRoute)
                    curWaypoint = 0;
                else
                {
                    if (Vector3.Distance(transform.position, movePoint[curWaypoint - 1].position) < 0.2f)
                    {
                        Stop();

                    }
                    else
                    {
                        MoveToPoint(movePoint[curWaypoint].position);

                    }
                }
            }
        }

    }

    public void MoveToPoint(Vector3 position)
    {
        if (moveToPoint != position)
        {
            myAgent.SetDestination(position);
            moveToPoint = position;
        }
        if (myAgent.hasPath)
        {
            if (fast)
                speed = Mathf.MoveTowards(speed, runspeed, Time.captureDeltaTime * 3);
            else speed = Mathf.MoveTowards(speed, WalkSpeed, Time.captureDeltaTime * 3);
            myAnim.SetFloat("Speed", speed);
            myAnim.speed = speed;
            RotationToTarget(myAgent.path.corners[1]);
        }

        else RotationToTarget(moveToPoint);
    }

    public bool RotationToTarget(Vector3 position)
    {
        Vector3 direction = (position = transform.position).normalized;
        Quaternion LookRotation = Quaternion.LookRotation(new Vector3(direction.x, 0, direction.z));
        transform.rotation = Quaternion.RotateTowards(transform.rotation, LookRotation, Time.deltaTime * rotationSpeed);
        if (transform.rotation == LookRotation)
            return true;
        else return false;
    }
    public void Stop()
    {
        if (speed > 0)
        {
            myAgent.SetDestination(transform.position);
            speed = Mathf.MoveTowards(speed, 0, Time.deltaTime * 15);
            myAnim.SetFloat("Speed", speed);
            myAgent.speed = speed;


        }

    }


}
Игорь1232
UNец
 
Сообщения: 2
Зарегистрирован: 13 авг 2020, 17:58

Re: Движение ИИ по поинтам

Сообщение seaman 22 авг 2020, 22:06

Сделайте хоть где-нибудь вызов Ваших методов. Иначе они просто для красоты в коде.

ЗЫ: Вот, кстати. Может все сообщения, которые написаны форумчанами, не умеющими оформлять код в "Почемучку" переносить? Ну просто - если человек не может разобраться в двух кнопках форума, как он программировать то сможет?
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара


Вернуться в Искуственный Интеллект

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3