Страница 1 из 1

Поиск укрытий в реальном времени

СообщениеДобавлено: 14 июн 2019, 12:15
6@kJl@>l<@H
:-h Привет всем форумчанам! Есть ИИ, есть другой ИИ, они воюют между собой [V] . Когда у одного из них ХП < 40, ему нужно найти укрытие [] . Пожелание: не хочу делать по вэйпоинтам :-s ! Сцена очень большая, да и впринципе, в [nuklear] сталкере [nuklear] , например, ИИ всё сами анализируют. Проверить, видно ли ИИ из конкретной точки можно так:

Синтаксис:
Используется csharp
bool canSee(Transform from, Transform to)
    {
        Vector3 direction = to.position - from.position;
        Quaternion look = Quaternion.LookRotation(direction);
        float angle = Quaternion.Angle(from.rotation, look);

        //  Debug.Log("ANGLE = "+angle);

        Ray ray = new Ray(from.position, direction);
        RaycastHit hit;

        if (Physics.Raycast(ray, out hit, maxSearchDistance, layerMask))
        {
            if (hit.transform.gameObject == to.gameObject & angle < eye_fov_range)
                return true;
            else
                return false;
        }
        return false;
    }
 

Re: Поиск укрытий в реальном времени

СообщениеДобавлено: 14 июн 2019, 12:36
1max1
в [nuklear] сталкере [nuklear] , например, ИИ всё сами анализируют

Откуда инфа?
не хочу делать по вэйпоинтам

Можно заранее кодом сгенерировать зоны на карте, в которые возможно побежать для укрытия, ну и потом пробегаться в цикле искать ближайшую и бежать к ней.

Re: Поиск укрытий в реальном времени

СообщениеДобавлено: 14 июн 2019, 13:19
Jarico
1max1 писал(а):
в [nuklear] сталкере [nuklear] , например, ИИ всё сами анализируют


ИИ не анализирует а работает по схемам описанным в скриптах...

Для сталкера даже моды есть которые дополняют стандартные схемы ведения боевых действий, если стандартные схемы не могли заставить ИИ кинуть гранату или вылечить союзника то со схемами они это умеют

Re: Поиск укрытий в реальном времени

СообщениеДобавлено: 14 июн 2019, 14:00
6@kJl@>l<@H
Jarico писал(а):
1max1 писал(а):
в [nuklear] сталкере [nuklear] , например, ИИ всё сами анализируют


ИИ не анализирует а работает по схемам описанным в скриптах...

Для сталкера даже моды есть которые дополняют стандартные схемы ведения боевых действий, если стандартные схемы не могли заставить ИИ кинуть гранату или вылечить союзника то со схемами они это умеют
Признаю, ошибся.

Re: Поиск укрытий в реальном времени

СообщениеДобавлено: 14 июн 2019, 14:03
6@kJl@>l<@H
1max1 писал(а):
не хочу делать по вэйпоинтам

Можно заранее кодом сгенерировать зоны на карте, в которые возможно побежать для укрытия, ну и потом пробегаться в цикле искать ближайшую и бежать к ней.

Как это можно сделать? (Как определить, что место безопасное?) Можно пример кода, пожалуйста?

Re: Поиск укрытий в реальном времени

СообщениеДобавлено: 14 июн 2019, 15:27
1max1
Заранее нельзя найти безопасные места, ведь в одном случае оно будет безопасное, а в другом - нет и зависит от расположения игрока. Можно только вейпоинты заранее кодом сгенерировать, а потом проверять в рантайме какой безопаснее. В таких алгоритмах не силен, но скорей всего будет что-то типа А*. Но проще конечно по вейпоинтам, расставленными ручками :)

Re: Поиск укрытий в реальном времени

СообщениеДобавлено: 14 июн 2019, 16:15
6@kJl@>l<@H
A* слишком замороченный. Ладно, и на том спасибо.

Re: Поиск укрытий в реальном времени

СообщениеДобавлено: 14 июн 2019, 16:52
seaman
A* слишком замороченный.

зачем разбираться во внутренней работе. Нужно использовать готовый плагин и разбираться в его АПИ.

Re: Поиск укрытий в реальном времени

СообщениеДобавлено: 14 июн 2019, 20:07
~AvA~
Я не понял, а за что ты таки спрашиваешь?
Как проверить, безопасно ли укрытие.. или как в него добраться?

ИИ поведение пишется обычно через BehaviourTree (для Unity есть 4 где-то клакссных палгина, типа Behaviour Designer). Кажется в нем внутри есть уже кучу реализованных тасков для ИИ.

Re: Поиск укрытий в реальном времени

СообщениеДобавлено: 14 июн 2019, 21:10
waruiyume
Выбираете случайным образом несколько точек вокруг NPC, отсеиваете точки в которые нельзя пройти, обходите оставшиеся точки в и назначаете им вес в зависимости от того на противника или от него бежать в направлении точки и как далеко бежать до неё, выбираете точку с минимальным весом.