C# 如何更改基于字符串的get组件类?

C# 如何更改基于字符串的get组件类?,c#,unity3d,C#,Unity3d,因此,我试图使用已通过参数传递到slot.GetComponent().level++中的compToGet字符串 单击按钮时将调用upgradeFoundation()。 实际上有相当多的按钮具有类似的功能(比如:UpgradeTotalta(),UpgradeTotalta2(),等等) 这就是为什么我试图更改comptogetstring的值,根据您单击的按钮,并使用该新字符串以该新字符串的名称获取组件的原因,但它似乎不是这样工作的,我不知道它如何工作,任何其他方式都将不胜感激 p

因此,我试图使用已通过参数传递到slot.GetComponent().level++中的compToGet字符串

单击按钮时将调用upgradeFoundation()。 实际上有相当多的按钮具有类似的功能(比如:UpgradeTotalta(),UpgradeTotalta2(),等等) 这就是为什么我试图更改comptogetstring的值,根据您单击的按钮,并使用该新字符串以该新字符串的名称获取组件的原因,但它似乎不是这样工作的,我不知道它如何工作,任何其他方式都将不胜感激

    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();
}