Unity 3D中的随机播放项目

时间:2014-07-12 21:33:46

标签: c# arrays random unity3d shuffle

我有一个显示项目列表的数组脚本。

现在问题是我只希望这个列表中有五个项目显示为十个并且也是随机播放的,所以每次开始新游戏时都不能有相同的列表

我在想是否应该实施Random.Range,但我不知道在哪里。

请帮助,并解释应该做什么。我还是有点新鲜,谢谢。

这是脚本:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

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 ? "" + item.password: " ", 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 int password;

    public bool Collected { get; private set; }

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

    public void passwordNumber()
    {
        password = 0;
        Collected = true;
        gameObject.SetActive(false);
    }
}

1 个答案:

答案 0 :(得分:1)

我假设您希望保留items完整而不删除任何项目,因此我建议您创建第二个名为finalItems的列表,其中包含您的5个随机项目。

public List<Item> items;
public List<Item> finalItems;

#region Unity
void Start ()
{
    Screen.lockCursor = true;

    // Do a while loop until finalItems contains 5 Items
    while (finalItems.Count < 5) {
        Item newItem = items[Random.Range(0, items.Count)];
        if (!finalItems.Contains(newItem)) {
            finalItems.Add(newItem);
        }
    }
}

然后在foreach语句中,循环播放finalItems而不是items

这将为每场比赛提供5个随机物品!