Задать вопрос
@KiR_Ka
Кароч я шкальник. Но к делам подхожу серьёзно.

Ошибка object reference not set to an instance of an object. Где неправильно?

Вот есть карта. На ней куб с тегом Job а другой с тегом Box.
Когда игрок бросает куб с тегом Box в куб с тегом Job,
должно прибавляться 5 к money.
НО, место этого выдаёт ошибку object reference not set to an instance of an object.
Найдите пожалуйста ошибки:
скрипт на объекте job:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Job : MonoBehaviour {
	public float addmoney;
	// Use this for initialization
	void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
		
	}
	void OnTriggerEnter(Collider col)                
    {                                            
        if(col.CompareTag("Box"))             
        {                                     
        	PlayerMoney pt = col.GetComponent<PlayerMoney>();
        	addmoney += pt.money;
        }                                        
    }                                   
}


Скрипт на объекте FPScontroller:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMoney : MonoBehaviour {
	public int money;
	// Use this for initialization
	void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
		
	}
}

Где ошибка?
  • Вопрос задан
  • 927 просмотров
Подписаться 1 Оценить 14 комментариев
Решения вопроса 1
BasmanovDaniil
@BasmanovDaniil
Геймдизайнер-телепат
Если выкинуть весь мусор из ваших скриптов, то остаётся следующее:
using UnityEngine;

public class Job : MonoBehaviour
{
    public float addmoney;

    private void OnTriggerEnter(Collider col)
    {
        if (col.CompareTag("Box"))
        {
            PlayerMoney pt = col.GetComponent<PlayerMoney>();
            addmoney += pt.money;
        }
    }
}

using UnityEngine;

public class PlayerMoney : MonoBehaviour
{
    public int money;
}

Нулреф может быть только в одной строчке:
addmoney += pt.money;

Это значит, что на коллайдере с тегом Box не было скрипта PlayerMoney. Либо вы его не повесили, либо он висит выше по иерархии. Ещё как вариант, тег есть у какого-то другого объекта кроме кубика с деньгами.
Если коллайдер по каким-то причинам должен находиться ниже скрипта по иерархии, то можете для его поиска использовать GetComponentInParent.

Ссылки по теме:
MSDN - NullReferenceException
What is a Null Reference Exception?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы