【发布时间】:2017-08-10 08:52:06
【问题描述】:
for (int m = 0; m < materialObjects.Length; m++)
{
for (int i = 0; i < materialModifiers.Count; i++)
{
if(materialModifiers[i].valueType == LittleSubstanceModifier.ValueType.Float)
{
if (materialModifiers[i].valueFloat[0] != materialModifiers[i].oldValueFloat[0])
{
materialObjects[m].material.SetFloat(materialModifiers[i].identifier, materialModifiers[i].valueFloat[0]);
materialModifiers[i].valueFloat = materialModifiers[i].oldValueFloat;
}
}
else if (materialModifiers[i].valueType == LittleSubstanceModifier.ValueType.Float2 || materialModifiers[i].valueType == LittleSubstanceModifier.ValueType.Float3 || materialModifiers[i].valueType == LittleSubstanceModifier.ValueType.Float4)
{
if (materialModifiers[i].valueFloat != materialModifiers[i].oldValueFloat)
{
materialObjects[m].material.SetFloatArray(materialModifiers[i].identifier, materialModifiers[i].valueFloat);
materialModifiers[i].valueFloat = materialModifiers[i].oldValueFloat;
}
}
else if (materialModifiers[i].valueType == LittleSubstanceModifier.ValueType.Int)
{
if (materialModifiers[i].valueInt != materialModifiers[i].oldValueInt)
{
materialObjects[m].material.SetInt(materialModifiers[i].identifier, materialModifiers[i].valueInt[0]);
materialModifiers[i].valueFloat = materialModifiers[i].oldValueFloat;
}
}
else if (materialModifiers[i].valueType == LittleSubstanceModifier.ValueType.Int2 || materialModifiers[i].valueType == LittleSubstanceModifier.ValueType.Int3 || materialModifiers[i].valueType == LittleSubstanceModifier.ValueType.Int4)
{
}
else if (materialModifiers[i].valueType == LittleSubstanceModifier.ValueType.Bool)
{
}
else if (materialModifiers[i].valueType == LittleSubstanceModifier.ValueType.ColorField)
{
}
else if (materialModifiers[i].valueType == LittleSubstanceModifier.ValueType.Vector2)
{
}
else if (materialModifiers[i].valueType == LittleSubstanceModifier.ValueType.Vector3)
{
}
else if (materialModifiers[i].valueType == LittleSubstanceModifier.ValueType.Vector4)
{
}
}
}
我现在正在制作一个工具,用户可以选择一个用户可以在检查器窗口中编辑的变量类型。
要选择我使用 Enum 的变量,然后检查他们选择的变量类型,我使用了一堆 Else If。现在选择变量,使用 Else If 可以,但是当需要更改值时,我不能每次添加字母或更改数字时都执行 10 个 else if。
所以我的问题是,我怎样才能传递选择的变量类型,而无需找出他们选择的内容而没有一堆 else if?如果我可以使用 var 那就太好了,但它是从另一个脚本更改的。
抱歉这么长的草率帖子,我真的不知道该怎么称呼它以及如何问。
编辑:这是我的代码,有什么更好的方法?
Edit2:对 Robyn 的回应 - 我只是为示例编写了该代码,这基本上是我知道如何执行此操作的唯一方法。对不起,我会尽力解释。 在我发布的图像中,有一个标识符文本框,其中包含不透明度。 然后是所有变量类型的下拉列表。然后它有一个文本框。您点击按钮添加 Mod,然后弹出一排。您选择您的变量类型,放入材料标识符(例如不透明度)。所以要改变不透明度,它需要是一个浮点数。所以当你改变浮动框的值时,它会改变材质的不透明度。 我基本上需要一个值,可以用作浮点数、整数、布尔值等...... 我从来没有使用过 Switch 或 Case,所以我真的不知道它到底是做什么的。但是我会查一下试试!那谢谢啦。 我刚刚又上传了 2 张图片,试图在视觉上更好地解释它。
【问题讨论】:
-
你的问题太宽泛了。您需要尝试something,如果您有一些特定问题,请发布一个问题,其中包含一个很好的minimal reproducible example,准确显示您尝试了什么,并准确解释该代码是什么确实,您希望它做什么,以及您无法自己解决的问题的哪一部分。根据您模糊的描述,我建议使用多态性,即类型层次结构,其中基本抽象类型(如接口)描述编辑器需要什么,然后具体实现处理用户输入和显示。
-
真的很抱歉,不知道我想做什么。我刚刚添加了代码,也许这会有所帮助。我只是需要一个更好的方法来做到这一点。
-
您可以尝试使用工厂模式。通过这种方式,您可以描述传递到工厂的对象中的逻辑。这是我在 if else 逻辑变得更难管理时使用的模式。 dofactory.com/net/factory-method-design-pattern
标签: c# unity5 unityscript