Проблема с инвентарем
| |
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 такое порево.
Сообщение отредактировал BUFFOMETZ - Суббота, 16 Января 2016, 20:28 |
|
| |
Valik_Fenko | Дата: Суббота, 16 Января 2016, 20:45 | Сообщение # 9 |
почетный гость
Сейчас нет на сайте
| +++.Спасибо за моральную поддержку Добавлено (16 января 2016, 20:27) ---------------------------------------------
Добавлено (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 запихнуть!!ааа!
|
|
| |
|