Страница 1 из 2

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

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

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

СообщениеДобавлено: 24 ноя 2011, 19:02
bomberest
Событие OnCollisionEnter. Оно происходит, когда какой-то коллайдер дотрагивается до коллайдера предмета, на котором висит этот скрипт. Тебе, наверное, нужно повесить этот скрипт на пулю, и при этом событии проверять tag объекта, с которым столкнулась пуля, если tag= "player" (такой тэг мы дали игрокам), то отнимать жизнь в скрипте, который висит на этом игроке (скрипт получать через GetComponent).
Уничтожение: при OnCollisionEnter, даже если tag не совпал, то делать GameObject.Destroy(gameObject) P.S. Вроде, так

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

СообщениеДобавлено: 24 ноя 2011, 19:03
waruiyume

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

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

Но не срабатывает,ничего не дестроится, ни пуля ни кубик в который стреляю,оба риджитбоди. Я еще читал что возможно проблема в is trigger или is kinematic, вот не знаю что сейчас делать(

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

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

Ничего не пишет....

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

СообщениеДобавлено: 25 ноя 2011, 09:30
seaman
Не пишет, потому что Вы неверно написали имя функции. Почему не дестройится не понял.

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.

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

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

p.s. я бы лучше сделал через onCollisionEnter но почему-то у меня нет реакции на нее,скрипт не срабатывает(

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

СообщениеДобавлено: 25 ноя 2011, 18:23
seaman
Еще раз (трах-ти би дох!!!) onCollisionEnter это неправильное(!!!) название метода! Он называется не так! Будьте внимательнее! Он называется так: OnCollisionEnter

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

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

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

СообщениеДобавлено: 25 ноя 2011, 19:07
seaman
Судя по тому что вижу он реагирует вовсе не на пули, а на самого игрока. В с чем проверяет столкновение то?

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

СообщениеДобавлено: 26 ноя 2011, 06:24
reimon245
На самого игрока? Хм. Ну вот весь скрипт реакции объекта на стрельбу по нему.
Синтаксис:
Используется 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);
                        }
                }
        }

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

СообщениеДобавлено: 26 ноя 2011, 06:40
reimon245
Нашел причину. При скорости запуска пули в 1000,вот такой баг,что только по граням идет урон,при скорости пули 100,все ок. Вот блин.

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

СообщениеДобавлено: 26 ноя 2011, 07:22
reimon245
Вот,наконец все сделал, все спасибо за помощь,но без палки в колесе никак.
Все работает и запускается корректно но из-за скрипта теперь пишет 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...

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

СообщениеДобавлено: 26 ноя 2011, 07:57
waruiyume
"collision.rigidbody"- может быть null (на полу у вас rigidbody поди нету). "collision.rigidbody.mass>0"- масса ригибоди не может быть меньше 1e-07, т.ч. проверка не имеет смысла.