Пятница, 29 Марта 2024, 07:49

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » collider (присоеденить к персонажу)
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, сделай вместо коллайдера триггер. А вообще, не понимаю, почему ты проигнорил мой ответ. biggrin

Долгожданный анонсик: 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);

Это избавит от ошибки, но тем не менее не заставит работать код. Чтобы всё работало, на геймобджекте, которому отправляется сообщение, должен висеть второй скрипт, который я писал выше. smile


Долгожданный анонсик: 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, ну как бы да, только он не считывает соприкосновения, а выполняет функцию, которая вызывается при соприкосновении. smile

Долгожданный анонсик: State of War
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » collider (присоеденить к персонажу)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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