C# 脚本中的无限对象声明
我在Unity中有一个脚本,它在我的赛车游戏中设置了检查点。但我不知道赛道上到底有多少检查站。现在我只限于5人: 但是,我希望允许地图制作者插入更多的检查点。 这不起作用:C# 脚本中的无限对象声明,c#,unity3d,C#,Unity3d,我在Unity中有一个脚本,它在我的赛车游戏中设置了检查点。但我不知道赛道上到底有多少检查站。现在我只限于5人: 但是,我希望允许地图制作者插入更多的检查点。 这不起作用: public List<GameObject> checkPoints = new List<GameObject>(); 公共列表检查点=新列表(); 那么最好的方法是什么呢?这个:公共列表检查点=新列表()不会显示,因为它是游戏对象列表,而不是向量列表。用户无法手动键入游戏对象。您可以这样做
public List<GameObject> checkPoints = new List<GameObject>();
公共列表检查点=新列表();
那么最好的方法是什么呢?这个:公共列表检查点=新列表()代码>不会显示,因为它是游戏对象列表,而不是向量列表。用户无法手动键入游戏对象。您可以这样做:public List checkPoints=new List()
然后简单地遍历这个列表,并在运行时为每个位置执行Resource.Load(如果您不能理解这一点,我可以键入一个示例)
一个更为用户友好的解决方案是允许用户通过在世界上放置游戏对象来添加检查点,而不必手动键入每个向量。例如,创建一个检查点对象,并给它一个唯一的标记(例如:“CheckPointTag”),然后只需运行下面的方法即可获得所有检查点位置:
public List<Vector3> GetCheckPoints()
{
GameObject[] objects = GameObject.FindGameObjectsWithTag("CheckPointTag");
List<Vector3> objectPos = new List<Vector3>();
foreach(GameObject object in objects)
objectPos.Add(object.transform.Position;
return objectPos;
}
public List GetCheckPoints()
{
GameObject[]objects=GameObject.FindGameObjectsSwithTag(“检查点标记”);
List objectPos=新列表();
foreach(对象中的游戏对象)
objectPos.Add(object.transform.Position;
返回objectPos;
}
定义一系列检查点不管用吗
公共游戏对象[]检查点;
我目前还不能访问Unity,但这应该允许您通过检查器向CheckPoints数组输入任意(合理)数量的游戏对象
这个关于统一的答案类似于这个问题:
在这里进行一个粗略的猜测,是否找不到您的错误List1'
?在这种情况下,您必须使用System.Collections.Generic;
添加,才能使用C列表。您尝试了什么?您希望地图制作者添加新的检查点吗?我想创建类似vector的东西。地图制作者将添加检查点如果他们向场景中添加一个脚本,则指向该脚本。为什么列表不起作用。您能再解释一下吗?当我使用此代码时,列表不会显示在此窗口中(如屏幕上)。我想创建可以在地图上存储所有检查点的脚本。发布脚本的全部代码。游戏对象的公共列表将在检查器中正确显示。必须进行向下投票,因为这是一个误导性的观点。用户不能直接键入游戏对象,不,但没有相关性,他们可以拖放一个游戏对象,或者一个要实例化的预置,通过inspector添加到一个游戏对象属性中。你可以,但也许我的回答不对。我并不是说他不能用这种方式将游戏对象添加到列表中,只是他不能输入它们,这似乎就是他说的:我想做一些类似向量的东西。地图制作者会如果他们向场景中添加一个检查点,则将检查点添加到此脚本这很好,但列表也可以。可能OP的错误在其他地方。@Heisenbug我以为是,但目前无法测试它。我想他的列表不起作用的原因是因为他正在脚本端创建它?(public List foo=new List();
而不仅仅是public列出foo;
尽管“这不起作用”没有真正描述他的问题,你是对的,它可能在其他地方。没有。即使他在脚本中初始化它,它也应该是可检查的。顺便说一句,在脚本中和通过编辑器初始化它最终可能会导致其他一些错误。@Heisenbug有任何此类错误的例子吗?我一直认为它是无害的(虽然没用)初始化公共成员。据我所知,Unity的编辑器序列化过程非常擅长处理这种类型的事情。@Jerdak:如果您从检查器初始化数组,Unity将正确地序列化它们。如果您再次初始化它(es.inside Awake),则在检查器中初始化的数组将丢失。