1

我试图理解 GetComponent,但我很难弄清楚如何编写语法。我有两个脚本(SpawnBehaviour 和 SpotClicked)并希望从“SpawnBehaviour 到 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;
4

2 回答 2

2

不幸的是,文档没有向您展示 C# 中的示例,但它非常简单。

你最终会做的是

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

还有非通用版

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;

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

于 2014-02-06T14:11:19.650 回答
2

从概念上讲,您应该首先了解什么是组件,以及什么是游戏对象,然后不难掌握正确的语法:

在此处输入图像描述

例如:

var layer = someGameObject.GetComponent<GUILayer>();
于 2014-02-06T14:14:35.590 回答