Показать сообщение отдельно
Старый 02.08.2013, 17:25   #1731
WISHMASTER35
Бывалый
 
Аватар для WISHMASTER35
 
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений
(для 357 пользователей)
Ответ: Вопросы от новичка

pax, так правильно заработало.
GUILayout.Space(30+Mathf.Ceil(GUI.skin.toggle.padd ing.horizontal/2f))

Использовал Handles.FreeMoveHandle. Нужно было определить какой из этих шариков сейчас активный. Узнать это можно только использовав GUI.SetNextControlName и GetNameOfFocusedControl, что оказалось очень тормозным. Правда шариков у меня было 100.

Пришлось с помощью рефлекций добираться до внутреннего метода юнити. Вообщем вот что получилось
delegate Vector3 FreeMove(int id, Vector3 position, Quaternion rotation, float size, Vector3 snap, Handles.DrawCapFunction capFunc);
private static FreeMove freeMove;
	
	static MyHandles() {
		var assembly = Assembly.GetAssembly( typeof(Handles) );
		Type type = assembly.GetType("UnityEditorInternal.FreeMove");
		var method = type.GetMethod("Do");
		freeMove = (FreeMove)Delegate.CreateDelegate( typeof(FreeMove), method );
	}
Это чтобы можно было рисовать FreeMoveHandle, со своим ID. Ну а дальше генерирую свой id EditorGUIUtility.GetControlID(FocusType.Keyboard), рисую шарик и сверяю EditorGUIUtility.hotControl со своим ID.
Вот теперь думаю они вообще занимаются своим редактором?
Ведь достаточно было сделать возможность получить последний сгенерированный ID или сделать проверку на фокус последнего контрола.
(Offline)
 
Ответить с цитированием