我试图理解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;
答案 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
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)
从概念上讲,你应该先了解什么是组件,什么是游戏对象,然后才能正确理解语法:
例如:
var layer = someGameObject.GetComponent<GUILayer>();