Unity C#在生成元素之前检查位置是否

时间:2018-07-11 19:10:39

标签: c# arrays unity3d multidimensional-array position

大家好,我是C#的新手,我正在尝试制作2D无限游戏。 在这一点上,我创建了一个画布,该画布在生成地图元素的单元格中包含一个面板“ map”。当单击它们时,整个地图面板将移动到屏幕中央(我在屏幕中央有一个空对象,它将地图面板移至屏幕中央) 当单击一个元素时,我在其周围产生了另外4个元素。 元素是100x100pixels,所以可以说我在0,0处有一个,其他元素将在0,100 0,-100 100,0和-100,0处生成(所以像加号一样) 问题1: 我有办法检查这些位置之一是否已经有物体吗?这样我就可以停止创建对象。

还是应该将所有内容存储在数组或某种类型的数据库中?每次我尝试生成一个元素时,都应该检查数据库中是否已经生成了一个元素?

问题2: 考虑到病态有大量存储的游戏数据(对象x,y,star名称等的位置),有没有一种方法可以像在php中那样在数组中做数组并接受不同类型的参数(字符串) ,float,int)?

obj1
like lets say x = -100 y = -100 
array z [x,y,name] = "C92Z"
array z [x,y,visited] = "true"
array z [x,y,celestial_objects] = 4
array z [x,y,spaceports] = 1

obj2
like lets say x = -100 y = 200 
array z [x,y,name] = "C22Z"
array z [x,y,visited] = "false"
array z [x,y,celestial_objects] = 10
array z [x,y,spaceports] = 2

还有一件事。为了更快地搜索数据(我正在像〜20.000 +个对象那样向前思考),我是否应该为正x创建2个数组1和为负x创建1个数组,并像这样存储和搜索数据?

谢谢!

2 个答案:

答案 0 :(得分:0)

A1:很久以前我就使用过统一3d,但是我认为将其存储在某个位置会更好。我认为列表很不错,因为它可以更轻松地添加内容,并且性能更好。

A2:您可以在C#中使用Tupels(好的)或将所有内容存储在对象中,然后将其转换为类型(不是一个好主意) 例如:

array Tupel<int, int, string>[]

然后您可以访问以下元素:

array[0].Item1
array[0].Item2
array[0].Item3

,依此类推。在C#7中,您可以提供Tupel名称的属性。但是因为您是C#的新手,所以我认为您不需要它。

答案 1 :(得分:0)

创建课程

public class MapData {
    public Vector2Int pos; //2D game, 2D position data
    public bool visited;
    public int celestial_objects;
    public int spaceports;
    ...
}

当然,celestial_objectsspaceports最好用指向这些对象的数组表示(数组的大小然后保存有多少个对象的整数值),具体取决于您的用途-案例。

然后您的地图类保存这些对象的数组(数组是数组?)。