C# 如何更改基于字符串的get组件类?
因此,我试图使用已通过参数传递到slot.GetComponent().level++中的compToGet字符串 单击按钮时将调用upgradeFoundation()。 实际上有相当多的按钮具有类似的功能(比如:UpgradeTotalta(),UpgradeTotalta2(),等等) 这就是为什么我试图更改comptogetstring的值,根据您单击的按钮,并使用该新字符串以该新字符串的名称获取组件的原因,但它似乎不是这样工作的,我不知道它如何工作,任何其他方式都将不胜感激C# 如何更改基于字符串的get组件类?,c#,unity3d,C#,Unity3d,因此,我试图使用已通过参数传递到slot.GetComponent().level++中的compToGet字符串 单击按钮时将调用upgradeFoundation()。 实际上有相当多的按钮具有类似的功能(比如:UpgradeTotalta(),UpgradeTotalta2(),等等) 这就是为什么我试图更改comptogetstring的值,根据您单击的按钮,并使用该新字符串以该新字符串的名称获取组件的原因,但它似乎不是这样工作的,我不知道它如何工作,任何其他方式都将不胜感激 p
public void upgradeFoundation()
{
float upgFoundationCost = slotGroup.transform.Find(slotName).gameObject.GetComponent<Slot>().upgFoundationCost;
Upgrade(upgFoundationCost, "Foundation");
}
public void Upgrade(float upgCost, string compToGet)
{
GameObject slot = slotGroup.transform.Find(slotName).gameObject;
if (inGameUIManagerScript.money >= upgCost)
{
Type compToGetType = Type.GetType(compToGet); //im not sure how to convert a string into a type
slot.GetComponent<compToGetType>().level++; //this is the error line saying im treating a var like a type
}
}
public void upgradeFoundation()
{
float upgFoundationCost=slotGroup.transform.Find(slotName.gameObject.GetComponent().upgFoundationCost;
升级(upgFoundationCost,“基础”);
}
public void升级(浮动upgCost、字符串compToGet)
{
gameobjectslot=slotGroup.transform.Find(slotName.GameObject);
如果(inGameUIManagerScript.money>=upgCost)
{
Type compToGetType=Type.GetType(compToGet);//我不知道如何将字符串转换为类型
slot.GetComponent().level++;//这是一行错误代码,表示我将变量视为类型
}
}
提前谢谢。与您的=>中的问题完全相同,您不能使用通用改为使用
GetComponent(compToGetType)代码>
但是,我删除了副本,因为您仍然需要将
转换为实际类型,这一点都不重要
=>再次我只能建议:不要使用字符串强>
而是有一个共同的基类或接口,例如
public abstract class BaseComponent : MonoBehaviour
{
private int level;
// public read-only access
public int Level => level;
public virtual void Upgrade()
{
level++;
}
// Other properties and methods all your components have in common
// Also get into "virtual" and "abstract" members!
}
从中继承你的东西,就像
public class Foundation : BaseComponent
{
// Additional stuff specific to the foundation
// overrides for the virtual and abstract members
}
public class Turret : BaseComponent
{
// Additional stuff specific to the turret
// overrides for the virtual and abstract members
}
//Maybe this would even inherit from Turret instead?
public class Turret2 : BaseComponent
{
// Additional stuff specific to the turret2
// overrides for the virtual and abstract members
}
最后使用公共基础:
public void UpgradeComponent()
{
slot.GetComponent<BaseComponent>().Upgrade();
}
public void UpgradeComponent()
{
slot.GetComponent().Upgrade();
}