首页 > 解决方案 > 共享一个随机脚本的两个对象在它们应该产生不同的顺序时产生相同的顺序

问题描述

我有两个“客户”对象,它们在 Unity 中共享一个 Order Manager 脚本。理想情况下,每次客户需要创建新订单时,它都应该与上一个不同。相反,客户 1 订购 X 和 Y,然后客户 2 订购 X 和 Y 而不是 Z(或任何不同的组合)。当脚本仅放置在一个客户而不是 2 个客户身上时,随机订单功能可以正常工作。没有静态变量。

补充一下,如果我清除了客户 1 的订单,下一个订单就不同了。客户 2 的订单仍然会跟随客户 1。例如:客户 1 有 2 个订单:XX,然后 YY 客户 2 不会从第二个订单开始,它会以相同的方式订购:XX,然后是 YY

这是导致问题的方法:

   IEnumerator CustomerOrder(bool status, float delayTime)
{
  yield return new WaitForSeconds(delayTime);//delay between orders
 imageOffset.y = -0.75f;//space between order visuals
 numberOfOrderItems = rnd.Next(1, maxOrderNumber + 1);//between 1 and 3 items per order  
 customerOrder = new GameObject[numberOfOrderItems];// order collection
 Instantiate(orderBackgrounds[numberOfOrderItems - 1], orderVisual.transform);//Spawn correct background for number of items
 for (int x = 0; x < numberOfOrderItems; x++)
 {
     int y = rnd.Next(products.Length);//choose a random number representing an index in the products array
     customerOrder[x] = Instantiate(productImages[y],
     orderVisual.transform.position + imageOffset,
     Quaternion.identity,
     orderVisual.transform);//spawn a visual representation of the order
     imageOffset.y += -0.95f;//places next order visual lower
 }
 
 makingOrder = false;//we've finished making the order
}

标签: c#arraysunity3drandominstantiation

解决方案


我真的觉得很傻。我可以通过在方法的开头添加一行来解决此问题:

rnd = new System.Random();

我不确定这是否真的是最好的方法,但它似乎有效。


推荐阅读