我一直得到一个空的参考例外我已经用Google搜索并寻找解决方案,但我无法在这里找到确切的错误。我得到的确切错误是" NullReferenceException:对象引用未设置为对象的实例 RayCastCollect.Update()(在Assets / RayCastCollect.js:47)"
我要做的是做一个RayCast并点击游戏对象让它消失。那部分工作正常。但之后我还希望更新我的库存,这是不工作的部分,并且特定的代码行会产生错误。 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;
}
答案 0 :(得分:0)
错误是因为播放器对象为null,因为它没有附加Inv脚本。正如我所看到的,你没有在你的脚本中设置播放器的值,所以检查它是否在编辑器中分配,并且指定的游戏对象是否有一个inv脚本。为避免此错误,您可以在分配值之前尝试检查null,替换:
player.GetComponent(Inv).cookedFish += 1;
与
if(player != null && player.GetComponent(Inv)!= null){
player.GetComponent(Inv).cookedFish += 1;
}