使用变量将脚本分配给变量(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,并让您的 primary
和 secondary
变量成为武器,而不是游戏对象。
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 文档
所以这个标题有点奇怪,但我不知道怎么称呼它。
我正在开发一款 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,并让您的 primary
和 secondary
变量成为武器,而不是游戏对象。
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.