脚本中的无限对象声明
Posted
技术标签:
【中文标题】脚本中的无限对象声明【英文标题】:Infinite objects declaration in script 【发布时间】:2013-04-25 13:04:16 【问题描述】:我在 Unity 中有一个脚本,用于在我的赛车游戏中保存检查点。但我不知道赛道上有多少检查站。现在我限制在 5 个:
但是,我想允许地图制作者插入更多检查点。 这不起作用:
public List<GameObject> checkPoints = new List<GameObject>();
那么最好的方法是什么?
【问题讨论】:
你试过什么?您究竟希望地图制作者如何添加新的检查点? 我想做类似矢量的东西。如果地图制作者将检查点添加到场景中,他们将在此脚本中添加检查点 为什么列表不起作用。你能再解释一下吗? 当我使用此代码时,列表不会出现在此窗口中(如屏幕上)。我想创建可以存储地图上所有检查点的脚本。 发布脚本的全部代码。 GameObject 的公共列表将正确显示在检查器中。 【参考方案1】:定义检查点数组不起作用吗?
public GameObject[] CheckPoints;
我目前无法访问 Unity,但这应该允许您通过检查器将任意(合理)数量的 GameObjects 输入到 CheckPoints 数组中。
Unity Answers 上的这个和这个问题类似:http://answers.unity3d.com/questions/245024/public-array-of-gameobjects.html
在这里大胆猜测一下,你的错误是List1' could not be found
吗?在这种情况下,您必须添加 using System.Collections.Generic;
才能使用 C# 列表。
【讨论】:
这很好,但是 Listpublic List<GameObject> foo = new List<GameObject>();
而不是仅仅公开的List<GameObject> foo;
虽然“这不起作用”并不能真正描述他的问题,你是对的,它可能在其他地方。
没有。即使他在脚本中初始化它,它也应该是可检查的。顺便说一句,在脚本内部和通过编辑器初始化它最终可能会导致一些其他错误。
@Heisenbug 这些类型的错误有什么例子吗?我一直发现初始化公共成员是无害的(尽管没用)。据我所见,Unity 的编辑器序列化过程非常擅长处理这类事情。
@Jerdak:如果您从检查器初始化一个数组,统一将正确地序列化它们。如果你再次初始化它(例如在 Awake 中),在检查器中初始化的数组将会丢失。【参考方案2】:
这个:public List<GameObject> checkPoints = new List<GameObject>();
没有出现,因为它是一个游戏对象列表,而不是一个向量列表。用户不能手动输入游戏对象。您可以这样做:public List<Vector3> checkPoints = new List<Vector3>();
,然后简单地遍历此列表并在运行时为每个位置执行 Resource.Load(如果您无法弄清楚,我可以输入一个示例)。
一个更加用户友好的解决方案是允许用户通过在世界中放置一个 GameObject 来添加检查点,而不必手动键入每个向量。例如,创建一个 CheckPoint 对象,并给它一个唯一的标签(例如:“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;
【讨论】:
不得不投反对票,因为它具有误导性。用户不能直接输入 GameObject,不,但这没有相关性,他们可以通过检查器将 GameObject 的实例或要实例化的 prefab 拖放到 GameObject 属性。 你可以,但也许我只是没有正确地表达我的答案。我并不是说他不能以这种方式将 GameObjects 添加到列表中,只是他不能输入它们,这似乎是他说这句话时所追求的:我想做类似矢量的东西.如果地图制作者将检查点添加到场景中,他们将在此脚本中添加检查点以上是关于脚本中的无限对象声明的主要内容,如果未能解决你的问题,请参考以下文章