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

Все для Unity3d> Инвентарь как в Diablo2 - Форум>
Страница 1 из 11
Форум » Unity » Вопросы » Инвентарь как в Diablo2 (Хочу сделать инвентарь как в Diablo2)
Инвентарь как в Diablo2
SteinerДата: Пятница, 18.04.2014, 10:10 | Сообщение # 1
Новый писатель
Группа: Пользователи
Статус: Offline
Может уже есть урок по этому вопросу?
Ибо все что я находил,так это уроки об инвентаре с иконками одинакового размера 1х1.

Я долго пытаюсь это сделать.
 
IceSkipДата: Суббота, 19.04.2014, 09:46 | Сообщение # 2
Новый писатель
Группа: Пользователи
Сообщений: 25
Статус: Offline
Ты скриптер? умееш работать в фотошопе например? если да, тогда ничего сложного, готовых "как в диабло" нет, это скин, его нужно рисовать.

За гранью души.

Сообщение отредактировал IceSkip - Суббота, 19.04.2014, 09:47
 
devpilgrimДата: Суббота, 19.04.2014, 11:03 | Сообщение # 3
Начинающий писатель
Группа: Проверенные
Сообщений: 196
Статус: Offline
IceSkip, Не только скин, там еще ячейки и нужно делать размещение в ячейках.
Проще всего делать по матрице.
Например есть инвентарь 6х6 клеток, нужно разместить в нем предмет 2х2 клетки.
Для этого нужно для предмета задать матрицу которую потом сверять с матрицей инвентаря.
например матрица инвентаря будет выглядеть так:
000000
000000
000000
000000
000000
000000
То-есть шесть рядов по шесть элементов в ряду
Определить какие из мест заняты, какие нет:
000000
110000
110000
000000
000000
000000
Там где единицы - ячейки заняты предметом с Id = 1
0     0   0   0    0    0
122 122   0   0    0    0
122 122   0   0    0    0
122 122   0   0    0    0
0     0   0   0    0    0
0     0   0   0    0    0
Там где 122 - ячейки заняты предметом с Id = 122
Соответственно предмет id=1 будет иметь матрицу (занимает 4 ячейки 2х2)
11
11
предмет 122 будет иметь матрицу (занимает 6 ячеек 2х3)
122 122
122 122
122 122
Матрицу можно создать и редактировать простыми многомерными массивами
например
Код
int[,] inventar= new int[,] { { 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0 },  { 0, 0, 0, 0, 0, 0 },  { 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0 } };

С предметом id=1 массив будет выглядеть так:
Код
int[,] inventar= new int[,] { { 0, 0, 0, 0, 0, 0 }, { 1, 1, 0, 0, 0, 0 },  { 1, 1, 0, 0, 0, 0 },  { 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0 } };

А его матрица будет:
Код
int[,] id1 = new int[,] { { 1, 1 },  { 1, 1} };

Думаю принцип понятен?

Ну а отрисовка в гуи - проще простого...
зная матрицу, и зная, что каждая ячейка имеет размер к примеру 32х32 не трудно рассчитать, что предмет с id = 1 будет иметь картинку

Код
id1.image.width = cell.width*2
id1.image.height= cell.height*2
id1.position = new Vector2(cell.width*numrow, cell.height*numposition)


numrow - номер ряда первой верхней ячейки (начинается с нуля)
numposition - номер позиции первой верхней ячейки (начинается с нуля)

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


Готов работать за деньги, или за очень большие деньги.

Сообщение отредактировал devpilgrim - Суббота, 19.04.2014, 11:16
 
IceSkipДата: Суббота, 19.04.2014, 13:58 | Сообщение # 4
Новый писатель
Группа: Пользователи
Сообщений: 25
Статус: Offline
devpilgrim, Я знаю, но я не трогаю код ибо незнаю програмирование.

За гранью души.

Сообщение отредактировал IceSkip - Суббота, 19.04.2014, 13:59
 
devpilgrimДата: Суббота, 19.04.2014, 15:32 | Сообщение # 5
Начинающий писатель
Группа: Проверенные
Сообщений: 196
Статус: Offline
Цитата IceSkip ()
Я знаю, но я не трогаю код ибо незнаю програмирование.

Так одним скином по любому проблему не решить...Код и логика нужны.
Писать код такого инвентаря бесплатно - не катит. Дать логику - берите, творите, а я помогу советом, ну может немного кодом...


Готов работать за деньги, или за очень большие деньги.
 
IceSkipДата: Суббота, 19.04.2014, 22:08 | Сообщение # 6
Новый писатель
Группа: Пользователи
Сообщений: 25
Статус: Offline
Цитата devpilgrim ()
Так одним скином по любому проблему не решить
Да причем тут это? я вначале написал что, если ты скриптер, проблем не составит сделать инвентарь.


За гранью души.
 
devpilgrimДата: Воскресенье, 20.04.2014, 04:05 | Сообщение # 7
Начинающий писатель
Группа: Проверенные
Сообщений: 196
Статус: Offline
Цитата IceSkip ()
я вначале написал что, если ты скриптер, проблем не составит сделать инвентарь.
Не сказал-бы, проблем конечно не очень много, но несколько подводных камней есть...
Например, если воспользоватся многомерными массивами - возникнут проблемы сериализации, если воспользоваться коллекциями - будут проблемы с поиском и сортировками...
В обоих случаях я поначалу писал костыли...
Потом нашел более элегантный способ, но он достаточно нетривиальный и многие программисты могут его не оценить, зато работает на 5 с + и по скорости и по своим возможностям...
Поделюсь, может кто оценит:
Использую в качестве матриц маленькое изображение.
То-есть, делаю Texture2D, если у моекго инвентаря например 16х32 ячейки, то соответственно в
Texture2D matrix = new Texture2D(16, 32);

заполняем текстуру значениями

matrix.SetPixel (posX, posY, Color);

каждый цвет - соответствует полю idColor у объектов инвентаря...

Ну а получение данных из такой матрицы - вообще песня:
x - позиция ячейки по горизонтали
y - позиция ячейки по вертикали
width - количество проверяемых ячеек по ширине
height- количество проверяемых ячеек по высоте
например нужно проверит не занята ли область начинающаяся во втором ряду третьей колонки и занимающая площадь 3х3 квадрата
x = 3;
y = 2;
width = 3;
height =3;
Color[] matrixSpace = matrix.GetPixels(x, y, width, height);
в итоге имеем массив цветов из 9 элементов.
Прогоняем их в цикле и проверяем, все ли цвета белые. (белый у меня - пустая ячейка)
Если да - то ставим туда наш объект инвентаря...
Ну и еще там несколько вкусностей...


Готов работать за деньги, или за очень большие деньги.

Сообщение отредактировал devpilgrim - Воскресенье, 20.04.2014, 04:06
 
IceSkipДата: Воскресенье, 20.04.2014, 12:33 | Сообщение # 8
Новый писатель
Группа: Пользователи
Сообщений: 25
Статус: Offline
Меня щас как школьника забомбит... что ты пытаешься доказать? что ты что-то умеешь? браво! мне лично все равно что ты знаешь а что нет, но человеку ты ничем не помогает сейчас, только извини меня, строишь из себя умного, не знаю сложно или нет, но мы с  человеком, сделали инвентарь и даже крафт, когда он делал крафт, там возникала проблема, с сравнением нескольких массивов, но это решилось сразу, я не видел проблем с инвентарем.

За гранью души.
 
devpilgrimДата: Воскресенье, 20.04.2014, 15:49 | Сообщение # 9
Начинающий писатель
Группа: Проверенные
Сообщений: 196
Статус: Offline
IceSkip, да не бомблю я тебя smile
Я это все для Steinerа, писал smile
Для тебя всего 2 строчки там.
Насчет помогаю или нет, тут вопрос спорный, если человек реально хочет сделать инвентарь, причем легкий как в плане производительности, так и в плане программирования, при этом у него есть знания в программировании чуть выше начальных, то я практически дал готовый инвентарь, по таким пояснениям любой программист может собрать инвентарь за промежуток времени от 30 минут, до суток...


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