在ScriptableObject中统一实现二维数组作为字段?

时间:2016-05-16 17:01:44

标签: c# arrays unity3d

一些快速背景:我正在制作2D游戏,并且我将能力存储为ScriptableObjects以便于实施。

我希望实现一个2D数组(或至少功能相似的东西)作为我的能力ScriptableObject的字段:

enter image description here

我还是编程新手,所以我一直在查找我不熟悉的各种概念的教程,我按照本教程创建了一个包含2D数组的脚本在功能上类似于我正在寻找的bool(Panel oirign将是一个单独的字段,我将手动设置,bool将确定哪些面板被击中):https://www.youtube.com/watch?v=uoHc-Lz9Lsc

我的计划是制作一个这样的剧本(但是3x8)并将其附加到每个能力上,类似于我为FX附加预制件的方式。我的想法是,如果我这样做,每个技能都有自己的脚本实例,因此它自己的面板数组被标记为" true"我可以参考。但是,我似乎根本无法将脚本附加到我的ScriptableObject。我调用了类RangeResolver(教程视频使用了什么" TestScript" for)并尝试在我的ScriptableObject能力中设置public RangeResolver attackRange字段,但我无法拖动或选择一个脚本到检查员的领域。

我完全不知道如何继续。如果有人对如何在ScriptableObject上实现2D数组作为字段以及如何访问所述数组中的信息有任何想法,我将非常感激!

2 个答案:

答案 0 :(得分:1)

解决方案可以是使用字符串通过三行字符串来表示8x3网格。将以下字段添加到Ability类:

[Multiline]
public string attackRange = "XOOOOOOO\nOZOOOOOO\nXOOOOOOO"

检查员现在应该显示一个字段:

XOOOOOOOO
OZOOOOOOO
XOOOOOOOO

其中X代表黄色,Z代表蓝色和O代灰色。可以在检查器中更改字母以自定义攻击模式。 然后,您可以编写一个逐行读取attackRange字符串的for循环,并计算所需的参数。

Multiline参数的来源:http://answers.unity3d.com/questions/424874/showing-a-textarea-field-for-a-string-variable-in.html

答案 1 :(得分:1)

因此,使用教程中的2d bool数组的解决方案最终比我想象的要简单得多。在本教程中,用户创建了一个TestScript.cs,其中只有一个字段调用了ArrayLayout类,这是他们定义用于2D数组的数组数组的地方。我试图调用实际的TestScript类而不是ArrayLayout类本身,所以通过调用public ArrayLayout attackRange,它完全以我希望的方式工作,至少对于bool数组。我将使用原始面板和bool阵列的手动设置作为我的解决方案作为突出显示的面板。