c# - 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个数组,并像这样在其中存储和搜索数据吗?
谢谢 !
解决方案
A1:很久以前我就使用过unity 3d,但我认为将它存储在某个地方会更好。我认为一个列表很好,因为它更容易添加一些东西并且性能更好。
A2:您可以在 C# 中使用 Tupels(好)或将所有内容存储在对象中,然后将其转换为类型(不是一个好主意)例如:
array Tupel<int, int, string>[]
然后你可以像这样访问元素:
array[0].Item1
array[0].Item2
array[0].Item3
等等。在 C# 7 中,您可以提供元组名称的属性。但是因为您是 C# 新手,所以我认为您不需要它。
推荐阅读
- php - Unserialize() 不适用于特定数据
- peoplesoft - 选择行时从网格触发人员代码
- c++ - 无法使用 LoadLibrary 函数加载 dll 文件
- apache-poi - 如何通过apache poi向单词表添加评论
- php - 使用 Laravel 护照和 Vuejs。尽管用户已通过身份验证,但 Auth::User() 在刀片上不起作用
- python - setup.py 与命名空间包中的 cython 编译:* .pxd 未找到
- c++ - LLJIT 运行错误“分段错误:11”,同时链接 C++ 标准库
- jquery - 单击多选时删除选项的蓝色
- jquery - 如何使用 jQuery 将现有的输入文本添加到动态创建的表单中?
- javascript - 如何使用 JavaScript 将 child.jsp 转换为模态或覆盖?