【发布时间】:2021-01-05 00:32:21
【问题描述】:
是否可以在从文本变量中找到方法名称的脚本中运行方法?
例如:
public text MyVariable;
public void Start()
{
MyVariable = RunMeBaby;
MyVariable();
}
public void RunMeBaby()
{
Debug.Log("You did it!");
}
在上面的示例中,我将变量“MyVariable”分配给“RunMeBaby”(我要调用的方法的名称),然后尝试调用它。
以上方法对我不起作用,但还有其他方法吗?
编辑以在下面添加更多说明
我目前正在创建自己的纸牌游戏。我创建了一个可编写脚本的对象 (CardAsset) 来处理我所有填充的卡片都需要的一些字段。像这样的东西:
卡名(字符串)
成本(整数)
图像(图像)
描述文本(字符串)
现在我的原型的所有其他东西都已完成(比赛场地、套牌等),我需要开始为我的卡牌实际制作效果。由于每张卡都不同,但有些效果是相同的(例如,抽更多卡并对角色造成伤害很常见),我想我可以更改我的可编写脚本的对象 CardAsset 以包含一些脚本和变量:
卡名(字符串)
成本(整数)
图像(图像)
描述文本(字符串)
效果1(脚本)
Effect1Amount (int)
效果2(脚本)
Effect2Amount (int)
Effect3(脚本)
Effect3Amount (int)
这样,我可以创建最多具有 3 种效果的 CardAssets(例如对角色造成伤害或绘制卡片),然后在我的游戏中使用某些东西在玩家使用该卡片时调用具有相关变量的脚本.
我的问题是我无法将脚本附加到 CardAsset,因此我认为合适的解决方法是在 CardAsset 上的 Effect1/Effect2/Effect3 插槽中输入方法名称(DealDamage、DrawCards)(将它们更改为字符串),然后读取它们并在其他地方调用相关方法。
我了解此解决方案容易出错并且维护/更改可能会很痛苦,那么我有更好的方法吗?
【问题讨论】:
-
Action a = RunMeBaby; a(); -
请描述你的用例..我想不出很多这会很有意义......当然你可以使用大多数答案中提到的反射..问题是:这真的是你想做的吗?使用字符串不仅很慢而且很容易出错,并且可能(并且将会)在可维护性方面给 a** 带来痛苦......
-
@derHugo 我在这里描述了我的用例:stackoverflow.com/questions/63974091/…