EnemyAttack

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

EnemyAttack

Сообщение Shreder 02 авг 2011, 14:54

Написал скрипт EnemyAttack по туториалу http://www.youtube.com/user/BurgZergArcade#p/c/E5C2870574BF4B06/5/_r1phHXODjc. Приложение запускается. Противник меня атакует, но я не получаю урон.В режиме игры в логе пишет ошибку "NullReferenceException: Object reference not set to an instance of an object" и ссылается на строчку: ph.AddjustCurrentHealth(-10);. Нужна помощь по решению этой проблемы.
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class EnemyAttack : MonoBehaviour {
       
        public GameObject target;
        public float coolDown;
        private float attackTimer;

        // Use this for initialization
        void Start () {
                attackTimer = 0;
                if (coolDown == 0) {
                        coolDown = 2.0f;
                }      
        }
       
        // Update is called once per frame
        void Update () {
                if (attackTimer > 0) {
                        attackTimer -= Time.deltaTime;
                }      
                if (attackTimer < 0) {
                        attackTimer = 0;
                }      
               
                if (attackTimer == 0) {
                        Attack();
                }
        }
                         
                       
       
   private void Attack() {
               
                Debug.Log("Player attacking");
                float distance = Vector3.Distance(target.transform.position, transform.position);
                Vector3 dir = (target.transform.position - transform.position).normalized;
                float direction = Vector3.Dot(dir, transform.forward);
                if (distance < 2.2f && direction > 0) {
                        PlayerHealth ph = (PlayerHealth)target.GetComponent("PlayerHealth");
                ph.AddjustCurrentHealth(-10);
                attackTimer = coolDown;
        }
        }
}
Shreder
UNец
 
Сообщения: 4
Зарегистрирован: 02 авг 2011, 13:29

Re: EnemyAttack

Сообщение DbIMok 02 авг 2011, 15:04

элементарно, Ватсон
PlayerHealth ph = (PlayerHealth)target.GetComponent("PlayerHealth");

получаем PlayerHealth с target. далее к нему обращаемся и получаем null. значит PlayerHealth не получили. во первых повесить, во вторых проверять на null.
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.8k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: EnemyAttack

Сообщение Shreder 02 авг 2011, 15:58

Так в EnemyAttack в таргете я поставил себя, а у себя поставлен скрипт PlayerHealth
Shreder
UNец
 
Сообщения: 4
Зарегистрирован: 02 авг 2011, 13:29

Re: EnemyAttack

Сообщение DbIMok 02 авг 2011, 16:10

напишите после строчки
PlayerHealth ph = target.GetComponent<PlayerHealth>();

(да, так можно записать то же самое короче и без лишних приведений) такую:
if (ph == null) Debug.LogWarning("упс, нет ссылки на PlayerHealth!");

если мне не верите.
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.8k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: EnemyAttack

Сообщение Shreder 02 авг 2011, 17:13

Поставил на новый объект скрипт PlayerHealth (С себя я его деактивировал). Направил на него своего нпс и чудо! Заработало. Обратно сделал на себя-та же ошибка.
Shreder
UNец
 
Сообщения: 4
Зарегистрирован: 02 авг 2011, 13:29

Re: EnemyAttack

Сообщение Shreder 02 авг 2011, 17:27

Решил проблему.
В качестве цели я ставил Character Controller, в котором только скрипты управления
Shreder
UNец
 
Сообщения: 4
Зарегистрирован: 02 авг 2011, 13:29


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

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

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