【发布时间】:2014-08-29 22:58:42
【问题描述】:
我有点吃不消了。我有一个显示项目列表的数组脚本。现在的问题是我只希望这个列表显示十个项目中的五个并且还洗牌,所以你不能每次开始一个新游戏时都有相同的列表。我在想是否应该实施 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);
}
}
`
【问题讨论】:
-
如果你想真正洗牌,按照Fisher-Yates算法,你可以在Wiki上找到。如果您只是想要一些随机性,请使用
OrderBy和Random.Next或new Guid。同样的问题也有大约 15 个重复项,请选择一个。 -
我还是个新手,还在学习中,所以如果你能详细说明一下,我搜索了很多,我没有找到任何带有数组和列表在数组中被打乱。