Вопрос-[ответ] по Unity
| |
QWER56 | Дата: Понедельник, 09 Августа 2010, 10:58 | Сообщение # 1 |
старожил
Сейчас нет на сайте
| Вопрос-[Ответ] по Unity3d
База скриптов Unity3d Курс Уроков по Unity 3D от Alcatraz
ConsMark - поисковик по интернет магазинам.
Сообщение отредактировал QWER56 - Вторник, 26 Июля 2011, 20:54 |
|
| |
Lertmind | Дата: Пятница, 13 Мая 2016, 22:55 | Сообщение # 7861 |
заслуженный участник
Сейчас нет на сайте
| beril, WaitForEndOfFrame не нужен там тоже, я не это имел в виду под кадром, а один update. Страницей ранее у него было поле с квадратами и я так понял, что он хочет сразу вставить объект в свободное место, поэтому он смещает ровно на клетку объект и делает Raycast.
|
|
| |
Sanprabhu | Дата: Воскресенье, 15 Мая 2016, 02:14 | Сообщение # 7862 |
частый гость
Сейчас нет на сайте
| Цитата Lertmind ( ) Полагаю, у него можно было обойтись структурой данных, типа двумерного массива, тогда придётся написать дополнительный код с синхронизацией и т. п для меня это сложновато, оставлю пока как есть.
Цитата beril ( ) Я наверно не до конца понимаю, что автор хочет сделать не обращайте внимания, я новичок в разработке игр, еще многому нужно научиться )) спасибо за помощь ))Добавлено (15 мая 2016, 02:14) --------------------------------------------- Всем привет. Подскажите, пожалуйста, как обращаться к объектам с определенным тегом? Например можно сделать как-то так?: if(объект с тегом "игрок".transform.position == объект с тегом "враг".transform.position) { ... }
|
|
| |
Lertmind | Дата: Воскресенье, 15 Мая 2016, 03:24 | Сообщение # 7863 |
заслуженный участник
Сейчас нет на сайте
| Sanprabhu, у GameObject есть переменная tag и метод CompareTag для сравнения, это также есть у Component и всех его наследниках, то есть у Transform, Collider и других. Чтобы сделать как у тебя, сначала надо получить объекты с этими тегами либо через GameObject.FindWithTag или GameObject.FindGameObjectsWithTag, либо сделав проверку: Код if (go1.tag == "игрок" && go2.tag == "враг") Очевидно, в последнем случае предполагается какой-то перебор объектов. Потом уже сравнивать: Код if (go1.transform.position == go2.transform.position) Вообще, числа с плавающей точкой как и векторы нельзя так сравнивать, если только ты не присвоил точно такое же значение. Лучше сравнивать так: Код if (Vector3.Distance(go1.transform.position, go2.transform.position) < 0.001f) Где 0.001f - расстояние между объектами, при котором считается равенство позиций. Или так: Код if ((go1.transform.position - go2.transform.position).sqrMagnitude < 0.001f*0.001f) Должно быть немного быстрее, за счёт избежания извлечения квадратного корня, собственно такой пример есть в документации.
Сообщение отредактировал Lertmind - Воскресенье, 15 Мая 2016, 03:28 |
|
| |
Antrix | Дата: Воскресенье, 15 Мая 2016, 17:19 | Сообщение # 7864 |
почетный гость
Сейчас нет на сайте
| Всем доброго! Столкнулся, на первый взгляд, с элементарной проблемой, но не знаю как бы это реализовать. Где-то уже видел подобный вопрос на форуме, не могу найти. Суть такова... есть туррель, которую можно разместить только в определенном месте. То есть, выбираю её, перемещаю по карте, но она по всей площади красная/полупрозрачная... и лишь при наведении в нужное место она становится зеленой/полупрозрачной. Ткните, пожалуйста носом в ту тему/решение.
И еще, есть ли годные каналы на youtube по Unity, например как у товарища Flakky из uengine (как вы поняли, там все о UE4)? Я имею ввиду, что там очень много интересного видео о разных нюансах и куча записей стримов о разработке игр и т.д. А по Unity очень много текстовой информации, много всего на форумах (да и народу поболее), но все, что есть на трубе: "Гебята, сейчас мы газбигемся с интегфейсом и сделаем свою пегвую иггу - Кгестики/Нолики!" ну и все в таком духе, что знают даже наши маленькие собратья, которые уже успели выпустить кучу хорроров с натасканными отовсюду ассетами.
Сообщение отредактировал Antrix - Воскресенье, 15 Мая 2016, 18:23 |
|
| |
Sanprabhu | Дата: Воскресенье, 15 Мая 2016, 19:48 | Сообщение # 7865 |
частый гость
Сейчас нет на сайте
| Цитата Lertmind ( ) Вообще, числа с плавающей точкой как и векторы нельзя так сравнивать, если только ты не присвоил точно такое же значение У меня объекты (не твердые) создаются рандомно с округлением координат, поэтому они станут в одну и ту же позицию и тогда должна сработать проверка. А загвоздка в следующем: объекты у меня клонируются и даже если их позиции равны, проверка не работает, т.к. сравниваются первые объекты, а не их клоны. Вот я и думаю, как заставить программу сравнивать равенства любых объектов друг с другом, т.е. появился объект с тегом "игрок", через какое-то время на его позиции появился объект-клон "враг", равенство должно сработать. Надеюсь понятно объяснил, буду благодарен за помощь.
|
|
| |
ShortKedr | Дата: Воскресенье, 15 Мая 2016, 20:09 | Сообщение # 7866 |
Renword Studio
Сейчас нет на сайте
| Sanprabhu, кординаты ты округляешь, а тип остаётся с плавающей точкой. Иногда при может получатся смещение(особенность скажем так), даже округлённые координаты будут выглядеть как 20.000000000001, а всё потому что это числовой тип с плавающей точкой. Делай тогда уж округление в проверке)
А вообще, так делать не хорошо, если у тебя, конечно, в игровой механике нет привязке к сетке) Как писали выше проверяй оффсетом - разницей между дистанцией
Сообщение отредактировал ShortKedr - Воскресенье, 15 Мая 2016, 20:30 |
|
| |
Sanprabhu | Дата: Воскресенье, 15 Мая 2016, 20:21 | Сообщение # 7867 |
частый гость
Сейчас нет на сайте
| ShortKedr, спасибо, учту. А по этому поводу подскажешь?
Цитата Sanprabhu ( ) Вот я и думаю, как заставить программу сравнивать равенства любых объектов друг с другом, т.е. появился объект с тегом "игрок", через какое-то время на его позиции появился объект-клон "враг", равенство должно сработать.
|
|
| |
ShortKedr | Дата: Воскресенье, 15 Мая 2016, 20:27 | Сообщение # 7868 |
Renword Studio
Сейчас нет на сайте
| Всё написанное стёрлось) Нехорошие браузерные жесты Минутку, сейчас напишу заново
Добавлено (15 мая 2016, 20:27) --------------------------------------------- Вот тебе моё оптимизированное решение: Скажем, создаёшь 3 тега "Enemy", "Player/NearEnemy" и "Player". Игрок на сцене один. Враги берут игрока по тегу и если он не null, то делают следующее:
Если дистанция меньше 5f(допустим), то ставим тег "Enemy", иначе "Player/NearEnemy" Часть с игроком: Далее игрок берёт все объекты наших ближних врагов(по тегу конечно), и по очереди, через цикл применяет свои насильственные действия
Ну или выкидываем часть с игроком и просто выполняем действия во врагах, так будет лучше)
Сообщение отредактировал ShortKedr - Воскресенье, 15 Мая 2016, 20:36 |
|
| |
kot_11_22_ | Дата: Воскресенье, 15 Мая 2016, 21:58 | Сообщение # 7869 |
уже был
Сейчас нет на сайте
| всем доброго времени суток делаю игру на unity в 2d режиме. есть игрок и бот. бот умеет ездить и стрелять, загвоздка в том как сделать при езде бота, что бы он не врезался в здания, а просто их объезжал. всем заранее спасибо
Сообщение отредактировал kot_11_22_ - Воскресенье, 15 Мая 2016, 21:59 |
|
| |
Alfe | Дата: Воскресенье, 15 Мая 2016, 22:16 | Сообщение # 7870 |
старожил
Сейчас нет на сайте
| kot_11_22_, можно попробывать пулят рэйкаст, и через рэйкаст делать проверку по тегу, если данный тег найден - изменять положение бота. Естественно в Tag Manager этот тег нужно создать и навесить на стену.
Группа нашей команды. Там есть интересная рубрика... иногда игры выходят Моя первая игpa - Crazy Penguin
|
|
| |
Lertmind | Дата: Воскресенье, 15 Мая 2016, 22:21 | Сообщение # 7871 |
заслуженный участник
Сейчас нет на сайте
| kot_11_22_, очевидно, что надо использовать алгоритмы поиска пути. Для 3D в Unity из коробки идёт Navigation Mesh, про использование его в 2D есть такой туториал https://www.youtube.com/watch?v=f6TVEvigbd0. Есть всякие ассеты и дополнения с поиском пути, выбор которых зависит от того, какой у тебя мир в игре и как должен двигаться AI. Добавлено (15 мая 2016, 22:21) --------------------------------------------- Alfe, прокатит только если препятствия имеют выпуклую форму и не стоят близко между собой, иначе бот застрянет.
Сообщение отредактировал Lertmind - Воскресенье, 15 Мая 2016, 22:19 |
|
| |
kot_11_22_ | Дата: Понедельник, 16 Мая 2016, 04:14 | Сообщение # 7872 |
уже был
Сейчас нет на сайте
| в том то и вся проблема, препятствия рядом друг с другом. и не выпуклые.
|
|
| |
Sanprabhu | Дата: Понедельник, 16 Мая 2016, 14:51 | Сообщение # 7873 |
частый гость
Сейчас нет на сайте
| Подскажите, можно ли использовать проверку на столкновение, если оба объекта не твердые. Я сделал с помощью OnTriggerEnter, но один из объектов пришлось сделать твердым, а мне это в принципе не нужно. Спасибо.
|
|
| |
Laush | Дата: Понедельник, 16 Мая 2016, 17:48 | Сообщение # 7874 |
почти ветеран
Сейчас нет на сайте
| Как проверить, открыто ли приложение на основном адресе сайта, например на сайте gcup.ru, мне нужно заблокировать возможность играть, если игра открыта не на этом сайте. Например что бы я не писал кучу проверок : if (Application.absoluteURL != "http://gcup.ru" || Application.absoluteURL != "http://game.gcup.ru" || Application.absoluteURL != "http://gcup.ru/igra" || Application.absoluteURL != "http://ru.gcup.ru/games" || Application.absoluteURL != "http://gcup.ru/ru/games/index.html") { Debug.Log("Website is blacklisted,load blacklisted game scene here."); }
_________________________ Есть замечательный способ: Application.ExternalEval("if(document.domain != 'unity3d.com') { document.location='http://unity3d.com'; }"); Но я не знаю как вызвать свой метод если домен документа не равен юнити3д.ком Кто поможет?
[PC/Android/iOS/WEB] 30 Days to survive [PC] Dead Defense [PC] Саламандра - история пирата
|
|
| |
Lertmind | Дата: Понедельник, 16 Мая 2016, 20:02 | Сообщение # 7875 |
заслуженный участник
Сейчас нет на сайте
| Sanprabhu, нельзя, если под твёрдым ты понимаешь с Rigidbody. Запомни, если у объекта только Collider и нет Rigidbody, то его нельзя двигать, он считается Static и физической системе приходится делать сложные пересчёты. Когда будет срабатывать сообщения с Trigger смотри таблицу внизу http://docs.unity3d.com/Manual/CollidersOverview.html.
Добавлено (16 мая 2016, 20:02) --------------------------------------------- Laush, в документации http://docs.unity3d.com/ScriptReference/Application-absoluteURL.html на JS есть пример, который как раз проверяет на "пиратство", но если ты хочешь только проверку на домен, есть класс Uri. Как узнать доменное имя до 2-ого уровня я не нашёл, но Host возвращает полное доменное имя и можно сравнить окончание строки с помощью String.EndsWith:
Код using System;
class Program { static void Main() { string[] urls = new string[]{ "https://gcup.ru", "http://game.gcup.ru", "http://gcup.ru/igra", "http://ru.gcup.ru/games", "http://gcup.ru/ru/games/index.html", "http://gcup.com", "http://fakegcup.ru" }; foreach (var url in urls) { var u = new Uri(url); string host = u.Host; if (host == "gcup.ru" || host.EndsWith(".gcup.ru")) { Console.WriteLine("OK : " + u.Host); } else { Console.WriteLine("Failed: " + u.Host); } } } } Выводит:
Код OK : gcup.ru OK : game.gcup.ru OK : gcup.ru OK : ru.gcup.ru OK : gcup.ru Failed: gcup.com Failed: fakegcup.ru UPD: сначала не учёл доменное имя с окончанием на gcup.ru.
Сообщение отредактировал Lertmind - Понедельник, 16 Мая 2016, 20:34 |
|
| |
Sanprabhu | Дата: Вторник, 17 Мая 2016, 20:11 | Сообщение # 7876 |
частый гость
Сейчас нет на сайте
| Привет всем. Подскажите, какой коллекцией лучше воспользоваться, для хранения Vector 3? Нужно сделать коллекцию из позиций, в которые нельзя попадать. Пробовал ArrayList, но не пойму как проверять. Все время вываливается NullReferenceException. Спасибо.
|
|
| |
zaicev9797 | Дата: Вторник, 17 Мая 2016, 20:59 | Сообщение # 7877 |
AbRaKaDaBrA
Сейчас нет на сайте
| лично я, когда мне нужно создать массив каких-то навороченных обьектов, не парюсь и использую public List<Vector3> positionsList; к примеру только в начале тогда надо прописать using System.Collections.Generic;
проект Mysterious Space. The losted moment
|
|
| |
Sanprabhu | Дата: Вторник, 17 Мая 2016, 22:18 | Сообщение # 7878 |
частый гость
Сейчас нет на сайте
| zaicev9797, Спасибо, получилось, дело было в дженерике. Не знал, что нужно было подключить using System.Collections.Generic;
Сообщение отредактировал Sanprabhu - Вторник, 17 Мая 2016, 22:18 |
|
| |
drjokerface | Дата: Суббота, 21 Мая 2016, 22:51 | Сообщение # 7879 |
почетный гость
Сейчас нет на сайте
| Всем снова привет, хотелось бы узнать стоит ли делать крупный PC проект на Unity 5 или же лучше выбрать CE5 (UE4 к сожалению не подходит, там есть некоторые заморочки например с динамическим освещение и пару других). Проблемы CE5 в том, что мало туториалов, заморочки с импортом (ну это допустим не так страшно) и баги. Какие есть существенные минусы у Unity которые создадут проблемы в крупном проекте. Может с тем же динамическим освещение беда, может вообще сам по себе рендер не очень или какие нибудь другие проблемы. Вообщем, прошу помочь знающих и если Unity лучше в динамическом освещении чем UE4 (динамика мне очень важна, т.к. будет смена дня и ночи, а без нее не обойтись), то прошу помочь в выборе нужных плагинов (платные или нет - без разницы, главное чтобы хорошо работали). Заранее всем спасибо и надеюсь на адекватное сравнение, а не срачи типо Unity the best бери его или наоборот. :)
P.S. Сразу скажу, что я не программист и максимум могу скрипты писать (и то не слишком сложные).
|
|
| |
8Observer8 | Дата: Суббота, 21 Мая 2016, 23:09 | Сообщение # 7880 |
заслуженный участник
Сейчас нет на сайте
| Цитата drjokerface ( ) Какие есть существенные минусы у Unity которые создадут проблемы в крупном проекте. Скачайте демку на CE5: Округ 255. В погоне за тайнами. Автор демки так же делает другой проект на Unity. Спросите его в личке сложнее было бы на Unity добиться такой же результата
|
|
| |
|