На данный вопрос уже ответили:
При нажатии на клавишу F и наведении на обьект с тегом Item выводит ошибку "Не задана ссылка на екземпляр обьекта". Не могу понять, что не так. Вот скрипт. Ошибка возникает на строчке с "foreach (Cell mainCell in inventory.cells)".
using UnityEngine;
public class DetectingItem : MonoBehaviour {
[SerializeField]
private float raycastDistance;
[SerializeField]
private GameObject PressF;
public Stick items;
public Inventory inventory;
public RaycastHit hit;
public GameObject hittedObject;
public Camera fpsCam;
void Start() {
}
void FixedUpdate() {
if (Physics.Raycast(fpsCam.transform.position, fpsCam.transform.forward, out hit, raycastDistance))
{
if (hit.transform.tag == "Item")
{
PickUpItem();
hittedObject = hit.collider.gameObject;
PressF.SetActive(true);
} else
{
hittedObject = null;
PressF.SetActive(false);
}
}
}
void PickUpItem()
{
if (Input.GetKeyDown(KeyCode.F))
{
foreach (Cell mainCell in inventory.cells)
{
if (!mainCell.isFull)
{
Instantiate(items.Icon, mainCell.transform);
mainCell.isFull = true;
}
}
}
}
}
Вот другой скрипт с массивом cells.
using UnityEngine;
public class Inventory : MonoBehaviour {
public Canvas canvas;
public GameObject mainInventory;
public GameObject activeInventory;
public Cell[] cells;
void Start () {
cells = new Cell[30];
}
void FixedUpdate () {
if (Input.GetKeyDown(KeyCode.E))
{
activeInventory.SetActive(!activeInventory.activeSelf);
}
}
}
Почитал другие вопросы, говорят что ссылка ссылается на переменную со значением null. Но у меня переменная не имеет значение null.
Ваше поле не инициализировано. Перемести объект в инспекторе. Или найдите его через код с помощью GameObject.Find()
У вас null из-за этого.
Ваш скрипт инвентаря наследуюется от MonoBehaviir просто объявлением переменной вы его не инициализируете.
Поэтому и лезет ошибка.
Вы не исправите если не инициализируете. Ни один комментарий в таком случае не поможет.
if (Input.GetKeyDown(KeyCode.F))
{
Debug.Log(inventory);
foreach (Cell mainCell in inventory.cells)
{
if (!mainCell.isFull)
{
Instantiate(items.Icon, mainCell.transform);
mainCell.isFull = true;
}
}
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Когда я копирую текст из TextBox(multiline) в строку, а потом пытаюсь из нее что-то удалить - со строкой НИЧЕГО не происходитВот часть кода:
На макете имеется DataGrid, у которого один столбец и одна ячейкаКак добавить ещё один (вложенный выходит) DataGrid в эту ячейку? Что-то такое:
получаю данный от Tcp сервера, если запрос длится более 1 сек, то завершаем Task ожидания получения ответа и выкидываем TimeoutException("
Как сделать что бы из textbox значения перевести в тип double и что бы читалась в числе и точка и запятая?И как вывести в label тип double?