| collider | 
|  | 
| 
| shustr1k76 | Дата: Воскресенье, 06 Марта 2016, 18:18 | Сообщение # 1 |  | почетный гость Сейчас нет на сайте | есть персонаж, я на него добавил капсули коллидер, сделал радиус равный радиусу тела, а как же добавить на руки? смысл в чем, я буду делать удар рукой, дак вот как понять что я задел противника(я так думаю добавить на руку коллидер)? перс сделан в 3д максе. |  |  |  |  | 
| 
| MANMANA | Дата: Воскресенье, 06 Марта 2016, 19:25 | Сообщение # 2 |  | почти ветеран Сейчас нет на сайте | Цитата shustr1k76 (  )  а как же добавить на руки?как вариант - повесить дочкой на соответствующую кость арматуры
 
 http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг
 VKонтакте 3Dbuffer
 
 Последнее:
 
 Новый раздел "Текстуры"
 
 Как запатентовать, защитить техническое решение, игру, идею
 |  |  |  |  | 
| 
| EchoIT | Дата: Воскресенье, 06 Марта 2016, 21:11 | Сообщение # 3 |  |   старожил Сейчас нет на сайте | shustr1k76, это, конечно, круто, но какой-то индусский способ, честно говоря. Если это не очень критично (шутер с возможностью бить руками, например), то можно просто короткий луч пустить для проверки удара. Читай справку по Ray, Raycast, RaycastHit. 
 Долгожданный анонсик: State of War
 |  |  |  |  | 
| 
| shustr1k76 | Дата: Воскресенье, 06 Марта 2016, 21:42 | Сообщение # 4 |  | почетный гость Сейчас нет на сайте | сделал такой вариант, имеется возможность на кулак повесить, капсулу коллидер(повесил) и теперь при столкновении кулаком - обьект отодвигается. возник другой вопрос, как сравнить, если я с тэгом(кулак) притронулся в обьекту с тэгом(виктим), уничтожить его? сдесь на сайте есть пример, а как сравнить по моим условиям?
 
 Код void OnTriggerEnter(Collider Coll) {if (Coll.tag == "victim") {
 Destroy(Coll);
 }
 |  |  |  |  | 
| 
| EchoIT | Дата: Воскресенье, 06 Марта 2016, 22:38 | Сообщение # 5 |  |   старожил Сейчас нет на сайте | shustr1k76, сделай вместо коллайдера триггер. А вообще, не понимаю, почему ты проигнорил мой ответ.   
 Долгожданный анонсик: State of War
 |  |  |  |  | 
| 
| shustr1k76 | Дата: Воскресенье, 06 Марта 2016, 22:45 | Сообщение # 6 |  | почетный гость Сейчас нет на сайте | Цитата EchoIT (  ) сделай вместо коллайдера триггер. А вообще, не понимаю, почему ты проигнорил мой ответ. я не игнорировал, я делаю как мне проще)) то что вы предлогаете, мне без примера реального(нормального) наврятли сделать. в общем есть такой результат
 
 Код void OnCollisionEnter(Collision hand) {
 if (hand.gameObject.tag == "hand" && (hok = true)) {
 Destroy (gameObject, 0.5f);
 }
если я правильно понимаю, то по коду, должен уничтожиться обьект с именем(тэгом) hand, а на деле происходит все на оборот
 |  |  |  |  | 
| 
| EchoIT | Дата: Воскресенье, 06 Марта 2016, 22:47 | Сообщение # 7 |  |   старожил Сейчас нет на сайте | shustr1k76, ну правильно. Сначала ты пишешь hand.gameObject (геймобджект, который прикреплён так сказать к hand), а в Destroy просто gameObject, который указывает на сам объект, на котором висит скрипт. Напиши туда hand.gameObject и будет тебе счастье. 
 Долгожданный анонсик: State of War
 |  |  |  |  | 
| 
| shustr1k76 | Дата: Воскресенье, 06 Марта 2016, 22:53 | Сообщение # 8 |  | почетный гость Сейчас нет на сайте | Цитата EchoIT (  ) будет тебе счастье. в принципе я уже счастлив)) но есть вопрос - как можно сделать счетчик, к примеру я ударил 10 раз по обьекту и потом он исчез? не подскажите кодом?
 |  |  |  |  | 
| 
| EchoIT | Дата: Понедельник, 07 Марта 2016, 12:00 | Сообщение # 9 |  |   старожил Сейчас нет на сайте | shustr1k76, сделать скрипт для всех объектов, на которые это работает, туда написать следующее: 
 Код int counter=10;
 
 void GetPunch() {
 counter--;
 if (counter<=0) Destroy(gameObject);
 }
 
 Твой же код теперь будет выглядеть так:
 
 Код void OnCollisionEnter(Collision hand) {
 
 if (hand.gameObject.tag == "hand" && (hok = true)) {
 hand.SendMessage("GetPunch"); //вызовет функцию GetPunch на объекте, которая уменьшает его собственный счётчик на 1 и если счётчик равен или меньше нуля - уничтожает себя
 }
 }
 
 Долгожданный анонсик: State of War
 
 
 Сообщение отредактировал EchoIT - Понедельник, 07 Марта 2016, 12:14 |  |  |  |  | 
| 
| shustr1k76 | Дата: Понедельник, 07 Марта 2016, 13:15 | Сообщение # 10 |  | почетный гость Сейчас нет на сайте | выдает ошибку связанную с sendmessage - по искал ответ не нашел, я так понимаю его нужно как то определить? |  |  |  |  | 
| 
| EchoIT | Дата: Понедельник, 07 Марта 2016, 13:39 | Сообщение # 11 |  |   старожил Сейчас нет на сайте | shustr1k76, что за ошибка-то?) 
 Долгожданный анонсик: State of War
 |  |  |  |  | 
| 
| shustr1k76 | Дата: Понедельник, 07 Марта 2016, 16:16 | Сообщение # 12 |  | почетный гость Сейчас нет на сайте | Assets/coll.cs(28,30): error CS1061: Type `UnityEngine.Collision' does not contain a definition for `SendMessage' and no extension method `SendMessage' of type `UnityEngine.Collision' could be found (are you missing a using directive or an assembly reference?) |  |  |  |  | 
| 
| OpenGOO | Дата: Понедельник, 07 Марта 2016, 17:45 | Сообщение # 13 |  |   почти ветеран Сейчас нет на сайте | В общем, в классе Collision нет метода SendMessage. 
 Мои проекты:
 - Свободный и открытый клон World Of Goo
 - TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)
 
 [GameMaker: Studio v1.4.9999]
 |  |  |  |  | 
| 
| shustr1k76 | Дата: Понедельник, 07 Марта 2016, 18:34 | Сообщение # 14 |  | почетный гость Сейчас нет на сайте | Цитата OpenGOO (  ) В общем, в классе Collision нет метода SendMessage.правильно ли понимаю что это должно быть сдесь
 
 Код void OnCollisionEnter(Collision hand) {    
 if (hand.gameObject.tag == "hand" && (hok = true)) {
 hand.gameObject.SendMessage("GetPunch");
 }
 
 
 }
 void GetPunch() {
 counter--;
 if (counter<=0) Destroy(gameObject);
 }
 
сделал так, но теперь при столкновении, выдает ошибку SendMessage GetPunch has no receiver!
 UnityEngine.GameObject:SendMessage(String)
 coll:OnCollisionEnter(Collision) (at Assets/coll.cs:30)
 как будет правильно, не подскажите?
 
 
 Сообщение отредактировал shustr1k76 - Понедельник, 07 Марта 2016, 21:14 |  |  |  |  | 
| 
| OpenGOO | Дата: Понедельник, 07 Марта 2016, 21:55 | Сообщение # 15 |  |   почти ветеран Сейчас нет на сайте | Сообщение отправляется вот в этот объект hand.gameObject, значит и void GetPunch() должен быть в одном из скриптов этого объекта. 
 Мои проекты:
 - Свободный и открытый клон World Of Goo
 - TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)
 
 [GameMaker: Studio v1.4.9999]
 |  |  |  |  | 
| 
| EchoIT | Дата: Вторник, 08 Марта 2016, 11:02 | Сообщение # 16 |  |   старожил Сейчас нет на сайте | shustr1k76, да, я затупил что-то, думал, что там Collider, а не Collision. Так правильно. Чтобы ошибки не было, сделай так: 
 Код  hand.gameObject.SendMessage("GetPunch",SendMessageOptions.DontRequireReceiver);Это избавит от ошибки, но тем не менее не заставит работать код. Чтобы всё работало, на геймобджекте, которому отправляется сообщение, должен висеть второй скрипт, который я писал выше.
   
 Долгожданный анонсик: State of War
 |  |  |  |  | 
| 
| shustr1k76 | Дата: Вторник, 08 Марта 2016, 15:45 | Сообщение # 17 |  | почетный гость Сейчас нет на сайте | этот вешаю на обьект который должен уничтожиться 
 Код int counter = 10;
 void GetPunch() {
 counter--;
 if (counter<=0) Destroy(gameObject);
 }
а этот на обьект который ударяет соперника
 
 Код void OnCollisionEnter(Collision hand) {
 
 if (hand.gameObject.tag == "hand" && (hok = true)) {
 hand.gameObject.SendMessage("GetPunch",SendMessageOptions.DontRequireReceiver);
 
 |  |  |  |  | 
| 
| EchoIT | Дата: Вторник, 08 Марта 2016, 16:32 | Сообщение # 18 |  |   старожил Сейчас нет на сайте | shustr1k76, и что, не работает? А это - hand.gameObject.tag == "hand" - точно корректно? 
 Долгожданный анонсик: State of War
 |  |  |  |  | 
| 
| shustr1k76 | Дата: Вторник, 08 Марта 2016, 17:03 | Сообщение # 19 |  | почетный гость Сейчас нет на сайте | смысл такой, игрок соприкосается с соперником у кого tag hand и отправляет ему сообщение 
 Код void OnCollisionEnter(Collision hand) {
 
 if (hand.gameObject.tag == "hand") {
 hand.gameObject.SendMessage("GetPunch",SendMessageOptions.DontRequireReceiver);
 }
 
 
 }
а на сопернике висит этот скрипт, который как я понял считывает соприкосновения и минусует по 1, с каждым соприкосновением, после уничтожается.
 
 Код int counter = 10;void GetPunch() {
 counter--;
 if (counter<=0) Destroy(gameObject);
 }
 работает спасибо!!
 
 
 Сообщение отредактировал shustr1k76 - Вторник, 08 Марта 2016, 17:21 |  |  |  |  | 
| 
| EchoIT | Дата: Среда, 09 Марта 2016, 11:37 | Сообщение # 20 |  |   старожил Сейчас нет на сайте | shustr1k76, ну как бы да, только он не считывает соприкосновения, а выполняет функцию, которая вызывается при соприкосновении.   
 Долгожданный анонсик: State of War
 |  |  |  |  |