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
|
|
| |