Вопрос про поиск цены в OpenIAB... Inventory.GetSkuDetails(SKU).Price должно выдавать стоимость покупки, однако Unity ругается An object reference is required to access non-static member `OnePF.Inventory.GetSkuDetails(string). GetSkuDetails сделать static не получается(ругаются другие скрипты).Вопрос- как можно сделать ссылку на GetSkuDetails из скрипта на сцене?
OpenIAB.queryInventory() можно вызывать в любом месте кода, после чего получать список через обработчик, а OnBillingSupported() вызывается в OpenIAB.init(options);, то есть в данном примере при инициализации сразу получаем список продуктов. Разбирался только с помощью поиска и исходников, не проверял в проекте, но работать должно.
Активация GUI из GUI, возможно-ли? Типа такого (код условный):
Код
if (GUI.Button (new Rect (0, 0, 100, 20), "Click")) { GUILayout.Label (texture); }
Однако, результата ноль (догадываюсь, почему). Некогда решал эту проблему, создавая пустой неактивный объект, вешая на него скрипт с нужным гуем и... Ну, в общем, понятно. Теперь хотелось-бы разобраться в GUI лучше.
_____________
Так, вижу, такое можно осуществить булем, вроде:
Код
if (GUI.Button (new Rect (0, 0, 100, 20), "Click")) { bool Click = true; }
if (Click == true) { GUILayout.Label (texture); }
Но метод выглядит малость костыльным, загружает код лишними условиями. Ещё варианты? #Хийвэл бүү ай, айвал бүү хий.
Сообщение отредактировал Бозингар - Вторник, 28 Июня 2016, 10:42
Бозингар, вариант с условиями подходит в простых ситуациях. В "UI" такой проблемы нет, там можно просто включать/отключать объекты, что похоже на то, что ты делал, то есть изобретал велосипед, вместо того чтобы пользоваться современных "UI". Мог бы пойти дальше: сделать универсальные скрипты для каждого элемента интерфейса и объединять их с помощью GameObject.
Бозингар, if срабатывает на true только при нажатии твоей кнопки, а это длится долю секунды,то есть ты ничего не увидишь. Вещай какой нибудь check на это всё, переменную bool, например public bool drawTexturePanel.
ЦитатаБозингар ()
Но метод выглядит малость костыльным
Что значит костыльный, это то, как и должно быть, не хотите кучу bool - делайте Hashtable своих или ещё каких псевдо bool классов и храните всё в одной хеш таблице. В общем то GUI обычно, в серьёзных проектах не используется кучей кода в одном скрипте, а подразделяется на классы и функции(когда значимость элемента не столь велика), обычно классы:
Простой, не самый лучший пример, но тем не менее: Простая, кастомная кнопка
Код
[Serializable] public class RButton{
public Texture normal; public Texture hover; public Texture down;
public Rect position; public PositionAnchor xAnchor = PositionAnchor.Middle; public PositionAnchor yAnchor = PositionAnchor.Middle;
public event Action OnDown; public event Action OnUp; public event Action OnHover; public event Action OnLeave; public event Action OnStartDraw; public event Action OnEndDraw; public event Action OnUpdate;
[HideInInspector] public bool isHover = false; [HideInInspector] public bool isDown = false;
public virtual void Update(){
if (isHover){ if (Input.GetMouseButtonDown(0)){ if (OnDown != null) OnDown(); isDown = true; } if (Input.GetMouseButtonUp(0)){ if (OnUp != null) OnUp(); isDown = false; } }
if (OnUpdate != null) OnUpdate(); }
public virtual void Draw(float ratio, Vector2 offset){
if (OnStartDraw != null) OnStartDraw();
float x = 0f; if (xAnchor == PositionAnchor.Left) x = position.x * ratio; if (xAnchor == PositionAnchor.Middle) x = position.x * ratio +offset.x; if (xAnchor == PositionAnchor.Right) x = Screen.width - (position.x + position.width) * ratio;
float y = 0f; if (yAnchor == PositionAnchor.Left) y = position.y * ratio; if (yAnchor == PositionAnchor.Middle) y = position.y * ratio +offset.y; if (yAnchor == PositionAnchor.Right) y = Screen.height - (position.y + position.height) * ratio;
GUI.DrawTextureWithTexCoords(new Rect(x, y, width, height), texture, new Rect(0, 0, 1, 1));
if (OnEndDraw != null) OnEndDraw();
}
}
P.S. Вообще, если вы не программист и не хотите в этом разбираться, то используйте UI
Добавлено (28 июня 2016, 11:47) --------------------------------------------- Lertmind, кто нибудь догадался пропатчить стандартный CanvasScaler парой строчек кода?) Мягко сказать, его растяжение не везде ахти, к примеру на 16:9 всё норм, но вот при обратной 9:16 всё разлезется(или взять те же квадратные мониторы)
Вот небольшой патч, который появился у RW при переходе на UI:
... Для большинства конечно)
Код
using UnityEngine; using System.Collections; using UnityEngine.UI;
public class AutoMatch : MonoBehaviour {
public CanvasScaler scaler; private Vector2 lastScreenSize = Vector2.zero;
void Update(){ UpdateMatchRatio(); }
private void UpdateMatchRatio(){
if (lastScreenSize.x != (float)Screen.width || lastScreenSize.y != (float)Screen.height){ lastScreenSize = new Vector2((float)Screen.width, (float)Screen.height);
Ребята где хранятся PlayerPrefs в WebGl проекте ? как их почистить из IndexedDB ? Пока сделал только PlayerPrefs.DeleteAll(); на секретную кнопку, хоть так пусть будет )
НУ как я понимаю IndexedDB в каждом браузере может быть реализован по своему. Поэтому где расположена база - неважно. Нужно использовать API IndexedDB - это будет кроссбраузерно. https://www.w3.org/TR/IndexedDB/
НУ как я понимаю IndexedDB в каждом браузере может быть реализован по своему. Поэтому где расположена база - неважно. Нужно использовать API IndexedDB - это будет кроссбраузерно. https://www.w3.org/TR/IndexedDB/
Спасибо, но вроде PlayerPrefs.DeleteAll() норм работает Будет время попробую разобраться с IndexedDB
Есть 2 объекта. Чтобы они не сталкивались, я создал 2 Layera и снял галочки в Edit=> Project Settings=>Physics 2D. А как это сделать в скрипте? Например есть переменная bool, и если она равна true, то эти объекты не сталкивались .
Сообщение отредактировал STRATEG766 - Суббота, 02 Июля 2016, 18:59
Вопросец небольшой.. Имеем 1 модель монитора. Имеем 1 атлас с 4 текстурами в ней (экраны). Ну и имеем 1 текстуру для корпуса. Вот как лучше поступить? 1. 1 модель, 1 текстура атлас, 4 мата с разными оффсетами = 4 префаба. 2. 4 модели, 1 текстура атлас, 1 мат = 4 префаба.
2 вариант оказался выгоднее.
Сообщение отредактировал mastersmit - Среда, 06 Июля 2016, 09:34
К слову о строительстве в 2d изометрии. Как решить проблему неправильного перекрывания друг друга спрайтов возводимых построек? Понятно, что каждой нужно свой слой задавать относительно других, в этом-то и загвоздка. Варианты есть, но хотелось-бы узнать мнение здешних специалистов.
Бозингар, Сортируйте по высоте. Первой высотой будет расстояние от верхней части экрана, второй высота по псевдо Y оси. Сделайте скрипт, который берёт весь ваш мир по кубикам у которых задана только псевдо Y высота (в отдельном скрипте или ещё где-то), сортирует массив и задаёт каждому спрайту свой слой отрисовки. Это сделать не трудно. А ещё можно сделать некий обсервер для движущихся объектов, но тут придётся немного подумать и придумать способ безболезненной смены слоёв, дабы fps не снижался. Я один придумал, но его нужно проверять на практике и дополнять, поэтому говорить не буду - может оказаться болезненно для вашей игры)
Да, примерно такой вариант изначально и был. Подумал, что должны быть и менее очевидные способы решить проблему. Но видимо, придётся и заниматься им дальше)
Весьма помог цей урок. Возможно, кому-то тоже пригодится. #Хийвэл бүү ай, айвал бүү хий.
Сообщение отредактировал Бозингар - Четверг, 07 Июля 2016, 10:26
Подскажите, комрады, как лучше всего реализовать управление персонажем как в игре Машинариум? ICQ: 422190728, E-Mail: funnyalien@yandex.ru, Jabber: funnyalien@jabber.ru, Steam: funnyalienvalentine, Twitter: MrFunnyAlien, Skype: happyconsole, ВКонтакте: vk.com/twinemen, Мобильный: +79199212414.
Подскажите, комрады, как лучше всего реализовать управление персонажем как в игре Машинариум?
Управление вообщем то простое... Я бы постоянно райкастил от курсора в сцену. Вся область, по которой персонаж может ходить имела бы свой меш коллайдер и тег Ground. И в Update проверка - если луч упирается в землю, то отображаем на курсоре спрайт с ножками. Если в этот момент происходит клик - двигаем персонажа в данную точку. Если же луч упирается в объект, с которым можно взаимодействовать, то опять же менял бы спрайтик курсора. На каждый из таких объектов я бы повесил коллайдер и скрипт, в котором в OnMouseDown писал бы логику для данного действия (это обработчик нажатия). King Size #Gamiron12
NEBR, не совсем корректен ваш способ. В той игре есть разные уровни высоты и "глубины" движения, насколько я понял. Т.е. изображение всё двухмерное, но персонаж может двигаться дальше и ближе от камеры, соответственно. Если Eye, разрабатывает трёхмерную игру, то самое простое решение - это NavMesh. Да и без него с тем же рейкастом в принципе можно разобраться. В 2D же, полагаю, лучшим решением было бы сделать эдакий примитивный аналог навмеш с клеточками, куда может двигаться игрок, настраиваемый вручную. Положение клеточек можно сделать по двум осям и добавить параметр "глубины", а можно сделать по трём (насколько я помню, при работе над 2д в юнити, третья ось всё ещё имеется и двигать по ней можно) и просто двигать в клеточку, на которую нажал игрок. Ну и для этого, разумеется, использовать поиск пути, проверяя, занята ли клеточка на пути к точке движения или нет. Для хождения по лестнице можно задать некую переменную Step, как в навмеш, которая будет отображать, на сколько клеточек игрок может подняться вверх за раз (если перед ним препятствие из 1 клеточки, к примеру, он может просто на неё встать, а если из двух - уже нет, слишком высоко для шага). Как-то так.
Добавлено (08 июля 2016, 18:42) --------------------------------------------- Кстати, интересует такой вопрос, можно ли как-то у дочернего для дерева объекта сделать триггер? Деревья создаются с помощью инструментов террейна, и мой триггер превращается в обычный коллайдер, что печально. Расставлять их вручную будет раз в 15 дольше, а решать такую странную задачу мне ещё не приходилось, поэтому прошу совета. Долгожданный анонсик: State of War
Сообщение отредактировал EchoIT - Пятница, 08 Июля 2016, 18:42