无法访问预制脚本:NullReference异常

时间:2017-01-03 16:22:06

标签: c# unity3d unity5

我有一个像滚球游戏一样的游戏,在我的游戏中我有一个游戏对象是游戏管理器,在那个gameManager我实例化球,我想要做的是,当我的球与一个力量添加时另一个脚本中的数学数组的材料,当我尝试访问该脚本时,它说该对象不是实例化,我不知道如何处理这个:/。

这就是我做的

public class PowerHit : MonoBehaviour {
    MoveBall moveBall;
    Renderer rend;
    private Material yourMaterial;
    // Use this for initialization
    void Start () {
        moveBall = GameObject.FindWithTag ("Player").GetComponent<MoveBall> ();
        rend = moveBall.GetComponent<Renderer> ();
        yourMaterial = (Material)Resources.Load("Tennis",typeof(Material));
    }

    void OnCollisionEnter(Collision other)
    {
        Debug.Log (moveBall);
        if (other.gameObject.tag == "Player") {
            moveBall.mats [1] = yourMaterial;
        }
    }
}

我要访问的脚本是注册到我的球预制件的MoveBall脚本,我的球prefa有一个Player标签。

2 个答案:

答案 0 :(得分:0)

Awake()函数中实例化实例,而不是Start()

答案 1 :(得分:0)

void OnCollisionEnter(Collision other)
{
    if (other.gameObject.tag == "Player") {
        other.gameObject.GetComponent<MoveBall>().mats [1] = yourMaterial;;
    }

}

你正在通过比较标记检查其他对象是否是玩家,如果是,那么你得到那个玩家并且在那个玩家上有一个名为&#34; MoveBall&#34;那么你可以从那个脚本中获得matts [1]引用。

无需在开始时做那些你正在做的事情。只需指定&#34; yourMaterial&#34;变量引用或在运行时加载它。