Урон при попадании.

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Урон при попадании.

Сообщение reimon245 24 ноя 2011, 18:35

Добрый день. Будьте добры подсказать,как реализовать урон при попадании пули в объект. Я только учусь скриптописанию и уже сделал игрока,врага, у обоих здоровье, пули(в префабе) и стрельбу ими. Как сделать чтобы враг при попадании по нему пули получал урон(урон я знаю как делать при каком-либо событии), но как сделать чтобы объект реагировал при попадании по нему? А то нигде не нашел толковых уроков, мне нужны примеры скриптов для данной ситуации,а дальше разберусь...так ну никак не могу это сделать,не знаю я всех скриптов юнити и не могу ипмпровизировать из воздуха. И еще желательно если знаете как сделать чтобы эти пули при попадании в объект или землю потом сразу уничтожались.А то при моем типе стрельбы у меня создаются клоны префаба, и как ими манипулировать я не представляю.
Заранее благодарствую.
reimon245
UNIт
 
Сообщения: 72
Зарегистрирован: 22 ноя 2011, 07:54

Re: Урон при попадании.

Сообщение bomberest 24 ноя 2011, 19:02

Событие OnCollisionEnter. Оно происходит, когда какой-то коллайдер дотрагивается до коллайдера предмета, на котором висит этот скрипт. Тебе, наверное, нужно повесить этот скрипт на пулю, и при этом событии проверять tag объекта, с которым столкнулась пуля, если tag= "player" (такой тэг мы дали игрокам), то отнимать жизнь в скрипте, который висит на этом игроке (скрипт получать через GetComponent).
Уничтожение: при OnCollisionEnter, даже если tag не совпал, то делать GameObject.Destroy(gameObject) P.S. Вроде, так
Последний раз редактировалось bomberest 24 ноя 2011, 19:04, всего редактировалось 1 раз.
Основы Unity3D Свой 2D-движок Фильм для разработчиков Кастомизация едитора
Лекции игрового программирования
Skype: Andrewf56 | Steam: bomberest (-AnF-) | Vk: _https://vk.com/andrewshut
Аватара пользователя
bomberest
Старожил
 
Сообщения: 538
Зарегистрирован: 22 июн 2011, 14:38
Откуда: Минск
  • ICQ

Re: Урон при попадании.

Сообщение waruiyume 24 ноя 2011, 19:03

Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Урон при попадании.

Сообщение reimon245 25 ноя 2011, 06:44

Спасибо за ссылку waruiyume, но я к сожалению на C# и в яве в той не понял ничего).
Спасибо bomberest,но примерчик бы еще не из справки если есть(
Я с горем пополам нашел пример 1 OnCollisionEnter( я же написал я только учусь, хоть бы кто-нибудь пример скрипта кинул из головы или из проекта, а то так тяжело) И вот он:
Синтаксис:
Используется csharp
public void OnCollisionEnter(Collision collision) {
                Destroy(collision.gameObject);
                Destroy(gameObject);

Но не срабатывает,ничего не дестроится, ни пуля ни кубик в который стреляю,оба риджитбоди. Я еще читал что возможно проблема в is trigger или is kinematic, вот не знаю что сейчас делать(
reimon245
UNIт
 
Сообщения: 72
Зарегистрирован: 22 ноя 2011, 07:54

Re: Урон при попадании.

Сообщение reimon245 25 ноя 2011, 07:34

Даже когда делаю так чтобы увидеть реакцию на попадание,все равно 0 реакции:
Синтаксис:
Используется csharp
        public void onCollisionEnter(Collision collision){
                Debug.Log("AAAAAAAAAAAAAAAAAAAA");
                        if(collision.gameObject.tag=="Enemy"){
                                Debug.Log("AAAAAAAAAAAAAAAA");}

Ничего не пишет....
reimon245
UNIт
 
Сообщения: 72
Зарегистрирован: 22 ноя 2011, 07:54

Re: Урон при попадании.

Сообщение seaman 25 ноя 2011, 09:30

Не пишет, потому что Вы неверно написали имя функции. Почему не дестройится не понял.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Урон при попадании.

Сообщение Левш@ 25 ноя 2011, 11:55

Но не срабатывает,ничего не дестроится

Не знаю почему, но на обьектах должен висеть риджБоди, то ли на одном из, то ли на обоих, иначе не срабатывает.
Аналогично и с OnTriggerEnter (other : Collider), тут только на одном из и галочка на isTrigger.
Выдержка из мануала:
This message is sent to the trigger collider and the rigidbody (or the collider if there is no rigidbody) that touches the trigger. Note that trigger events are only sent if one of the colliders also has a rigidbody attached.
_X.cor.R (Prologue)
Аватара пользователя
Левш@
Адепт
 
Сообщения: 4073
Зарегистрирован: 14 окт 2009, 16:34
Откуда: IBERIA
Skype: bars_levsha
  • Сайт

Re: Урон при попадании.

Сообщение reimon245 25 ноя 2011, 17:55

Помучился и сделал через raycast ,работает, но теперь проблема в другом, я активировал рэйкаст при стрельбе,т.е. луч вылетает перед вылетом патрона.Как определить в какой объект попадает патрон летящий со скоростью луча( у меня 10 одинаковых целей, с разницей лишь в имени enemy1,enemy2 ....)чтобы на этот объект применить скрипт отнятия здоровья и показа здоровья на экране.

p.s. я бы лучше сделал через onCollisionEnter но почему-то у меня нет реакции на нее,скрипт не срабатывает(
reimon245
UNIт
 
Сообщения: 72
Зарегистрирован: 22 ноя 2011, 07:54

Re: Урон при попадании.

Сообщение seaman 25 ноя 2011, 18:23

Еще раз (трах-ти би дох!!!) onCollisionEnter это неправильное(!!!) название метода! Он называется не так! Будьте внимательнее! Он называется так: OnCollisionEnter
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Урон при попадании.

Сообщение reimon245 25 ноя 2011, 18:53

О ,заработало,спасибо)Ток я еще упускал момент что скрипт на реакцию на попадание надо прикреплять к цели)
Вот сделал как мог но проблема в другом,почему урон по цели проходит лишь при попадании по граням,когда в лоб пули летят ничего, а в грани проходит скрипт, уже менял настройки и у пуль и у цели Collision но все равно тоже самое. У куба его размер с размером коллайдера идентичен, а если коллаидер делать в 2 раза больше все равно только грани активны.Вот посмотрите сами на эти чудеса...
http://rghost.ru/31982401
reimon245
UNIт
 
Сообщения: 72
Зарегистрирован: 22 ноя 2011, 07:54

Re: Урон при попадании.

Сообщение seaman 25 ноя 2011, 19:07

Судя по тому что вижу он реагирует вовсе не на пули, а на самого игрока. В с чем проверяет столкновение то?
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Урон при попадании.

Сообщение reimon245 26 ноя 2011, 06:24

На самого игрока? Хм. Ну вот весь скрипт реакции объекта на стрельбу по нему.
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class EnemyTakeDamage : MonoBehaviour {
        public int Damage=5;

        void Start () {
       
        }
       
        void Update () {
       
        }
        public void OnCollisionEnter(Collision collision) {
                if(collision.rigidbody){
                        Destroy(collision.gameObject);
                EnemyHealth eh = (EnemyHealth)GetComponent("EnemyHealth");
                eh.ShowCurrentHealth(-Damage);
                        }
                }
        }
reimon245
UNIт
 
Сообщения: 72
Зарегистрирован: 22 ноя 2011, 07:54

Re: Урон при попадании.

Сообщение reimon245 26 ноя 2011, 06:40

Нашел причину. При скорости запуска пули в 1000,вот такой баг,что только по граням идет урон,при скорости пули 100,все ок. Вот блин.
reimon245
UNIт
 
Сообщения: 72
Зарегистрирован: 22 ноя 2011, 07:54

Re: Урон при попадании.

Сообщение reimon245 26 ноя 2011, 07:22

Вот,наконец все сделал, все спасибо за помощь,но без палки в колесе никак.
Все работает и запускается корректно но из-за скрипта теперь пишет NullReferenceException,который я никак не могу устранить.
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class EnemyTakeDamage : MonoBehaviour {
        public int Damage=5;

        void Start () {
       
        }
       
        void Update () {
       
        }
        public void OnCollisionEnter(Collision collision) {
                if(collision.rigidbody.mass<1 && collision.rigidbody.mass>0){
                        Destroy(collision.gameObject);
                EnemyHealth eh = (EnemyHealth)GetComponent("EnemyHealth");
                eh.ShowCurrentHealth(-Damage);
                        }
                }
        }

Почему он ругается,причем ругается на строчку с условием if...
reimon245
UNIт
 
Сообщения: 72
Зарегистрирован: 22 ноя 2011, 07:54

Re: Урон при попадании.

Сообщение waruiyume 26 ноя 2011, 07:57

"collision.rigidbody"- может быть null (на полу у вас rigidbody поди нету). "collision.rigidbody.mass>0"- масса ригибоди не может быть меньше 1e-07, т.ч. проверка не имеет смысла.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

След.

Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 30