Инвентарь - Форум - Все для Unity3d

Все для Unity3d> Инвентарь - Форум>
Страница 1 из 11
Форум » Unity » Вопросы » Инвентарь
Инвентарь
VensJemДата: Суббота, 06.12.2014, 22:25 | Сообщение # 1
Новый писатель
Группа: Пользователи
Статус: Offline
Только начал создавать инвентарь.
Есть два скрипта:
Inventory.cs
Код
using UnityEngine;   
using System.Collections;   
using System.Collections.Generic;   

public class Inventory : MonoBehaviour   
{   
public List<GameObject> all_items = new List<GameObject>();   

private bool state = false;
private Item mi;

void Update() {   

Ray ray = Camera.mainCamera.ScreenPointToRay(new Vector3(Screen.width / 2, Screen.height / 2, 0));
RaycastHit hit;

if (Physics.Raycast(ray, out hit, 5f) && hit.collider.CompareTag("Item") && Input.GetKeyDown(KeyCode.E))
{
for (int i=0; i<=14; i++){    
if ((all_items[i]== null) && (state == false)) {   
all_items [i]= mi.ItemInv as GameObject;   
state = true;
}
}     
if (state){
Destroy(hit.collider.gameObject);
state = false;
}else {
Debug.Log("Max inv");
}
}
}
}

Item.cs

Код
using UnityEngine;
using System.Collections;

public class Item : MonoBehaviour {
       
     public GameObject ItemInv;      
     public int count;   
     public string discription;
     public Texture2D texure;   
       
}

При нажатии на предмет вылазит такая ошибка:
NullReferenceException: Object reference not set to an instance of an object
Inventory.Update () (at Assets/Scripts/Inventory.cs:21)

2 дня не могу сдвинуться с места, помогите плиз sad

Добавлено (06.12.2014, 22:25)
---------------------------------------------
Всё разобрался, вписав такую строчку))

Код
mi = hit.collider.gameObject.GetComponent<Item>();


Сообщение отредактировал VensJem - Суббота, 06.12.2014, 13:09
 
maxim738Дата: Четверг, 18.12.2014, 18:16 | Сообщение # 2
Новый писатель
Группа: Пользователи
Сообщений: 18
Статус: Offline
all_items = mi.ItemInv as GameObject;   Вот поменяй эту строчку на
all_items
= mi.ItemInv.gameObject;
И я бы на твоём месте не стал использовать геймобджект в массива для хранения предметов.А сразу бы использовал Item.
Код
using UnityEngine;     
   using System.Collections;     
   using System.Collections.Generic;     

   public class Inventory : MonoBehaviour     
   {     
   public List<Item> all_items = new List<Item>();     

   private bool state = false;   
   private Item mi;   

   void Update() {     

   Ray ray = Camera.mainCamera.ScreenPointToRay(new Vector3(Screen.width / 2, Screen.height / 2, 0));   
   RaycastHit hit;   

   if (Physics.Raycast(ray, out hit, 5f) && hit.collider.CompareTag("Item") && Input.GetKeyDown(KeyCode.E))   
   {   
   for (int i=0; i<=14; i++){      
   if ((all_items[i]== null) && (state == false)) {     
   all_items [i]= mi.ItemInv;     
   state = true;   
   }   
   }       
   if (state){   
   Destroy(hit.collider.gameObject);   
   state = false;   
   }else {   
   Debug.Log("Max inv");   
   }   
   }   
   }   
   }

И вообще , у тебя какой-то не законченный скрипт.


Скрипты на заказ, помощь в исправлении ошибок ,работа с чужим кодом.В лс,недорого.

Сообщение отредактировал maxim738 - Четверг, 18.12.2014, 18:34
 
Форум » Unity » Вопросы » Инвентарь
Страница 1 из 11
Поиск:
Свернуть
Развернуть
Необходима авторизация
0
ТОП-5 САЙТА
НОВЫЕ ИГРЫ
ГОРЯЧИЕ ТЕМЫ
СЛУЧАЙНЫЕ ФАЙЛЫ