我有一个相当复杂的问题,我正在努力寻找解决方法。
基本上,因为Unity引擎不支持.NET 4,所以我很难找到使用" dynamic"类型变量的替代方法。
一些背景:我正在制作一款拥有大量可解锁内容的游戏。我们的目标是拥有一本包含所有条件及其相关奖励的大字典(目前我们都硬编码)。然后,每当玩家做出可能导致解锁的事情时,我们想要检查字典中的某些条目以查看它们是否应该被解锁。我们想要这样,所以我们只需要编写一个小循环来检查玩家是否解锁了任何东西,而不是在我们的代码中完成数百个if语句。
问题是,需要检查的特定字段可以在我们的任何脚本中。例如,游戏可能需要检查玩家是否拥有一定数量的物品(在我们的库存脚本中),或者他们是否已经玩过一定级别(在我们的等级词典中)。反思似乎解决了我们的问题,但现在比较运营商正在引起头痛。
供参考,这是我的"条件" class,用于存储哪些字段需要相互比较以解锁特定奖励:
public class Condition
{
public enum condOper { Greater, Lesser, Equals, NotEquals, GreaterOrEquals, LesserOrEquals};
public Type Script1;
public Type Script2;
public string Property1;
public string Property2;
public string Key1;
public string Key2;
public condOper condOperator;
}
脚本变量是字段所在的脚本,属性变量是可以使用哪些属性来访问字段,每当我们需要检查字典中的特定条目时使用键变量,最后一个变量是在两个字段之间使用什么比较运算符。
所以这是我的代码我试图用来比较条件中的两个字段:
//Create two variables for the fields
object property1 = condition.Script1.GetField(condition.Property1).GetValue(null);
object property2 = condition.Script2.GetField(condition.Property2).GetValue(null);
//Do a different conditional check based on the operator
bool result;
if (condition.condOperator == Condition.condOper.Greater)
result = property1 > property2;
else if(condition.condOperator == Condition.condOper.Lesser)
result = property1 < property2;
...
请注意,我们要查找的所有字段都是静态的,因此&#34; null&#34;在GetValue中。
我得到的错误是操作员(&lt;或&gt;)不能在两个&#34;对象&#34;之间使用。
将它们声明为类型&#34;动态&#34;并且有一些尝试捕获可以工作,但不幸的是Unity不支持.NET 4.静态输入&#34; property1&#34;和&#34; property2&#34;因为并非所有字段都是整数,浮点数等,所以变量不会起作用,因为必须支持多种类型。
那么,TLDR,有没有办法可以使用比较运算符,如&#34;&gt;&#34;或&#34; ==&#34;两个变量类型&#34;对象&#34;?
之间