Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/47: Рейтинг темы: голосов - 47, средняя оценка - 4.68
0 / 0 / 0
Регистрация: 13.02.2018
Сообщений: 30

Рандомное поведение ботов при свободном движении

14.04.2018, 23:23. Показов 9807. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
 
public class bots : coin {
    public Transform player;
    public int dist;
    public Transform vrag;
    public Transform coin;
    public float speed;
    public float move;
    
    public Random random;
    public bool yes;
    public float time;
    public Text tex;
 
  
    public void boy()
    {
 
        if (Vector3.Distance(transform.position, player.transform.position) < dist)
        {
            Vector3 Rotation = player.position - vrag.position;
            vrag.rotation = Quaternion.Slerp(vrag.rotation, Quaternion.LookRotation(Rotation), speed * Time.deltaTime);
            vrag.transform.position += vrag.forward * move * Time.deltaTime;
        }
        else
        {
            StartCoroutine(angle());
        }
    }
    IEnumerator angle()
    {
        vrag.Translate(Vector3.forward * 5 * Time.deltaTime);
        
 
        yield return new WaitForSeconds(5);
        float gradus = Random.Range(360, 360);
        vrag.Rotate(gradus, gradus, gradus);
    }
  
    
    // Update is called once per frame
    void Update () {
        boy();
       
      
        time = Time.realtimeSinceStartup;
        tex.text = time.ToString();
 
    }
есть код, при котором бот, если видит игрока при определённой дистанции, гонится за ним, а если не видит, то свободно летает по сцене в 3д мире, каждые 5 сек меняя поворот, чтобы лететь в другую сторону. но в итоге, когда он не видит игрока, шарахается по сцене как ураган, повторяя некую форму смерча, т.е корутина срабатывает только один раз, а дальше он не использует свои 5 сек, а меняет градус каждый фрейм. а нужно, чтобы он рандомно менял своё направление в сцене именно через заданное время.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.04.2018, 23:23
Ответы с готовыми решениями:

Очередь при свободном сервисе
Здравствуйте! Проблема в следующем: есть две параллельные ветки, имитирующие обслуживание авто, выбор одной из веток зависит от занятости...

3 источника прерываний при 1 свободном аппаратном прерывнии
Ваяю на меге16, с последующей адаптацией под мегу8 - т.е. доступны всего лишь 2 внешних прерывания, одно из которых будет занято под V-USB....

Решение квадратных уравнений: SIGFPE при отрицательном свободном члене
Программа должна решать квадратные уравнения. При свободном члене больше 0 все работает нормально, но если сделать его отрицательным, то...

15
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
14.04.2018, 23:36
Цитата Сообщение от Vladimir 29 Посмотреть сообщение
т.е корутина срабатывает только один раз, а дальше он не использует свои 5 сек, а меняет градус каждый фрейм. а нужно, чтобы он рандомно менял своё направление в сцене именно через заданное время.
Тут по ходу подход надо менять. Делаешь примитивный автопилот наводящий его в точку (скорее всего он уже есть раз за игроком гоняется). При достижении заданной окрестности точки рандомно выбираешь другую точку. В качестве второго зайца ловишь возможность как ограничивать зону нахождения бота, так и изменять зону во времени. к примеру бот не сразу начинает рандомно бегать а идет в ту точку где последний раз видел игрока а уже там начинает прыжки в сторону в сфере радиусом R.
0
0 / 0 / 0
Регистрация: 13.02.2018
Сообщений: 30
15.04.2018, 09:35  [ТС]
А можно код?))
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
15.04.2018, 11:28
Vladimir 29, может ещё и аккаунт разработчика с аппстор дать, где 5 игр с доходом лежат?
0
82 / 78 / 34
Регистрация: 13.02.2018
Сообщений: 1,347
15.04.2018, 21:13
Vladimir 29, тебе бы не хотел отдавать код игры которую ты делал долго, сам, без помощи других, ходил по интернету смотрел как это сделать, как то сделать, как эту ошибку решить, ты об этом не думаешь, а любому хорошему программисту нравится писать код, а не брать чужой и выдавать за свой, ведь тогда ты будешь знать, что ты не настолько хорош, на сколько думают другие...
0
15.04.2018, 21:47

Не по теме:

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

0
15.04.2018, 21:56

Не по теме:

Fulcrum_013, по твоему я не прав?

0
15.04.2018, 21:59

Не по теме:

k0vpack, Прав. Но он это врядли поймет

0
15.04.2018, 22:01

Не по теме:

Fulcrum_013, в наше время ничего бесплатно нельзя получить, а тем более в наших странах.

0
15.04.2018, 22:22

Не по теме:

k0vpack, А в забугорных универах за "дайте кота а то сдавать горит" вообще выпрут моментом без права восстановления и правильно сделают. Потому как если не выпереть, потом точно так же будут просить "кота для работы".При этом тут как понимаю закос под не разу не учебную "задачу". Соответственно с такими попрошайками, не желающими разбираться и писать самостоятельно, лучше сразу гудбай - они не стоят того чтобы тратить на них время.

0
136 / 131 / 43
Регистрация: 07.11.2017
Сообщений: 553
16.04.2018, 12:59
Лучший ответ Сообщение было отмечено Vladimir 29 как решение

Решение

Цитата Сообщение от Vladimir 29 Посмотреть сообщение
можно код?))
у вас уже есть часть кода, просто вы его "стырили" вот и не понимаете что он означает.

ваш метод boy()
в нем вы проверяете на расстояние до игрока
C#
1
if (Vector3.Distance(transform.position, player.transform.position) < dist)
и следующие 3 строки кода это поворот к цели и движение
C#
1
2
3
Vector3 Rotation = player.position - vrag.position;
            vrag.rotation = Quaternion.Slerp(vrag.rotation, Quaternion.LookRotation(Rotation), speed * Time.deltaTime);
            vrag.transform.position += vrag.forward * move * Time.deltaTime;
а в ветке else условия выше, вы делаете поворот с помощью корутины.

вам никто не мешает эти 3 строки переделать к тому что писал Fulcrum_013
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Тут по ходу подход надо менять. Делаешь примитивный автопилот наводящий его в точку (скорее всего он уже есть раз за игроком гоняется). При достижении заданной окрестности точки рандомно выбираешь другую точку.
вместо игрока - берем точку, вместо дистанции видимости - берем 1f (зависит от скорости перемещения, возможно нужно больше )

вопрос в том зачем хаотично и насколько хаотично)
зачастую кто-то куда-то движется, или патрулирует, или охраняет.
а у вас желание сделать броуновское движение.

задайте "врагу" точку спавна и например с помощью сферы рандомно, относительно ЭТОЙ точки , генерируйте ему точку движения, то есть в округе спавна.
https://docs.unity3d.com/Scrip... phere.html

или еще круче, сделайте важные/стратегические места и курсируйте между ними. составьте маршруты. Хаос еще никого не привлекал.

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
к примеру бот не сразу начинает рандомно бегать а идет в ту точку где последний раз видел игрока а уже там начинает прыжки в сторону в сфере радиусом R
и нова реалистичность, а не срачка повсюду...
1
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
16.04.2018, 20:05
Цитата Сообщение от f3hler Посмотреть сообщение
вместо игрока - берем точку, вместо дистанции видимости - берем 1f (зависит от скорости перемещения, возможно нужно больше )
Я вообще обычно делаю автопилот по алгоритму наведения по трехточке - т.е. удерживающий нулевые изменения углов визирования на точку наведения. А вот сама точка наведения в зависимости от условий или прикрепляется к какому либо объекту или последовательно задается тем или иным алгоритмом. В результате получается универсальна система способная и ракету на маневрирующий объект навести с упреждением, и за ведущим следовать, и по маршруту из навпоинтов пройти, ну и как частный случай маршрута из навпоинтов обеспечить рандомное перемещение в заданной области.
0
136 / 131 / 43
Регистрация: 07.11.2017
Сообщений: 553
17.04.2018, 11:03
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
вообще обычно делаю автопилот по алгоритму наведения по трехточке - т.е. удерживающий нулевые изменения углов визирования на точку наведения.
слишком умно написано) а по деревенски?)

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
В результате получается универсальна система
это я понимаю, потому и говорю что у человека есть уже часть кода, никто не мешает его присобачить к другому, а там глядишь додумается и вынести код в метод или вообще в класс с своими методами для обработки чего то...
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
17.04.2018, 14:08
f3hler, в первом апдейте замеряем угол между вектором на точку и курсом с раскладкой по плоскостям ЛСК относительно которых можем маневрировать. Ну фактически угол места и угол возвышения, можно и угол крена. т.е. каналы тангажа крена и рысканья каждый своим углом управляется. следующий апдейт замеряем угол сравниваем с прошлым. если разница углов больше какой то включаем привод поворота в соответствующем канале пропорционально разницы. в результате для подвижной точки идем не за ней а в точку встречи. Т.е. используем тот факт что если идем в точку встречи, то угол между курсом и вектором на точку постоянный. При этом для неподвижной точки, точка встречи совпадает с самой точкой.

Добавлено через 6 минут
Ну в общем старый добрый алгоритм наведения ракеты с ИК ГСН, который с 40-ых исправно пашет как на аналоговой так и на цифровой элементарной базе. Т.е. фактически простейший ПД-регулятор в каждом канале.
0
0 / 0 / 0
Регистрация: 13.02.2018
Сообщений: 30
17.04.2018, 16:33  [ТС]
Заработать? О чём вы?)) или вы по себе судите, т.е каким вы были в детстве. Просто это дело классное, а так как по юнити нету нормальных источников, вроде юнити документации, только на русском, то приходится учится на ошибках и вопросах, моля о помощи высшие умы.
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
17.04.2018, 16:50
Vladimir 29, Ну как бы учится это не чей то код учить, а принципы проектирования алгоритмов и синтаксис языка. Т.е. первое что надо освоить - это сам язык и базовые структуры описания алгоритмов - т.е. ветвление и циклическую, ну и базовые операции для чего они применяются. Язык это как ручка, базовые структуры упраления как буквы. Не понимая всего этого понять что делает написанный кем то код невозможно в принципе. А понимая и чужой код не нужен, достаточно понимать логику и математику процесса, для того чтобы написать свой код.

Добавлено через 7 минут
Vladimir 29, Т.е. начать стоит с базовых вещей - сортировок, решения уравнений, интегрирования и т.д. а не с поведения ботов. Займет толковое освоение первого язык и базовых основ информатики порядка полугода если подойти к вопросу серьезно. Ну а потом спец предметы - разноплановая математика, ТАУ, теория принятия решений, и т.д. При этом знание базовых основ позволит матмодели создаваемые с помощью этих дисциплин довольно просто программировать. В общем если к обучению подойти серьезно а не " дайте код как двинуть бота в конкретных условиях", лет через 5 телодвижения подобных ботов будут элементарщиной, которая вообще какой то универсальной декларативно параметризируемой системой будет сделана один раз и надолго.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.04.2018, 16:50
Помогаю со студенческими работами здесь

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

Появление радиостанции на свободном участке FM при перестройке радио-глушилки (жучка) по частоте
Собрал для прикола радио глушилку по этой схеме http://www.silver-kansk.narod.ru/radiofil/glushilka/glushilka.htm заместо п416 воткнул...

Сформировать массив, элементы которого являются расстояниями, пройденными телом при свободном падении на землю за 1, 2, … ,
Сформируйте линейный массив вещественных чисел, элементы которого являются расстояниями, пройденными телом при свободном падении на землю...

При движении слайдера вверх или вниз должен срабатывать таймер, а при остановке движения - останавливаться
Добрый день.Такая проблема.....Нужно сделать такую вещь. При движении слайдера вверх или вниз должен срабатывать таймер,но останавливаться...

Сформируйте линейный массив вещественных чисел, элементы которого являются расстояниями, пройденными телом при свободном падении на землю
Сформируйте линейный массив вещественных чисел, элементы которого являются расстояниями, пройденными телом при свободном падении на землю...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru