Воскресенье, 16 Июня 2024, 01:45

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

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

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

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

    Сообщение отредактировал QWER56 - Вторник, 26 Июля 2011, 20:54
  • MANMANAДата: Воскресенье, 01 Февраля 2015, 12:20 | Сообщение # 6781
    почти ветеран
    Сейчас нет на сайте
    таймер, таймер...
    http://answers.unity3d.com/questio....me.html

    http://www.unity3dstudent.com/2010/07/beginner-b06-simple-timer/

    "if(myTimer <= 0 && isGrounded == false){
    CallMyFynction();
    Debug.Log("Call The Function");

    }"

    Возможно, условие у тебя выполняется и функция выполняется (но только один раз, или короткий промежуток времени), но потом условие "isGrounded == false &&..." не является истиной и вызов твоей функции не выполняется. В этом случае:

    "if(myTimer <= 0 && isGrounded == false){
    callFunction = true;
    Debug.Log("Call The Function is true");
    }
    if(callFunction == true)
    {
    CallMyFunction();
    Debug.Log("Call The Function");
    }
    "

    либо так, если тебе нужно вызвать функцию через какое-то время после того, как объект столкнулся с землей:
    "if(isGrounded == false){
    myTimerCountDown = true;
    Debug.Log("Start timer countdown");
    }
    if(myTimerCountDown == true)
    {

    if(myTimer > 0){
    myTimer -= Time.deltaTime;
    }
    if(myTimer <= 0)
    {
    CallMyFunction();
    Debug.Log("Call The Function");
    }
    }
    "


    http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг
    VKонтакте 3Dbuffer

    Последнее:

    Новый раздел "Текстуры"

    Как запатентовать, защитить техническое решение, игру, идею


    Сообщение отредактировал MANMANA - Воскресенье, 01 Февраля 2015, 12:24
    Vip_and_RipДата: Воскресенье, 01 Февраля 2015, 15:57 | Сообщение # 6782
    почетный гость
    Сейчас нет на сайте
    Цитата MANMANA ()
    таймер, таймер...

    up Спасибо, получилось.

    Насчет производительности не проверял, но работает:
    Код

    startTime += Time.deltaTime;
    if (startTime > 2 && isGrounded == false) { ...;}
    if (isGrounded) {
        startTime = 0; }


    Больше никогда не буду делать игры.
    choopieДата: Вторник, 03 Февраля 2015, 04:05 | Сообщение # 6783
    частый гость
    Сейчас нет на сайте
    Всем привет, проблемка короче.
    Есть стены, которые генерятся вот так:



    И есть снаряды, которые должны уничтожаться вот так:


    Собственно они уничтожаются, да не все. В чем может быть дело? Некоторые просто вылетают за стену, не понимаю от чего их поведение так зависит. Точнее нет, возможно понимаю, с фпс как-то связано, лол. Но как запилить чтобы нормально работало?
    FL_FlowДата: Вторник, 03 Февраля 2015, 06:47 | Сообщение # 6784
    частый гость
    Сейчас нет на сайте
    choopie, Да, такое бывает из-за низкого fps. Попробуй включить вертикальную синхронизацию и проведи оптимизации, что-бы увеличить fps.
    MANMANAДата: Вторник, 03 Февраля 2015, 12:37 | Сообщение # 6785
    почти ветеран
    Сейчас нет на сайте
    либо делать стенки толще и/или пули больше, чтобы коллайдеры пуль не проскакивали коллайдеры стен.
    либо делать все больше.
    Такой эффект наблюдается, не только от низкого фпс, когда у тебя пуля и ее коллайдер перелетает коллайдер стены, но и когда щаг перемещения пули больше ширины стены.


    http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг
    VKонтакте 3Dbuffer

    Последнее:

    Новый раздел "Текстуры"

    Как запатентовать, защитить техническое решение, игру, идею
    choopieДата: Вторник, 03 Февраля 2015, 12:57 | Сообщение # 6786
    частый гость
    Сейчас нет на сайте
    Цитата FL_Flow ()
    Попробуй включить вертикальную синхронизацию

    Вертикальная синхронизация не помогла. sad

    Цитата MANMANA ()
    либо делать стенки толще и/или пули больше, чтобы коллайдеры пуль не проскакивали коллайдеры стен.
    либо делать все больше.
    Такой эффект наблюдается, не только от низкого фпс, когда у тебя пуля и ее коллайдер перелетает коллайдер стены, но и когда щаг перемещения пули больше ширины стены.


    Я по другому решил проблему, снял триггер со снарядов и вместо этого:

    Теперь это:


    Теперь не проскакивают. Всем спасибо за советы. happy
    Pe4enkaДата: Четверг, 05 Февраля 2015, 19:32 | Сообщение # 6787
    почетный гость
    Сейчас нет на сайте
    Такой вопрос. Как можно скрипт заставить читать допустим ini файлы и применять то, что там написано к подходящим переменным ?
    Т.е
    В скрипте есть переменная A которая равна нулю. А в файле написано что эта переменная имеет значение 1 и нужно что-бы скрипт применил значение из файла.


    Бадабум!
    MANMANAДата: Четверг, 05 Февраля 2015, 20:09 | Сообщение # 6788
    почти ветеран
    Сейчас нет на сайте
    вот так? http://forum.unity3d.com/threads.....133009

    вот еще http://forum.unity3d.com/threads.....244770

    и http://stackoverflow.com/questions/217902/reading-writing-an-ini-file

    Добавлено (05 февраля 2015, 20:09)
    ---------------------------------------------
    http://forum.unity3d.com/threads/read-data-file.86010/


    http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг
    VKонтакте 3Dbuffer

    Последнее:

    Новый раздел "Текстуры"

    Как запатентовать, защитить техническое решение, игру, идею
    WPhoeniXWДата: Пятница, 06 Февраля 2015, 03:29 | Сообщение # 6789
    участник
    Сейчас нет на сайте
    Ребят, привет сидел дня три, разрабатывая игру на конкурс, в итоге решил отказатся от идеи.

    Вопрос только для профессионалов!

    После того как вы были завлечены дерзкой фразой и жирным шрифтом приступим).
    Так вот суть, по нажатию клавиши у нас создаётся, в определённой точке объект с коллайдером. Для понимания - лужа воды.
    Если мой персонаж находится в "луже"(будем так называть) и он бьёт током, то лужа тоже становится наэлектризована, Enemy получает урон
    (Всё это сделано и работает, ибо легко, точка в которой создаётся лужа, берётся из Rayhit.point, а лужа создаётся Instatuate , создаём клоны префаба, на префабе скрипт)

    Так вот, всё бы хорошо, но потом я понял, если создать два объекта лужи рядом, должна получатся одна большая лужа, которая может быть наэлектризована ( и соответственно Enemy получит урон)

    Пытался через коллайдеры сделать - херня, через теги - тоже ( через теги можно бить по лужам всем с тегом "Water" например, но но это проблемно ибо распространяется на все лужи даже расположенные не рядом)

    Я думаю тут нужно программированиt логики цепных реакций, вот только как?


    " Кто в страхе живет, тот и гибнет от страха. "
    Леонардо Да Винчи


    Сообщение отредактировал WPhoeniXW - Пятница, 06 Февраля 2015, 03:31
    GantZ_YakaДата: Пятница, 06 Февраля 2015, 06:29 | Сообщение # 6790
    почетный гость
    Сейчас нет на сайте
    WPhoeniXW, на профи не претендую, но есть мысля smile можно сделать через габаритные контейнеры, не задействуя физику с коллайдерами, вот так:
    1.Все Renderer'ы создаваемых луж собираем в список.
    2.При создании новой лужи проверяем, пересекается ли её габаритный контейнер с контейнерами уже созданных (циклом foreach прогоняем по списку уже созданных луж).

    при создании лужи:
    Код

    Bounds b1 = GetComponent<Renderer>().bounds;

    foreach (Renderer r in allWaterRenderers)
                 {                 
                     Bounds b2 = r.bounds;
                     if (BoundsHitSomeWhere(b1, b2)) //проверка на пересечение
                     {
                         //лужи пересеклись.
                         //тут добавляем условие, если одна из этих луж - наэлектризована, электризуем и вторую.
                     }                 
                      
                 }


    проверка пересечений:
    Код

      public static bool BoundsHitSomeWhere(Bounds b1, Bounds b2)
         {         
             if ((b1.center.x + b1.extents.x) < (b2.center.x - b2.extents.x) || (b1.center.x - b1.extents.x) > (b2.center.x + b2.extents.x))
             {
                 return false;
             }
             else if ((b1.center.y + b1.extents.y) < (b2.center.y - b2.extents.y) || (b1.center.y - b1.extents.y) > (b2.center.y + b2.extents.y))
             {
                 return false;
             }
             else if ((b1.center.z + b1.extents.z) < (b2.center.z - b2.extents.z) || (b1.center.z - b1.extents.z) > (b2.center.z + b2.extents.z))
             {
                 return false;
             }
             else
             {             
                 return true;
             }
         }


    Если лужи совсем плоские, на разных высотах друг от друга и их пересечения никак не ловятся, можно габаритные контейнеры у них для проверки самому задавать, потолще:
    Код

    Bounds b1 = new Bounds(transform.position, transform.localScale); //вместо transform.localScale свой Vector3 с желаемой шириной, толщиной, высотой
    MANMANAДата: Пятница, 06 Февраля 2015, 12:44 | Сообщение # 6791
    почти ветеран
    Сейчас нет на сайте
    Если форма луж сходна с примитивными - кругом, квадратом, то можно вот так.

    вот такое подходит для квадратов, правильных многогранников и кругов



    Для прямоугольников, звезд и тд. фигур, описываемых функциями также можно вычислить расстояния от границ одной лужи, до границы другой (потяжелее будет :)).


    http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг
    VKонтакте 3Dbuffer

    Последнее:

    Новый раздел "Текстуры"

    Как запатентовать, защитить техническое решение, игру, идею
    SkorpyXДата: Пятница, 06 Февраля 2015, 18:17 | Сообщение # 6792
    участник
    Сейчас нет на сайте
    Здравствуйте! Подскажиле пожалуйста, можно ли переписать данный код без цикла?

    Код

    #pragma strict

    class gameitem {
       var id: byte;
       var count: byte;
       var maxcount: byte;
      }

    private var i: byte;
    private var a: gameitem[] = new gameitem[100];
    for (i = 0; i < 100; i += 1) {
    a[i] = new gameitem();
    }
    MANMANAДата: Пятница, 06 Февраля 2015, 21:36 | Сообщение # 6793
    почти ветеран
    Сейчас нет на сайте
    перечислением в сто строк - спокойно:
    a[0] = new gameitem();
    a[1] = new gameitem();
    a[2] = new gameitem();
    ...
    a[99] = new gameitem();

    smile

    или ты javascript в c# переводишь?
    нееее... все равно не понятно, почему без цикла так принципиально?


    http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг
    VKонтакте 3Dbuffer

    Последнее:

    Новый раздел "Текстуры"

    Как запатентовать, защитить техническое решение, игру, идею
    SkorpyXДата: Пятница, 06 Февраля 2015, 21:44 | Сообщение # 6794
    участник
    Сейчас нет на сайте
    MANMANA, Я думал, что цикл лишний и что есть решение лучше
    choopieДата: Воскресенье, 08 Февраля 2015, 01:09 | Сообщение # 6795
    частый гость
    Сейчас нет на сайте
    Цитата SkorpyX ()
    MANMANA, Я думал, что цикл лишний и что есть решение лучше


    Циклы для этого и нужны, ни капельки ни лишний.

    Добавлено (08 февраля 2015, 01:09)
    ---------------------------------------------
    Всем доброго времени суток. Есть вопрос.

    Пытаюсь сделать систему передвижения click-to-point. Ну, как в Диабло, например. Делаю в 2D, персонаж - спрайт.
    Сделал так: по нажатию кнопки создается объект, к которому движется персонаж. Однако у меня проблемы с transform.LookAt(); :\ Все работает четко, но спрайт персонажа поворачивается боком. >.<



    Сообщение отредактировал choopie - Воскресенье, 08 Февраля 2015, 01:12
    MANMANAДата: Воскресенье, 08 Февраля 2015, 01:12 | Сообщение # 6796
    почти ветеран
    Сейчас нет на сайте
    http://xgm.guru/p/unity/117047

    http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг
    VKонтакте 3Dbuffer

    Последнее:

    Новый раздел "Текстуры"

    Как запатентовать, защитить техническое решение, игру, идею
    choopieДата: Воскресенье, 08 Февраля 2015, 01:26 | Сообщение # 6797
    частый гость
    Сейчас нет на сайте
    Цитата MANMANA ()
    http://xgm.guru/p/unity/117047


    Спасибо большое!

    Если кому-то вдруг понадобится код:

    MANMANAДата: Воскресенье, 08 Февраля 2015, 01:52 | Сообщение # 6798
    почти ветеран
    Сейчас нет на сайте
    Спасибо - много smile

    http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг
    VKонтакте 3Dbuffer

    Последнее:

    Новый раздел "Текстуры"

    Как запатентовать, защитить техническое решение, игру, идею
    choopieДата: Воскресенье, 08 Февраля 2015, 01:58 | Сообщение # 6799
    частый гость
    Сейчас нет на сайте
    Так, моя система отстой. :\ Казалось бы все шик, но блин, в ней же нельзя начать двигаться к другой точке, не пройдя путь до предыдущей, лол. На полпути не выйдет сменить направление. И что-то придумать не могу, как это исправить.
    Как заставить объект двигаться к новой копии префаба, а про старую забыть? >.<


    Сообщение отредактировал choopie - Воскресенье, 08 Февраля 2015, 02:08
    MANMANAДата: Воскресенье, 08 Февраля 2015, 03:05 | Сообщение # 6800
    почти ветеран
    Сейчас нет на сайте
    задать новый Vector3 moveDirection = GameObject.FindGameObjectWithTag("nextTarget").transform.position - transform.position;
    ?:)


    http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг
    VKонтакте 3Dbuffer

    Последнее:

    Новый раздел "Текстуры"

    Как запатентовать, защитить техническое решение, игру, идею
    Поиск:

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