【发布时间】:2014-09-07 14:01:48
【问题描述】:
我已经被这个脚本卡住了大约几个星期了。我有这个脚本,每次新游戏开始时,列表中的项目都会随机播放。我不知道为什么,但我似乎根本无法调整项目列表。请帮忙,如果可以的话,自己测试一下。另外请向我解释可能是什么问题或我可以做些什么来解决它,我对此还是很陌生。
`using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class RayCasting : MonoBehaviour
{
public float pickupDistance;
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);
}
items.Clear();
}
}
void Update ()
{
RaycastHit hit;
Ray ray = new Ray(transform.position, transform.forward);
if (Physics.Raycast(ray, out hit, pickupDistance))
{
foreach(Item item in finalItems)
{
if(Input.GetMouseButtonDown(0)) {
if (item.gameObject.Equals(hit.collider.gameObject))
{
numItemsCollected++;
item.Collect();
break;
}
}
}
}
}
void OnGUI()
{
GUILayout.BeginArea(new Rect(130,400,100,130));
{
GUILayout.BeginVertical();
{
if (numItemsCollected < items.Count)
{
foreach (Item item in finalItems)
GUILayout.Label(string.Format("[{0}] {1}", items.Collected ? "" + items.password: " ", items.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) 您希望脚本做什么,以及 2) 脚本做了哪些您没想到的事情?
-
好的,所以脚本基本上是从 1 到 10 列出项目。每次你点击你在列表中找到的一个项目时,它会给你一个随机数,这意味着你收集它,这个数字会做一些不重要的事情。我的问题是每次新游戏开始时项目都不会洗牌。我不希望每次开始游戏时列表都相同。是不是好一点??
-
我不知道我是否做错了什么,但它不会随机化项目列表。我不明白该去哪里。如果您需要更多详细信息,请告诉我。
-
在回答之前,我想澄清一点。变量
items是List,但我没有看到您的代码向其中添加任何列表项。而且您总是在循环结束时清除它,这意味着无论您循环多少次,items.Count都将保持为零。那么如果Random.Range总是返回0,那么循环如何结束呢? -
我实际上就是因为这个原因才打算把这些东西拿走。有人建议但没有用。我明白了,你是说我应该在我的 foreach 语句中将 item 切换为 items 吗?