我正在使用带有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。
我看了一遍,找不到我正在做的不同的事情。你有什么想法吗?
答案 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
函数。