首页 > 解决方案 > Unity C#在生成元素之前检查位置是否被占用

问题描述

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

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

问题 2:考虑到我有大量存储的游戏数据(对象 x、y、星名等的位置),有没有办法像 php 一样在数组中的数组中做一个数组,并让它接受不同类型的参数(字符串,浮点数,整数)?

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个数组,为负x创建1个数组,并像这样在其中存储和搜索数据吗?

谢谢 !

标签: c#arraysunity3dmultidimensional-arrayposition

解决方案


A1:很久以前我就使用过unity 3d,但我认为将它存储在某个地方会更好。我认为一个列表很好,因为它更容易添加一些东西并且性能更好。

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

array Tupel<int, int, string>[]

然后你可以像这样访问元素:

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

等等。在 C# 7 中,您可以提供元组名称的属性。但是因为您是 C# 新手,所以我认为您不需要它。


推荐阅读