Вопрос-[ответ] по Unity
| |
QWER56 | Дата: Понедельник, 09 Августа 2010, 10:58 | Сообщение # 1 |
старожил
Сейчас нет на сайте
| Вопрос-[Ответ] по Unity3d
База скриптов Unity3d Курс Уроков по Unity 3D от Alcatraz
ConsMark - поисковик по интернет магазинам.
Сообщение отредактировал QWER56 - Вторник, 26 Июля 2011, 20:54 |
|
| |
EchoIT | Дата: Понедельник, 09 Июня 2014, 14:19 | Сообщение # 6061 |
старожил
Сейчас нет на сайте
| Ясно.
Долгожданный анонсик: 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
|
|
| |
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 |
|
| |
|