c# - 设置 Instatiated 按钮的 OnClick,以设置游戏对象变量?统一 C#
问题描述
大家好!由于我的问题的独特性,第一次使用 Stack Overflow。
我目前正在根据场景中有多少带有特定脚本的游戏对象来实例化一个按钮。我将如何确保实例化按钮的 onClick,将父脚本的空游戏对象 var 设置为(i)游戏对象(物理炮塔)?
private void Start()
{
Turret_Script[] turretsOnTank = FindObjectsOfType<Turret_Script>();
for (int i = 0; i < turretsOnTank.Length; i++)
{
GameObject turretButton = Instantiate(testingTurretButton, gameObject.transform.GetChild(0).GetChild(0).gameObject.transform);
turretButton.transform.GetChild(0).GetComponent<Text>().text = turretsOnTank[i].name;
turretButton.transform.position = new Vector3(150 + (100 * i), 330);
//This is where I assume I'd make a button var based off of the turretButton var.
//This is where I assume I'd change the OnClick of the button.
}
}
解决方案
如果您使用的按钮是Button
,您可以这样做:
for (int i = 0; i < turretsOnTank.Length; i++)
{
GameObject turretButton = Instantiate(testingTurretButton, gameObject.transform.GetChild(0).GetChild(0).gameObject.transform);
turretButton.transform.GetChild(0).GetComponent<Text>().text = turretsOnTank[i].name;
turretButton.transform.position = new Vector3(150 + (100 * i), 330);
turretButton.GetComponent<Button>().onClick.AddListner(
() => turretHolder = turretsOnTank[i]);
}
() => turretHolder = turretsOnTank[i]
是将turretHolder
字段设置为 的 lambda turretsOnTank[i]
,它i
是炮塔的索引。
顺便说一句,您的代码看起来需要一些改革。GetChild()
返回变换,所以你不需要做GetChild(0).gameObject.transform
变换。就够GetChild(0)
了。
而且,transform
字段已经存在于 中MonoBehaviour
,因此您无需transform
通过gameObject
.
并且,Instantiate
可以返回Transform
类型,如果 prefab 是Transform
. 因此,您的代码将是:
Transform turretButton = Instantiate(testingTurretButton.transform, gameObject.transform.GetChild(0).GetChild(0));
turretButton.GetChild(0).GetComponent<Text>().text = turretsOnTank[i].name;
turretButton.position = new Vector3(150 + (100 * i), 330);
turretButton.GetComponent<Button>().onClick.AddListner(
() => turretHolder = turretsOnTank[i]);
哪个冗余更少。
推荐阅读
- mysql - MySQL 与 docker 访问被拒绝
- cryptography - 使用私钥和登录域签署证书
- python - tensorflow GPU未显示在jupyter笔记本中
- c# - 胡言乱语
- design-patterns - 哪种设计模式最适合构建递归树?
- node.js - nodejs 应用程序可以有两个 package.json 文件并且可以单独运行吗?
- javascript - 我如何在反应 js 和谷歌图表中处理数据
- r - 有没有办法将回归应用于单独的数据点?
- python-3.x - 我的 def 变量之一停留在相同的值
- java - 在 Java Card 平台上使用 grpc