Пятница, 22 Ноября 2024, 09:18

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

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

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

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

    Сообщение отредактировал QWER56 - Вторник, 26 Июля 2011, 20:54
  • berilДата: Суббота, 16 Августа 2014, 19:06 | Сообщение # 6421
    Я не ленивый, я — энергосберегающий
    Сейчас нет на сайте
    Ну если меняшь позицию родителя, то детишки тоже изменять позицию относительно родителя



    Накодил? Убери за собой!
    Инвентарь в Unity(UI)
    Инвентарь в Unity(GUI)
    ArtanielДата: Суббота, 16 Августа 2014, 22:00 | Сообщение # 6422
    частый гость
    Сейчас нет на сайте
    Да, боюсь простого способа нет. Надо както запомнить список детей, оторвать их от папы ( .transform.parent = null), переместить папу, потом снова задать детям папу.
    Если папа пустой, чистый пивот, то можно заспавнить нового, поставить в новом месте и за один обход детей сменить им папу. Не забыть обновить все ссылки на объект во всех скриптах.
    Можно попробовать записать кудато позиции-ротации детей, подвинуть папу и сразу присвоить детям их старые позиции-ротации.
    SarCasmДата: Суббота, 16 Августа 2014, 22:45 | Сообщение # 6423
    заслуженный участник
    Сейчас нет на сайте
    Artaniel, грустнявость, этого мне делать и не хотелось(

    Моя игра Gamiron#11 - Тема Скачать
    MANMANAДата: Суббота, 16 Августа 2014, 23:32 | Сообщение # 6424
    почти ветеран
    Сейчас нет на сайте
    записать всех деток в массив Transform[] myChildren = gameObject.GetComponentsInChildren<Transform>();
    в цикле им прибавить/вычесть вектор будущего смещения папы.
    потом перемещать папу на величину смещения.
    так не пойдет?
    а если так:

    aChildren = transform.Find("firstChild/secondChild/thirdChild");
    aChildren.Translate(-Vector3.forward);
    aParent.Translate(Vector3.forward);


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

    Последнее:

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

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


    Сообщение отредактировал MANMANA - Воскресенье, 17 Августа 2014, 00:54
    MarkoffkaДата: Воскресенье, 17 Августа 2014, 13:57 | Сообщение # 6425
    Pixel Logic
    Сейчас нет на сайте
    SarCasm, transform?
    SarCasmДата: Воскресенье, 17 Августа 2014, 14:18 | Сообщение # 6426
    заслуженный участник
    Сейчас нет на сайте
    MANMANA, да переместить все чилды то что нужно

    Моя игра Gamiron#11 - Тема Скачать
    error111Дата: Пятница, 22 Августа 2014, 13:12 | Сообщение # 6427
    заслуженный участник
    Сейчас нет на сайте
    Делаю простенький шмап.
    Есть ГО который враг, на нем висит rigidbody2d и скрипт в котором в Старте ГО сообщается ЭддФорсе
    Код
    Start()
    {
    rigidbody2D.AddForce(new Vector2(0, -moveSpeed));
    }

    Таким образом ГО спускается с верха экрана вниз.
    Что мне надо - по средствам изменения булевой isMoving останавливать когда надо и когда надо снова придавать ГО силу для движения. Останавливаю его через
    Код

    void StopEnemy(){
    rigidbody2D.AddForce(new Vector2(0, moveSpeed));
    }

    Запускаю по новой как несложно догадаться через
    Код

    void GoEnemy(){
    rigidbody2D.AddForce(new Vector2(0, -moveSpeed));
    }

    Как реализовать отслеживание булевой и корректный запуск ГО понять не могу. Изменения булевой отслеживаются в Update() ну или FixedUpdate() так как я использую физику.
    И соответственно если
    Код
    Update(){
    if (isMoving)
    GoEnemy();
    else
    StopEnemy();
    }

    то и AddForce из этих функций будет выполняться каждый кадр, что нафиг не надо так как объект улетает из поля зрения с дикой скоростью.
    Как можно отследить буль, но вызвать функцию с эддФорс только 1 раз?..


    [Shmup/RPG] Fantasy Shmup!
    ArtanielДата: Пятница, 22 Августа 2014, 16:31 | Сообщение # 6428
    частый гость
    Сейчас нет на сайте
    error111, самое простое, там где ты меняешь значение isMoving, сразу же запускать GoEnemy() или StopEnemy().
    Сложнее, делаем еще одну bool переменную LastIsMoving
    Код
    if (LastIsMoving!=isMoving) {
       //сюда мы попадем только если isMoving в этом фрейме не такое как в прошлом
       if (isMoving)  
       GoEnemy();  
       else  
       StopEnemy();  
    }
    LastIsMoving = isMoving;

    Таким образом мы помним двигались мы или нет в прошлом фрейме, и если это изменилось, меняем и силы.
    MR_BorgДата: Пятница, 22 Августа 2014, 18:07 | Сообщение # 6429
    участник
    Сейчас нет на сайте
    Всем привет, в основном изучаю С++ и всегда работал с 2д движками,(С++ и делфи). Решил попробовать силы в 3д, т.к. 2д уже достало biggrin . Пока читаю документацию и оф форум. Думаю начать изучение либо с irrlicht т.к. он на С++, либо изучать Юнити с C#, тем кто пользуется Юнити подскажите как он в плане производительности и функционала. Пока буду разрабатывать приложения под Винду.

    Изучаю C++ попутно пишу игру.
    AdomДата: Пятница, 22 Августа 2014, 21:21 | Сообщение # 6430
    Печенька!
    Сейчас нет на сайте
    Люди такой вопрос , внезапно начала лагать Unity причем так что всеее происходит ооочень медленно , что-бы открыть папку уходит 1-2 минуты я даже переустанавливал но не вышло решить проблему (( Думал что проблема в модели (ибо полигов там много), но я убрал и ничего не вышло ((( В общем помогите !
    last2424Дата: Пятница, 22 Августа 2014, 21:34 | Сообщение # 6431
    30 мл. блоков
    Сейчас нет на сайте
    Adom, выкинуть из окна комп.

    Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)
    AdomДата: Пятница, 22 Августа 2014, 22:28 | Сообщение # 6432
    Печенька!
    Сейчас нет на сайте
    last2424, Не смешно раньше этих лагов небыло
    berilДата: Пятница, 22 Августа 2014, 22:44 | Сообщение # 6433
    Я не ленивый, я — энергосберегающий
    Сейчас нет на сайте
    Посмотри насколь загружен ЦП и Оперативка в этот момент. Поставь высокий приоритет для Unity. Если не хватает оперативки, закрой "толстые" приложения.

    У меня такое тоже бывает, когда макс, фотошоп и 2 проекта в юнити открыты одновременно




    Накодил? Убери за собой!
    Инвентарь в Unity(UI)
    Инвентарь в Unity(GUI)
    AdomДата: Пятница, 22 Августа 2014, 22:56 | Сообщение # 6434
    Печенька!
    Сейчас нет на сайте
    beril, ЦП-22%, оперативка 26% , думаю проблема в Windows ибо она у меня сама по себе лагает т.е достаточно свернуть окно как все зависло , вот кажись придется снова винду менять.
    berilДата: Суббота, 23 Августа 2014, 02:40 | Сообщение # 6435
    Я не ленивый, я — энергосберегающий
    Сейчас нет на сайте
    Почисть винду, зачем сразу переустанавливать то? cool



    Накодил? Убери за собой!
    Инвентарь в Unity(UI)
    Инвентарь в Unity(GUI)
    AdomДата: Суббота, 23 Августа 2014, 20:23 | Сообщение # 6436
    Печенька!
    Сейчас нет на сайте
    beril, Дык чистая винда , каждую неделю чищу .

    Добавлено (23.08.2014, 20:23)
    ---------------------------------------------
    Вот вопрос ,

    Код
    public Transform []House;

    Как в такой массив добавить строчку ? Т.е я понял как можно пихать туда объекты , но перед тем как их туда пихнуть в инспекторе нужно увеличить кол-во этих мест в которые пихаются объекты , как увеличить их через скрипт ?
    GantZ_YakaДата: Суббота, 23 Августа 2014, 21:22 | Сообщение # 6437
    почетный гость
    Сейчас нет на сайте
    Adom,
    Код
    House = new Transform[10];

    У массивов изменить размер можно занова его создав, предыдущие значения элементов при этом потеряются. Если предполагается часто менять количество элементов, лучше пользоваться списками List (using System.Collections.Generic)
    ЛевшаДата: Суббота, 23 Августа 2014, 21:37 | Сообщение # 6438
    почти ветеран
    Сейчас нет на сайте
    Используй динамические массивы.
    http://habrahabr.ru/post/142285/


    X.cor.R (Prologue)

    Сообщение отредактировал Левша - Суббота, 23 Августа 2014, 21:37
    AdomДата: Суббота, 23 Августа 2014, 22:27 | Сообщение # 6439
    Печенька!
    Сейчас нет на сайте
    Левша, Я попробовал использовать ArrayList , но почему-то эта строка не выводилась в инспекторе ...

    Добавлено (23.08.2014, 22:27)
    ---------------------------------------------
    GantZ_Yaka, Спасибо , сейчас прочитал справку и сделал biggrin
    И вот еще вопрос вот строчка кратко объясню , как-только появляется объект с имением House , то это объект заноситься в массив , но тут проблема она запихивает туда много ооочень много , как это ограничить ? Что-бы только один объект пихался ,а после появления еще одного пихался это новый объект.

    Код
    if (GameObject.Find ("House(Clone)")) {  
    House.Add(GameObject.FindWithTag ("House").transform);
    }
    GantZ_YakaДата: Суббота, 23 Августа 2014, 23:15 | Сообщение # 6440
    почетный гость
    Сейчас нет на сайте
    А вот не надо в апдейте бесконечно искать и добавлять объект House в сцене smile Совать в список объект надо лишь один раз - при его создании. Лучше всего это сделать скриптом на префабе объекта House, где в старте прописать поиск объекта, который хранит этот список, и занесение в его список ссылку на себя.
    Поиск:

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