使用变量将脚本分配给变量(Unity 3D)

Assigning script to a variable with a variable (Unity 3D)

所以这个标题有点奇怪,但我不知道怎么称呼它。

我正在开发一款 FPS 游戏,我正在尝试制作一个简单的武器系统。每个玩家都可以拥有主要和次要武器。我目前正在尝试编写一个脚本来在分配的 primary/secondary 武器之间切换。

所以一开始我是这样做的:

var primary : GameObject;
var secondary : GameObject;

所以我有一些 GUI 按钮,当它们被点击时,它们会将所需的武器分配给变量 primary/secondary。

代码示例:

function assignump45() {
    primary = ump;
}

现在想写一个主副武器切换的函数。 所以我尝试了这个:

function switchtoprimary(){
    if(Input.GetKeyDown("2")){

        primary.inv(); //makes the primary weapon invisible
        secondary.vis(); //makes the primary weapon visible

    }
}

当然我得到这个错误:

BCE0019: 'inv' is not a member of 'UnityEngine.GameObject'.

我知道我写的不对。所以我试图获取 primary/secondary 武器的脚本,这样我就可以 disable/activate 它们:

var primscipt : umpscript = GameObject.Find(ump).GetComponent(umpscript);

这行得通 但是我不能为每一种武器都写这种脚本,因为我需要写几种武器之间的切换组合,这是不可能的因为我知道有更好的解决办法..

我不能做一个 if 子句然后分配 primscript 因为变量只会在 if 子句中分配..

我需要的是这样的东西(当然不行^^)。

var primscipt : primaryscriptstring = GameObject.Find(primarystring).GetComponent(primaryscriptstring);

所以我可以用 "umpscript" 来分配变量 primaryscriptstring。变量 primarystring 在这种情况下确实有效

有什么解决方法吗?我现在很绝望:/

您可能想要创建一个武器 class,并让您的 primarysecondary 变量成为武器,而不是游戏对象。

var primary : Weapon;
var secondary : Weapon;

您的 Weapon.js 文件可能类似于:

function vis () {
    ...
}

function inv () {
    ...
}

然后假设您希望每个武器类型都是 Weapon 的扩展 class,您可以创建一个 UMP.js 文件并使其 class 扩展 Weapon,如下所示:

#pragma strict

class UMP extends Weapon {

}

UMP 然后从武器 class 继承所有函数和变量。那么,在您的代码的其他地方,以下行将起作用(假设有一个名为 "UMP" 的游戏对象附加了 UMP 组件):

function assignump45() {
    var ump : UMP = GameObject.Find("UMP").GetComponent(UMP);
    primary = ump;
    primary.vis();
}

或者,您可能不希望每种武器类型都是扩展的 class,并且所有武器都只有一种武器 class,在这种情况下您不会创建 UMP.js 文件,而您的代码可能如下所示:

function assignump45() {
    var ump : Weapon = GameObject.Find("UMP").GetComponent(Weapon);
    primary = ump;
    primary.vis();
}

而不是

primary.inv();
secondary.vis();

primary.SetActive(false);
secondary.SetActive(true);

SetActive方法适用于任何游戏对象,因此您不必担心特定类型的武器或脚本。请参阅有关此 here.

的 Unity 文档