Результаты поиска
| |
Valik_Fenko | Дата: Среда, 20 Января 2016, 16:16 | Сообщение # 61 | Тема: Экран и бокс |
почетный гость
Сейчас нет на сайте
| Есть Gui.Box ,и нужно сделать чтоб он не выходил за экран при отрисовке
Но он почему-то не работает(Не пойму почему.Вот первая часть кода:
Это сам код где должно отодвигать бокс левее если он выходил за экран:
Код if(NewRect.Contains(Event.current.mousePosition)) { TT_x = Event.current.mousePosition.x; TT_y = Event.current.mousePosition.y; }
Код float TT_xMax=200,TT_yMax=160; if(Screen.width-TT_x < TT_xMax) TT_x-=Screen.width-TT_x; if(Screen.height-TT_y < TT_yMax) TT_y-=Screen.height-TT_y; GUI.Box(new Rect(TT_x,TT_y,TT_xMax,TT_yMax)," X:"+TT_x.ToString()+" Y:"+TT_y.ToString(),TTStyle);
Конечно это не весь код,но я скинул то что отвечает за отрисовку бокса
Сообщение отредактировал Valik_Fenko - Среда, 20 Января 2016, 16:24 |
|
| |
Valik_Fenko | Дата: Вторник, 19 Января 2016, 17:57 | Сообщение # 62 | Тема: Проблема с инвентарем |
почетный гость
Сейчас нет на сайте
| В справке я ниче не нашел
|
|
| |
Valik_Fenko | Дата: Вторник, 19 Января 2016, 16:04 | Сообщение # 63 | Тема: Проблема с инвентарем |
почетный гость
Сейчас нет на сайте
| Я посотрел урок по созданию Gui инвентаря ,но ничерта не понял =(.Как сделать перетаскивание Gui.Button? //
Так терь появился другой вопрос.У меня есть этот самый Gui.Box с иконкой предмета он такается по экрану,но как сделать чтоб он был поверх других боксов и кнопок?
Сообщение отредактировал Valik_Fenko - Вторник, 19 Января 2016, 16:41 |
|
| |
Valik_Fenko | Дата: Вторник, 19 Января 2016, 14:52 | Сообщение # 64 | Тема: Проблема с инвентарем |
почетный гость
Сейчас нет на сайте
| Проще,красивей.Чем ? Не по теме.
Сообщение отредактировал Valik_Fenko - Вторник, 19 Января 2016, 14:52 |
|
| |
Valik_Fenko | Дата: Вторник, 19 Января 2016, 14:22 | Сообщение # 65 | Тема: Проблема с инвентарем |
почетный гость
Сейчас нет на сайте
| Мне нид сделать чтоб зажатой на иконке клавиши миши происходило одно дейсвие ,а при нажатия на неё - другое.Я написал вот так но это не работает((
Код if(NewRect.Contains(Event.current.mousePosition)) { if(Input.GetMouseButton(0)) { GUI.Label(NewRect,"Работает"); if(Input.GetMouseButtonDown(0)) { //Дейтвие } } } }
|
|
| |
Valik_Fenko | Дата: Понедельник, 18 Января 2016, 22:41 | Сообщение # 66 | Тема: Проблема с инвентарем |
почетный гость
Сейчас нет на сайте
| Пишу инвентарь на Gui ,пока успешно,но столкнулся с тонкостью. Есть вот такое if(Gui.Buttom(new rect,бла бла бла... { } это проверяет нажатия на кнопку,а как мне проверить скажем наведения на неё мишкой или мб мне нид проверить что мишка зажата на кнопке.Как это сделать?
|
|
| |
Valik_Fenko | Дата: Понедельник, 18 Января 2016, 22:38 | Сообщение # 67 | Тема: Массив |
почетный гость
Сейчас нет на сайте
| karuy.Моя код был рабочий.Надо только было break; поставить в цикле...Сам разобрался Добавлено (18 января 2016, 22:38) --------------------------------------------- и что есть var? это же Java я просто с c# работаю.Пардон ,забыл уточнить
|
|
| |
Valik_Fenko | Дата: Понедельник, 18 Января 2016, 14:16 | Сообщение # 68 | Тема: Массив |
почетный гость
Сейчас нет на сайте
| Есть обыкновенный одномерный массив из 4 элементов,мне нужно что сделать вот допустим по умолчанию все элементы массива равны -1.Потом они могут изменятся программой Скажм массив будет выглядеть вот так:
1,-1,0,-1
и мне нужно сделать так чтобы элемент массива не равный -1 максимально сдвинулся влево и принял такой вид
1,0,-1,-1. У меня получилось сделать это,но есть проблемы с элементами массива когда все несколько элеметов не равны -1 и в ходе программы средний элемент поставить на -1.Тогда 2 предидущих тоже станут -1,непонятно че короче с ним происходит =).Код выглядит так:
Код for (int l = 0; l <= Player.LastOpenBag.Length; l++) { if(Player.LastOpenBag[l] == -1) { for(int i = 0;i < Player.LastOpenBag.Length;i++) { if(Player.LastOpenBag[i] != -1 && i>l && i!=l) { Player.LastOpenBag[l] = Player.LastOpenBag[i]; Player.LastOpenBag[i] = -1; } } } }
Этот код валяется в FixedUpdate.Повторю.Я хочу сделать чтоб все элементы массива не равные -1 скучковались левее,те что равны -1 справа
Сообщение отредактировал Valik_Fenko - Понедельник, 18 Января 2016, 14:20 |
|
| |
Valik_Fenko | Дата: Суббота, 16 Января 2016, 20:47 | Сообщение # 69 | Тема: Проблема с инвентарем |
почетный гость
Сейчас нет на сайте
| Воту меня такая идея.Сделать два Lista Один чет типа префаба предметов,там скажем меч какой-то у него заданы статы и этот лист хранит их,а второй это созданные предметы,скажем игрок может слутать несколько одинаковых предметов и они будут создаватся из листа 1.Это норм идея или нагрузка слишком большая будит.Мб кто чего посоветует получше?
Сообщение отредактировал Valik_Fenko - Суббота, 16 Января 2016, 14:05 |
|
| |
Valik_Fenko | Дата: Суббота, 16 Января 2016, 20:46 | Сообщение # 70 | Тема: Проблема с инвентарем |
почетный гость
Сейчас нет на сайте
| Вот так всегды,забыл в void запихнуть!!ааа!
|
|
| |
Valik_Fenko | Дата: Суббота, 16 Января 2016, 20:46 | Сообщение # 71 | Тема: Проблема с инвентарем |
почетный гость
Сейчас нет на сайте
| Да,но проблема в том что каждый раз когда я захочу создать предмет мне нужно перезаписать массив и как к нему потом обращяться ведь я не моуг сделать одинаковые имена им.
Добавлено (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 |
|
| |
Valik_Fenko | Дата: Суббота, 16 Января 2016, 20:46 | Сообщение # 72 | Тема: Проблема с инвентарем |
почетный гость
Сейчас нет на сайте
| Анг ваще не понимаю,но посотрю.Дело в том что я делаю некое подобие ммо),и мне нужен динамический инвентарь,а я посотрел видео на русском где чувак делает инвентарь,но добавляет элементы в инвентарь не програмно,а в ручную.Это само собой не годится.Инвентарь что ты писал вродь подходит)щас буду разбираться XD
Добавлено (16 января 2016, 12:02) --------------------------------------------- Я пока молчу про мультиплеер,но ведь для такой игры нужен динамический инвентарь,а точней итемы.То есть,убил моба - создались предметы.А как их создать програмно ,а не в ручную позапихивать в инвентарь в вышеуказаных уроках я не увидел
Добавлено (16 января 2016, 12:08) --------------------------------------------- Я немного разобрался с List<>();,но есть вопрос Можно ли как-то изменить размер этого ,можно сказать массива? Можно создать новый List с разменом на 1 больше чем старый ,но как потом обращаться к нему?(
Сообщение отредактировал Valik_Fenko - Суббота, 16 Января 2016, 12:12 |
|
| |
Valik_Fenko | Дата: Суббота, 16 Января 2016, 20:45 | Сообщение # 73 | Тема: Проблема с инвентарем |
почетный гость
Сейчас нет на сайте
| Спасибо,у меня искать никогда ниче не получается :(.Я ток пише код на базе того что уже знаю
|
|
| |
Valik_Fenko | Дата: Суббота, 16 Января 2016, 20:45 | Сообщение # 74 | Тема: Проблема с инвентарем |
почетный гость
Сейчас нет на сайте
| Подскажите как лучше сделать систему предметов. Я там видел пример через какой-то List и всё такое,но ничиго не понял.Мне нужно что-то более динамическое,ибо создаю рпг,где убивая мобов создается лут(предметы).Эт нид сделать скрипт где будут статы предмета ,потом на обьект обьект в префаб,но я чет запутался((.Как это всё оформить?
Если будете кидать пример - то чтоб более-менее понятно был прокоментирован код,а то я не люблю тупо копировать.Надо ж разобраться
Сообщение отредактировал Valik_Fenko - Пятница, 15 Января 2016, 22:12 |
|
| |
Valik_Fenko | Дата: Суббота, 16 Января 2016, 20:45 | Сообщение # 75 | Тема: Проблема с инвентарем |
почетный гость
Сейчас нет на сайте
| Хочу свою текстуру кнопки.Можно это как-то сделать?(Gui.Buttom)
Сообщение отредактировал Valik_Fenko - Суббота, 16 Января 2016, 16:36 |
|
| |
Valik_Fenko | Дата: Суббота, 16 Января 2016, 20:45 | Сообщение # 76 | Тема: Проблема с инвентарем |
почетный гость
Сейчас нет на сайте
| +++.Спасибо за моральную поддержку Добавлено (16 января 2016, 20:27) ---------------------------------------------
Добавлено (16 января 2016, 20:45) --------------------------------------------- Чего?Мне норм.Тем более в у меня некое подобие mmorpg ,а не шутер где много чего инрефейс играет.Думаю норм будет)).Я уже разобрался.Просто ошибки такие глупые
|
|
| |
Valik_Fenko | Дата: Суббота, 16 Января 2016, 20:13 | Сообщение # 77 | Тема: Проблема с инвентарем |
почетный гость
Сейчас нет на сайте
| Код 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 |
|
| |
Valik_Fenko | Дата: Суббота, 16 Января 2016, 20:04 | Сообщение # 78 | Тема: Проблема с инвентарем |
почетный гость
Сейчас нет на сайте
| Проблема в том что после того как я добавил Player.LastOpenBag и засунул туда где отрисовываются ячейки в сумках(чтобы сумки отображались в последовательности как их открыли)После этого цикл в Interface.cs начал тикать ток 1 раз.Причина ваще не понятно в чем.Мб я чем не доганяю Добавлено (16 января 2016, 20:02) --------------------------------------------- Вот.А где ты видешь в цикле break? Добавлено (16 января 2016, 20:04) --------------------------------------------- Или я чем в циклах не понимаю.Должен же тикать 4 раза.От 1 до 4.И Break; внутри нету
|
|
| |
Valik_Fenko | Дата: Суббота, 16 Января 2016, 19:50 | Сообщение # 79 | Тема: Проблема с инвентарем |
почетный гость
Сейчас нет на сайте
| Тут кто-то живой есть?)
Сообщение отредактировал Valik_Fenko - Суббота, 16 Января 2016, 19:56 |
|
| |
Valik_Fenko | Дата: Суббота, 16 Января 2016, 18:42 | Сообщение # 80 | Тема: Проблема с инвентарем |
почетный гость
Сейчас нет на сайте
| Ваще не пойму что не так.Вот код
Код 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 |
|
| |
|