Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Unity > Общие вопросы

Общие вопросы вопросы не попадающие ни в один из доступных разделов

Ответ
 
Опции темы
Старый 25.06.2012, 01:22   #391
WISHMASTER35
Бывалый
 
Аватар для WISHMASTER35
 
Регистрация: 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();
	}
Только данный код для моих спрайтов, но переделать будет легко.
Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный.png
Просмотров: 635
Размер:	12.1 Кб
ID:	17091  
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
cahekp (25.06.2012)
Старый 25.06.2012, 08:52   #392
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Вопросы от новичка

Сообщение от WISHMASTER35 Посмотреть сообщение
Когда-то пытался написать окошко с выбором текстуры как в TerrainEditor.
Теперь смог написать))
Кнопки хорошо масштабируется и автоматически переносится на новую строку.
Только данный код для моих спрайтов, но переделать будет легко.
Выкладывая такой код надо бы выкладывать сопутствующие классы (XAtlas, XSprite) и объяснять какую роль играют. Иначе код для начинающих бесполезен. Да и для такого поста место в отдельной теме.

PS: Кстати GL и Graphics должны так же поддерживаться только в Pro.
__________________
Blitz3d to Unity Wiki

Последний раз редактировалось pax, 25.06.2012 в 11:29.
(Offline)
 
Ответить с цитированием
Старый 25.06.2012, 12:28   #393
WISHMASTER35
Бывалый
 
Аватар для WISHMASTER35
 
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений
(для 357 пользователей)
Ответ: Вопросы от новичка

Если я выложу и остальной код, то для начинающего будет еще сложнее. Впрочем начинающие не лезут в редактор.
Там кстате, странный баг есть. DrawRect в разных местах рисуется более светлым или темным. Не пойму в чем дело.
Использую GL и Graphics в инди версии. Возможно не все функции присутствуют.
(Offline)
 
Ответить с цитированием
Старый 25.06.2012, 16:45   #394
WISHMASTER35
Бывалый
 
Аватар для WISHMASTER35
 
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений
(для 357 пользователей)
Ответ: Вопросы от новичка

А свои классы нельзя наследовать от Object?
Попробовал так сделать, но в таком классе поля не сохраняются. Если проверять ссылку на такой класс на null, то результат всегда положителен т.е. ссылка равна null, хотя это не так.

Собственно хотел, чтобы в одном классе хранились списки спрайтов, а в других классах хранились ссылки на спрайты, именно на те объекты, а не их копии. Думал, если наследовать от Object, то будет так, но оно еще хуже)
(Offline)
 
Ответить с цитированием
Старый 25.06.2012, 17:10   #395
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Вопросы от новичка

ScriptableObject с сохранением в ассеты, либо делай свою сериализацию с поддержкой ссылок. Мы кстати тестировали сцену с большим количеством перекрестных ссылок - делали карту двухмерную, в каждом тайле добавляли ссылку на соседние тайлы (хотели сделать граф для поиска путей). так вот сцена сохранялась, а при открытии Unity падало. Поддержка сказала, что это известный баг, но второстепенный, поэтому не знаю, исправили ли его...
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
WISHMASTER35 (25.06.2012)
Старый 25.06.2012, 18:22   #396
WISHMASTER35
Бывалый
 
Аватар для WISHMASTER35
 
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений
(для 357 пользователей)
Ответ: Вопросы от новичка

Префабы плодить не хочу. Сейчас у меня у каждого спрайта свой id и я сравниваю эти id, а не ссылки, но это довольно не удобно(
А что за сериализацию с поддержкой ссылок?
Класс я помечаю аннотацией [System.Serializable], но это не помогает.
(Offline)
 
Ответить с цитированием
Старый 25.06.2012, 18:25   #397
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Вопросы от новичка

Нет, я имею ввиду сохраняй все в свой формат с поддержкой ссылок (сам пиши механизм нахождения ссылок). Другого варианта нет. Вообще на твоем бы месте я оставил все как есть, раз работает.

Можно сделать каждый спрайт MonoBehaviour и вешать эти компоненты на какой-то дочерний объект - держатель информации. Тогда сможешь сохранить на них ссылки.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
WISHMASTER35 (25.06.2012)
Старый 25.06.2012, 18:52   #398
WISHMASTER35
Бывалый
 
Аватар для WISHMASTER35
 
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений
(для 357 пользователей)
Ответ: Вопросы от новичка

Можно сделать каждый спрайт MonoBehaviour и вешать эти компоненты на какой-то дочерний объект - держатель информации.
Это уже интереснее. Можно даже на объект атласа повесить его спрайты, если можно будет эти спрайты скрыть в инспекторе.
Вообще на твоем бы месте я оставил все как есть
Ну если так делать, то можно всю жизнь гомнокодить. Работает же))

А если у меня не MonoBehaviour, а ScriptableObject, то можно добавлять компоненты на префаб? gameObject.AddComponent тут нету(:
(Offline)
 
Ответить с цитированием
Старый 25.06.2012, 19:42   #399
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Вопросы от новичка

Префаб это объект сцены, а не объект данных как ScriptableObject. Можно в один ассет добавлять много других - сделать сборный ассет.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 25.06.2012, 20:49   #400
Lowlet
ПроЭктировщик
 
Регистрация: 10.05.2011
Сообщений: 104
Написано 49 полезных сообщений
(для 170 пользователей)
Ответ: Вопросы от новичка

зависит ли скорость выполнения функций Invoke и InvokeRepeating от фпс?Если да,то мне их надо перемножать на Time.deltaTime?
(Offline)
 
Ответить с цитированием
Старый 25.06.2012, 20:56   #401
WISHMASTER35
Бывалый
 
Аватар для WISHMASTER35
 
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений
(для 357 пользователей)
Ответ: Вопросы от новичка

Может и надо было оставить как работало)) Теперь вообще куча ошибок каких-то))
Добавляю спрайт на префаб, а вместо моего спрайта написано type mismatch. Что это значит?
(Offline)
 
Ответить с цитированием
Старый 25.06.2012, 20:57   #402
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Сообщение от Lowlet Посмотреть сообщение
зависит ли скорость выполнения функций Invoke и InvokeRepeating от фпс?Если да,то мне их надо перемножать на Time.deltaTime?
от FPS наверное не зависит, а вот от Time.timeScale должна.

Сообщение от WISHMASTER35 Посмотреть сообщение
написано type mismatch. Что это значит?
Несоответствие типов. Т.е. разные типы данных в одном выражении.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Lowlet (25.06.2012)
Старый 25.06.2012, 21:08   #403
WISHMASTER35
Бывалый
 
Аватар для WISHMASTER35
 
Регистрация: 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
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 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();
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
WISHMASTER35 (25.06.2012)
Старый 25.06.2012, 22:45   #405
WISHMASTER35
Бывалый
 
Аватар для WISHMASTER35
 
Регистрация: 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)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 19:35.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com