Как сделать инвентарь в игре

Создание простого инвентаря в игре на Unity.

Что такое инвентарь и для чего он нужен?

Как сделать инвентарь в игре

Инвентарь бывает различных типов. Так, например, в Skyrim’e используется инвентарь в виде списка. А в другой не менее известной игре – Minecraft, реализован сетчатый.

Как сделать инвентарь в игре Как сделать инвентарь в игре

Наш инвентарь конечно же будет менее функционален чем в этих двух играх, но его работоспособность будет напрямую завесить от ваших сил. Приступим.

Дизигнем инвентарь.

Для примера будет разобран инвентарь из разрабатываемой мною игрой DarkCaves.

Как сделать инвентарь в игре

Не пугайтесь столь ужасного дизайна, думаю у вас он будет лучше. Разберёмся что присутствует на сцене:

Левые ячейки необходимы, чтобы отображать вещи персонажа, которые становиться активными и дают какие-либо свойства. Правые служат отображением всех вещей персонажа.

Как сделать инвентарь в игре

Вам стоит создать нечто подобное, разделив ячейки на две группы. Ах да, стоило бы сказать, что ячейка – это обычный объект с компонентом image.

Как сделать инвентарь в игре

Когда всё будет готово, создаём новый скрипт, назвав его InventoryManager. Данный скрипт будет отвечать за всю логику инвентаря.

Пишем скрипт для перемещения фишек

Для начала нам стоит создать несколько функций. Первая функция будет отвечать за наведение на клетку, а вторая за сведение курсора мыши с этой клетки.

Создадим также переменные, которые будут необходимы для управления скриптом.

Немного разберёмся, что, зачем и почему:

Следующая функция, которая необходима для работы скрипта – это Update.

Разберёмся, что здесь происходит. В первую очередь, мы проверяем нажатие на клавишу мыши. Если нажатие было произведено, то мы проверяем, был ли наведён курсор на какую-то из ячеек. Если такое произошло, запоминаем номер данной ячейки и меняем родителя у объекта.

Далее происходит проверка на постоянное нажатие клавиши мыши. Если клавиша мыши зажата, и у нас был зафиксирован номер ячейки, мы вычисляем координаты курсора и перемещаем ячейку в их позицию.

Ну и последнее что происходит в этой функции, это проверка не была ли отжата клавиша мыши. Если такое произошло, мы проверяем был ли наведён курсор на ячейку, и не лежит ли в этой ячейке какой-либо элемент. Если все условия соблюдены, элемент перемещается в данную ячейку инвентаря, если нет – возвращается обратно.

На этом написание скрипта закончено, осталось только настроить сцену.

Настройка сцены для скрипта.

Для начала закинем скрипт на какой ни будь объект на сцене.

Как сделать инвентарь в игре

Далее необходимо создать image, и расположить его внутри одной из ячеек, выставив следующие настройки:

Как сделать инвентарь в игре

На сами ячейки необходимо добавить компонент EventTrigger и указать у него следующие настройки. Не запутайтесь с id ячейки. Необходимо начать с 0, далее 1, 2, 3 …

Как сделать инвентарь в игре

Предпоследним действием нужно добавить Image в переменную скрипта. Поскольку у меня 18 ячеек, я создал массив из 18 элементов. Где 17 позиций пустые и только лишь в первом указана вещь.

Как сделать инвентарь в игре

Осталось лишь указать 18 позиций, на которые перемещаются вещи:

Как сделать инвентарь в игре

На этом разработка инвентаря для перемещения закончена. Если вы всё сделали правильно, то при перетаскивании Image, вы можете наблюдать за тем, как элемент подстраивается под курсор и при отпускании в другую ячейку принимает её позицию.

Автор статьи: Александр Каримов.

Источник

Как сделать инвентарь в игре

Как сделать инвентарь в игре

Как сделать инвентарь в игре

200?’200px’:»+(this.scrollHeight+5)+’px’);»> using UnityEngine;
using System.Collections;

[System.Serializable]
public class Item<

public Texture2D Textura; //текстура иконки
public string Name; //название
>

200?’200px’:»+(this.scrollHeight+5)+’px’);»>
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class ItemData : MonoBehaviour <

public static ItemData _ItemData; //паттерн Singelton
public List Items = new List (); //списк в котором хранятся предметы

void Awake()
<
_ItemData = this;
>

200?’200px’:»+(this.scrollHeight+5)+’px’);»>
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class ItemData : MonoBehaviour <

public static ItemData _ItemData; //паттерн Singelton
public List Items = new List (); //списк в котором хранятся предметы

void Awake()
<
_ItemData = this;
>

//генерация предмета
public Item ItemGen(int win_id)
<
Item item = new Item();
item.Name = Items[win_id].Name;
item.Textura = Items[win_id].Textura;
return item;
>
>

Вешаем наш скрипт на камеру (в принципе не важно куда его вешать) В инспекторе создаем 4 предмета. Называем их и задаем иконки и названия.

Как сделать инвентарь в игре

200?’200px’:»+(this.scrollHeight+5)+’px’);»>
using UnityEngine;
using System.Collections;

public class Inventory : MonoBehaviour <

const int INVENTORY_WINDOW_ID = 1; //id окна инвентаря

public float ButtonWidth = 40; //высота ячейки
public float ButtonHeight = 40; //ширина ячейки

int invRows = 6; //количество колонок
int invColumns = 4; //количество столбцов
Rect inventoryWindowRect = new Rect(10, 10,
170, 265); //область окна

200?’200px’:»+(this.scrollHeight+5)+’px’);»>
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class Inventory : MonoBehaviour <

const int INVENTORY_WINDOW_ID = 1; //id окна инвентаря

public float ButtonWidth = 40; //высота ячейки
public float ButtonHeight = 40; //ширина ячейки

int invRows = 6; //количество колонок
int invColumns = 4; //количество столбцов
Rect inventoryWindowRect = new Rect(10, 10,
230, 265); //область окна
bool isDraggable; //возможно ли перемещение предмета
Item selectItem; //вспомогательная переменная куда заносим предмет инвентаря
Texture2D dragTexture; //текстура которая отображается при перетягивании предмета в инвентаре

Dictionary InventoryPlayer = new Dictionary (); //словарь содержащий предметы инвентаря

200?’200px’:»+(this.scrollHeight+5)+’px’);»>
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class Inventory : MonoBehaviour <

const int INVENTORY_WINDOW_ID = 1; //id окна инвентаря

public float ButtonWidth = 40; //высота ячейки
public float ButtonHeight = 40; //ширина ячейки

int invRows = 6; //количество колонок
int invColumns = 4; //количество столбцов
Rect inventoryWindowRect = new Rect(10, 10,
230, 265); //область окна
bool isDraggable; //перемещается ли айтем?
Item selectItem; //вспомогательная переменная куда заносим предмет инвентаря
Texture2D dragTexture; //текстура которая отображается при перетягивании предмета в инвентаре

Dictionary InventoryPlayer = new Dictionary (); //словарь содержащий предметы инвентаря

Update is called once per frame
void Update () <

void OnGUI()
<
inventoryWindowRect = GUI.Window(INVENTORY_WINDOW_ID, inventoryWindowRect, firstInventory, «INVENTORY»); //создаем окно
>

void firstInventory(int id)
<
for (int y = 0; y
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class Inventory : MonoBehaviour <

const int INVENTORY_WINDOW_ID = 1; //id окна инвентаря

public float ButtonWidth = 40; //высота ячейки
public float ButtonHeight = 40; //ширина ячейки

int invRows = 6; //количество колонок
int invColumns = 4; //количество столбцов
Rect inventoryWindowRect = new Rect(10, 10,
170, 265); //область окна
bool isDraggable; //перемещение предмета
Item selectItem; //вспомогательная переменная куда заносим предмет инвентаря
Texture2D dragTexture; //текстура которая отображается при перетягивании предмета в инвентаре

Dictionary InventoryPlayer = new Dictionary (); //словарь содержащий предметы инвентаря

void Start () <
//добавляем предметы в инвентарь
InventoryPlayer.Add(0, ItemData._ItemData.ItemGen(0));
InventoryPlayer.Add(1, ItemData._ItemData.ItemGen(1));
InventoryPlayer.Add(2, ItemData._ItemData.ItemGen(2));
InventoryPlayer.Add(3, ItemData._ItemData.ItemGen(3));
>

// Update is called once per frame
void Update () <

void OnGUI()
<
inventoryWindowRect = GUI.Window(INVENTORY_WINDOW_ID, inventoryWindowRect, firstInventory, «INVENTORY»); //создаем окно
>

void firstInventory(int id)
<
for (int i = 0; i
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class Inventory : MonoBehaviour <

const int INVENTORY_WINDOW_ID = 0; //id окна инвентаря
const int INVENTORY_TEXTURE_ID = 1; //id окна с иконкой
public float ButtonWidth = 40; //высота ячейки
public float ButtonHeight = 40; //ширина ячейки

int invRows = 6; //количество колонок
int invColumns = 4; //количество столбцов
Rect inventoryWindowRect = new Rect(10, 10,
170, 265); //область окна
Rect inventoryBoxRect = new Rect(); //область окна с изображением иконки
bool isDraggable; //перемещение предмета
Item selectItem; //вспомогательная переменная куда заносим предмет инвентаря
Texture2D dragTexture; //текстура которая отображается при перетягивании предмета в инвентаре

Dictionary InventoryPlayer = new Dictionary (); //словарь содержащий предметы инвентаря

void Start () <
//добавляем предметы в инвентарь
InventoryPlayer.Add(0, ItemData._ItemData.ItemGen(0));
InventoryPlayer.Add(1, ItemData._ItemData.ItemGen(1));
InventoryPlayer.Add(2, ItemData._ItemData.ItemGen(2));
InventoryPlayer.Add(3, ItemData._ItemData.ItemGen(3));
>

// Update is called once per frame
void Update () <

Источник

Подскажите как сделать подбор предмета в инвентарь по нажатию на него

Как сделать инвентарь для игры с возможностью премещения предметов из него?
Помогите пожалуйста знающие люди создать инвентарь похожий как в играх Alawar про Масяню. Мне бы.

Как сделать активным элемент по нажатию на него?
Использую Bootstrap 3. Есть вот такой список:

Подскажите как сделать, чтобы по нажатию горячих клавиш курсор мыши возвращался в центр экрана
Нужно чтобы после нажатия нескольких клавиш курсор возвращался в центр экрана.

а нужно, чтоб он мог ходить по этим предметам.
Это код который просили:

Добавлено через 7 минут

Не получилось, воот что написал:

Это работает, но правда если подбор и ходьба на одну и ту же кнопку, то получается не очень

Добавлено через 19 минут
Да и после многих тестов, как-то не охотно он подбирает шмотки

Добавлено через 1 минуту
вот код, может что-то не так пишем

для подсчета расстояния вам необходимо чтобы предметы до которых вы хотите узнать расстояние хранились у вас в списках. то есть при создании вы сразу его пихаете в список и потом перебираете их.

Добавлено через 1 минуту

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как сделать инвентарь в игреПодскажите пожалуйста как запрограммировать в Delphi чтобы по нажатию кнопки открывался сиди ром?как сделать чтобы при вводе в labeledit ФИО при нажат
Подскажите пожалуйста как запрограммировать в Delphi чтобы по нажатию кнопки открывался сиди.

Как на форме нарисовать круг, затем по нажатию на него появляется квадрат?
Привет всем, помогите пожалуйста, совсем ничего не выходит как на форме нарисовать круг, затем.

Как по нажатию кнопки поместить на форму компонент TImage и загрузить в него рисунок?
Помогите pliz, нужно что бы при нажатии кнопки, на определённой форме многооконного приложения.

Как сделать таймер обратного отсчёта по нажатию на кнопку и сделать её неактивной
Снова пишу сюда, ибо нигде больше помощи не дождёшься:( Мне тут нужно сделать такую штуку: чтобы.

Получить ID предмета при выборе в ComboBox названия предмета
Здравствуйте, подскажите пожалуйста как получить ID предмета при выборе в comboBox названия.

Источник

Реализовать инвентарь для текстовой игры

Если честно, даже не знаю, в какой раздел нужно пихать тему.
В общем, суть вопроса:

Какое может быть удобное решение для такой задачи? Я пока новичок и все вышеперечисленное нашел просто методом тыка с форумов, так что не знаю, как еще можно поискать. Буду раз любой наводке, хоть «гугли вот [это]».
Заранее благодарю.

Как сделать инвентарь для игры с возможностью премещения предметов из него?
Помогите пожалуйста знающие люди создать инвентарь похожий как в играх Alawar про Масяню. Мне бы.

Как сделать инвентарь в игреSteam api, вытаскиваем инвентарь игры CSGO
Мне нужно вывести на страницу инвентарь игры CSGO пользователя, например мой инвентарь.

Ищу команду для создание текстовой онлайн игры!
Ищу команду для создание текстовой онлайн игры! База и некоторые разделы сделаны на основе.

Ищу разработчиков для текстовой игры (Pascal ABC.NET) (работа не оплачиватся)
Ищу разработчиков для текстовой игры в Pascal ABC.NET. Сразу говорю что работа не оплачиваема.

MrDreamer93, если хранить нужно локально, то используйте сериализацию в XML\JSON. Никаких неудобств я с этим не вижу. Когда нужны будут данные, то целиком все и десериализуйте.

MrDreamer93, а я лично работал с разными СУБД и такой дичи не видал. Может я что-то делал не так?

Одной из частей определения таблицы, которое хранится в словаре данных, является физическое местоположение. Когда таблица создаётся, выделяется место, фиксированного размера в файлах данных БД. Это место известное нам как экстент, выделяется и свободно для записи. Затем, когда строки добавляются в таблицу, экстент заполняется. Когда первый экстент заполнен, другие экстенты будут выделяться для таблицы автоматически. Таким образом таблица состоит из одного или нескольких экстентов в которых хранятся строки. Словарь данных отслеживает как выделенные экстенты так и как много выделенного для таблицы пространства использовано. Вводится понятие верхней границы (high water mark). Верхняя граница это последняя позиция в последнем экстенте которая когда либо использовалась для хранения данных. Все пространство до верхней границы когда либо использовалось для хранения данных, а всё пространство после никогда не использовалось для хранения данных. Обратите внимание что вполне возможно что будет много свободного места до верхней границы в текущий момент; это возможно из-за удаления строк командой DELETE. Добавление строк в таблицу поднимает верхнюю границу. Удаление строк оставляет верхнюю границу на той же позиции – но пространство используемое удаляемыми строками становится доступным для записи новых строк.

Команда TRUNCATE обнуляет верхнюю границу. В словаре данных позиция верхней границы смещается на начало первого экстента. Так как Oracle считает что строки после верхней границы не могут существовать то эффект от этого равнозначен удалению всех строк из таблицы. Таблица очищается и остается пустой пока последующие добавления строк не обновят значение верхней границы. Таким способом одна DDL команда которая фактически делает простое обновление в словаре данных может уничтожить миллионы строк в таблице.

Источник

Как сделать инвентарь в игре

Trying to draw non-existing sprite.

Добавлено (21.12.2010, 17:54)
———————————————
она появляется при переносе предмета в 3 слот

Добавлено (21.12.2010, 17:55)
———————————————
и еще цифра не следует за объектом

Как сделать инвентарь в игреКак сделать инвентарь в игре
Dva_KotaДата: Вторник, 21 Декабря 2010, 18:04 | Сообщение # 23
Как сделать инвентарь в игре

Как сделать инвентарь в игре

Именно в 3?
Еще такая же шибка у меня была если кликнуть по первому слоту когда он пустой.
Ошибка из-за того что ты присваиваешь не существующий индекс спрайта (или пустое значение). Это нужно больше в код вникать. А цифра у тебя не следует за объектом по тому что ты не написал чтобы она рисовалась Как сделать инвентарь в игре. Последняя строка в Draw у твоего инвентаря отображает спрайт при перетаскивании. Добавь туда рисование текста по аналогии. Только перед «>».
Новый пример инвентаря! /20.06.2012/

Energy Wars

Как сделать инвентарь в игреКак сделать инвентарь в игре
zik13Дата: Вторник, 21 Декабря 2010, 18:11 | Сообщение # 24
Как сделать инвентарь в игре

Как сделать инвентарь в игре

Добавлено (21.12.2010, 18:11)
———————————————
блин не работает все равно

Как сделать инвентарь в игреКак сделать инвентарь в игре
Dva_KotaДата: Вторник, 21 Декабря 2010, 18:12 | Сообщение # 25
Как сделать инвентарь в игре

Как сделать инвентарь в игре

а что именно теперь не работает?
У меня вообще никаких проблем нет с перемещением предмета в третий слот.
Новый пример инвентаря! /20.06.2012/

Как сделать инвентарь в игреКак сделать инвентарь в игре
zik13Дата: Вторник, 21 Декабря 2010, 18:14 | Сообщение # 26
Как сделать инвентарь в игре

Как сделать инвентарь в игре

Добавлено (21.12.2010, 18:14)
———————————————
сделай мне для примера еще 2 стота что бы я понял как добавлять

Добавлено (21.12.2010, 18:14)
———————————————
плиз

Как сделать инвентарь в игреКак сделать инвентарь в игре
Dva_KotaДата: Вторник, 21 Декабря 2010, 18:37 | Сообщение # 27
Как сделать инвентарь в игре

Как сделать инвентарь в игре

Ты все координаты одинаковые зачем поставил? Как сделать инвентарь в игре
Я же тебе русским языком написал:

у тебя будет
Code
draw_sprite(slot[1,4],-1,view_xview[0]+476+32,view_yview[0]+40)

В End Step в конец добавляешь что-то похожее на

Думаю там разберешься куда именно в Draw пихать.

Energy Wars

Как сделать инвентарь в игреКак сделать инвентарь в игре
zik13Дата: Вторник, 21 Декабря 2010, 18:39 | Сообщение # 28
Как сделать инвентарь в игре

Как сделать инвентарь в игре

а есть ли какая нибудь закономерность в добавление по которой можно следовать и добавлять другие яйчейки
Как сделать инвентарь в игреКак сделать инвентарь в игре
Dva_KotaДата: Вторник, 21 Декабря 2010, 18:44 | Сообщение # 29
Как сделать инвентарь в игре

Как сделать инвентарь в игре

Как сделать инвентарь в игреКак сделать инвентарь в игре
zik13Дата: Вторник, 21 Декабря 2010, 21:34 | Сообщение # 30
Как сделать инвентарь в игре

Как сделать инвентарь в игре

а как реализовать использование предмета и его выкидывание ( и появление возле героя сново предметом )

Как сделать инвентарь в игре

zik13, Скажу по пунктам что тебе надо:
1. Иметь логические мысли.
2. Иметь память в мозгу чтобы создать в левом полушарии мозга логические мысли.
3. Учи справку с самого начала.
4. Используй разные функции кода для реализования.
Вот и всё! Зарегестрировался недавно, а уже 516 сообщений. Как сделать инвентарь в игре
И ещё: пиши игру сам! Как сделать инвентарь в игре
Как сделать инвентарь в игре

Как сделать инвентарь в игре Как сделать инвентарь в игреКак сделать инвентарь в игре
zik13Дата: Вторник, 21 Декабря 2010, 22:21 | Сообщение # 32
Как сделать инвентарь в игре

Как сделать инвентарь в игре

Добавлено (21.12.2010, 22:21)
———————————————
вот я пересмотрел весь код 2 раза но я не пойму почему появляется имя срайта »0» 4 и 5 слоте

http://rghost.ru/3702182

Как сделать инвентарь в игреКак сделать инвентарь в игре
FоzzieДата: Вторник, 21 Декабря 2010, 22:21 | Сообщение # 33
Как сделать инвентарь в игре

Как сделать инвентарь в игре

zik13, Учится можно и самостоятельно, за тебя все игру делают. Или же ты собираешь игру из исходников. Как сделать инвентарь в игре
Как сделать инвентарь в игре
Как сделать инвентарь в игре Как сделать инвентарь в игреКак сделать инвентарь в игре
TheApKoTДата: Вторник, 21 Декабря 2010, 23:03 | Сообщение # 34
Как сделать инвентарь в игре

Как сделать инвентарь в игре

Fоzzie, +100500. Это уже не первый раз. zik13, делай сам. Вот я для своей игры инвентарь делаю самостоятельно, и даже не перехожу по ссылкам на исходники других инвентарей. Я привык все делать сам, возможно, с чьей-то помощью, если один не могу справиться. Но из кусков игру я собрать не смогу. В общем, см. пост выше. Как сделать инвентарь в игре
Посоветуйте, где скачать VB6 :C
Как сделать инвентарь в игре
Как сделать инвентарь в игреКак сделать инвентарь в игре
Dva_KotaДата: Среда, 22 Декабря 2010, 10:48 | Сообщение # 35
Как сделать инвентарь в игре

Как сделать инвентарь в игре

Ты немного напутал с координатами опять, и у тебя не везде правильно отображалось количество предметов (не в том месте где нужно). Такое ощущение что ты даже не проверяешь что сделал. Вот, я исправил (и сделал чтобы нормально отображались имена объектов):

200?’200px’:»+(this.scrollHeight+5)+’px’);»> x=view_xview[0]+476;
y=view_yview[0]+40;

if (mouse_x >x-16 and mouse_x y-16 and mouse_y x+16 and mouse_x y-16 and mouse_y x+48 and mouse_x y-16 and mouse_y x+80 and mouse_x y-16 and mouse_y x+112 and mouse_x y-16 and mouse_y draw_sprite(s_inv,-1,view_xview[0]+476,view_yview[0]+40)

if slot[0,0] >0 <
draw_sprite(slot[0,4],-1,view_xview[0]+476,view_yview[0]+40)
draw_text(view_xview[0]+476+6,view_yview[0]+40+6,slot[0,1])>

if slot[1,0] >0 <
draw_sprite(slot[1,4],-1,view_xview[0]+476+32,view_yview[0]+40)
draw_text(view_xview[0]+476+38,view_yview[0]+40+6,slot[1,1])>

if slot[2,0] >0 <
draw_sprite(slot[2,4],-1,view_xview[0]+476+64,view_yview[0]+40)
draw_text(view_xview[0]+476+70,view_yview[0]+40+6,slot[2,1])>

if slot[3,0] >0 <
draw_sprite(slot[3,4],-1,view_xview[0]+476+96,view_yview[0]+40)
draw_text(view_xview[0]+476+102,view_yview[0]+40+6,slot[3,1])>

if slot[4,0] >0 <
draw_sprite(slot[4,4],-1,view_xview[0]+476+128,view_yview[0]+40)
draw_text(view_xview[0]+476+134,view_yview[0]+40+6,slot[4,1])>

if slot[5,0] >0 <
draw_sprite(slot[5,4],-1,view_xview[0]+476+164,view_yview[0]+40)
draw_text(view_xview[0]+476+166,view_yview[0]+40+6,slot[5,1])>

if txt == 1 <
draw_text(mouse_x,mouse_y-30,slot[0,3]) >
if txt == 2 <
draw_text(mouse_x,mouse_y-30,slot[1,3]) >
if txt == 3 <
draw_text(mouse_x,mouse_y-30,slot[2,3]) >
if txt == 4 <
draw_text(mouse_x,mouse_y-30,slot[3,3]) >

if txt == 5 <
draw_text(mouse_x,mouse_y-30,slot[4,3]) >

if draw == true <
draw_text(320,240,text)>

if drag == true <
draw_sprite(temp_slot[0,4],-1,mouse_x,mouse_y) >

Там у тебя еще некоторых строк не хватало, я добавил (уже не помню какие).

Ты просто внимательнее смотри код и что откуда берется, тогда все получится.
Новый пример инвентаря! /20.06.2012/

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *