|
Общие вопросы вопросы не попадающие ни в один из доступных разделов |
25.06.2012, 01:22
|
#391
|
Бывалый
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений (для 357 пользователей)
|
Ответ: Вопросы от новичка
Когда-то пытался написать окошко с выбором текстуры как в TerrainEditor.
Теперь смог написать))
Кнопки хорошо масштабируется и автоматически переносится на новую строку.
private static int SelectionSpriteGrid(int selected, XAtlas atlas, int approxSize) {
Texture texture = atlas.GetMaterial().mainTexture;
List<XSprite> sprites = atlas.GetSprites();
const int yIndent = 5;
int xCount = Screen.width / approxSize;
GUILayout.BeginVertical("box");
for(int i=0; i<sprites.Count;) {
GUILayout.BeginHorizontal();
for(int x=0; x<xCount; x++, i++) {
Rect itemRect = GUILayoutUtility.GetAspectRect((float)approxSize/(approxSize+yIndent));
if(i >= sprites.Count) continue;
if(selected == i) {
Rect selectRect = new Rect(itemRect.x+1, itemRect.yMax-yIndent, itemRect.width-2, yIndent);
Color color = new Color(0.23f, 0.5f, 0.99f, 1f);
DrawRect(selectRect, color);
}
itemRect.xMin += 1;
itemRect.xMax -= 1;
itemRect.yMin += 1;
itemRect.yMax -= 1+yIndent;
if(Event.current.type == EventType.MouseDown && itemRect.Contains(Event.current.mousePosition)) {
selected = i;
GUI.changed = true;
}
GUI.DrawTextureWithTexCoords(itemRect, texture, sprites[i].GetFixedRect());
}
GUILayout.EndHorizontal();
}
GUILayout.EndVertical();
return selected;
}
private static void DrawRect(Rect rect, Color color) {
Vector3 a = new Vector3(rect.xMin, rect.yMin, 0);
Vector3 b = new Vector3(rect.xMax, rect.yMin, 0);
Vector3 c = new Vector3(rect.xMax, rect.yMax, 0);
Vector3 d = new Vector3(rect.xMin, rect.yMax, 0);
GL.Color(color);
GL.Begin(GL.TRIANGLES);
GL.Vertex(a);
GL.Vertex(b);
GL.Vertex(c);
GL.Vertex(c);
GL.Vertex(d);
GL.Vertex(a);
GL.End();
}
Только данный код для моих спрайтов, но переделать будет легко.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
25.06.2012, 08:52
|
#392
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Вопросы от новичка
Сообщение от WISHMASTER35
Когда-то пытался написать окошко с выбором текстуры как в TerrainEditor.
Теперь смог написать))
Кнопки хорошо масштабируется и автоматически переносится на новую строку.
Только данный код для моих спрайтов, но переделать будет легко.
|
Выкладывая такой код надо бы выкладывать сопутствующие классы (XAtlas, XSprite) и объяснять какую роль играют. Иначе код для начинающих бесполезен. Да и для такого поста место в отдельной теме.
PS: Кстати GL и Graphics должны так же поддерживаться только в Pro.
Последний раз редактировалось pax, 25.06.2012 в 11:29.
|
(Offline)
|
|
25.06.2012, 12:28
|
#393
|
Бывалый
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений (для 357 пользователей)
|
Ответ: Вопросы от новичка
Если я выложу и остальной код, то для начинающего будет еще сложнее. Впрочем начинающие не лезут в редактор.
Там кстате, странный баг есть. DrawRect в разных местах рисуется более светлым или темным. Не пойму в чем дело.
Использую GL и Graphics в инди версии. Возможно не все функции присутствуют.
|
(Offline)
|
|
25.06.2012, 16:45
|
#394
|
Бывалый
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений (для 357 пользователей)
|
Ответ: Вопросы от новичка
А свои классы нельзя наследовать от Object?
Попробовал так сделать, но в таком классе поля не сохраняются. Если проверять ссылку на такой класс на null, то результат всегда положителен т.е. ссылка равна null, хотя это не так.
Собственно хотел, чтобы в одном классе хранились списки спрайтов, а в других классах хранились ссылки на спрайты, именно на те объекты, а не их копии. Думал, если наследовать от Object, то будет так, но оно еще хуже)
|
(Offline)
|
|
25.06.2012, 17:10
|
#395
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Вопросы от новичка
ScriptableObject с сохранением в ассеты, либо делай свою сериализацию с поддержкой ссылок. Мы кстати тестировали сцену с большим количеством перекрестных ссылок - делали карту двухмерную, в каждом тайле добавляли ссылку на соседние тайлы (хотели сделать граф для поиска путей). так вот сцена сохранялась, а при открытии Unity падало. Поддержка сказала, что это известный баг, но второстепенный, поэтому не знаю, исправили ли его...
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
25.06.2012, 18:22
|
#396
|
Бывалый
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений (для 357 пользователей)
|
Ответ: Вопросы от новичка
Префабы плодить не хочу. Сейчас у меня у каждого спрайта свой id и я сравниваю эти id, а не ссылки, но это довольно не удобно(
А что за сериализацию с поддержкой ссылок?
Класс я помечаю аннотацией [System.Serializable], но это не помогает.
|
(Offline)
|
|
25.06.2012, 18:25
|
#397
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Вопросы от новичка
Нет, я имею ввиду сохраняй все в свой формат с поддержкой ссылок (сам пиши механизм нахождения ссылок). Другого варианта нет. Вообще на твоем бы месте я оставил все как есть, раз работает.
Можно сделать каждый спрайт MonoBehaviour и вешать эти компоненты на какой-то дочерний объект - держатель информации. Тогда сможешь сохранить на них ссылки.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
25.06.2012, 18:52
|
#398
|
Бывалый
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений (для 357 пользователей)
|
Ответ: Вопросы от новичка
Можно сделать каждый спрайт MonoBehaviour и вешать эти компоненты на какой-то дочерний объект - держатель информации.
|
Это уже интереснее. Можно даже на объект атласа повесить его спрайты, если можно будет эти спрайты скрыть в инспекторе.
Вообще на твоем бы месте я оставил все как есть
|
Ну если так делать, то можно всю жизнь гомнокодить. Работает же))
А если у меня не MonoBehaviour, а ScriptableObject, то можно добавлять компоненты на префаб? gameObject.AddComponent тут нету(:
|
(Offline)
|
|
25.06.2012, 19:42
|
#399
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Вопросы от новичка
Префаб это объект сцены, а не объект данных как ScriptableObject. Можно в один ассет добавлять много других - сделать сборный ассет.
|
(Offline)
|
|
25.06.2012, 20:49
|
#400
|
ПроЭктировщик
Регистрация: 10.05.2011
Сообщений: 104
Написано 49 полезных сообщений (для 170 пользователей)
|
Ответ: Вопросы от новичка
зависит ли скорость выполнения функций Invoke и InvokeRepeating от фпс?Если да,то мне их надо перемножать на Time.deltaTime?
|
(Offline)
|
|
25.06.2012, 20:56
|
#401
|
Бывалый
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений (для 357 пользователей)
|
Ответ: Вопросы от новичка
Может и надо было оставить как работало)) Теперь вообще куча ошибок каких-то))
Добавляю спрайт на префаб, а вместо моего спрайта написано type mismatch. Что это значит?
|
(Offline)
|
|
25.06.2012, 20:57
|
#402
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Сообщение от Lowlet
зависит ли скорость выполнения функций Invoke и InvokeRepeating от фпс?Если да,то мне их надо перемножать на Time.deltaTime?
|
от FPS наверное не зависит, а вот от Time.timeScale должна.
Сообщение от WISHMASTER35
написано type mismatch. Что это значит?
|
Несоответствие типов. Т.е. разные типы данных в одном выражении.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
25.06.2012, 21:08
|
#403
|
Бывалый
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений (для 357 пользователей)
|
Ответ: Вопросы от новичка
Не знаю где там были разные типы данных, но было из-за того, что атлас и спрайт в одном месте.
Теперь бы еще разобраться с ArgumentException: Getting control 4's position in a group with only 4 controls when doing mouseDown
Aborting.
|
(Offline)
|
|
25.06.2012, 21:18
|
#404
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Вопросы от новичка
Сообщение от WISHMASTER35
Теперь бы еще разобраться с ArgumentException: Getting control 4's position in a group with only 4 controls when doing mouseDown
Aborting.
|
Происходит при изменении GUI "не вовремя". Попробуй при нажатии на кнопку сделать GUIUtility.ExitGUI();
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
25.06.2012, 22:45
|
#405
|
Бывалый
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений (для 357 пользователей)
|
Ответ: Вопросы от новичка
Ошибка ArgumentException: Getting control 4's position in a group with only 4 controls when doing mouseDown
Aborting была из-за того, что я начинал рисовать Button в MouseDown)
Всегда думал, что если в шейдере написать "Queue" = "Background" то рисоваться будет от родителя к детям по иерархии. Но сейчас почему-то в одной сцене в редакторе это перестало работать. Других способов рисовать в таком порядке нету?
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 07:11.
|