Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Unity3D中从列表中随机选取值?_C#_Unity3d - Fatal编程技术网

C# 如何在Unity3D中从列表中随机选取值?

C# 如何在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

假设我有一个Robot类的列表[listmyList=newlist()]。每个机器人都有一个名称和id,具体取决于它的颜色。现在,从列表中随机选取值,并给出列表中每种颜色的机器人数量的输出。 (N.B.考虑你只有3个彩色机器人[黄,绿,红])

我的代码:

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;irobotsNamesCount[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