Части тела) - Форум Игроделов
Вс, 20 Июл 2025, 06:01 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Части тела)
VolandproДата: Ср, 22 Авг 2012, 16:22 | Сообщение # 1
Нет аватара
 
Сообщений: 14
Награды: 0
Репутация: 0
Статус: Offline
У меня есть объект, на него налеплена моделька человека. Идея такая, я наношу удар по ноге, и она отваливается. Я решил сделать так: при запуске скрипта "отваливания " ноги модель человека изменяется на модель без ноги, и создается новый объект с моделькой отрубленной ноги) Но есть загвоздка - как сделать так, чтобы начальный объект распознал, что его ударили именно в ту зону, где у него нога? Подскажите пожалуйста, хотя бы в общем виде, из-за этого у меня работа стоит)
 
СообщениеУ меня есть объект, на него налеплена моделька человека. Идея такая, я наношу удар по ноге, и она отваливается. Я решил сделать так: при запуске скрипта "отваливания " ноги модель человека изменяется на модель без ноги, и создается новый объект с моделькой отрубленной ноги) Но есть загвоздка - как сделать так, чтобы начальный объект распознал, что его ударили именно в ту зону, где у него нога? Подскажите пожалуйста, хотя бы в общем виде, из-за этого у меня работа стоит)

Автор - Volandpro
Дата добавления - 22 Авг 2012 в 16:22
FunnyAlienДата: Ср, 22 Авг 2012, 16:25 | Сообщение # 2
NYAN-NYAN?
 
Сообщений: 3643
Награды: 14
Репутация: 835
Статус: Offline
Volandpro, может в зону «ноги» повесить триггер?

Согласно протоколу испытаний, начиная с этого момента, мы перестаем говорить правду. Три, два, один.
 
СообщениеVolandpro, может в зону «ноги» повесить триггер?

Автор - FunnyAlien
Дата добавления - 22 Авг 2012 в 16:25
VolandproДата: Ср, 22 Авг 2012, 16:27 | Сообщение # 3
Нет аватара
 
Сообщений: 14
Награды: 0
Репутация: 0
Статус: Offline
Хм спасибо за идею, дело в том, что я только начал иметь дело с юнити и не дошел еще до триггеров, поэтому не знаю про них) Буду разбираться) Если есть еще какие-нибудь мысли, поделитесь, пожалуйста
 
СообщениеХм спасибо за идею, дело в том, что я только начал иметь дело с юнити и не дошел еще до триггеров, поэтому не знаю про них) Буду разбираться) Если есть еще какие-нибудь мысли, поделитесь, пожалуйста

Автор - Volandpro
Дата добавления - 22 Авг 2012 в 16:27
AltairДата: Ср, 22 Авг 2012, 16:43 | Сообщение # 4
Unity 3D PRO Developer
 
Сообщений: 758
Награды: 6
Репутация: 195
Статус: Offline
Volandpro, блин,работа стоит ?ПРоверай райкастом или растоянием,ну или даже через косновения колизии.
 
СообщениеVolandpro, блин,работа стоит ?ПРоверай райкастом или растоянием,ну или даже через косновения колизии.

Автор - Altair
Дата добавления - 22 Авг 2012 в 16:43
VolandproДата: Ср, 22 Авг 2012, 17:04 | Сообщение # 5
Нет аватара
 
Сообщений: 14
Награды: 0
Репутация: 0
Статус: Offline
Хм, а как сделать, чтобы атака шла именно в коллайдер? У меня раньше таргет атаки задавался через GameObject.FindObjectWithTag("Enemy"), потом при нажатии клавиши вызывался метод атаки, который отнимал ХП. Получается, нужно, чтобы в таргете был триггер? Или как?
 
СообщениеХм, а как сделать, чтобы атака шла именно в коллайдер? У меня раньше таргет атаки задавался через GameObject.FindObjectWithTag("Enemy"), потом при нажатии клавиши вызывался метод атаки, который отнимал ХП. Получается, нужно, чтобы в таргете был триггер? Или как?

Автор - Volandpro
Дата добавления - 22 Авг 2012 в 17:04
ЛевшаДата: Ср, 22 Авг 2012, 17:11 | Сообщение # 6
Черный Волк
 
Сообщений: 7257
Награды: 30
Репутация: 3313
Статус: Offline
Бьешь допустим ногой по противнику.
На противнике на каждой части тела висят триггерКолайдеры с тегами.
При попадании в определенный тег (допустим *левая нога*), производишь соответствующие действия.
На ударной ноге игрока тоже должен висеть коллайдер.
Ну и про rigidBody не забывай, они могут быть нейтральны (галка на IsKinematik), но обязаны присутствовать на всех обьектах с триггерами, иначе триггеры не сработают.


X.cor.R (Prologue)
 
СообщениеБьешь допустим ногой по противнику.
На противнике на каждой части тела висят триггерКолайдеры с тегами.
При попадании в определенный тег (допустим *левая нога*), производишь соответствующие действия.
На ударной ноге игрока тоже должен висеть коллайдер.
Ну и про rigidBody не забывай, они могут быть нейтральны (галка на IsKinematik), но обязаны присутствовать на всех обьектах с триггерами, иначе триггеры не сработают.

Автор - Левша
Дата добавления - 22 Авг 2012 в 17:11
VolandproДата: Ср, 22 Авг 2012, 17:30 | Сообщение # 7
Нет аватара
 
Сообщений: 14
Награды: 0
Репутация: 0
Статус: Offline
То есть при нажатии на кнопку атаки нужно, чтобы коллайдер, повешанный на игрока, совершал движение по заданной траектории и врезался в коллайдер врага? Я правильно понял?
 
СообщениеТо есть при нажатии на кнопку атаки нужно, чтобы коллайдер, повешанный на игрока, совершал движение по заданной траектории и врезался в коллайдер врага? Я правильно понял?

Автор - Volandpro
Дата добавления - 22 Авг 2012 в 17:30
ЛевшаДата: Ср, 22 Авг 2012, 18:29 | Сообщение # 8
Черный Волк
 
Сообщений: 7257
Награды: 30
Репутация: 3313
Статус: Offline
Quote (Volandpro)
совершал движение по заданной траектории и врезался в коллайдер врага? Я правильно понял?

Ну да, ты же файтинг делаешь, как я понял.
Впрочем не важно, если стреляешь райкастом или пульками, то аналогично, по тегам.


X.cor.R (Prologue)
 
Сообщение
Quote (Volandpro)
совершал движение по заданной траектории и врезался в коллайдер врага? Я правильно понял?

Ну да, ты же файтинг делаешь, как я понял.
Впрочем не важно, если стреляешь райкастом или пульками, то аналогично, по тегам.

Автор - Левша
Дата добавления - 22 Авг 2012 в 18:29
VolandproДата: Ср, 22 Авг 2012, 23:39 | Сообщение # 9
Нет аватара
 
Сообщений: 14
Награды: 0
Репутация: 0
Статус: Offline
Я сделал анимацию для удара(например двигаем рукой, на неё повешен коллайдер), она двигается вперед, потом назад, а как сделать, чтобы при столкновении с коллайдером врага что-то происходило? Я написал в скрипте, привязанном к руке
Code
void OnCollisionEnter(Collision collision) {
     Debug.Log("adssd");
    }

Но ничего не происходит

Скрипт для вызова анимации
Code
public GameObject hand;
hand=GameObject.FindGameObjectWithTag("Hand");
      hand.animation.Play("New Animation");


Hand - дочерний объект игрока

Это зависит от того, что на враге висит чарактер контроллер или нет?


Сообщение отредактировал Volandpro - Чт, 23 Авг 2012, 00:24
 
СообщениеЯ сделал анимацию для удара(например двигаем рукой, на неё повешен коллайдер), она двигается вперед, потом назад, а как сделать, чтобы при столкновении с коллайдером врага что-то происходило? Я написал в скрипте, привязанном к руке
Code
void OnCollisionEnter(Collision collision) {
     Debug.Log("adssd");
    }

Но ничего не происходит

Скрипт для вызова анимации
Code
public GameObject hand;
hand=GameObject.FindGameObjectWithTag("Hand");
      hand.animation.Play("New Animation");


Hand - дочерний объект игрока

Это зависит от того, что на враге висит чарактер контроллер или нет?

Автор - Volandpro
Дата добавления - 22 Авг 2012 в 23:39
ЛевшаДата: Чт, 23 Авг 2012, 00:28 | Сообщение # 10
Черный Волк
 
Сообщений: 7257
Награды: 30
Репутация: 3313
Статус: Offline
Volandpro, эхх брателла, делай что попроще пока... учись.
Я тебе прямой алгоритм дал, который ты успешно проигнорировал.
А лекции тут каждому новичку по новой читать, никакого времени не хватит... smile


X.cor.R (Prologue)
 
СообщениеVolandpro, эхх брателла, делай что попроще пока... учись.
Я тебе прямой алгоритм дал, который ты успешно проигнорировал.
А лекции тут каждому новичку по новой читать, никакого времени не хватит... smile

Автор - Левша
Дата добавления - 23 Авг 2012 в 00:28
VolandproДата: Чт, 23 Авг 2012, 00:46 | Сообщение # 11
Нет аватара
 
Сообщений: 14
Награды: 0
Репутация: 0
Статус: Offline
Как ни странно, но после Вашего заявления мне стало стыдно, я немного подумал и написал такую вещь
Code
void OnTriggerEnter(Collider collision) {
     if(collision.gameObject.tag=="Enemy"){
     Debug.Log("adssd");
     Ehp eh=new Ehp();
     eh.ACHP(-10);
     }
    }


Вроде даже заработало) Правда, у меня есть 2 вопроса: обязательно. чтобы на объектах висел ригидбоди? И второй, Ehp eh=new Ehp();eh.ACHP(-10); не работает, хотя я точно помню, как вызвать метод из другого класса) Но все равно огромное спасибо) Кстати, спасибка не тыкается, пишет, что капча введена неправильно

P.S. с методами разобрался) Прям чувствую повышение своего скила)


Сообщение отредактировал Volandpro - Чт, 23 Авг 2012, 00:59
 
СообщениеКак ни странно, но после Вашего заявления мне стало стыдно, я немного подумал и написал такую вещь
Code
void OnTriggerEnter(Collider collision) {
     if(collision.gameObject.tag=="Enemy"){
     Debug.Log("adssd");
     Ehp eh=new Ehp();
     eh.ACHP(-10);
     }
    }


Вроде даже заработало) Правда, у меня есть 2 вопроса: обязательно. чтобы на объектах висел ригидбоди? И второй, Ehp eh=new Ehp();eh.ACHP(-10); не работает, хотя я точно помню, как вызвать метод из другого класса) Но все равно огромное спасибо) Кстати, спасибка не тыкается, пишет, что капча введена неправильно

P.S. с методами разобрался) Прям чувствую повышение своего скила)

Автор - Volandpro
Дата добавления - 23 Авг 2012 в 00:46
ЛевшаДата: Чт, 23 Авг 2012, 12:44 | Сообщение # 12
Черный Волк
 
Сообщений: 7257
Награды: 30
Репутация: 3313
Статус: Offline
Quote (Volandpro)
обязательно. чтобы на объектах висел ригидбоди?

Да, но саму физику можно выключить.

Quote (Volandpro)
как вызвать метод из другого класса

Quote
Ehp eh=new Ehp();

Первый раз такое вижу... работает ?
В другом классе можно вызывать статические методы.


X.cor.R (Prologue)
 
Сообщение
Quote (Volandpro)
обязательно. чтобы на объектах висел ригидбоди?

Да, но саму физику можно выключить.

Quote (Volandpro)
как вызвать метод из другого класса

Quote
Ehp eh=new Ehp();

Первый раз такое вижу... работает ?
В другом классе можно вызывать статические методы.

Автор - Левша
Дата добавления - 23 Авг 2012 в 12:44
VolandproДата: Чт, 23 Авг 2012, 13:45 | Сообщение # 13
Нет аватара
 
Сообщений: 14
Награды: 0
Репутация: 0
Статус: Offline
Это работает в обычном C#, без юнити. ТАм в вижуал студио и т.д. Здесь не работает)

Добавлено (23.08.2012, 13:45)
---------------------------------------------
Блин, люди последний вопрос) Как сделать, чтобы ОнТриггерЕнтер срабатывал только при нажатии кнопки?

Code
void OnTriggerEnter(Collider collision) {  
      if(collision.gameObject.tag=="Enemy"){  
     if(Input.GetKeyUp(KeyCode.F)){
    k.GetComponent<Ehp>().ACHP(-10);
   }
      }  
     }


Не работает)
 
СообщениеЭто работает в обычном C#, без юнити. ТАм в вижуал студио и т.д. Здесь не работает)

Добавлено (23.08.2012, 13:45)
---------------------------------------------
Блин, люди последний вопрос) Как сделать, чтобы ОнТриггерЕнтер срабатывал только при нажатии кнопки?

Code
void OnTriggerEnter(Collider collision) {  
      if(collision.gameObject.tag=="Enemy"){  
     if(Input.GetKeyUp(KeyCode.F)){
    k.GetComponent<Ehp>().ACHP(-10);
   }
      }  
     }


Не работает)

Автор - Volandpro
Дата добавления - 23 Авг 2012 в 13:45
seamanДата: Чт, 23 Авг 2012, 13:57 | Сообщение # 14
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
Так уже ж ответили. Меняй OnTriggerEnter на OnTriggerStay
Quote
Это работает в обычном C#

Так как Вы написали нигде не заработает. Ну или, если eh.ACHP(-10) просто что-то левое делает, независимое от приведенного кода - тогда это индусский код.
 
СообщениеТак уже ж ответили. Меняй OnTriggerEnter на OnTriggerStay
Quote
Это работает в обычном C#

Так как Вы написали нигде не заработает. Ну или, если eh.ACHP(-10) просто что-то левое делает, независимое от приведенного кода - тогда это индусский код.

Автор - seaman
Дата добавления - 23 Авг 2012 в 13:57
VolandproДата: Чт, 23 Авг 2012, 16:13 | Сообщение # 15
Нет аватара
 
Сообщений: 14
Награды: 0
Репутация: 0
Статус: Offline
Обычное консольное приложение
Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication3
{
     class Program
     {
         static void Main(string[] args)
         {
             Program1 n = new Program1();
             n.OLOLO();
             Console.WriteLine(n.m.ToString());
             Console.Read();
         }
     }
     class Program1
     {
         public int m;
         public void OLOLO()
         {
             m = 5;
         }
     }
}


Все работает)
 
СообщениеОбычное консольное приложение
Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication3
{
     class Program
     {
         static void Main(string[] args)
         {
             Program1 n = new Program1();
             n.OLOLO();
             Console.WriteLine(n.m.ToString());
             Console.Read();
         }
     }
     class Program1
     {
         public int m;
         public void OLOLO()
         {
             m = 5;
         }
     }
}


Все работает)

Автор - Volandpro
Дата добавления - 23 Авг 2012 в 16:13
seamanДата: Чт, 23 Авг 2012, 16:44 | Сообщение # 16
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
Сравните с тем, что у Вас написано:
Code
   Ehp eh=new Ehp();
      eh.ACHP(-10);

Где вы используете то, что делается в eh.ACHP? Зачем вообще вызов этого метода?
Code
             n.OLOLO();
              Console.WriteLine(n.m.ToString());

Здесь после аналогичного вызова созданный объект используется! Разницу чуствуете?
И еще раз. Даже первый код нормально работает. В eh.ACHP(-10); Вы, например можете вывести на экран что-нибудь со смещением -10. Однако это неправильное решение - "индусский код".
 
СообщениеСравните с тем, что у Вас написано:
Code
   Ehp eh=new Ehp();
      eh.ACHP(-10);

Где вы используете то, что делается в eh.ACHP? Зачем вообще вызов этого метода?
Code
             n.OLOLO();
              Console.WriteLine(n.m.ToString());

Здесь после аналогичного вызова созданный объект используется! Разницу чуствуете?
И еще раз. Даже первый код нормально работает. В eh.ACHP(-10); Вы, например можете вывести на экран что-нибудь со смещением -10. Однако это неправильное решение - "индусский код".

Автор - seaman
Дата добавления - 23 Авг 2012 в 16:44
VolandproДата: Чт, 23 Авг 2012, 16:57 | Сообщение # 17
Нет аватара
 
Сообщений: 14
Награды: 0
Репутация: 0
Статус: Offline
Чтобы все объяснить, мне нужно привести весь алгоритм работы скриптов и связь между ними, а это долго)
Code
Ehp eh=new Ehp();  
       eh.ACHP(-10);


Это находится в скрипте атаки, метод из другого скрипта вызывается, когда происходит столкновение коллайдеров. eh.ACHP(-10); это метод расчета изменения ХП у врага, (-10) число, насколько изменяется ХП. eh - объект скрипта, который работает с ХП врага. Короче,при атаке вызвыается метод, меняющий ХП) Скорее всего это все криво, но я не мего прогер)
 
СообщениеЧтобы все объяснить, мне нужно привести весь алгоритм работы скриптов и связь между ними, а это долго)
Code
Ehp eh=new Ehp();  
       eh.ACHP(-10);


Это находится в скрипте атаки, метод из другого скрипта вызывается, когда происходит столкновение коллайдеров. eh.ACHP(-10); это метод расчета изменения ХП у врага, (-10) число, насколько изменяется ХП. eh - объект скрипта, который работает с ХП врага. Короче,при атаке вызвыается метод, меняющий ХП) Скорее всего это все криво, но я не мего прогер)

Автор - Volandpro
Дата добавления - 23 Авг 2012 в 16:57
seamanДата: Чт, 23 Авг 2012, 20:25 | Сообщение # 18
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
Quote
Чтобы все объяснить ... это долго

Да ничего объяснять и не надо. Тут логики то никакой и нет.
Полная лажа именно это:
Code
Ehp eh=new Ehp();

Вы что не понимаете что это значит? Вы создаете новый экземпляр скрипта врага. НОВЫЙ! Который после выхода за первую же скобку исчезнет, как будто его и не было!
Code
eh.ACHP(-10);

Тут Вы у этого экземпляра уменьшаете hp
[code]}[/code]
Все! Ничего не сохранилось! Никаких изменений hp никто не запомнил! Потому как объекта eh уже не существует!
ЗЫ: Совет - поучите программирование. Вот это: "GetComponent<Ehp>().ACHP(-10); " куда правильнее.
PPS: на скобку тег code не действует, но думаю и так понятно
 
Сообщение
Quote
Чтобы все объяснить ... это долго

Да ничего объяснять и не надо. Тут логики то никакой и нет.
Полная лажа именно это:
Code
Ehp eh=new Ehp();

Вы что не понимаете что это значит? Вы создаете новый экземпляр скрипта врага. НОВЫЙ! Который после выхода за первую же скобку исчезнет, как будто его и не было!
Code
eh.ACHP(-10);

Тут Вы у этого экземпляра уменьшаете hp
[code]}[/code]
Все! Ничего не сохранилось! Никаких изменений hp никто не запомнил! Потому как объекта eh уже не существует!
ЗЫ: Совет - поучите программирование. Вот это: "GetComponent<Ehp>().ACHP(-10); " куда правильнее.
PPS: на скобку тег code не действует, но думаю и так понятно

Автор - seaman
Дата добавления - 23 Авг 2012 в 20:25
  • Страница 1 из 1
  • 1
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2025