C# 如何在Unity3D中从列表中随机选取值?
假设我有一个Robot类的列表[listC# 如何在Unity3D中从列表中随机选取值?,c#,unity3d,C#,Unity3d,假设我有一个Robot类的列表[listmyList=newlist()]。每个机器人都有一个名称和id,具体取决于它的颜色。现在,从列表中随机选取值,并给出列表中每种颜色的机器人数量的输出。 (N.B.考虑你只有3个彩色机器人[黄,绿,红]) 我的代码: public class Test : MonoBehaviour { private void Start() { List<Robot> myList = new List<Robot&g
public class Test : MonoBehaviour
{
private void Start()
{
List<Robot> myList = new List<Robot>();
List<string> robotList = new List<string>();
robotList.Add("yellow");
robotList.Add("green");
robotList.Add("red");
int someNum = Random.Range(0, robotList.Count);
string robotNumber = robotList[someNum];
robotList.RemoveAt(someNum);
Robot robot;
int id = 0;
robot = new Robot(robotNumber, id);
Debug.Log(robot);
id++;
}
}
public class Robot
{
public string name;
public int id;
public Robot(string name, int id)
{
this.name = name;
this.id = id;
}
}
公共类测试:单一行为
{
私有void Start()
{
List myList=新列表();
列表机器人列表=新列表();
机器人列表。添加(“黄色”);
机器人列表。添加(“绿色”);
机器人列表。添加(“红色”);
int someNum=Random.Range(0,robotList.Count);
字符串robotNumber=robotList[someNum];
机器人列表。移除(someNum);
机器人;
int id=0;
机器人=新机器人(机器人编号,id);
Log(robot);
id++;
}
}
公共类机器人
{
公共字符串名称;
公共int id;
公共机器人(字符串名称,int-id)
{
this.name=名称;
this.id=id;
}
}
但这可能行不通。。实际上,我不明白我的输出是什么…您的随机选择工作正常(即使您的代码有点混乱)。我猜你的问题是,你不理解
Debug.Log(robot)的输出代码>
实际上我不明白我的输出是什么-OP
Debug.Log()
打印什么?
根据意愿,将给定对象转换为字符串表示以供显示。这意味着只需打印对象上的ToString()
方法的返回值即可
让我们看看Object.ToString()
方法及其在n中的行为
Object.ToString方法的默认实现返回对象类型的完全限定名-MSDN
因此,Unity日志中的输出将是对象的类型定义
现在,如何获得有用的信息?
只需将Robot
类的默认ToString()
方法重写为如下内容:
public class Robot
{
public string name;
public int id;
public Robot(string name, int id)
{
this.name = name;
this.id = id;
}
// Here start's the magic!
public override string ToString()
{
return string.Format("Robot -> Id:'{0}' Name:'{1}'", id, name);
}
}
不确定是否真正理解您的要求:如果只是关于Debug.Log(robot)的含义代码>输出,检查@Smartis answer,因为它能完美地回答:)
否则,我觉得您想用随机选取的名称填充列表。在这种情况下,您需要使用一个循环:Start()
方法只在启动时调用一次(顾名思义)。如果您需要使用随机选择的颜色/名称填充列表,然后显示列表中每个颜色/名称的数量,您可以按如下操作:
public class Test : MonoBehaviour
{
private void Start()
{
List<Robot> robotsList = new List<Robot>();
List<string> namesList = new List<string>();
namesList.Add("yellow");
namesList.Add("green");
namesList.Add("red");
PopulateRobotsList();
DisplayRobotsListContent();
}
private void PopulateRobotsList()
{
for(int id = 0; id < 100; id++)
{
string robotName = namesList[Random.Range(0, namesList.Count)];
robotsList.Add(new Robot(robotName, id));
//Debug.Log(robotsList[robotsList.Count - 1]);
}
}
private void DisplayRobotsListContent()
{
int[] robotsNamesCount = new int[namesList.Count];
for (int i = 0; i < robotsList.Count; i++)
{
robotsNamesCount[namesList.IndexOf(robotsList[i].name)] += 1;
}
for (int i = 0; i < namesList.Count; i++)
{
Debug.Log("Robot(s) named \"" + namesList[i] + "\" : " + robotsNamesCount[i]);
}
}
}
public class Robot
{
public string name;
public int id;
public Robot(string name, int id)
{
this.name = name;
this.id = id;
}
}
公共类测试:单一行为
{
私有void Start()
{
列表机器人列表=新列表();
列表名称列表=新列表();
名称列表。添加(“黄色”);
名称列表。添加(“绿色”);
名称列表。添加(“红色”);
PopulateRobotsList();
DisplayRobotsListContent();
}
私有void PopulateRobotsList()
{
对于(int-id=0;id<100;id++)
{
字符串robotName=namesList[Random.Range(0,namesList.Count)];
添加(新机器人(机器人名称,id));
//Log(robotsList[robotsList.Count-1]);
}
}
私有void DisplayRobotsListContent()
{
int[]robotsNamesCount=新int[namesList.Count];
for(int i=0;i robotsNamesCount[namesList.IndexOf(robotsList[i].name)]+=1;
}
for(int i=0;i
请注意,我更改了一些变量名称,因为我发现使用您提供的名称很难理解(例如:robotsList
存储机器人的潜在颜色/名称是一个奇怪的名称选择:)
希望这有帮助,robotsNamesCount[namesList.IndexOf(robotsList[i])]+=1;有个错误,很糟糕,有个打字错误。正确的行是robotsNamesCount[namesList.IndexOf(robotsList[i].name)]+=1代码>。