从Unity 3D中的另一个脚本停止第一人称控制器输入

时间:2013-02-05 02:39:12

标签: variables 3d unity3d unityscript

我正在使用带有unityscript的Unity 3D进行编程。

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

我希望能够从附加到不同对象(如多维数据集)的脚本中更改该布尔值。

以下是我目前使用附加到我的多维数据集的脚本所做的事情:

#pragma strict

var stop : GameObject;

function Start () {
}

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

我已将First Person Controller对象拖到参考检查器侧栏中的stop变量。

这是我得到的错误:

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

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

我看了一遍,找不到我正在做的不同的事情。你有什么想法吗?

2 个答案:

答案 0 :(得分:1)

两个小问题:

首先,GetComponent始终返回“Component”类型的对象。 canControl未在Component中定义,它在CharacterMotor中定义。这意味着我们需要将其返回值转换为CharacterMotor。

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

这是结果(我假设第一人称控制器的标签为“播放器”):

var stop : CharacterMotor;

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

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

答案 1 :(得分:0)

试试这个:

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

我对Unity知之甚少,但canControl很可能无法附加到GetComponent。如果canControl是它自己的变量,那么我的方式应该有效。 GetComponent只获取变量。这并不意味着它属于GetComponent函数。

但是,我可能完全错了。这就是我在阅读代码时看到的内容。我希望我能帮忙。