Пятница, 15 Ноября 2024, 10:00

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Вопрос-[ответ] по 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
    Сейчас нет на сайте
    Всё написанное стёрлось) Нехорошие браузерные жесты happy
    Минутку, сейчас напишу заново

    Добавлено (15 мая 2016, 20:27)
    ---------------------------------------------
    Вот тебе моё оптимизированное решение:
    Скажем, создаёшь 3 тега "Enemy", "Player/NearEnemy" и "Player".
    Игрок на сцене один. Враги берут игрока по тегу и если он не null, то делают следующее:

    Если дистанция меньше 5f(допустим), то ставим тег "Enemy", иначе "Player/NearEnemy"
    Часть с игроком: Далее игрок берёт все объекты наших ближних врагов(по тегу конечно), и по очереди, через цикл применяет свои насильственные действия biggrin

    Ну или выкидываем часть с игроком и просто выполняем действия во врагах, так будет лучше)


    Сообщение отредактировал 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 добиться такой же результата
    Поиск:

    Все права сохранены. GcUp.ru © 2008-2024 Рейтинг