2014-02-06 5 views
1

Im пытается понять GetComponent, но мне трудно понять, как писать синтаксис. Я получил два сценария (SpawnBehaviour и SpotClicked) и хочу, чтобы получить логическое значение от «SpawnBehaviour в SpotClicked.Как использовать синтаксис GetComponent

Как получить правильный синтаксис, и изменить логическое значение в SpawnBehaviour истину?

void OnMouseDown() 
{ 
     screenPoint = Camera.main.WorldToScreenPoint(gameObject.transform.position); 
     offset = gameObject.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z)); 

    if(this.gameObject.tag == "fishSpot"){ 
      Debug.Log("Clicked "+gameObject.name); 
      //get "stopped"bool from "SpawnBehaviour" script and set it to true 
      SpawnBehaviour sb = spawnPoint.GetComponent<SpawnBehaviour>().stoppedSpawn=true; 
    } 
} 

В SpawnBehaviour.cs у меня

public bool stoppedSpawn = false; 

ответ

2

к сожалению the documentation не показывает вам пример в C#, но это довольно прямо вперед.

Что вы в конечном итоге делает что-то вроде

SpawnBehavior sb = gameObject.GetComponent<SpawnBehaviour>(); 
SpotClicked sc = gameObject.GetComponent<SpotClicked>(); 
//Do whatever you want with the variables from either MonoBehaviour 

Существует также the non-generic version

SpawnBehaviour sb = (SpawnBehaviour) gameObject.GetComponent(typeof(SpawnBehaviour)); 

но эй, если вы можете сохранить несколько нажатий клавиш и бросает, почему нет.

Конечно, вы можете кэшировать эти компоненты в своем Start(), если вы собираетесь обращаться к ним несколько раз. Вызов GetComponent стоит дорого, особенно если вы в конечном итоге делаете это каждый кадр, например.

И если впоследствии вы хотите установить логическую переменную для истинно для SpawnBehaviour, вы могли бы сделать

SpawnBehaviour sb = gameObject.GetComponent<SpawnBehaviour>(); 
sb.stoppedSpawn = true; 

или если вы не заботитесь, чтобы держать SpawnBehaviour вокруг, вы можете сделать

gameObject.GetComponent<SpawnBehaviour>().stoppedSpawn = true; 

Но если вам это нужно где-нибудь еще, или нужно его часто, делайте кеширование.

+0

Я продолжаю получать «Не могу неявно вводить« bool »в« spawnBehaviour » – Eyrik

+0

Итак, покажите мне код, который вы используете. Измените его на свой вопрос. – Bart

+0

Обновлен мой код – Eyrik

2

Концептуально, вы должны сначала понять, что это компонент, и что это геймобжекты, то не трудно получить правильный синтаксис:

enter image description here

Например:

var layer = someGameObject.GetComponent<GUILayer>(); 
Смежные вопросы