获取组件返回 null

3
在Unity 5.4/5.5中,我遇到了一个问题,即GetComponent无法返回我的游戏对象的CharacterController。重启Unity后,它又可以正常工作。

enter image description here

_MAIN 运行此脚本:

private GameObject frog;
private CharacterController controller;

void Start () {
    frog = GameObject.Find ("Frog");
    controller = frog.GetComponent<CharacterController> ();

    Debug.Log(controller); // returns null
}

void Update () {
    if (controller.isGrounded) {
        // error is thrown
    }
}

在 Update 中引用了 controller 后,我收到以下错误信息:

MissingComponentException: 游戏对象“Frog”上没有附加 'CharacterController' 组件。

请注意,frog 返回的 GameObject 没有问题。


2
你的场景中还有其他叫做“Frog”的GameObject吗?仔细看一下... 另外,请包含你在Update函数中如何使用它的完整代码。 - Programmer
代码在Update中的if (controller.isGrounded) {处停止。 - Tom
你可以将更新函数放在你的问题中。 - Programmer
更新了问题。 - Tom
添加标签成功了...那为什么会发生这种情况呢? - Tom
显示剩余3条评论
1个回答

4

不要使用 GameObject.Find("Frog"),尝试使用 GameObject.FindWithTag("Frog") 并将标签“Frog”添加到青蛙对象中。

你遇到这种情况的原因可能是在场景中添加了名为“Frog”的第二个对象。当这种情况发生时,Unity 会随机选择其找到的两个对象中的一个,这会导致有时会工作但有时不会。

通过切换标签,你可以更有可能唯一地识别对象。


就像我问OP是否有两个名为“Frog”的GameObject一样。这个问题从未得到回答。 - Programmer
@程序员,考虑到他在评论中回答了GameObject.FindWithTag("Frog")以解决问题,当我问他关于这个问题时,我认为你的问题的暗示答案是“是的,我确实有两个名为Frog的东西”。 - Scott Chamberlain
OP在那个问题中回答说if (controller.isGrounded) {,但是是的,这是解决问题的方法。 - Programmer
这就是问题所在,我没有另一个名为“Frog”的游戏对象。 - Tom
现在我在调整动画制作参数后,它停止工作了。FBX文件肯定有问题。 - Tom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接