Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Помогите с AI в Unity

Помогите с AI в Unity

Поделиться

Страницы: 1 2 Следующая

Mr_GodПользовательwww8 июля 20178:27#0
Начал работу над ИИ в своём проекте, посмотрел уроки на YouTube,полазил по оф.сайту в поисках информации по системе навигации , так вот, как я понял ничего толкового стандартными средствами не сделать или я ошибаюсь? Если тут есть люди которые могут подсказать в этом деле(насчёт работы с ИИ в юньке, что выбрать для начала) то помогите пожалуйста.
CeetrusПостоялецwww8 июля 20178:39#1
Стандартными, разве что, стейт-машину аниматором
Mr_GodПользовательwww8 июля 20179:09#2
Ceetrus
> Стандартными, разве что, стейт-машину аниматором
Хм, хорошо, буду юзать RayCast'ы для своих целей :)
VirtexПостоялецwww8 июля 201716:37#3
Mr_God
> по системе навигации , так вот, как я понял ничего толкового стандартными
> средствами не сделать

А каковы критерии толковости?

SalamandrПостоялецwww9 июля 20179:02#4
Mr_God
Можно и стандартными инструментами, зависит от задач. 2д, 3д,сверху,сбоку и т.д.
MaximYariloПостоялецwww13 июля 201712:45#5
Система навигации и ИИ как бы разные вещи. Для навигации есть navmesh https://docs.unity3d.com/Manual/Navigation.html . А для ИИ в общем случае ничего не может быть, т.к. ИИ пишется под конкретную игру, а юнити универсальный движок. Если только у тебя не глубокое обучение =)
fornetjobПостоялецwww13 июля 201713:46#6
Для навигации можно и а* использовать, не обязательно навмеш. Алгоритм очень прост.
Для интеллекта можно использовать систему событий с весами, которую привязать к различным раздражителям.
Таким как - время суток, наличие игрока и так далее.
А далее, в зависимости от значимости события - та, либо иная реакция.
Было бы круто использовать блендинг для событий, чтобы порождать неоднозначные реакции.

Правка: 13 июля 2017 14:30

Mr_GodПользовательwww14 июля 20178:14#7
Virtex
> А каковы критерии толковости?
Ну к примеру, я делаю 3D шутер, не суть важно какой и зачем, так вот, мне именно нужно сделать так что-бы НПС обнаруживал игрока в определённом радиусе перед собой, что-то типа реального обзора или сканирования местности перед собой,называйте как хотите, за неделю я сделал что-то подобное с помощью RayCastов, но весь прикол в том что этот способ не совсем рабочий, НПС обнаруживает игрока, в определённом радиусе около себя, но рэйкасты на дальнем расстоянии где-то дальше 20 кубов(метров т.е.) попросту разлетаются в стороны и не засекают игрока, конечно если бегать из стороны в сторону то игрока НПС "видит" , ещё на ближней дистанции не всегда НПС "видит" игрока , т.е. в скрипте есть переменная bool типа которая показывает "видит-ли" НПС игрока, а сейчас немного говнокода, у меня есть три скрипта , один скрипт отправляет луч, второй скрипт обрабатывает информацию, а третий основной скрипт НПС уже всё распределяет на свои места, я в нём пишу методы взаимодействия НПС и  Игрока, скину скрипт который отправляет лучи, остальные скидывать нету смысла, т.к. с ними всё нормально p.s. npcAI.radiusRay равен 0.25 эту цифру я вычислил экспериментальным путём, т.к. если сделать больше то вблизи игрока лучи почему-то не буду засекать, а если меньше то аналогично но с дальними дистанциями  , и в проверке на дистанцию не обращайте внимания на цифру 10, это я уже начал делать хоть какие-то взаимодействия с игроком, к примеру что-бы при подходе игрока НПС с ним здоровался...
using UnityEngine;

public class EyeAI : MonoBehaviour {
    public NpcAI npcAI;
    public bool playerIsInRange;
    void Update() 
    {
        Ray ray = new Ray(transform.position,transform.forward);
        RaycastHit hit;
        if (Physics.SphereCast(ray, npcAI.radiusRay, out hit))
        {
            if (hit.transform.gameObject.GetComponent<PlayerControllerSystem>())
            {
                if (hit.distance < 10)
                {
                    playerIsInRange = true;
                }
                else
                {
                    playerIsInRange = false;
                }
            }
            else
            {
                playerIsInRange = false;
            }
        }
    }
}
И напоследок...Это количество пустых GameObject'ов на которых висит этот скрипт, может быть в этом проблема ) , я их все вручную поворачивал так что-бы они охватывали радиус в 90 градусов 228 | Помогите с AI в Unity

Правка: 14 июля 2017 8:16

Mr_GodПользовательwww14 июля 20178:22#8
Salamandr
> Можно и стандартными инструментами, зависит от задач. 2д, 3д,сверху,сбоку и
> т.д.
3d, для шутера, хе-хе, который пока без ИИ нельзя назвать таковым
Mr_GodПользовательwww14 июля 20178:30#9
MaximYarilo
> Если только у тебя не глубокое обучение =)
Не понял, я как бы на программиста учусь, уже более менее в C# разбираюсь, почти год C# учу, ну и на Юньке год где-то сижу,обучаюсь, что-бы потом более серьёзными делами в GameDev'e заниматься, больше у меня нету ни к чему тяги и интереса, только геймдев и программирование
DampireПостоялецwww14 июля 201710:45#10
91 глаз 0.01MOA. Чувак, ты в курсе, что можно вычислить угол между направлением взгяда персонажа и направлением от персонажа до игрока? И прикинь, оно внезапно будет работать лучше и быстрее, чем 91 глаз. А еще можно вычислить dot-product, что будет еще быстрее. Круто, да?

Правка: 14 июля 2017 10:47

mahrizhПостоялецwww14 июля 201710:56#11
Mr_God
> почти год C# учу
Mr_God
> пустых GameObject'ов на которых висит этот скрипт, может быть в этом проблема )
> , я их все вручную поворачивал так что-бы они охватывали радиус в 90 градусов
До циклов за год не дошел?
void Update() 
{
  var from = transform.position;
  var to = player.transform.position;
  playerIsInRange = Physics.Raycast(from, to - from, npcAI.radiusRay, LayerMask.GetMask("Player"));
}
+ надо игрока кинуть на слой Player
seamanПостоялецwww14 июля 201710:56#12
https://habrahabr.ru/post/256273/
Также можно сделать допкамеру (или использовать существующую) и реализовать https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnBecameVisible.html
Mr_GodПользовательwww14 июля 201711:16#13
mahrizh
> До циклов за год не дошел?
Кек, делал я и с помощью циклов, да тоже криво получалось .
Dampire
> Чувак, ты в курсе, что можно вычислить угол между направлением взгяда персонажа
> и направлением от персонажа до игрока? И прикинь, оно внезапно будет работать
> лучше и быстрее, чем 91 глаз. А еще можно вычислить dot-product, что будет еще
> быстрее. Круто, да?
Не знал, можешь рассказать поподробнее? Или скинуть материал по этому?
Mr_GodПользовательwww14 июля 201711:22#14
mahrizh
> + надо игрока кинуть на слой Player
Сейчас попробую, посмотрю что да как

Страницы: 1 2 Следующая

/ Форум / Программирование игр / Игровая логика и ИИ

2001—2017 © GameDev.ru — Разработка игр