0

我正在使用 Unity 3D 和 unityscript 进行编程。

我有一个带有内置脚本 CharacterMotor.js 的第一人称控制器。在该脚本中,在顶部声明了一个名为“canControl”的变量,它是一个布尔值,用于控制第一人称控制器是否响应输入。

我希望能够从附加到不同对象(如立方体)的脚本中更改该布尔值。

这是我目前正在使用附加到我的多维数据集的脚本执行的操作:

#pragma strict

var stop : GameObject;

function Start () {
}

function Update () {
    stop.GetComponent("CharacterMotor").canControl = false;
}

我已将第一人称控制器对象拖到参考检查器侧边栏中的停止变量。

这是我得到的错误:

Assets/test.js(15,45): BCE0019: 'canControl' is not a member of 'UnityEngine.Component'. 

因此,由于某种原因,它看起来无法在 CharacterMotor.js 脚本中引用变量 canControl。

我环顾四周,找不到我在做什么不同的地方。你有什么想法?

4

2 回答 2

1

两个小问题:

首先,GetComponent 总是返回一个“组件”类型的对象。canControl 没有在 Component 中定义,它在 CharacterMotor 中定义。这意味着我们需要将其返回值转换为 CharacterMotor。

其次,需要使用您要查找的组件在 GameObject 上调用 GetComponent。我发现最简单的方法是使用 FindGameObjectWithTag。

结果如下(我假设第一人称控制器有标签“玩家”):

var stop : CharacterMotor;

function Start () {
    stop =(CharacterMotor)GameObject.FindGameObjectWithTag("Player").GetComponent("CharacterMotor");
}

function Update () {
    stop.canControl = false;
}
于 2013-02-24T04:26:45.643 回答
0

尝试这个:

function Update () {
    stop.GetComponent("CharacterMotor");
    canControl = false;
}

我不太了解 Unity,但canControl可能无法附加到GetComponent. 如果canControl是它自己的变量,那么我的方式应该可行。GetComponent只是获取变量。这并不意味着它属于该GetComponent功能。

不过,我可能完全错了。这正是我在阅读代码时所看到的。我希望我有所帮助。

于 2013-02-05T03:04:29.560 回答