Unity3d 从Unity中的不同脚本访问变量时出现空引用异常

Unity3d 从Unity中的不同脚本访问变量时出现空引用异常,unity3d,unityscript,Unity3d,Unityscript,我一直得到一个空引用异常,我在谷歌上搜索并寻找解决方案,但我就是找不到这里到底出了什么问题。我得到的确切错误是“NullReferenceException:对象引用未设置为对象的实例 RayCastCollect.Update()(位于Assets/RayCastCollect.js:47)“ 我想做的是做一个光线投射,击中游戏对象的一个物体,让它消失。那部分很好用。但在那之后,我还希望我的清单得到更新,这是不起作用的部分,并且特定的代码行会产生错误player.GetComponent(In

我一直得到一个空引用异常,我在谷歌上搜索并寻找解决方案,但我就是找不到这里到底出了什么问题。我得到的确切错误是“NullReferenceException:对象引用未设置为对象的实例 RayCastCollect.Update()(位于Assets/RayCastCollect.js:47)“

我想做的是做一个光线投射,击中游戏对象的一个物体,让它消失。那部分很好用。但在那之后,我还希望我的清单得到更新,这是不起作用的部分,并且特定的代码行会产生错误player.GetComponent(Inv.cookedFish+=1

这是RayCast类的代码

    #pragma strict

var rayLength : int = 10;

private var inventory : Inv;

private var guiShow : boolean = false;

var bush : GameObject;

var player : GameObject;
var berr:int;

function Start()
{
    inventory = GameObject.Find("First Person Controller").GetComponent(Inv);
}

function Update()
{
    var hit : RaycastHit;
    var fwd = transform.TransformDirection(Vector3.forward);

    if(Physics.Raycast(transform.position, fwd, hit, rayLength))
    {
        if(hit.collider.gameObject.name == "log")
        {           
            guiShow = true;

            if(Input.GetKey(KeyCode.E))
            {
                //inventory.wood++;
                Destroy(hit.collider.gameObject);
                guiShow = false;
                inventory.wood++;
            }
        }
        if(hit.collider.gameObject.tag == "BushFull")
        {
            guiShow = true;
            bush = (hit.collider.gameObject);

            if(Input.GetKeyDown("e"))
            {
                bush.GetComponent(BushController).berriesTaken = true;
                guiShow = false;
                player.GetComponent(Inv).cookedFish += 1;

            }
        }
            else
            {
                guiShow = false;
            }
    }
}


    function OnGUI()
    {
        if(guiShow == true)
        {
            GUI.Box(Rect(Screen.width / 2 - 150, Screen.height / 2 - 150, 100, 20), "PICKUP!");
        }
    }
这是我的存货课

var menuSkin : GUISkin;

var wood : int = 0;
var stone : int = 0;
var clay : int = 0;

var fish : int = 0;
public var cookedFish : int = 0;

var bottle : int = 0;
var bottledWater : int = 0;

var bandage : int = 0;

var minimumVal : int = 0;

private var showGUI : boolean = false;//to switch inventory on or off jo key press krne se hoga

private var playerGUI : PlayerGUI;

function Start()
{
    playerGUI = GameObject.Find("First Person Controller").GetComponent(PlayerGUI); 
}

function Update()
{
    if(wood <= 0)
    {
        wood = minimumVal;
    }

    if(stone <= 0)
    {
        stone = minimumVal;
    }

    if(clay <= 0)
    {
        clay = minimumVal;
    }

    if(fish <= 0)
    {
        fish = minimumVal;
    }

    if(cookedFish <= 0)
    {
        cookedFish = minimumVal;
    }

    if(bottle <= 0)
    {
        bottle = minimumVal;
    }

    if(bottledWater <= 0)
    {
        bottledWater = minimumVal;
    }

    if(bandage <= 0)
    {
        bandage = minimumVal;
    }

    if(Input.GetKeyDown("i")) //key 'i' press kro to agr on ha inv to off hjae and vice versa
    {
        showGUI = !showGUI;
    }

    if(showGUI == true)
    {
        Time.timeScale = 0; //game pause hjaegi kind of sb kch ruk jaega
        GameObject.Find("First Person Controller").GetComponent(FPSInputController).enabled = false;//first person controls disable
        GameObject.Find("First Person Controller").GetComponent(MouseLook).enabled = false;//mouse control player k disabled
        GameObject.Find("Main Camera").GetComponent(MouseLook).enabled = false;
        GameObject.Find("FPSArms_Axe@Idle").GetComponent(PlayerAnimation).enabled = false;
        //GameObject.Find("Main Camera").GetComponent(RayCastCollect).enabled = false;
    }

    if(showGUI == false)
    {//agr inv ni khuli hwi to baki jo upr false ki hain unhe wapis true krdo
        Time.timeScale = 1;
        GameObject.Find("First Person Controller").GetComponent(FPSInputController).enabled = true;
        GameObject.Find("First Person Controller").GetComponent(MouseLook).enabled = true;
        GameObject.Find("Main Camera").GetComponent(MouseLook).enabled = true;
        GameObject.Find("FPSArms_Axe@Idle").GetComponent(PlayerAnimation).enabled = true;
    //  GameObject.Find("Main Camera").GetComponent(RayCastCollect).enabled = true;
    }
}

function OnGUI()
{
    if(showGUI == true)
    {//inv menu ki gui sari bn ri ha idhr
        GUI.skin = menuSkin;
            GUI.BeginGroup(new Rect(Screen.width / 2 - 150, Screen.height / 2 - 150, 300, 300));
                GUI.Box(Rect(0, 0, 300, 300), "Basic Inventory");

                //Resources collected
                GUI.Label(Rect(10, 50, 50, 50), "Wood");
                GUI.Box(Rect(60, 50, 20, 20), "" + wood);

                GUI.Label(Rect(90, 50, 50, 50), "Stone");
                GUI.Box(Rect(130, 50, 20, 20), "" + stone);

                GUI.Label(Rect(170, 50, 50, 50), "Clay");
                GUI.Box(Rect(200, 50, 20, 20), "" + clay);


                //Empty holders
                GUI.Label(Rect(10, 130, 50, 50), "Fish");
                GUI.Box(Rect(60, 130, 20, 20), "" + fish);

                GUI.Label(Rect(10, 150, 50, 50), "Bottle");
                GUI.Box(Rect(60, 150, 20, 20), "" + bottle);

                //Edible items
                GUI.Label(Rect(10, 190, 50, 50), "CFish");//label
                GUI.Box(Rect(60, 190, 20, 20), "" + cookedFish);//text box type thingy
                if(GUI.Button(Rect(100, 190, 100, 20), "Eat Fish"))//button bn ra ha
                {
                    if(cookedFish >= 1)
                    {
                        cookedFish--;
                        Eat();
                    }
                }

                GUI.Label(Rect(10, 210, 50, 50), "BWater");
                GUI.Box(Rect(60, 210, 20, 20), "" + bottledWater);
                if(GUI.Button(Rect(100, 210, 100, 20), "Drink Water"))
                {
                    if(bottledWater >= 1)
                    {
                        bottledWater--;
                        Drink();
                    }
                }

                GUI.Label(Rect(10, 240, 50, 50), "Heal");
                GUI.Box(Rect(60, 240, 20, 20), "" + bandage);
                if(GUI.Button(Rect(100, 240, 100, 20), "Use Bandage"))
                {
                    if(bandage >= 1)
                    {
                        bandage--;
                        Heal();
                    }
                }
                GUI.EndGroup();
    }
}

function Eat()
{
    playerGUI.hungerBarDisplay += 0.1;
}

function Drink()
{
    playerGUI.thirstBarDisplay += 0.1;
}

function Heal()
{
    playerGUI.healthBarDisplay += 0.1;
}
var menuSkin:GUISkin;
var-wood:int=0;
var-stone:int=0;
变量:int=0;
变量fish:int=0;
公共烹饪鱼:int=0;
变量瓶:int=0;
var瓶装水:int=0;
var绷带:int=0;
var minimumVal:int=0;
私有变量showGUI:boolean=false//要打开或关闭jo键,请按krne se hoga
私有变量playerGUI:playerGUI;
函数Start()
{
playerGUI=GameObject.Find(“第一人称控制器”).GetComponent(playerGUI);
}
函数更新()
{

如果(wood错误可能是因为玩家对象为空,也可能是因为它没有附加Inv脚本。正如我所看到的,您没有在脚本中设置玩家的值,所以请检查它是否在编辑器中分配,以及分配的游戏对象是否附加了Inv脚本。要避免此错误,您可以尝试检查null在指定值之前,请替换:

player.GetComponent(Inv).cookedFish += 1;


该错误可能是因为玩家对象为空,也可能是因为它没有附加Inv脚本。正如我所看到的,您没有在脚本中设置玩家的值,因此请检查它是否在编辑器中分配,以及分配的游戏对象是否附加了Inv脚本。为了避免此错误,您可以尝试在若要指定值,请替换:

player.GetComponent(Inv).cookedFish += 1;