2014-09-19 2 views
5

Можете ли вы рассказать мне, как получить доступ к переменной скрипта из другого сценария? Я даже прочитал все на веб-сайте единства, но я все еще не могу этого сделать. Я знаю, как получить доступ к другому объекту, но не к другой переменной.Доступ к переменной из другого скрипта C#

Это ситуация: я в сценарии B, и я хочу, чтобы получить доступ к переменной X из сценария . Переменная X - boolean. Вы можете мне помочь?

Btw Мне нужно обновить стоимость X по сценарию B, как это сделать? Доступ к нему в Update функция Если бы вы могли дать мне и пример с этими письмами, это было бы здорово!

Спасибо

+0

Не могли бы вы добавить пример кода из двух сценариев? Помогло бы вам предоставить вам решение. –

+0

Возможный дубликат [In Unity, как передать значения из одного скрипта другому?] (Http: // stackoverflow.com/questions/13891892/in-unity-how-can-i-pass-values-from-one-script-to-another) – Heisenbug

ответ

10

Сначала необходимо получить компонент сценария переменных, и если они находятся в разных игровых объектах, вам необходимо пройти игру объект в качестве ссылки в инспекторе.

К примеру, у меня есть scriptA.cs в GameObject A и scriptB.cs в GameObject B:

scriptA.cs

// make sure its type is public so you can access it later on 
public bool X = false; 

scriptB.cs

public GameObject a; // you will need this if scriptB is in another GameObject 
        // if not, you can omit this 
        // you'll realize in the inspector a field GameObject will appear 
        // assign it just by dragging the game object there 
public scriptA script; // this will be the container of the script 

void Start(){ 
    // first you need to get the script component from game object A 
    // getComponent can get any components, rigidbody, collider, etc from a game object 
    // giving it <scriptA> meaning you want to get a component with type scriptA 
    // note that if your script is not from another game object, you don't need "a." 
    // script = a.gameObject.getComponent<scriptA>(); <-- this is a bit wrong, thanks to user2320445 for spotting that 
    // don't need .gameObject because a itself is already a gameObject 
    script = a.getComponent<scriptA>(); 
} 

void Update(){ 
    // and you can access the variable like this 
    // even modifying it works 
    script.X = true; 
} 
+0

Должен ли путь доступа к 'X' с' script.X = true; ' чем 'scriptA.X = true;'? Вы не можете получить доступ к 'X' таким образом, если это не' static' – DarkCygnus

+1

@GrayCygnus whoops u заметил мою ошибку. Спасибо, я исправил это. –

1

только для завершения первой ответ

нет необходимости a.gameObject.getComponent<scriptA>();
a уже объект игры, так это будет делать
a.getComponent<scriptA>();
и если переменным вы пытаетесь получить доступ в детях игрового объекта вы должны использовать a.GetComponentInChildren<scriptA>();
и если вам нужна такая переменная, вы можете получить к нему доступ, как это
a.GetComponentInChildren<scriptA>().nameofyourvar; a.GetComponentInChildren<scriptA>().nameofyourmethod(Methodparams);

+0

спасибо за исправление, я пропустил это. –

0

Здесь вы можете использовать статическую.

вот пример:

ScriptA.cs

Class ScriptA : MonoBehaviour{ 
public static bool X = false; 
} 

ScriptB.cs

Class ScriptB : MonoBehaviour{ 
void Update() { 
    bool AccesingX = ScriptA.X; 
    // or you can do this also 
    ScriptA.X = true; 
} 
} 

более подробно, вы можете обратиться одноэлементный класс.

Смежные вопросы