Проблема с кодом

Программирование на Юнити.

Проблема с кодом

Сообщение Matrix 13 май 2012, 19:15

Мне нужно чтобы турель стреляла пулей. Я написал такой скрипт для турели:
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
public class AttackTurrel : MonoBehaviour {

        public float coolDown;
        private float attackTimer;
        public GameObject bullet;
        public Transform shotPlace;
       
        // Use this for initialization
        void Start () {
                attackTimer=0;
                if(coolDown==0) coolDown = 2;
                shotPlace= transform.Find("towerM").Find("turrPlace1");
        }
       
        void Update () {
                if(attackTimer>0) attackTimer -=Time.deltaTime;
                if(attackTimer<0) attackTimer=0;
        }
       
        public void Attack()
        {
                if(attackTimer==0){
                        Instantiate(bullet, shotPlace.position, shotPlace.rotation);
                                       
                                attackTimer = coolDown;
                }
        }
}
 

shotPlace - это место вылета пули. у пули свой скрипт.

У меня возникает проблема. Unity пишет при запуске NullReferenceExeption на вот этом месте Instantiate(obj, shotPlace.position, shotPlace.rotation);.
Помогите пожалуйста, уже весь измучился.
Matrix
UNец
 
Сообщения: 12
Зарегистрирован: 11 май 2012, 18:58

Re: Проблема с кодом

Сообщение ghostdom 13 май 2012, 19:43

А пуля у тебя там хоть есть?

Добавь проверку:

Синтаксис:
Используется csharp
public void Attack()
        {
                if(attackTimer==0){
                        if (bullet)
                        {
                              Debug.Log("I have the bullet");
                              Instantiate(bullet, shotPlace.position, shotPlace.rotation);
                        }
                        else
                        {
                              Debug.Log("I have nothing to Instantiate");
                        }              
                                attackTimer = coolDown;
                }
        }
Добавить ghostdom777 в Skype _https://www.artstation.com/artist/ghostdom
Скрытый текст:
RoboRunner (игра на конкурс "Gamiron №3")

Скрытый текст:
Hybrid Wars

Скрытый текст:
Armada: World of modern tanks
Аватара пользователя
ghostdom
UNIверсал
 
Сообщения: 368
Зарегистрирован: 11 июн 2011, 16:07
  • ICQ

Re: Проблема с кодом

Сообщение Matrix 13 май 2012, 19:50

Я наверное забыл написать.
у меня ошибку выдает не на пулю, а на позицию места выстрела, хотя он есть.
:((
Matrix
UNец
 
Сообщения: 12
Зарегистрирован: 11 май 2012, 18:58

Re: Проблема с кодом

Сообщение ghostdom 13 май 2012, 20:10

Ну так измени проверку. Неужели это сложно?

Синтаксис:
Используется csharp
public void Attack()
        {
                if(attackTimer==0){
                        if (shotPlace)
                        {
                              Debug.Log("shotPlace.position = " + shotPlace.position + ", shotPlace.rotation = " + shotPlace.rotation);
                              Instantiate(bullet, shotPlace.position, shotPlace.rotation);
                        }
                        else
                        {
                              Debug.Log("I have not shotPlace");
                        }              
                                attackTimer = coolDown;
                }
        }
Добавить ghostdom777 в Skype _https://www.artstation.com/artist/ghostdom
Скрытый текст:
RoboRunner (игра на конкурс "Gamiron №3")

Скрытый текст:
Hybrid Wars

Скрытый текст:
Armada: World of modern tanks
Аватара пользователя
ghostdom
UNIверсал
 
Сообщения: 368
Зарегистрирован: 11 июн 2011, 16:07
  • ICQ

Re: Проблема с кодом

Сообщение Matrix 13 май 2012, 20:24

У меня ещё проблема:
Синтаксис:
Используется csharp
shotPlace= transform.Find("towerM").Find("turrPlace1");
 

когда я так пишу у меня выдает NullReferenceExeption.
Хотя в дальнейшем я использую эту переменную и у меня она работает. =(
Matrix
UNец
 
Сообщения: 12
Зарегистрирован: 11 май 2012, 18:58

Re: Проблема с кодом

Сообщение ghostdom 13 май 2012, 20:39

Синтаксис:
Используется csharp
transform
- это ссылка на свой трансформ обьекта. И в нем ты пытаешся найти компоненты -
Синтаксис:
Используется csharp
Find("towerM").Find("turrPlace1")
. Они у тебя там есть?
Или может ты чтото не то ищешь? Как догадаться, что у тебя представляют собой "towerM" и "turrPlace1"? Это обьекты в сцене? Или это скрипты навешанные на обьект с твоим скриптом?
Добавить ghostdom777 в Skype _https://www.artstation.com/artist/ghostdom
Скрытый текст:
RoboRunner (игра на конкурс "Gamiron №3")

Скрытый текст:
Hybrid Wars

Скрытый текст:
Armada: World of modern tanks
Аватара пользователя
ghostdom
UNIверсал
 
Сообщения: 368
Зарегистрирован: 11 июн 2011, 16:07
  • ICQ

Re: Проблема с кодом

Сообщение Matrix 13 май 2012, 20:48

ghostdom писал(а):
Синтаксис:
Используется csharp
transform
- это ссылка на свой трансформ обьекта. И в нем ты пытаешся найти компоненты -
Синтаксис:
Используется csharp
Find("towerM").Find("turrPlace1")
. Они у тебя там есть?
Или может ты чтото не то ищешь? Как догадаться, что у тебя представляют собой "towerM" и "turrPlace1"? Это обьекты в сцене? Или это скрипты навешанные на обьект с твоим скриптом?



Это дочерние объекты турели. То есть место выстрела.
Matrix
UNец
 
Сообщения: 12
Зарегистрирован: 11 май 2012, 18:58

Re: Проблема с кодом

Сообщение Matrix 13 май 2012, 20:49

Я сделал так и всё заработало(то есть я добавил проверку и чуть-чуть изменил поиск объекта):
Синтаксис:
Используется csharp
if(transform.FindChild("towerM/turrPlace1"))
                {
                shotPlace= transform.FindChild("towerM/turrPlace1");
                }
 


Кто-нибудь может объяснить почему????????????????????
b-(
Matrix
UNец
 
Сообщения: 12
Зарегистрирован: 11 май 2012, 18:58

Re: Проблема с кодом

Сообщение ghostdom 13 май 2012, 21:21

Справка в помощь)))
Добавить ghostdom777 в Skype _https://www.artstation.com/artist/ghostdom
Скрытый текст:
RoboRunner (игра на конкурс "Gamiron №3")

Скрытый текст:
Hybrid Wars

Скрытый текст:
Armada: World of modern tanks
Аватара пользователя
ghostdom
UNIверсал
 
Сообщения: 368
Зарегистрирован: 11 июн 2011, 16:07
  • ICQ


Вернуться в Скрипты

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6