我试图理解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;

最佳答案

不幸的是,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;


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

关于c# - 如何使用GetComponent语法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21604774/

10-10 12:35