Unity 3D中的随机随机列表

时间:2014-07-09 03:16:57

标签: c# list random shuffle

我有点腌渍。我有一个数组的脚本,显示项目列表。现在问题是我只希望这个列表中有五个项目显示为十个并且也是洗牌,所以每次开始新游戏时你都不能拥有相同的列表。我在想是否应该有一个Random.Range实现,但我不知道在哪里。请帮助和谢谢。继承剧本:`

public class RayCasting : MonoBehaviour
{
    public float pickupDistance;
    public List<Item> items;


    #region Unity
    void Start ()
    {
        Screen.lockCursor = true;
    }
    void Update ()
    {
        RaycastHit hit;
        Ray ray = new Ray(transform.position, transform.forward);
        if (Physics.Raycast(ray, out hit, pickupDistance))
        {
            foreach(Item item in items)
            {

                if(Input.GetMouseButtonDown(0)) {
                    if (item.gameObject.Equals(hit.collider.gameObject))
                {
                    numItemsCollected++;
                    item.Collect();
                    break;
                        }
                }
            }
        }
    }

    void OnGUI()
    {

        GUILayout.BeginArea(new Rect(130,400,100,100));
        {
            GUILayout.BeginVertical();
            {
        if (numItemsCollected < items.Count)
        {
            foreach (Item item in items)

                        GUILayout.Label(string.Format("[{0}] {1}", item.Collected ? "X" : " ", item.name));
        }
        else
        {
            GUILayout.Label("You Win!");
        }
            }
            GUILayout.EndVertical();
    }
        GUILayout.EndArea();
    }
    #endregion

    #region Private
    private int numItemsCollected;
    #endregion
}

[System.Serializable]
public class Item
{
    public string name;
    public GameObject gameObject;

    public bool Collected { get; private set; }

    public void Collect()
    {
        Collected = true;
        gameObject.SetActive(false);
    }
}

`

2 个答案:

答案 0 :(得分:1)

要从10个项目列表中随机获取5个项目,您可以使用:

List<Items> AllItems = new List<Items>();

List<Items> RandomItems = new List<Items>();

Random random = new Random();

for(int i = 0; i < 5; i++)
{
    RandomItems.Add(AllItems[random.Next(0, AllItems.Count + 1)]);
}

AllItems列表包含您的10个项目。

在循环之后,您将在RandomItems列表中有5个随机项。

答案 1 :(得分:0)

弄清楚了,这是我洗牌任何List的解决方案

public class Ext : MonoBehaviour
{
    public static List<T> Shuffle<T>(List<T> _list)
    {
        for (int i = 0; i < _list.Count; i++)
        {
            T temp = _list[i];
            int randomIndex = Random.Range(i, _list.Count);
            _list[i] = _list[randomIndex];
            _list[randomIndex] = temp;
        }

        return _list;
    }
}

以您的示例为例,它应该像这样:

AllItems = Ext.Shuffle<Items>(AllItems);
Debug.Log(AllItems[0]); // Will be always random Item

如果您需要5个随机物品,您可以致电

Debug.Log(AllItems[0]); // Random Item
Debug.Log(AllItems[1]); // Random Item
Debug.Log(AllItems[2]); // Random Item
Debug.Log(AllItems[3]); // Random Item
Debug.Log(AllItems[4]); // Random Item