C# массив ссылок на экзепляры классов [РЕШЕНО]

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

C# массив ссылок на экзепляры классов [РЕШЕНО]

Сообщение pod4444 01 апр 2012, 18:39

Всем привет. Появился тут вопрос, наверно я просто в самом C# туплю, но все же:

Суть такова что на танчик устанавливается динамически башни. Почему динамически? Да просто потому что я не знаю сколько будет установлено башен и какой модификации на танках, но я хочу реализовать модульность и многобашенность.
Танки реализованы готовыми префабами, то есть на них висит просто класс Tank и там я выставляю количество башен и их возможные модификации.
Модули же это отдельные префабы, т.е : башня,гусеницы, стволы, корпус.
От сервера приходит инфа о том, какие модификации у башен,стволов и т.д. на каждом танке, и на сцене собираются как конструкторы танки союзников и противников соответственно.

Теперь ближе к телу:

Есть у меня массив типа Turret
Синтаксис:
Используется csharp
Turret[] mTurrets;


Мне в одном из методов нужно забить массив ссылками на экземпляры Turret, чтобы потом можно было с ними общаться.
Синтаксис:
Используется csharp
         //Установка всех башен
        for (byte i = 0; i <= (valueTurrets-1); i++)
        {
            GameObject tempTurret = Instantiate(turretType[typeOfTurrets[i]], mHull.turretPosition[i].position, mHull.turretPosition[i].rotation) as GameObject;
            tempTurret.name = "Turret" + (i + 1);                                      
            tempTurret.transform.parent = transform;
            mTurrets[i] = tempTurret.GetComponent<Turret>();
        }

Но мне говорят мол "Ссылка на объект не указывает на экземпляр объекта" или "Object reference not set to an instance of an object"

Если объявить просто переменную типа Turret и присвоить ей, то все будет ок, но мне нужно массив, потому что я не знаю сколько точно будет башен.
Синтаксис:
Используется csharp
Turret mTurret = tempTurret.GetComponent<Turret>();


Сейчас я сделал так, что забиваю массив самими башнями и делаю GetComponent когда нужно, но это не очень удобно.

Если кто может объяснить что я делаю не так, скажу огромное спасибо.
Последний раз редактировалось pod4444 02 апр 2012, 11:43, всего редактировалось 1 раз.
Аватара пользователя
pod4444
Старожил
 
Сообщения: 721
Зарегистрирован: 20 янв 2012, 22:02
Откуда: Воронеж
Skype: pod4444
  • Сайт

Re: C# массив ссылок на экзепляры классов

Сообщение Order 01 апр 2012, 19:12

сделай конструктор класса.

Синтаксис:
Используется csharp
TurretCount = 100;
mTurrets = new Turret[TurretCount];


TurretCount = 0;

for
 mTurrets[TurretCount] = new Turret(type);
TurretCount++;
Добавить rusorder в Skype , _juc4you@mail.ru ;
Платные консультации, программирование ваших проектов Unity3d,C#,IOS,Android.
Скрытый текст:
_ttp://www.youtube.com/watch?v=1m2qTnatSjM&list=UUjcKNvONEUHCILG7QrX1NFg
Order
Старожил
 
Сообщения: 805
Зарегистрирован: 21 фев 2010, 10:34

Re: C# массив ссылок на экзепляры классов

Сообщение Good1101 01 апр 2012, 21:01

Я обычно использую в подобных случаях ArrayList
Синтаксис:
Используется csharp
         
  ArrayList Arr = new ArrayList();
            my_class MK = gameObject.GetComponent<my_class>();
            Arr.Add(MK);
 

Проблем никогда не было.
Как тут стрелять?
Аватара пользователя
Good1101
Адепт
 
Сообщения: 1100
Зарегистрирован: 17 ноя 2011, 14:07
  • ICQ

Re: C# массив ссылок на экзепляры классов

Сообщение Syberex 01 апр 2012, 21:10

От сервера приходит инфа о том, какие модификации у башен,стволов и т.д. на каждом танке, и на сцене собираются как конструкторы танки союзников и противников соответственно.

Наверно не от сервера зависит сколько у танков пушек и стволов, а в большей степени от клиента. Потому, что пушки вы делаете префабами, префабы в клиенте, а не на сервере. Но клиент не должен говорить серверу, сколько пушек это факт :)
Поэтому просто сервер должен "знать" сколько у клиента с версией сборки ХХ для каждой модели танка пушек, и не желательно подключать клиенты ниже текущей версии (но возможно).

А в клиенте в скрипте каждого танка создаем публик переменную, у которой в инспекторе задаем число элементов и перетягиваем все префабы пушек.

public GameObject mTurrets[];

После чего в параметрах сервера выставляем число пушек для данной модели.
Аватара пользователя
Syberex
Адепт
 
Сообщения: 2292
Зарегистрирован: 14 янв 2011, 20:35
Откуда: Кострома
  • Сайт

Re: C# массив ссылок на экзепляры классов

Сообщение pod4444 02 апр 2012, 11:31

Спасибо большое, первый ответ помог. Забыл я что-то по запарке о конструкторе.
Про ArrayList посмотрю тоже, спасибо.
Аватара пользователя
pod4444
Старожил
 
Сообщения: 721
Зарегистрирован: 20 янв 2012, 22:02
Откуда: Воронеж
Skype: pod4444
  • Сайт

Re: C# массив ссылок на экзепляры классов

Сообщение pod4444 02 апр 2012, 11:43

Syberex писал(а):Наверно не от сервера зависит сколько у танков пушек и стволов, а в большей степени от клиента. Потому, что пушки вы делаете префабами, префабы в клиенте, а не на сервере. Но клиент не должен говорить серверу, сколько пушек это факт :)
Поэтому просто сервер должен "знать" сколько у клиента с версией сборки ХХ для каждой модели танка пушек, и не желательно подключать клиенты ниже текущей версии (но возможно).

А в клиенте в скрипте каждого танка создаем публик переменную, у которой в инспекторе задаем число элементов и перетягиваем все префабы пушек.

public GameObject mTurrets[];

После чего в параметрах сервера выставляем число пушек для данной модели.


От сервера приходит инфа о том какая именно сборка у игрока, которая берется из БД.
А все возможные конечно выставляются в префабах.
Проблема была не с ООП, а с правильной реализацией массивов.
Аватара пользователя
pod4444
Старожил
 
Сообщения: 721
Зарегистрирован: 20 янв 2012, 22:02
Откуда: Воронеж
Skype: pod4444
  • Сайт


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

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

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