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

Как взять переменную из другого скрипта? [Решено]

СообщениеДобавлено: 11 окт 2011, 10:13
STARTS
У меня возник нубский вопрос, как взять переменную из одного скрипта и изменить её.
Вот у меня есть скрипт move_test.cs и bonus.cs в скрипте бонус есть приватная переменная score. Вот как из 1 скрипта изменить эту переменную и вывести тоже в 1 скрипте, ну хотя вывести уже не проблема))

Re: Как взять переменную из другого скрипта?

СообщениеДобавлено: 11 окт 2011, 10:42
DbIMok
в чем смысл делать переменную private, а потом пытаться получить к ней доступ?

Re: Как взять переменную из другого скрипта?

СообщениеДобавлено: 11 окт 2011, 10:53
Paul Siberdt
DbIMok, не придирайтесь :D ... Просто юные юниводы следуют тру-наставлениям и слепо пользуются CSharp-ом, не до конца осознавая его жоской философии.

ТС хотел получить ответ а-ля "почитайте про GetComponent".

Re: Как взять переменную из другого скрипта?

СообщениеДобавлено: 11 окт 2011, 10:56
STARTS
DbIMok писал(а):в чем смысл делать переменную private, а потом пытаться получить к ней доступ?

Тащимто када пробовал вызывать как в луа bonus.score юнити писал, что-то про переменную, я тада понял что нужно присваивать паблик, присвоил, но юнити уже выдал другую ошибку, понял что это не так вот и написал
З.Ы. Не судите строго мои знания в C#, я недавно начал изучать, ну а так знаю Lua, Pascal, Delphi

Re: Как взять переменную из другого скрипта?

СообщениеДобавлено: 11 окт 2011, 11:03
DbIMok
GetComponent
в "жоской философии" хотя бы правила игры известны

Re: Как взять переменную из другого скрипта?

СообщениеДобавлено: 11 окт 2011, 11:11
Paul Siberdt
А зачем же новичкам знать правила игры? Им главное - ощутить ауру и понять, моё ли это. :)

Re: Как взять переменную из другого скрипта?

СообщениеДобавлено: 11 окт 2011, 11:20
seaman
Раз
Два
Три
Четыре
Пять
Шесть
И все это элементарно находится через поиск.
Седьмая тема по этому вопросу по-моему уже чересчур.

Re: Как взять переменную из другого скрипта?

СообщениеДобавлено: 11 окт 2011, 11:24
Zaicheg
STARTS писал(а):Тащимто када пробовал вызывать как в луа bonus.score юнити писал, что-то про переменную, я тада понял что нужно присваивать паблик, присвоил, но юнити уже выдал другую ошибку, понял что это не так вот и написал

Феерия. В следующий раз, когда решите запостить поток мысли без указания изменений в условиях ("присвоил паблик, получил другую ошибку"), полного текста ошибки, участка кода, на который ведёт ошибка, и прочей сопроводительной информации, готовьтесь к плохому.

Re: Как взять переменную из другого скрипта?

СообщениеДобавлено: 11 окт 2011, 11:32
Paul Siberdt
seaman писал(а):.... И все это элементарно находится через поиск.
Седьмая тема по этому вопросу по-моему уже чересчур.

Ха... а я как раз пытался налинковать похожих тем, да попал на ошибку базы данных. Потому решил, что поиск не работает чичас на форуме.
STARTS, а я б напрягся уже... из полудюжины ответов в вашей теме, большая часть - от модератороф. :ymparty:

Re: Как взять переменную из другого скрипта?

СообщениеДобавлено: 11 окт 2011, 11:42
STARTS
Спасибо всем за ответы)
Ну напрягся, не напрягся, а изучать то С# как-то нужно)
А от модеров как раз таки поступил, самый толковый ответ в линках)
Вот такой код в сообщении:
Синтаксис:
Используется csharp
float rate = GetComponent<Weapon>().rate;
         Debug.Log(rate);

У меня получилось вот так:
Синтаксис:
Используется csharp
        int score = gameObject.GetComponent<bonus>().score;
        //other.DoSomething();
        score = score + 1;
 

и Юнти всё равно ругается:
NullReferenceException: Object reference not set to an instance of an object
move_test.Update () (at Assets/move_test.cs:50)

Re: Как взять переменную из другого скрипта?

СообщениеДобавлено: 11 окт 2011, 11:47
seaman
Скрипт bonus висит на том же объекте, что и приведенный скрипт?

Re: Как взять переменную из другого скрипта?

СообщениеДобавлено: 11 окт 2011, 11:47
STARTS
Всё исправил, опять забыл что Юнити чувствутелен к регистру, нужно
Синтаксис:
Используется csharp
int score = GameObject.GetComponent<bonus>().score;

Подождите...Поспешил)
Теперь игра запускается и работает, но очки не прибавляются, а Юнити в логе что-то пытается сказать
NullReferenceException: Object reference not set to an instance of an object
bonus.Update () (at Assets/bonus.cs:23)
Код таков:
Синтаксис:
Используется csharp
                if (Obj_dist.transform.position.z >= Obj.transform.position.z && Obj_dist.transform.position.y <= Obj.transform.position.y){
                    Destroy(Obj_dist);
                        int score = GetComponent<move_test>().score;
                        score = score + 1;
                }

Re: Как взять переменную из другого скрипта?

СообщениеДобавлено: 11 окт 2011, 12:24
waruiyume
int score = GetComponent<move_test>().score;
Т.к. int тип значения, будет изменятся лишь только-что созданная локальная переменная.
Создайте static переменную score в классе move_test, и меняйте её (move_test.score++)

Re: Как взять переменную из другого скрипта?

СообщениеДобавлено: 11 окт 2011, 12:32
STARTS
Сделал как вы посоветовали, Юнити опять ругается
Assets/bonus.cs(22,59): error CS0122: `move_test.score' is inaccessible due to its protection level

Re: Как взять переменную из другого скрипта?

СообщениеДобавлено: 11 окт 2011, 12:35
waruiyume
public static int score;