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

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

СообщениеДобавлено: 11 май 2009, 12:25
GrueGames
Добрый день!

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

Пытаюсь реализовать это безобразие через префабы. Это нормально? Этих боев одновременно должно идти много.
И возникает вот такая проблема:
Есть значит префаб в проекте, это 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 передать из основного скрипта инстансу боя, чтобы этот инстанс "знал" кто в нем участвует.

Спасибо!

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

СообщениеДобавлено: 11 май 2009, 20:08
Neodrop
Не понятно так... По идее, работать должно. Скрипт то на инстансе, ессно, имеется?
Поробуйте так :

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


Возможно, скрипт Server лучше переложить в папку Plugins.

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

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

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

СообщениеДобавлено: 12 май 2009, 01:01
Neodrop
Я же ответил, что вроде всё правильно. Но детальнее я не могу сказать, потому что не вижу ваш проект. Тут многое зависит от того, где лежит скрипт, что он из себя представляет и прочее.
Экспериментируйте. Вы на правильном пути, а понять что именно глючит в вашем конкретном случае, дано вам и только вам.

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

СообщениеДобавлено: 12 май 2009, 11:50
GrueGames
Хм, заработало, но как-то странно.

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

А если в начале скрипта, то нет. Почему так?