c# - 使用 GetComponent 获取使用字符串的脚本

标签 c# unity3d gameobject

使用以下代码,我能够从“SMG”获取脚本并将其应用于武器对象:

weaponObject = GameObject.FindGameObjectWithTag(SMG).GetComponent<SMGScript>();

是否可以执行类似以下操作,如果可以,如何操作?

string variable = "SMG";

weaponObject = GameObject.FindGameObjectWithTag(variable).GetComponent<variable>();

我想要一些脚本,我可以根据变量将其应用于 weaponObject。

最佳答案

因为我看到武器的名称与脚本的名称不同,所以您需要 2 个变量。

string variable = "SMG";
string scriptName = "SMGScript";
GameObject.FindGameObjectWithTag(variable).GetComponent(scriptName);

这样效率不高。


解决方案

你想要做的是拥有一个父类,你所有的武器都将继承自它。

public interface Weapon
{
}

然后你像这个例子一样创建你所有的武器:

public class M4 : MonoBehaviour, Weapon
{
}

public class MP5: MonoBehaviour, Weapon
{
}

当你想获取脚本组件时,你可以简单地使用这个:

string tag = "Weapon";

Weapon w = GameObject.FindGameObjectWithTag(tag).GetComponent(typeof(Weapon)) as Weapon;

关于c# - 使用 GetComponent 获取使用字符串的脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25361180/

相关文章:

c# - Open CV saturate_cast 函数的 Emgu CV 等价物是什么?

c# - 使用 Clipper 合并不相交的多边形

c# - C# 上的 WaitForSeconds

android - 我是否需要在 unity 的同时更新 Unity 组件

c# - Unity 中游戏对象的水平重力

c# - 检测用户何时从使用 EmailComposeTask 返回?

c# - 从 C# 程序访问 C++ DLL 中的多个函数

c# - 当你有一个抽象类型的数组时,如何访问不在抽象类型上的派生类型成员

c# - 有没有办法检查对象的所有子对象是否都处于事件状态?

unity-game-engine - 从另一个游戏对象的脚本设置变换