2014-11-28 3 views
4

Как создать обычную кнопку с текстовой меткой в ​​Unity 4.6 без использования каких-либо сборных или клонирующих существующих объектов игры? Я буду использовать кнопку для целей отладки, поэтому я не хочу загромождать иерархию дизайна с помощью этой кнопки.Создать кнопку пользовательского интерфейса из сценария C# в Unity 4.6 без каких-либо сборных данных

+1

Связанные нити: forum.unity3d.com/threads/creating-a-gui-from-code.263563 <- из этой дискуссии я Думаю, что даже если существует способ создать нормальную кнопку из кода, она настолько раздута и уродлива, что это, вероятно, не стоит проблем. Конечно, беспорядок с несколькими дополнительными сборными может быть не на 100% чистым, но он выглядит как меньшее зло. – Jonny

+0

Я не уверен, как этот вопрос может быть дубликатом, как он был написан в 2014 году, и этот другой вопрос был написан 2016. – Jonny

ответ

2

Следующие действия относятся только к унаследованной системе gui от Unity3 (до 2012 года). Теперь он недоступен.

Добавьте эту функцию в любой скрипт и на ней отобразится кнопка размером 100 х 100 пикселей в верхнем левом углу. Затем просто измените Debug.Log на ваш код отладки.

void OnGUI() // deprecated, use ordinary .UI now available in Unity 
{ 
    if(GUI.Button(new Rect(0, 0, 100, 100), "Debug!")){ 
     Debug.Log("Do some debugging"); 
    } 
} 
+0

Это работает. Но нет ли способа использовать кнопку 4.6? – Jonny

+1

Хотя я отметил это правильно, вопрос по-прежнему остается без ответа, как для кнопки пользовательского интерфейса. Я нахожусь в поиске практического почти каждый день. Если кто-то может опубликовать рабочий пример, я отвечу вместо этого. – Jonny

+0

Вопрос конкретно о 4.6+. GUI-класс устарел/устарел –

1

необходимо создать сборку элемента пользовательского интерфейса, который вы хотите создать. И после того, как вы можете манипулировать своим элементом ui как игровым объектом и использовать метод GetComponet для управления свойствами и методами. Смотрите Справку http://docs.unity3d.com/Manual/HOWTO-UICreateFromScripting.html

+2

Проблема с этим подходом заключается в том, что в этом случае, когда я не хочу загромождать дизайн с помощью элементов dev/debug, сборщик dev будет располагаться между производством префабы. Я не хочу отправлять этот материал. Вот почему я спросил: «Никаких предвалов, пожалуйста». – Jonny

9

Вы можете использовать это для UI 4.6

public void CreateButton(Transform panel ,Vector3 position, Vector2 size, UnityEngine.Events.UnityAction method) 
{ 
    GameObject button = new GameObject(); 
    button.transform.parent = panel; 
    button.AddComponent<RectTransform>(); 
    button.AddComponent<Button>(); 
    button.transform.position = position; 
    button.GetComponent<RectTransform>().SetSize(size); 
    button.GetComponent<Button>().onClick.AddListener(method); 
} 
Смежные вопросы