Среда, 14 Апреля 2021, 16:14

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: beril  
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Проблема с инвентарем (.)
Проблема с инвентарем
Valik_FenkoДата: Суббота, 16 Января 2016, 18:42 | Сообщение # 1
почетный гость
Сейчас нет на сайте
Ваще не пойму что не так.Вот код

Код
void OnGUI()
{
//
for (int i = 0; i <=3; i++) {
GUI.Label (new Rect (100, 100 + 20 * i, 150, 80), "" + Player.LastOpenBag [i].ToString ());
}
//
float slEnableX=1;
int slEnableY=1;
int slEnableX_ = 0;
for(int i = 1;i <= 4;i++)
{
Bag[i-1].pixelInset = new Rect(Screen.width - 40*i,4,38,38);
if(Player.bagOpen[Player.LastOpenBag[i-1]] == true)
{
if(12-slEnableY < Player.SlotInBag[Player.LastOpenBag[i-1]]/4)
{
slEnableX_+=1;
slEnableY=1;
}
slEnableX=Player.SlotInBag[Player.LastOpenBag[i-1]];
while(slEnableX>0) slEnableX-=4;
slEnableX=-slEnableX+1;
for(int s = 1;s<=Player.SlotInBag[Player.LastOpenBag[i-1]];s++)
{
if(GUI.Button(new Rect(Screen.width-3-40*slEnableX-160*slEnableX_,Screen.height-43-36*slEnableY,36,36),"",buttonStyle)){
}
slEnableX+=1;
if(slEnableX == 5)
{
slEnableX=1;
slEnableY+=1;
}
}
slEnableY+=1;
}
}
}


если if(Player.bagOpen[Player.LastOpenBag[i-1]] == true) равно всё таки false цикл прекращает свою роботу.Так разве должно быть?Вроде же в теле цикла нид всунуть break;Мда

Bag[i-1].pixelInset = new Rect(Screen.width - 40*i,4,38,38); короче срабатывает ток 1 раз ,когда i=1 (первый тик цилка) потом продолжает работу только когда Player.bagOpen[Player.LastOpenBag[i-1]] == true

Мб я не понял принцип работы цилка но разве for не как черть столько раз сколько я прописал?

P.S только что заметил странную вещь.Цикл тикает один раз и после того как я нажал на сумку мишкой.Вот скрипт.Они на разных обьектах
Код
using UnityEngine;
using System.Collections;

public class Inventory_Key : MonoBehaviour
{
public int BagID;
public OpenClose Type = OpenClose.Open;
public enum OpenClose
{
Open,
Close
}

void OnMouseDown()
{
if(Player.bagOpen [BagID] == false)
{
for(int i = 0;i<=3;i++)
{
if(Player.LastOpenBag[i] == -1)
{
Player.bagOpen[BagID] = true;
Player.LastOpenBag[i] = BagID;
break;
}
}
}
else
{
for(int i = 0;i<=3;i++)
{
if(Player.LastOpenBag[i] == BagID)
{
Player.bagOpen [BagID] = false;
Player.LastOpenBag[i] = -1;
break;
}
}
}
}
}

А вот код Player
Код
using UnityEngine;
using System.Collections;

public class Player : MonoBehaviour {

public static int mOpen;
public static bool[] bagOpen = new bool[4];
public static float[] SlotInBag = new float[4];
public static int[] LastOpenBag = new int[4];
public void Start()
{
for (int i = 0; i<= 3; i++) {
LastOpenBag[i] = -1;
}
SlotInBag[0]=11;
SlotInBag[1]=6;
SlotInBag[2]=10;
SlotInBag[3]=13;
}
//Предметы
}


Первые несколько скриптов можно сказать.Че не так?Мб кто разберётсЯ
Я лично всё пересотрел раза 4-5.Поднадоело =).Если никто не поможетп прийдётся делать как ранше(


Сообщение отредактировал Valik_Fenko - Суббота, 16 Января 2016, 19:51
BUFFOMETZДата: Суббота, 16 Января 2016, 19:47 | Сообщение # 2
почетный гость
Сейчас нет на сайте
Закинь свою писанину в тег code. Сейчас вырвиглаз просто.
Valik_FenkoДата: Суббота, 16 Января 2016, 19:50 | Сообщение # 3
почетный гость
Сейчас нет на сайте
Тут кто-то живой есть?)

Сообщение отредактировал Valik_Fenko - Суббота, 16 Января 2016, 19:56
BUFFOMETZДата: Суббота, 16 Января 2016, 19:58 | Сообщение # 4
почетный гость
Сейчас нет на сайте
Если завершает преждевременно значит прошел все проверки и наткнулся на break.
Valik_FenkoДата: Суббота, 16 Января 2016, 20:04 | Сообщение # 5
почетный гость
Сейчас нет на сайте
Проблема в том что после того как я добавил Player.LastOpenBag и засунул туда где отрисовываются ячейки в сумках(чтобы сумки отображались в последовательности как их открыли)После этого цикл в Interface.cs начал тикать ток 1 раз.Причина ваще не понятно в чем.Мб я чем не доганяю

Добавлено (16 января 2016, 20:02)
---------------------------------------------
Вот.А где ты видешь в цикле break?

Добавлено (16 января 2016, 20:04)
---------------------------------------------
Или я чем в циклах не понимаю.Должен же тикать 4 раза.От 1 до 4.И Break; внутри нету

BUFFOMETZДата: Суббота, 16 Января 2016, 20:06 | Сообщение # 6
почетный гость
Сейчас нет на сайте
Тут вижу
Код
void OnMouseDown() {
    if(Player.bagOpen [BagID] == false) {
  for(int i = 0;i<=3;i++) {
   if(Player.LastOpenBag[i] == -1) {
    Player.bagOpen[BagID] = true;
    Player.LastOpenBag[i] = BagID;
    break;
   }
  }
    }
}


Если ты не об этом цикле, то лучше уточни какой именно цикл прерывается.

Щас скопирую себе твои скрипты и посмотрю, тут мешанина какая-то


Сообщение отредактировал BUFFOMETZ - Суббота, 16 Января 2016, 20:08
Valik_FenkoДата: Суббота, 16 Января 2016, 20:13 | Сообщение # 7
почетный гость
Сейчас нет на сайте
Код
for(int i = 1;i <= 4;i++)
{
Bag[i-1].pixelInset = new Rect(Screen.width - 40*i,4,38,38);
if(Player.bagOpen[Player.LastOpenBag[i-1]] == true)
{
if(12-slEnableY < Player.SlotInBag[Player.LastOpenBag[i-1]]/4)
{
slEnableX_+=1;
slEnableY=1;
}
slEnableX=Player.SlotInBag[Player.LastOpenBag[i-1]];
while(slEnableX>0) slEnableX-=4;
slEnableX=-slEnableX+1;
for(int s = 1;s<=Player.SlotInBag[Player.LastOpenBag[i-1]];s++)
{
if(GUI.Button(new Rect(Screen.width-3-40*slEnableX-160*slEnableX_,Screen.height-43-36*slEnableY,36,36),"",buttonStyle)){
}
slEnableX+=1;
if(slEnableX == 5)
{
slEnableX=1;
slEnableY+=1;
}
}
slEnableY+=1;
}
}


Этот вот.Тот цикл работает как надо,а этот обрывается хотя его об этом не просят.

Добавлено (16 января 2016, 20:13)
---------------------------------------------
Вот!Я нашел ошибку."Array index is not of range".Че эт значит?.Индекс вроде впорядке.
Player.LastOpenBag у него 4 элемента
обращение идет к элементу
Player.LastOpenBag[i-1]
Начинает с элемента 0.В чем проблема?

А всё понял!!Там же -1 по умолчанию,типа сумка закрыта.А я проверяю.Нид добавить проверку по другому)Мде.Туплю


Сообщение отредактировал Valik_Fenko - Суббота, 16 Января 2016, 20:15
BUFFOMETZДата: Суббота, 16 Января 2016, 20:25 | Сообщение # 8
почетный гость
Сейчас нет на сайте
Так проблему решил?
Кстати лучше переходи на новый UI, пока не поздно. Легаси GUI такое порево. biggrin


Сообщение отредактировал BUFFOMETZ - Суббота, 16 Января 2016, 20:28
Valik_FenkoДата: Суббота, 16 Января 2016, 20:45 | Сообщение # 9
почетный гость
Сейчас нет на сайте
+++.Спасибо за моральную поддержку

Добавлено (16 января 2016, 20:27)
---------------------------------------------
biggrin

Добавлено (16 января 2016, 20:45)
---------------------------------------------
Чего?Мне норм.Тем более в у меня некое подобие mmorpg ,а не шутер где много чего инрефейс играет.Думаю норм будет)).Я уже разобрался.Просто ошибки такие глупые

Valik_FenkoДата: Суббота, 16 Января 2016, 20:45 | Сообщение # 10
почетный гость
Сейчас нет на сайте
Подскажите как лучше сделать систему предметов.
Я там видел пример через какой-то List и всё такое,но ничиго не понял.Мне нужно что-то более динамическое,ибо создаю рпг,где убивая мобов создается лут(предметы).Эт нид сделать скрипт где будут статы предмета ,потом на обьект обьект в префаб,но я чет запутался((.Как это всё оформить?

Если будете кидать пример - то чтоб более-менее понятно был прокоментирован код,а то я не люблю тупо копировать.Надо ж разобраться


Сообщение отредактировал Valik_Fenko - Пятница, 15 Января 2016, 22:12
Valik_FenkoДата: Суббота, 16 Января 2016, 20:45 | Сообщение # 11
почетный гость
Сейчас нет на сайте
Хочу свою текстуру кнопки.Можно это как-то сделать?(Gui.Buttom)

Сообщение отредактировал Valik_Fenko - Суббота, 16 Января 2016, 16:36
MarkoffkaДата: Суббота, 16 Января 2016, 20:45 | Сообщение # 12
Pixel Logic
Сейчас нет на сайте
Valik_Fenko, на С#?
вот, первая же ссылка в гугле, вот и на родном языке
так же и на гцупе есть, со всеми объяснениями
все это найдено меньше, чем за 5 минут...

да простит бог за гцуп


Сообщение отредактировал Nitro - Пятница, 15 Января 2016, 22:26
last2424Дата: Суббота, 16 Января 2016, 20:45 | Сообщение # 13
30 мл. блоков
Сейчас нет на сайте
В одной теме мог всё написать.
Создай GUISkin, инициализируй его в коде и используй.
http://docs.unity3d.com/ru/current/Manual/gui-Customization.html


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

Сообщение отредактировал last2424 - Суббота, 16 Января 2016, 17:15
Valik_FenkoДата: Суббота, 16 Января 2016, 20:45 | Сообщение # 14
почетный гость
Сейчас нет на сайте
Спасибо,у меня искать никогда ниче не получается :(.Я ток пише код на базе того что уже знаю
berilДата: Суббота, 16 Января 2016, 20:45 | Сообщение # 15
Я не ленивый, я — энергосберегающий
Сейчас нет на сайте
Смотрю мою подпись. Те, что выше ссылка на gcup давали , там я делал на старом GUI инвентарь, в подписи у меня на новом UI )

А вообще я бы рекомендовал бы, если нужно видео, то смотреть эту серию https://www.youtube.com/watch?v=D5WEwG4L5HQ




Накодил? Убери за собой!
Инвентарь в Unity(UI)
Инвентарь в Unity(GUI)
Valik_FenkoДата: Суббота, 16 Января 2016, 20:46 | Сообщение # 16
почетный гость
Сейчас нет на сайте
Анг ваще не понимаю,но посотрю.Дело в том что я делаю некое подобие ммо),и мне нужен динамический инвентарь,а я посотрел видео на русском где чувак делает инвентарь,но добавляет элементы в инвентарь не програмно,а в ручную.Это само собой не годится.Инвентарь что ты писал вродь подходит)щас буду разбираться XD

Добавлено (16 января 2016, 12:02)
---------------------------------------------
Я пока молчу про мультиплеер,но ведь для такой игры нужен динамический инвентарь,а точней итемы.То есть,убил моба - создались предметы.А как их создать програмно ,а не в ручную позапихивать в инвентарь в вышеуказаных уроках я не увидел

Добавлено (16 января 2016, 12:08)
---------------------------------------------
Я немного разобрался с List<>();,но есть вопрос
Можно ли как-то изменить размер этого ,можно сказать массива?
Можно создать новый List с разменом на 1 больше чем старый ,но как потом обращаться к нему?(


Сообщение отредактировал Valik_Fenko - Суббота, 16 Января 2016, 12:12
VostruginДата: Суббота, 16 Января 2016, 20:46 | Сообщение # 17
постоянный участник
Сейчас нет на сайте
Здесь можно прочесть всё о коллекции List
Можно добавлять элементы в список используя метод Add. Сложно представить зачем тебе необходимо создать новый список с кол-вом элементов + 1, но:
Код

var oldList = new List<T>() {obj1, obj2};
var newList = new List<T>(oldList.Count()+1);

Обращаться к элементам списка можно по индексу: newList[0]






Сообщение отредактировал Vostrugin - Суббота, 16 Января 2016, 12:24
Valik_FenkoДата: Суббота, 16 Января 2016, 20:46 | Сообщение # 18
почетный гость
Сейчас нет на сайте
Да,но проблема в том что каждый раз когда я захочу создать предмет мне нужно перезаписать массив и как к нему потом обращяться ведь я не моуг сделать одинаковые имена им.

Добавлено (16 января 2016, 12:28)
---------------------------------------------
Мб есть более разумный способ как добавлять предметы?У меня кое что назревает.Как обратиться к элементу List?Вот этого я не оч понял.У нас есть скрипт в испекторе заданы переменные и как к ним обратиться через List

Добавлено (16 января 2016, 12:57)
---------------------------------------------
Я просто ничерта не понял в коде откуда берётся информация о предмета из List.Объясните плз)

на Add компилятор ругается и на обращение через Имя листа[индекс] тоже

вот весь код:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class ItemData : MonoBehaviour {
public List<Item> items = new List<Item>();

void Start ()
{
}
void Update()
{
}
for(int i=0;i<=items.Count;i++)
{
items[i].Name = "";
}
}

ругается на всё:
на цикл на точку после [i] ,на само i и самое весёлое что когда пишу items. мне показывает список какой-то левой дряни которая никак не относится к классу List.Че делать?

Либо компилятор кривущий,либо я чет не понял


Сообщение отредактировал Valik_Fenko - Суббота, 16 Января 2016, 13:38
allodsДата: Суббота, 16 Января 2016, 20:46 | Сообщение # 19
почти ветеран
Сейчас нет на сайте
а че у тебя цикл не в Update() а хрен пойми где
Valik_FenkoДата: Суббота, 16 Января 2016, 20:46 | Сообщение # 20
почетный гость
Сейчас нет на сайте
Вот так всегды,забыл в void запихнуть!!ааа!
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Проблема с инвентарем (.)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2021 Рейтинг