MENU
Главная » Файлы » Скрипты

Инвентарь не доработан v 0.1
[ · Скриншот ] 17.06.2013, 00:18
Инвентарь – это набор объектов, содержащих в себе информацию, которую можно использовать в разных местах. Например – название вещи, ссылка на текстуру для отображения в инвентаре, ссылку на префаб для выброса в сцену, ссылку на префаб для одевания и т.д. Все возможные данные, которые необходимы в игре я охватить не могу, так что ограничимся вышеперечисленными.

И начнем мы сразу с кода:
InventoryItem.cs

Код
using UnityEngine;

// элемент инвентаря
public class InventoryItem : MonoBehaviour
{
// название вещи
public string itemName;
// текстура для инвентаря
public Texture2D inventoryTexture;
// префаб для сброса вещи
public GameObject prefabToDrop;
// префаб для одевания
public GameObject prefabToEquip;
}


SceneItem.cs

Код
using UnityEngine;

// объект сцены, который можно подобрать
public class SceneItem : MonoBehaviour
{
// префаб для инвентаря
public InventoryItem prefab;


// если кто-то вошел в триггер, то просим его поднять вещь
public void OnTriggerEnter(Collider other)
{
other.gameObject.SendMessage("Equip", this);
}

}


Inventory.cs

Код
using System.Collections.Generic;
using UnityEngine;


// инвентарь
public class Inventory : MonoBehaviour
{
// вещи инвентаря
public List items = new List();
// надетые вещи
public List equipped = new List();
// отображать ли инвентарь
public bool showInventory;

// вспомогательные переменные
private Vector2 _inventoryScroll;
private InventoryItem _itemToDrop = null;
private InventoryItem _itemToEquip = null;

public void Update()
{
// если нужно выбросить вещь
if(_itemToDrop!=null)
{
// удаляем вещь из инвентаря
items.Remove(_itemToDrop);
// создаем в сцене эту вещь на месте, где стоит игрок
Instantiate(_itemToDrop.prefabToDrop, transform.position, transform.rotation);
_itemToDrop = null;
}

// если нужно одеть
if (_itemToEquip != null)
{
// удаляем вещь из инвентаря
items.Remove(_itemToEquip);
// добавляем ее к одетым вещам
equipped.Add(_itemToEquip);
// создаем у игрока эту вещь
GameObject itemGameObject= (GameObject)Instantiate(_itemToEquip.prefabToEquip);
// так как игрок одел вещь, то она является его чайлдом
itemGameObject.transform.parent = transform;
_itemToEquip = null;
}
}

// отображение инвентаря
public void OnGUI()
{
if (showInventory)
{
if(GUI.Button(new Rect(10, 10, 150, 25), "Hide Inventory"))
{
showInventory = !showInventory;
}

GUILayout.BeginArea(new Rect(Screen.width-200, 10, 190, Screen.height-20), GUI.skin.box);
{
_inventoryScroll = GUILayout.BeginScrollView(_inventoryScroll, GUILayout.ExpandHeight(true),GUILayout.ExpandWidth(true));

// рисуем каждую вещь инвентаря
foreach (InventoryItem item in items)
{
GUILayout.BeginVertical(GUI.skin.box);
GUILayout.Label(item.itemName); // Название
GUILayout.BeginHorizontal();
GUILayout.Label(item.inventoryTexture); // Иконка
GUILayout.BeginVertical();
if (GUILayout.Button("Equip")) // Кнопка "надеть"
{
_itemToEquip = item;
}
if (GUILayout.Button("Drop")) // Кнопка "бросить"
{
_itemToDrop = item;
}
GUILayout.EndVertical();
GUILayout.EndHorizontal();
GUILayout.EndVertical();
}


GUILayout.EndScrollView();
}
GUILayout.EndArea();

}

else
{
if (GUI.Button(new Rect(10, 10, 150, 25), "Show Inventory"))
{
showInventory = !showInventory;
}
}
}


// подбор вещи
public void Equip(object item)
{
SceneItem sceneItem = (SceneItem) item;

if (sceneItem!= null)
{
// добавляем вещь в инвентарь
items.Add(sceneItem.prefab);
// уничтожаем объект сцены
Destroy(sceneItem.gameObject);
}

}

}

Итак: Первый скрипт представляет собой описание элемента инвентаря. Второй – описание объекта сцены, на котором должен быть коллайдер в режиме триггера, при входе физического объекта в триггер – объект сцены говорит ему "возьми меня”. Третий скрипт представляет собой сам инвентарь и GUI для его отображения. Примерный вид на первом скриншоте.

Каждый элемент инвентаря должен состоять из трех префабов (это в моем примере, у вас может быть меньше или больше): 1) префаб объекта, выбрасываемого в сцену; 2) префаб одеваемого объекта; 3) префаб, описывающий объект инвентаря, он в сцене не появляется, а используется по ссылке для создания двух других префабов.
Настройки этих префабов на следующих трех скриншотах в том же порядке.

 

 

Категория: Скрипты | Добавил: DeMaN_74 | Теги: инвентарь, скрипты
Просмотров: 6216 | Загрузок: 0 | Комментарии: 2 | Рейтинг: 3.8/5
Всего комментариев: 1
1 DeMaN_74   (17.06.2013 00:24)
кто подшаманит скрипт пишите)
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Хостинг от uCoz