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