【问题标题】:Stop First Person Controller input from another script in Unity 3D在 Unity 3D 中停止来自另一个脚本的第一人称控制器输入
【发布时间】:2013-01-19 21:26:12
【问题描述】:

我正在使用 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。

我环顾四周,找不到我正在做的不同之处。你有什么想法吗?

【问题讨论】:

    标签: variables 3d unity3d unityscript


    【解决方案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;
    }
    

    【讨论】:

    • ^由于 OP 没有明确哪个答案是正确的,因此对于通过互联网偶然发现此问题的任何人来说,这是正确的答案。虽然公平地说,没有理由把它放在更新循环中。
    【解决方案2】:

    试试这个:

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

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

    我可能完全错了。这正是我在阅读代码时所看到的。我希望我能帮上忙。

    【讨论】:

    • canControl 出现未知标识符错误。还有其他想法吗?
    • 嗯,我唯一的另一个想法是查看文档的统一性,看看你的答案是否在那里。
    猜你喜欢
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多