我目前正在尝试使随机图标弹出,例如,客户随机订购比萨饼。
我正在尝试创建一个随机显示机制,每个客户都有一个带有开关盒的随机订单,它的显示方式就像从开关盒中选择订单的方式一样。
我将订购图标作为大小为3的游戏对象数组放置。因此,当他们停止订购时,它将激活其头部上方的游戏对象。
代码如下:
private void OnCollisionStay2D(Collision2D collision)
{
if (collision.gameObject.CompareTag("OrderingPoint"))
{
int rand = Random.Range(0, 3);
switch (rand)
{
case 0:
OrderPicture[0].SetActive(true);
if (rand == 0 && collision.gameObject.name == "Rendang")
{
OrderPicture[0].SetActive(false);
GetRendang();
}
//RecipeObject.Artwork.SetActive(false);
break;
case 1:
//CuisineObject.Artwork.SetActive(true);
OrderPicture[1].SetActive(true);
if (rand == 1 && collision.gameObject.name == "Gado Gado")
{
OrderPicture[1].SetActive(false);
GetGadoGado();
}
//RecipeObject.Artwork.SetActive(false);
break;
case 2:
OrderPicture[2].SetActive(true);
if (rand == 2 && collision.gameObject.name == "Soto")
{
OrderPicture[2].SetActive(false);
GetSoto();
}
//CuisineObject.Artwork.SetActive(false);
break;
}
}
}
我希望它将启用图像游戏对象,但不会。所以我想念什么?
答案 0 :(得分:0)
首先OnCollisionStay
被称为每一帧,因此当前您每帧都会生成并执行一个新的随机索引。
您可能应该使用OnCollisionEnter2D
,它仅在发生碰撞的帧中调用。
很多事情根本不需要使用switch-case
就可以简化,因为对if(rand == XY)
的检查是多余的,并且OrderPicture[XY].SetActive(true);
的硬编码索引已经被rand
值:
private void OnCollisionEnter2D(Collision2D collision)
{
if(!collision.gameObject.CompareTag("OrderingPoint")) return;
int rand = Random.Range(0, 3);
// First deactivate all pictures because as I understand you want to show only one
foreach(var icon in OrderPicture)
{
icon.SetActive(false);
}
// Show the icon according to the random index
OrderPicture[rand].SetActive(true);
switch (rand)
{
case 0:
if (collision.gameObject.name == "Rendang")
{
GetRendang();
}
//RecipeObject.Artwork.SetActive(false);
break;
case 1:
//CuisineObject.Artwork.SetActive(true);
if (collision.gameObject.name == "Gado Gado")
{
GetGadoGado();
}
//RecipeObject.Artwork.SetActive(false);
break;
case 2:
if (collision.gameObject.name == "Soto")
{
GetSoto();
}
//CuisineObject.Artwork.SetActive(false);
break;
}
}