我的游戏有点困难。我有一个名为Upgradebuttons的类。从这个类我想从另一个类访问存储在结构中的一些变量。我可以通过键入classname.structname.preferedvar轻松访问变量,但structname取决于所单击的升级。所以我想用字符串调用sruct。我试过了:
MethodInfo method = typeof(Classname).GetMethod(structname);
但这只有在无效而不是结果的情况下才有效。为了让这个工作,我需要做什么?
public class UpgradeButtons : MonoBehaviour {
public void somefunction{
// here i want to have access
}
}
这是我想要访问的类的示例:
public class Upgrades: MonoBehaviour {
public struct Upgrade1{
public const int Cost = 10;
public const float Value = 0.1f;
public static string Naam = "Autoclicker";
}
}
答案 0 :(得分:4)
虽然这是可能的,但听起来很糟糕。也许您可以使用一个公共struct Upgrade
并使用Name
属性在运行时找到它?
示例:
public struct Upgrade
{
public string Name;
public int Cost;
public float Value;
public Upgrade(string name, int cost, float value)
{
this.Name = name;
this.Cost = cost;
this.Value = value;
}
}
public class UpgradeButtons : MonoBehavior
{
List<Upgrade> Upgrades = new List<Upgrade>();
public void CreateButtons()
{
Upgrades.Add(new Upgrade("Autoclicker", 10, 0.1f));
//etc...
}
public void somefunction()
{
Upgrade autoclickUpgrade = Upgrades.Where(p => p.Name == "Autoclicker").FirstOrDefault();
if(autoclickUpgrade == null)
throw new Exception("Could not find Autoclicker upgrade.");
//do something with autoclickUpgrade
}
}
答案 1 :(得分:1)
从string Naam
中删除静态:
public class Upgrades: MonoBehaviour {
public struct Upgrade1{
public const int Cost = 10;
public const float Value = 0.1f;
public string Naam = "Autoclicker";
}
}
当一个对象(类,变量,方法)定义为static
时,它不能通过实例引用。
答案 2 :(得分:1)
如果我理解你的问题,你可能正走在正确的轨道上。由于您的加载项所依赖的结构(类型)可能存在,也可能不存在,因此反射是最好的方法。
尝试使用Assembly.GetType()或相关方法来尝试加载类型,检查其存在并迭代其成员。
http://msdn.microsoft.com/en-us/library/y0cd10tb(v=vs.110).aspx