Unity:无法通过getcomponent获取对类的引用

Posted

技术标签:

【中文标题】Unity:无法通过getcomponent获取对类的引用【英文标题】:Unity: Can't get reference to a class via getcomponent 【发布时间】:2017-02-12 15:36:52 【问题描述】:
    using UnityEngine;

    public class CartMovement : MonoBehaviour 

    SpriteRenderer spriteRenderer;

    LevelManager LevelManIns;

    void Start () 

        spriteRenderer = GetComponent<SpriteRenderer>();

        spriteRenderer.enabled = true;

        (line25)LevelManIns = GetComponent<LevelManager>();

        Debug.Log("--" + LevelManIns.xy.X);
        //transform.position = LevelManIns.Tiles[LevelManIns.PortalGreen].GetComponent<TileScript>().transform.position;

        iTween.MoveTo(this.gameObject, iTween.Hash("path", iTweenPath.GetPath("cartPath"), "time", 3));
        
      

我得到错误:

NullReferenceException:对象引用未设置为对象的实例 CartMovement.Start () (在 Assets/scripts/CartMovement.cs:25)

我不明白为什么我无法获得对另一个脚本的引用。任何人都可以解决这个问题。谢谢。

【问题讨论】:

你确定LevelManIns = GetComponent();正在产生错误?因为这不会产生错误。如果它无法获取组件,它将返回 null。它必须是下面(或上面)的行或另一行。它所说的只是你试图调用一个空的东西。我最好的猜测是 GameObject 没有附加 LevelManager。 是的,levelmanager 是另一个游戏对象的脚本,但我需要访问此类中的一些属性。我怎样才能实现它? 【参考方案1】:

如果关卡管理器附加到另一个对象(如您在 cmets 中提到的),一种方法是通过检查器引用该对象,然后从该对象获取脚本。

public class CartMovement : MonoBehaviour 

SpriteRenderer spriteRenderer;
// Make it public, so it is visible in the inspector, and drag and drop the object into that instance
public LevelManager LevelManIns; 

    void Start () 
        // No need to assign it here, just maybe check if it is assigned like so
        if (LevelManIns == null)
            // Error, this should be assign outside
    

【讨论】:

以上是关于Unity:无法通过getcomponent获取对类的引用的主要内容,如果未能解决你的问题,请参考以下文章

Unity引擎,GetComponents 不能查找Hierarchy的全部组件,求告知错误原因?

小白_Unity引擎_获取组件和添加组件

小功能⭐️解决Unity无法对一个物体上的所有材质球进行更改

unity 获取物体尺寸

unity基础命令

新人求教Unity5.0怎么通过代码改物体透明