Пятница, 15 Ноября 2024, 05:16

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
Вопрос-[ответ] по Unity
QWER56Дата: Понедельник, 09 Августа 2010, 10:58 | Сообщение # 1
старожил
Сейчас нет на сайте
Вопрос-[Ответ] по Unity3d

  • База скриптов Unity3d
  • Курс Уроков по Unity 3D от Alcatraz

    ConsMark - поисковик по интернет магазинам.

    Сообщение отредактировал QWER56 - Вторник, 26 Июля 2011, 20:54
  • 8Observer8Дата: Вторник, 10 Мая 2016, 15:13 | Сообщение # 7841
    заслуженный участник
    Сейчас нет на сайте
    Sanprabhu, объект должен исчезать с одной клетки и появляться в другой или плавно переходить?

    Сообщение отредактировал 8Observer8 - Вторник, 10 Мая 2016, 15:19
    drjokerfaceДата: Вторник, 10 Мая 2016, 15:16 | Сообщение # 7842
    почетный гость
    Сейчас нет на сайте
    Кто нибудь пробовал Granite или Amplify Texture в Unity (или UE4) в чем их прикол, а то я что-то не совсем понял. smile
    SanprabhuДата: Вторник, 10 Мая 2016, 15:19 | Сообщение # 7843
    частый гость
    Сейчас нет на сайте
    Цитата drjokerface ()
    объект должен исчезать с одной клекти и появляться в другой или плавно переходить?

    Появляться.
    Чтобы переходить использовать поиск пути, например Simply A* правильно?
    berilДата: Вторник, 10 Мая 2016, 16:41 | Сообщение # 7844
    Я не ленивый, я — энергосберегающий
    Сейчас нет на сайте
    Цитата drjokerface ()
    Кто нибудь пробовал Granite или Amplify Texture в Unity (или UE4) в чем их прикол, а то я что-то не совсем понял. smile

    https://www.youtube.com/watch?v=ivAdU7yCYS0




    Накодил? Убери за собой!
    Инвентарь в Unity(UI)
    Инвентарь в Unity(GUI)
    drjokerfaceДата: Вторник, 10 Мая 2016, 18:56 | Сообщение # 7845
    почетный гость
    Сейчас нет на сайте
    Как я понял виртуальный текстуринг эффективен при создании окружения и для персонажей не подойдет.
    SanprabhuДата: Среда, 11 Мая 2016, 09:47 | Сообщение # 7846
    частый гость
    Сейчас нет на сайте
    Всем привет. Мучился-мучился со своими столкновениями, сеткой. Все решилось округлением Mathf.Round ))
    при первом появлении все ок.
    Теперь встал такой вопрос: в определенный момент времени объект должен переместиться вверх по оси y, но если там находится другой объект тут опять та же проблема - объекты толкаются ((
    Как проверить есть ли кто-то наверху или нет, и если да, я просто смещу его вправо или влево по оси x(опять же если там пусто) и потом подниму.
    Спасибо.
    8Observer8Дата: Среда, 11 Мая 2016, 10:08 | Сообщение # 7847
    заслуженный участник
    Сейчас нет на сайте
    Цитата Sanprabhu ()
    Как проверить есть ли кто-то наверху или нет

    Код

    bool IsValidDir(Vector2 dir)
    {
        Vector2 pos = transform.position;
        RaycastHit2D hit = Physics2D.Linecast(pos + dir, pos);
        return (hit.collider.gameObject == gameObject);
    }


    Сообщение отредактировал 8Observer8 - Среда, 11 Мая 2016, 10:12
    SanprabhuДата: Среда, 11 Мая 2016, 12:43 | Сообщение # 7848
    частый гость
    Сейчас нет на сайте
    Цитата 8Observer8 ()
    bool IsValidDir(Vector2 dir)
    {
    Vector2 pos = transform.position;
    RaycastHit2D hit = Physics2D.Linecast(pos + dir, pos);
    return (hit.collider.gameObject == gameObject);
    }


    Теперь NullReferenceException: Object reference not set to an instance of an object ((


    Сообщение отредактировал Sanprabhu - Среда, 11 Мая 2016, 12:44
    8Observer8Дата: Среда, 11 Мая 2016, 12:50 | Сообщение # 7849
    заслуженный участник
    Сейчас нет на сайте
    Цитата Sanprabhu ()
    Теперь NullReferenceException: Object reference not set to an instance of an object ((

    Это значит, что вы не инициализировали ссылку на объект. Может быть вы забыли в инспекторе перетащить префаб или объект на какое-нибудь открытое поле?
    SanprabhuДата: Среда, 11 Мая 2016, 13:00 | Сообщение # 7850
    частый гость
    Сейчас нет на сайте
    Цитата 8Observer8 ()
    Это значит, что вы не инициализировали ссылку на объект

    Это появилось после добавления функции IsValidDir(Vector2 dir).
    Может я должен что-то инициализировать из этой функции?

    Если кликнуть на Exception, указывает на эту строку return (hit.collider.gameObject == gameObject);


    Сообщение отредактировал Sanprabhu - Среда, 11 Мая 2016, 13:05
    8Observer8Дата: Среда, 11 Мая 2016, 13:04 | Сообщение # 7851
    заслуженный участник
    Сейчас нет на сайте
    Цитата Sanprabhu ()
    Это появилось после добавления функции IsValidDir(Vector2 dir).
    Может я должен что-то инициализировать из этой функции?


    Тогда изменим немного:

    Код

        bool IsValidDir(Vector2 dir)
        {
            Vector2 pos = transform.position;
            RaycastHit2D hit = Physics2D.Linecast(pos + dir, pos);
            if (hit)
            {
                return hit.collider.gameObject == gameObject;
            }
            else
            {
                return false;
            }
        }


    Сообщение отредактировал 8Observer8 - Среда, 11 Мая 2016, 13:06
    SanprabhuДата: Четверг, 12 Мая 2016, 02:55 | Сообщение # 7852
    частый гость
    Сейчас нет на сайте
    8Observer8, спасибо, все работает ))

    Добавлено (12 мая 2016, 02:55)
    ---------------------------------------------
    Доброго времени суток.
    Подскажите, почему Unity виснет при использовании цикла while?

    Код
    check = IsEmpty();
         while (!check)
            {
                transform.position += new Vector3(1.0f, 0, 0);
                check = IsEmpty();
            }

    Код
    bool IsEmpty()
        {
            RaycastHit hit;

            Vector3 up = transform.TransformDirection(Vector3.up);

            return (Physics.Raycast(transform.position, (up), out hit, (float)0.3)) ? false : true;
        }

    Причем виснет только если использовать функции в цикле. Если написать простой цикл без функций, будет работать.
    P.S. Для эксперимента пробовал использовать go to, также виснет.


    Сообщение отредактировал Sanprabhu - Четверг, 12 Мая 2016, 00:46
    LertmindДата: Четверг, 12 Мая 2016, 09:30 | Сообщение # 7853
    заслуженный участник
    Сейчас нет на сайте
    Sanprabhu, проверил в Unity, как и думал в этом коде нет проблемы, скорее всего где-то что-то ещё происходит.
    Замечу, что код для IsEmpty() эквивалентен этому:
    Код
    bool IsEmpty()
    {
        return !Physics.Raycast(transform.position, transform.up, 0.3f);
    }

    Добавлено (12 мая 2016, 09:30)
    ---------------------------------------------
    Виснуть может, если дочерний объект висит у объекта с этим скриптом, тогда при смещении всё равно срабатывает проверка.

    SanprabhuДата: Четверг, 12 Мая 2016, 12:59 | Сообщение # 7854
    частый гость
    Сейчас нет на сайте
    Цитата Lertmind ()
    Виснуть может, если дочерний объект висит у объекта с этим скриптом

    Да, так и есть, спасибо, исправил))
    manonedgeДата: Пятница, 13 Мая 2016, 10:53 | Сообщение # 7855
    почетный гость
    Сейчас нет на сайте
    Не надо делать такие потенциально опасные места, как бесконечные циклы. Зачем вообще по немного проверять высоту?
    berilДата: Пятница, 13 Мая 2016, 12:58 | Сообщение # 7856
    Я не ленивый, я — энергосберегающий
    Сейчас нет на сайте
    Цитата Sanprabhu ()
    Причем виснет только если использовать функции в цикле. Если написать простой цикл без функций, будет работать.

    Ну как написали не стоит использовать бесконечный цикл вот так как у тебя, если нужен бесконечный цикл используй Coroutines




    Накодил? Убери за собой!
    Инвентарь в Unity(UI)
    Инвентарь в Unity(GUI)
    SanprabhuДата: Пятница, 13 Мая 2016, 13:38 | Сообщение # 7857
    частый гость
    Сейчас нет на сайте
    Цитата manonedge ()
    Зачем вообще по немного проверять высоту?

    Объект должен стать на свободное место вверху, нужно проверять не занято ли оно, если да, то проверять соседнее и т.д.
    Цитата beril ()
    если нужен бесконечный цикл используй Coroutines

    Я с Coroutines много не работал. А как конкретно этот код можно написать с Coroutines?
    berilДата: Пятница, 13 Мая 2016, 20:15 | Сообщение # 7858
    Я не ленивый, я — энергосберегающий
    Сейчас нет на сайте
    Цитата Sanprabhu ()

    Я с Coroutines много не работал. А как конкретно этот код можно написать с Coroutines?

    Код
    IEnumerator InfinityLoop(){
    while(){
          
             yield return null; \\или можно yield return new WaitForSeconds если задержка нужна
         }
    }


    Кстати метод Start тоже можно сделать IEnumerator




    Накодил? Убери за собой!
    Инвентарь в Unity(UI)
    Инвентарь в Unity(GUI)
    LertmindДата: Пятница, 13 Мая 2016, 21:03 | Сообщение # 7859
    заслуженный участник
    Сейчас нет на сайте
    beril, в данном случае, ему надо в одном кадре проверить, а не размазывать по кадрам.
    Если говорить про циклы, бывает, что циклы ограничивают количеством итераций, но только при определённых условиях. Полагаю, у него можно было обойтись структурой данных, типа двумерного массива, тогда придётся написать дополнительный код с синхронизацией и т. п., но зато проверять будет проще и быстрее.
    berilДата: Пятница, 13 Мая 2016, 21:17 | Сообщение # 7860
    Я не ленивый, я — энергосберегающий
    Сейчас нет на сайте
    Цитата Lertmind ()
    beril, в данном случае, ему надо в одном кадре проверить, а не размазывать по кадрам.

    ну тогда пусть WaitForEndOfFrame использует Почему Update не подходит? Я наверно не до конца понимаю, что автор хочет сделать




    Накодил? Убери за собой!
    Инвентарь в Unity(UI)
    Инвентарь в Unity(GUI)
    Поиск:

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