Суббота, 28 Декабря 2024, 19:49

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

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

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

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

    Сообщение отредактировал QWER56 - Вторник, 26 Июля 2011, 20:54
  • EchoITДата: Понедельник, 09 Июня 2014, 14:19 | Сообщение # 6061
    старожил
    Сейчас нет на сайте
    Цитата
    EchoIT, Не вышло.

    Ясно.


    Долгожданный анонсик: State of War
    AdomДата: Понедельник, 09 Июня 2014, 15:38 | Сообщение # 6062
    Печенька!
    Сейчас нет на сайте
    allods, Вооо. Большое спасибо ) . Даже + поставить не поленюсь )

    Сообщение отредактировал Adom - Понедельник, 09 Июня 2014, 15:39
    allodsДата: Понедельник, 09 Июня 2014, 15:44 | Сообщение # 6063
    почти ветеран
    Сейчас нет на сайте
    Цитата Adom ()
    Вооо. Большое спасибо ) . Даже + поставить не поленюсь )

    Работает или нет?
    AdomДата: Понедельник, 09 Июня 2014, 17:32 | Сообщение # 6064
    Печенька!
    Сейчас нет на сайте
    Да работает )

    Добавлено (09.06.2014, 17:32)
    ---------------------------------------------
    А вот теперь снова проблема. Из-за этих строк

    Код
    towerHorizonatlRotat = Mathf.MoveTowardsAngle (towerHorizonatlRotat, Cam.transform.eulerAngles.y,speedRotat*Time.deltaTime);  /////изменяем со скоростью speedRotat к повороту башни  
    transform.eulerAngles = new Vector3(0, towerHorizonatlRotat, 0);/// вертим саму башню

    У меня башня всегда в одной плоскости. Т.е танк стоит допустим в 90 градусов по Y а башня все так-же 0 градусов.
    DalyДата: Понедельник, 09 Июня 2014, 17:57 | Сообщение # 6065
    постоянный участник
    Сейчас нет на сайте
    Adom, Используй локальные координаты.
    AdomДата: Понедельник, 09 Июня 2014, 18:53 | Сообщение # 6066
    Печенька!
    Сейчас нет на сайте
    Daly, Ошибку выдает.
    IlyaGolubtsovДата: Вторник, 10 Июня 2014, 09:05 | Сообщение # 6067
    был не раз
    Сейчас нет на сайте
    Столкнулся с проблемой,помогите пожалуйста)Для анимации персонажа для онлайн шутера отображаю разными слоями-для "нашей" камеры анимированые руки на капсуле(как в видио-уроках ),для других игроков анимированый Biped (сделал в 3ds max).Когда мы прицеливаемся вниз или вверх другие игроки должны видеть движение рук вверх и вниз.Для этого я в иерархии положил кости рук в объект со скриптом управляющим вращением.Но в этом случае у костей отключается анимация(руки не будут перезаряжать оружие или выполнять какие либо действия,а хотелось чтобы это видели и другие игроки).Пока я вижу один вариант-проанимировать руки Biped во всех возможных случаях(присед,бег,лёжа) и воспроизводить при движении вверх вверх и назад при взгляде камеры вниз.Может есть другие варианты(может можно как-то отдельно воспроизводить анимации для ног и для рук?),подскажите пожалуйста

    Сообщение отредактировал IlyaGolubtsov - Вторник, 10 Июня 2014, 09:19
    DantorSДата: Вторник, 10 Июня 2014, 18:26 | Сообщение # 6068
    заслуженный участник
    Сейчас нет на сайте
    У меня есть игра. У меня есть боты. И есть объъекты с котрыми могут взаимодействовать боты. С теми объектами с которыми уже 1 бот взаимодействовал хочу произвести некое действие (через скрипт). Как в этом скрипте я могу обратиться к объектам с котрым взаимодействовал 1 бот? Может быть можно как-нибудь с масивами повозиться?
    White9Дата: Вторник, 10 Июня 2014, 18:54 | Сообщение # 6069
    заслуженный участник
    Сейчас нет на сайте
    DantorS, если тебе не важно какой именно бот взаимодействовал с объектом, то можно сделать так
    1) Создать тег, например, "wasUsed"
    2) При взаимодействии присваиваем объекту этот тег
    3) В скрипте, в котором ты вызываешь объекты, делаешь поиск по тегу "wasUsed" и заносишь данные в массив
    4) Если нужен отдельный объект из всего найденного массива, то можно осуществлять дополнительную проверку по имени или id-номеру, заданному в скрипте объекта
    Навскидку ничего проще в голову не идёт )


    Сообщение отредактировал White9 - Вторник, 10 Июня 2014, 18:55
    DantorSДата: Вторник, 10 Июня 2014, 19:06 | Сообщение # 6070
    заслуженный участник
    Сейчас нет на сайте
    В общем пишу ai. Остановился на дверях. Если один бот закрыл дверь, но гг открыл дверь и бот увидил открытую дверь (которую именно он закрывал) то и просходит некое действие. Для остальных ботов тоже самое (именно ими закрытые двери). Нельзя сделать как-нибудь автономно или для каждого нужен свой скрипт, тег, массив?
    White9Дата: Вторник, 10 Июня 2014, 19:26 | Сообщение # 6071
    заслуженный участник
    Сейчас нет на сайте
    DantorS, можно, смотри...
    1) У бота висит скрипт с массивом дверей, который он закрыл (двери заносятся туда после взаимодействия)
    Далее два варианта
    2,1) Как только хоть с одной дверью на сцене взаимодействует игрок и открывает её, то у каждого бота происходит проверка, не ту ли дверь игрок открыл, которая была в массиве бота.
    2,2) Тоже самое, но делаем проверку при приближении бота к двери, а не после взаимодействия игрока
    3) Если выясняется, что дверь, которую видит бот, была им закрыта, а затем открыта игроком, то активируем нужный скрипт


    Сообщение отредактировал White9 - Вторник, 10 Июня 2014, 19:27
    AdomДата: Вторник, 10 Июня 2014, 19:28 | Сообщение # 6072
    Печенька!
    Сейчас нет на сайте
    Хелп ми .
    А вот теперь снова проблема. Из-за этих строк
    Код
    towerHorizonatlRotat = Mathf.MoveTowardsAngle (towerHorizonatlRotat, Cam.transform.eulerAngles.y,speedRotat*Time.deltaTime);  /////изменяем со скоростью speedRotat к повороту башни   
    transform.eulerAngles = new Vector3(0, towerHorizonatlRotat, 0);/// вертим саму башню

    У меня башня всегда в одной плоскости. Т.е танк стоит допустим в 90 градусов по Y а башня все так-же 0 градусов.
    White9Дата: Вторник, 10 Июня 2014, 19:30 | Сообщение # 6073
    заслуженный участник
    Сейчас нет на сайте
    Adom, либо прибавляй к значению towerHorizonatlRotat угол поворота корпуса по Y, либо вычисляй угол поворота башни в локальных координатах (если она является дочерней к танку)

    Сообщение отредактировал White9 - Вторник, 10 Июня 2014, 19:30
    AdomДата: Вторник, 10 Июня 2014, 20:00 | Сообщение # 6074
    Печенька!
    Сейчас нет на сайте
    Окей.
    GantZ_YakaДата: Вторник, 10 Июня 2014, 20:01 | Сообщение # 6075
    почетный гость
    Сейчас нет на сайте
    Цитата DantorS ()
    В общем пишу ai. Остановился на дверях. Если один бот закрыл дверь, но гг открыл дверь и бот увидил открытую дверь (которую именно он закрывал) то и просходит некое действие. Для остальных ботов тоже самое (именно ими закрытые двери). Нельзя сделать как-нибудь автономно или для каждого нужен свой скрипт, тег, массив?

    Цитата DantorS ()
    У меня есть игра. У меня есть боты. И есть объъекты с котрыми могут взаимодействовать боты. С теми объектами с которыми уже 1 бот взаимодействовал хочу произвести некое действие (через скрипт). Как в этом скрипте я могу обратиться к объектам с котрым взаимодействовал 1 бот? Может быть можно как-нибудь с масивами повозиться?

    Я бы сделал так (возможно и не проще, но более гибко для дальнейших надстроек и применения):
    1)все активные объекты разбить на группы по фунционалу и тегами отметить их тип (аптечки, двери, пулеметы, кнопки и пр. ),
    2)создать для каждого типа объекта свой скрипт (аптечка_скрипт, дерь_скрипт и т.д.), развесить их также по объектам.
    3)внутри скриптов задать публичные переменные (аптечка: есть зараяд/нет задаряда, дверь можно открыть-нельзя, пулемет-активен/поломан/количество патронов и т.д.)
    4)внутри скриптов задать публичную переменную, которая будет хранить уникальный ID объекта. (public int id)
    4)При старте в едином скрипте для всей сцены собираем все вышеупомянутые скрипты в список через поиск объектов по тегам (кэшируем один раз, чтоб больше не делать вобще никаких поисков в апдейте, + к производительности)
    например:
    Код
    public List<Телефон_скрипт> список_телефонов = List<Телефон_скрипт>();

    void Start(){

    GameObject[] gos = GameObject.FindGameObjectsWithTag("телефон");

    int i = 0
    foreach (GameObject go in gos)
    {
        список_телефонов.Add(go.GetComponent<Телефон_скрипт>()); //всовываем в список объектов "телефон" ссылку на скрипт найденного объекта
        go.GetComponent<Телефон_скрипт>().id = i; //объект запоминает свой id - свою позицию в списке всех телефонов
        i++;
    }

    }

    5) при взимодействии с объектом бота через столкновение коллайдеров получем объект взаимодействия, залазим в его скрипт, меняем что надо, например отмечаем, что объект сейчас используется isUsing=true
    можем даже запихать в его скрипт ссылку на объект бота, который его использует.
    6) таким образом у нас всегда есть доступ ко всем объектам, cгруппированным по своему функционалу. Мы всегда знаем, что с кем происходит, пробежавшись по элементам списка и заглянув в переменные скриптов.
    Через Телефон_скрипт.gameObject всегда можно получить доступ к нужному объекту, а если в скриптах объектов держали ссылки и на объект использующего их игрока/бота, то имеем еще и доступ к скриптам внутри этого бота/игрока (например, задачи вроде "найти стреляющую пулеметную установку в сцене, которая используется игроком с 10% здоровья" становятся решаемы в 3-5 строк кода ). Каждый объект всегда знает свое место в списке и, если его к примеру удаляют - он просто говорит главному скрипту: удали элемент с позиции такойто (свой id). Когда будем писать сетевую игру, это все отлично адаптируется и под сетевые взаимодействия, Игрок при использовании предмета просто дополнительно сообщает всем по сети: я использую телефон 3, или я сломал пулемет 5 - и все другие быстро и легко применяют эти изменения.
    7) На примере с дверьми получится: Бот юзая дверь, сделал отметку в её скрипте, что он её открывал (заносим ссылку на объект Бота) Когда игрок использует дверь - Залазим в скрипт двери и видим, что кто-то её уже открывал - вызываем скрипт у этого объекта (атакуй_игрока) и вносим новые значения в скрипт двери (о том, что её теперь использует игрок). profit smile
    AdomДата: Вторник, 10 Июня 2014, 20:24 | Сообщение # 6076
    Печенька!
    Сейчас нет на сайте
    White9, оо пасиб )
    DantorSДата: Вторник, 10 Июня 2014, 20:27 | Сообщение # 6077
    заслуженный участник
    Сейчас нет на сайте
    GantZ_Yaka, но тогда же получится - если один бот закрыл дверь, а другой бот открыл, то "некое действие" может применятся от боту к боту, а не от бота к игроку. Тоесть представь это в игре один закрыл дверь, другой открыл - и все боты начинают паниковать(некое действие).

    Сообщение отредактировал DantorS - Вторник, 10 Июня 2014, 20:28
    GantZ_YakaДата: Вторник, 10 Июня 2014, 21:02 | Сообщение # 6078
    почетный гость
    Сейчас нет на сайте
    DantorS, Полагаю на ботах и игроке должны висеть разные скрипты управления. Если открывает дверь бот, то пусть даже не смотрит, открывал ли её кто-нибудь другой, никакой паники не создает.
    Вообще, я описал способ складирования и управления информацией о всех внутриигровых активных объектах. А как её будут использовать боты/игроки/сами объекты - зависит о того, что где и как будет использоваться, какими ты сам захочешь эти взаимодействия делать.

    Добавлено (10.06.2014, 21:02)
    ---------------------------------------------

    Цитата IlyaGolubtsov ()
    Столкнулся с проблемой,помогите пожалуйста)Для анимации персонажа для онлайн шутера отображаю разными слоями-для "нашей" камеры анимированые руки на капсуле(как в видио-уроках ),для других игроков анимированый Biped (сделал в 3ds max).Когда мы прицеливаемся вниз или вверх другие игроки должны видеть движение рук вверх и вниз.Для этого я в иерархии положил кости рук в объект со скриптом управляющим вращением.Но в этом случае у костей отключается анимация(руки не будут перезаряжать оружие или выполнять какие либо действия,а хотелось чтобы это видели и другие игроки).Пока я вижу один вариант-проанимировать руки Biped во всех возможных случаях(присед,бег,лёжа) и воспроизводить при движении вверх вверх и назад при взгляде камеры вниз.Может есть другие варианты(может можно как-то отдельно воспроизводить анимации для ног и для рук?),подскажите пожалуйста

    Присоединяюсь к вопросу, кто знает, как можно отдельно пошевелить скриптом кость в анимированном и проигрывающим анимацию бипеде?
    AdomДата: Среда, 11 Июня 2014, 11:51 | Сообщение # 6079
    Печенька!
    Сейчас нет на сайте
    White9, у меня как-бы вышло но теперь башня вообще не вращается .
    Сделал так
    Код
    Tower.eulerAngles=object_1.transform.eulerAngles;

    А второе хз как сделать

    Добавлено (11.06.2014, 11:46)
    ---------------------------------------------
    Фух. Сделал с локальными координатами.

    Добавлено (11.06.2014, 11:51)
    ---------------------------------------------
    Но теперь башня не смотрит в ту сторону в которую смотрит камера (

    White9Дата: Среда, 11 Июня 2014, 12:50 | Сообщение # 6080
    заслуженный участник
    Сейчас нет на сайте
    Adom,
    Код
    Tower.eulerAngles=object_1.transform.eulerAngles;

    object_1 - это корпус? Не надо так )
    Код
    Tower.eulerAngles=Tower.eulerAngles + object_1.transform.eulerAngles;

    Так правильнее, только нужно смотреть где вызывается это событие. Я к тому, что могут быть проблемы, поэтому объясню так:
    Так как башня у нас вращается по координате Y и по этой же координате должна следовать за корпусом, то мы должны новую координату башни рассчитывать как сумму угла поворота корпуса танка и угла поворота самой башни. Например, если танк стоит прямо (0 градусов), а башня чуть повёрнута (на 45 градусов), то при повороте танка на 30 градусов влево получим, что угол башни будет 45 + 30 = 75 градусов. Это если в глобальных координатах.
    Цитата Adom ()
    Но теперь башня не смотрит в ту сторону в которую смотрит камера (

    Можно сделать, чтобы камера следовала за башней, а не наоборот. В Unity уже есть готовые скрипт.
    Или же брать угол поворота камеры и "доворачивать" башню до нужного угла. Только здесь одно большое "Но" - нельзя, чтобы башня одновременно смотрела всегда в сторону камеры и при этом поворачивалась вслед за корпусом. (Можно сделать, что она будет поворачивать за корпусом чуть быстрее, чем за камерой, но это уже немного другая история)


    Сообщение отредактировал White9 - Среда, 11 Июня 2014, 12:59
    Поиск:

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