如何使用GetComponent语法

时间:2014-02-06 13:47:58

标签: c# unity3d gameobject

我试图理解GetComponent,但我很难想出如何编写语法。我有两个脚本(SpawnBehaviour和SpotClicked),并希望从#34; SpawnBehaviour中获取bool到SpotClicked。

如何正确获取语法,并将SpawnBehaviour中的布尔值更改为true?

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 个答案:

答案 0 :(得分: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将布尔变量设置为true,那么您可以

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

或者如果你不想保持周围的SpawnBehaviour,你可以做

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

但如果您在其他任何地方需要它,或者经常需要它,请将其缓存。

答案 1 :(得分:2)

从概念上讲,你应该先了解什么是组件,什么是游戏对象,然后才能正确理解语法:

enter image description here

例如:

var layer = someGameObject.GetComponent<GUILayer>();