c# - [Unity]如何用switch case触发随机Icon?
问题描述
我目前正在尝试制作一个随机图标弹出机制,例如客户随机订购比萨饼。
我正在尝试制作一个随机显示机制,每个客户都有一个带有开关盒的随机订单,它会像从开关盒中选择的订单一样显示。
我将订单图标作为一个大小为 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;
}
}
}
我预计它将启用图像游戏对象,但它不会。所以我错过了什么?
解决方案
首先每帧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;
}
}
推荐阅读
- import - python用户界面,thony和pycharm中的导入错误
- c# - Winforms 中的 Parasolid 查看器
- html - 悬停文本的 CSS 垂直对齐
- julia - 有没有办法一次减去多个数据框列?
- django - 当我使用 for 循环遍历它时,我的 django 表单不起作用
- javascript - 如何获得空输入字段的计数?
- linux - 如何从linux的不同目录中提取同名文件?
- javascript - 如何在纯Javascript而不是jQuery中将类添加到具有ul子元素的li元素
- java - 为什么我不能在 @Mapping 属性中引用 @Context 参数?
- serial-port - UART通信校验和