Задать вопрос
  • Фризы в режиме сна macbook pro m2 2022 512gb 8 озу - почему?

    @Bogdan1616
    На м1 тоже такое бывает иногда(говорю как человек который пользуется MacBook Pro m1 16gb). Я просто перезагружаю ноут и все. Скорее всего исправить никак нельзя, жди обновления
  • ИИ в игре работает странно. В чем проблема?

    @Bogdan1616 Автор вопроса
    mayton2019, уже на другом форуме ответили, если интересно где ошибка то вот ссылка https://www.cyberforum.ru/unity/thread3016389.html...
  • ИИ в игре работает странно. В чем проблема?

    @Bogdan1616 Автор вопроса
    Bogdan1616, И так же забыл тут написать, что двигаться он должен только по вертикали и горизонтали, а не по диагонали и всегда стремиться находится параллельно игроку на расстоянии 7f
  • ИИ в игре работает странно. В чем проблема?

    @Bogdan1616 Автор вопроса
    K0TlK, объяснил в прошлом комменте
  • ИИ в игре работает странно. В чем проблема?

    @Bogdan1616 Автор вопроса
    mayton2019, Первая моя реализация чего-то подобного и первый проект, поэтому тут скорее всего много ошибок, но я не могу найти их.
    Что я хотел сделать — Враг должен сначала оценить в каком направлении ему двигаться по x или по y, для того чтобы дойти до того момента когда его координата по y или x будет равна той же координате у игрока и соответственно начать двигаться в этом напрравлении пока не достигнет этого. Это реализовано тут:
    if (Math.Round(enemyClone.position.y, 1) != Math.Round(player.position.y, 1) &&
                Math.Round(enemyClone.position.x, 1) != Math.Round(player.position.x, 1))
            {
                if (Math.Abs(enemyClone.position.y - player.position.y) > 
                    Math.Abs(enemyClone.position.x - player.position.x))
                {
                    if (enemyClone.position.x < 0f)
                    {
                        Moved(270f); //Вправо
                    }
                    else if (enemyClone.position.x >= 0f)
                    {
                        Moved(90f); //Влево
                    }
                }
                else if (Math.Abs(enemyClone.position.y - player.position.y) <= 
                         Math.Abs(enemyClone.position.x - player.position.x))
                {
                    if (enemyClone.position.y < 0f)
                    {
                        Moved(0f); //Вверх
                    }
                    else if (enemyClone.position.y >= 0f)
                    {
                        Moved(180f); //Вниз
                    }
                }
            }


    Дальше когда его координата по одному из векторов сравнялась с координатой игрока по тому же вектору он должен оценить расстояние до игрока, и если оно меньше нужного (7f) (P.S пока это писал нашел ошибку, я зачем-то прибавлял позицию игрока к этой семерке, а этого делать не нужно было, но к сожалению это не решило проблему, так, небольшой косяк исправил) то двигаться назад до того момента пока оно не будет равно 7f. Ну а если оно больше нужного то логично что он движется в обратную сторону пока не дойдет до того момента когда расстояние будет 7f. Это реализовано тут:
    if (Math.Round(enemyClone.position.y, 1) == Math.Round(player.position.y, 1) &&
                Math.Round(enemyClone.position.x, 1) != Math.Round(player.position.x, 1))
            {
                float dist = GetPos(player, enemyClone);
     
                if (Math.Round(dist, 1) != 7f)
                {
                    if (dist < 7f)
                    {
                        if (enemyClone.position.x < 0f)
                        {
                            Moved(90f); //Влево
                        }
                        else if (enemyClone.position.x >= 0f)
                        {
                            Moved(270f); //Вправо
                        }
                    }
                    else if (dist >= 7f)
                    {
                        if (enemyClone.position.x < 0f)
                        {
                            Moved(270f); //Вправо
                        }
                        else if (enemyClone.position.x >= 0f)
                        {
                            Moved(90f); //Влево
                        }
                    }
                }
            }
     
            if (Math.Round(enemyClone.position.y, 1) != Math.Round(player.position.y, 1) &&
                Math.Round(enemyClone.position.x, 1) != Math.Round(player.position.x, 1))
            {
                if (Math.Abs(enemyClone.position.y - player.position.y) > 
                    Math.Abs(enemyClone.position.x - player.position.x))
                {
                    if (enemyClone.position.x < 0f)
                    {
                        Moved(270f); //Вправо
                    }
                    else if (enemyClone.position.x >= 0f)
                    {
                        Moved(90f); //Влево
                    }
                }
                else if (Math.Abs(enemyClone.position.y - player.position.y) <= 
                         Math.Abs(enemyClone.position.x - player.position.x))
                {
                    if (enemyClone.position.y < 0f)
                    {
                        Moved(0f); //Вверх
                    }
                    else if (enemyClone.position.y >= 0f)
                    {
                        Moved(180f); //Вниз
                    }
                }
            }

    Ну а метод GetPos возвращает расстояние между двумя объектами. Метод Moved сначала поворачивает объект в сторону движения (0f - вверх, 180f - вниз, 90f - влево, 270f - вправо) а потом двигает его. Ну и GetRandomPointInsideRadius дает рандомное положение (Vector3) в указанном радиусе
  • ИИ в игре работает странно. В чем проблема?

    @Bogdan1616 Автор вопроса
    freeExec, ой, не заметил, не тот код кинул, просто скрипты в одной проге открыты и получилось так что я не тот открыл
  • Как сделать чтобы объекты жили только в области экрана?

    @Bogdan1616 Автор вопроса
    Василий Банников, это я и так понял, английский более менее знаю, но вроде он и так при любом раскладе получается меньше, либо я чего-то не заметил
  • Как сделать чтобы объекты жили только в области экрана?

    @Bogdan1616 Автор вопроса
    freeExec, Щас нет ноута под рукой, поэтому точную строчку не скажу, но вроде да