Доступ к основному скрипту из скрипта-инстанса

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

Доступ к основному скрипту из скрипта-инстанса

Сообщение GrueGames 11 май 2009, 12:25

Добрый день!

Такая ситуация: Работает скрипт сервер, занимается своими делами: подключает игроков, хранит их данные в массиве, итд. Внезапно, один из персонажей люто-яростно нападает на другого! Сервер убирает их с карты и выделяет им отдельный поток, в котором они могут спокойно подраться в походовом режиме(так задумано). После боя сервер должен обновить их данные в основном скрипте: одному добавить фраг, а второму статус смерти.

Пытаюсь реализовать это безобразие через префабы. Это нормально? Этих боев одновременно должно идти много.
И возникает вот такая проблема:
Есть значит префаб в проекте, это GameObject на котором висит скрипт Combat.js
Создаю его инстанс:
Server.js
Код: Выделить всё
var test : int = 5; //тестовая переменная

function CharFight_test (fighter_one : String, fighter_two: String) {
var combat_prefab = Instantiate(combat_prefab, Vector3 (0, 0, 0), Quaternion.identity);
}


Combat.js
Код: Выделить всё
var srv : Server;
srv = GetComponent (Server); //ссылка на основной скрипт Server.js

function Start () {
Debug.Log("Im combat instance!" ); //создался ли инстанс?
Debug.Log(srv.test); //переменная из скрипта Server.js
}


Инстанс создается, и на строке Debug.Log(srv.test); вылезает ошибка
NullReferenceException: Object reference not set to an instance of an object :(

И еще хотел спросить, как мне значения fighter_one, fighter_two передать из основного скрипта инстансу боя, чтобы этот инстанс "знал" кто в нем участвует.

Спасибо!
Аватара пользователя
GrueGames
UNITрон
 
Сообщения: 200
Зарегистрирован: 11 апр 2009, 16:42
Откуда: Samara, Russia
  • Сайт
  • ICQ

Re: Доступ к основному скрипту из скрипта-инстанса

Сообщение Neodrop 11 май 2009, 20:08

Не понятно так... По идее, работать должно. Скрипт то на инстансе, ессно, имеется?
Поробуйте так :

Код: Выделить всё
srv = GetComponent (Server) as Server; //ссылка на основной скрипт Server.js


Возможно, скрипт Server лучше переложить в папку Plugins.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Доступ к основному скрипту из скрипта-инстанса

Сообщение GrueGames 11 май 2009, 22:38

Такая же ошибка :(
Да, конечно скрипт на инстансе есть, он и строку "Im combat instance!" в консоль выводит.
На самом деле, надо придумать как это сделать, потому-что 99% играм потребуется подобная многопоточность на том или ином этапе.
И эта ошибка, NullReferenceException: Object reference not set to an instance of an object, она, простите, задолбала вылазить в различных ситуациях, по поводу и без. Я понимаю что она значит, но надо наверное как-то разобраться в структуре проекта в [unity 3D] как следует, чтобы больше ее не видеть.
И почитать об этом я нигде не нашел. И если вы скажите что "изучайте Java script, C#, читайте доки" я возражу что в этом отношении, в [unity 3D] Unity свой собственный язык программирования, и честно говоря, ничего общего он ни с js, ни с си шарп, кроме синтаксиса, ни имеет. Както так.
Насамом деле, если я на этих граблях прыгаю, скорее всего другие новички пройдут по этому же пути...
Аватара пользователя
GrueGames
UNITрон
 
Сообщения: 200
Зарегистрирован: 11 апр 2009, 16:42
Откуда: Samara, Russia
  • Сайт
  • ICQ

Re: Доступ к основному скрипту из скрипта-инстанса

Сообщение Neodrop 12 май 2009, 01:01

Я же ответил, что вроде всё правильно. Но детальнее я не могу сказать, потому что не вижу ваш проект. Тут многое зависит от того, где лежит скрипт, что он из себя представляет и прочее.
Экспериментируйте. Вы на правильном пути, а понять что именно глючит в вашем конкретном случае, дано вам и только вам.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Доступ к основному скрипту из скрипта-инстанса

Сообщение GrueGames 12 май 2009, 11:50

Хм, заработало, но как-то странно.

Если эти переменные объявляются внутри функции они работают
Код: Выделить всё
var object = GameObject.Find("_Startup"); //ссылка на основной скрипт.
var srv : Server  = object.GetComponent (Server);

А если в начале скрипта, то нет. Почему так?
Аватара пользователя
GrueGames
UNITрон
 
Сообщения: 200
Зарегистрирован: 11 апр 2009, 16:42
Откуда: Samara, Russia
  • Сайт
  • ICQ


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

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

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