void OnTriggerStay(Collider player)
{
if (player.gameObject.tag == "Player")
{
if (Input.GetKeyDown("g")) //If G is pressed
{
if (!G1.activeInHierarchy)
{
G1.SetActive(true);
}
else if (G1.activeInHierarchy)
{
G1.SetActive(false);
G2.SetActive(true);
}
}
}
}
当运行此代码并单击G按钮时,它会同时激活G1和G2。但首先应该是G1,然后再次单击G按钮,然后应该打开G2。
1条答案
按热度按时间wlsrxk511#
首先,
else
语句永远不会发生。在true
或false
之外的其他地方不可能有布尔值,您在if
和else if
中已经讨论过了。第二,你的逻辑可以被简化。你的程序员声明你想要以下行为:
现在回答你的问题
可能有很多原因。也许这个脚本附加到很多组件,所以它被执行了很多次?这就解释了为什么两个都被激活,因为逻辑当前是:
G -〉G1激活
G -〉G1不活动,G2活动
G -〉G1激活,G2仍激活
如果您希望在第三次单击时停用G2,则需要在激活G1时执行
G2.SetActive(false)
。如果你想要一个点击G在两个游戏对象之间切换的行为,你可以简单地做...
假定其中一个从一开始就处于活动状态,则将产生以下行为:
G1:激活
G2.不活动
点击G
G1:未激活
G2:激活
点击G
G1:激活
G2:不活动
...等等
要在对代码进行最少更改的情况下获得所需的行为,只需将else-code移动到第一个if:
当然可以简化为...