Страница 1 из 1

scrollbarthumb - как назначить стиль?

СообщениеДобавлено: 24 май 2012, 21:28
fis
Есть ScrollView. Для него назначен соответсвенно стить "scrollview". А как назначить стиль ползунку?
24.05.jpg

Re: scrollbarthumb - как назначить стиль?

СообщениеДобавлено: 25 май 2012, 11:58
fis
Кстати, на скриншоте файловый браузер сделаный полносью на Universe. Скоро выложу исходник.

Re: scrollbarthumb - как назначить стиль?

СообщениеДобавлено: 25 май 2012, 18:32
Zaicheg
http://unity3d.com/support/documentatio ... llbar.html
The styles of the buttons at then end of the scrollbar are searched for in the current skin by adding "upbutton" and "downbutton" to the style name. The name of the scrollbar thumb (the thing you drag) is found by appending "thumb" to the style name.var scrollPos : float = 0.5;
// This will use the following style names to determine the size / placement of the buttons
// MyVertScrollbarupbutton - Name of style used for the up button.
// MyVertScrollbardownbutton - Name of style used for the down button.
// MyVertScrollbarthumb - Name of style used for the draggable thumb.


Хотя лично у меня никогда не получалось сделать свои кнопки "вверх" и "вниз" — они просто переставали отображаться. Но бегунок нормально менялся.

Re: scrollbarthumb - как назначить стиль?

СообщениеДобавлено: 25 май 2012, 19:56
fis
Меня вообще то интересует как это сделать в Universe.
Для стиля скрола есть только один входящий параметр - verticalScrollbar. И меняет он только его задник но не ползунок.
Как реализовать то что написано в доке выше, но в Universe не подскажете?

Re: scrollbarthumb - как назначить стиль?

СообщениеДобавлено: 26 май 2012, 11:46
Neodrop
Ну, изменить картинки стиля, я полагаю. В Инспекторе стиля, в Universe, это всё добро наглядно отображено.
Хотя, если в этом стиле нету, нужно искать стили из этого же скина, с каким-нибудь говорящим названием. Видать код прорисовки слайдера берёт кнопочку откуда-то ещё. Я, помнится, делал кастомный слайдер для одной игрушки и делал его полностью руками. Может быть из-за этой же невозможности изменить кнопку. Не помню точно.

Re: scrollbarthumb - как назначить стиль?

СообщениеДобавлено: 28 май 2012, 13:59
fis
в инспекторе стиля всё необходимое согласно доке выше есть.
// MyVertScrollbarupbutton - Name of style used for the up button.
// MyVertScrollbardownbutton - Name of style used for the down button.
// MyVertScrollbarthumb - Name of style used for the draggable thumb.

Тоесть кнопка должна бы находить свой стить, но не находит.

Re: scrollbarthumb - как назначить стиль?

СообщениеДобавлено: 28 май 2012, 15:29
fis
В паке extra skins http://unity3d.com/support/resources/assets/extra-gui-skins есть скрипт для демонстрации последних:
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class SkinTest : MonoBehaviour
{
    public GUISkin thisMetalGUISkin;
    public GUISkin thisOrangeGUISkin;
    public GUISkin thisAmigaGUISkin;
    private Rect rctWindow1;
    private Rect rctWindow2;
    private Rect rctWindow3;
    private Rect rctWindow4;
    private bool blnToggleState = false;
    private float fltSliderValue = 0.5f;
    private float fltScrollerValue = 0.5f;
    private Vector2 scrollPosition = Vector2.zero;

    public struct snNodeArray
    {
        public string itemType, itemName;
        public snNodeArray(string itemType, string itemName)
        {
            this.itemType = itemType;
            this.itemName = itemName;
        }
    }
    private snNodeArray[] testArray = new snNodeArray[20];

    void Awake()
    {
        rctWindow1 = new Rect(20, 20, 320, 400);
        rctWindow2 = new Rect(260, 30, 320, 420);
        rctWindow3 = new Rect(260, 30, 320, 200);
        rctWindow4 = new Rect(360, 20, 320, 400);
        for (int i = 0; i < 19; i++)
        {
            testArray[i].itemType = "node";
            testArray[i].itemName = "Hello" + i;
        }
    }
    void OnGUI()
    {
        GUI.skin = thisOrangeGUISkin;
        rctWindow1 = GUI.Window(0, rctWindow1, DoMyWindow, "Orange Unity", GUI.skin.GetStyle("window"));
        GUI.skin = thisMetalGUISkin;
        rctWindow2 = GUI.Window(1, rctWindow2, DoMyWindow2, "Metal Vista", GUI.skin.GetStyle("window"));
        rctWindow3 = GUI.Window(2, rctWindow3, DoMyWindow4, "Compound Control - Toggle Listbox", GUI.skin.GetStyle("window"));
        GUI.skin = thisAmigaGUISkin;
        rctWindow4 = GUI.Window(3, rctWindow4, DoMyWindow, "Amiga500", GUI.skin.GetStyle("window"));
    }

    void gcListItem(string strItemName)
    {
        GUILayout.BeginHorizontal();
        GUILayout.Label(strItemName);
        blnToggleState = GUILayout.Toggle(blnToggleState, "");
        GUILayout.EndHorizontal();
    }

    void gcListBox()
    {
        GUILayout.BeginVertical(GUI.skin.GetStyle("box"));
        scrollPosition = GUILayout.BeginScrollView(scrollPosition, GUILayout.Width(160), GUILayout.Height(130));
        for (int i = 0; i < 20; i++)
        {
            gcListItem("I'm listItem number " + i);
        }
        GUILayout.EndScrollView();
        GUILayout.EndVertical();
    }

    void DoMyWindow4(int windowID)
    {
        gcListBox();
        GUI.DragWindow();
    }

    void DoMyWindow3(int windowID)
    {
        scrollPosition = GUI.BeginScrollView(new Rect(10, 100, 200, 200), scrollPosition, new Rect(0, 0, 220, 200));
        GUI.Button(new Rect(0, 0, 100, 20), "Top-left");
        GUI.Button(new Rect(120, 0, 100, 20), "Top-right");
        GUI.Button(new Rect(0, 180, 100, 20), "Bottom-left");
        GUI.Button(new Rect(120, 180, 100, 20), "Bottom-right");
        GUI.EndScrollView();
        GUI.DragWindow();
    }

    void DoMyWindow(int windowID)
    {
        GUILayout.BeginVertical();
        GUILayout.Label("Im a Label");
        GUILayout.Space(8);
        GUILayout.Button("Im a Button");
        GUILayout.TextField("Im a textfield");
        GUILayout.TextArea("Im a textfield\nIm the second line\nIm the third line\nIm the fourth line");
        blnToggleState = GUILayout.Toggle(blnToggleState, "Im a Toggle button");
        GUILayout.EndVertical();
        GUILayout.BeginVertical();
        //Sliders
        GUILayout.BeginHorizontal();
        fltSliderValue = GUILayout.HorizontalSlider(fltSliderValue, 0.0f, 1.1f, GUILayout.Width(128));
        fltSliderValue = GUILayout.VerticalSlider(fltSliderValue, 0.0f, 1.1f, GUILayout.Height(50));
        GUILayout.EndHorizontal();
        //Scrollbars
        GUILayout.BeginHorizontal();
        fltScrollerValue = GUILayout.HorizontalScrollbar(fltScrollerValue, 0.1f, 0.0f, 1.1f, GUILayout.Width(128));
        fltScrollerValue = GUILayout.VerticalScrollbar(fltScrollerValue, 0.1f, 0.0f, 1.1f, GUILayout.Height(90));
        GUILayout.Box("Im\na\ntest\nBox");
        GUILayout.EndHorizontal();
        GUILayout.EndVertical();
        GUI.DragWindow();
    }

    void DoMyWindow2(int windowID)
    {
        GUILayout.Label("3D Graphics Settings");
        GUILayout.BeginVertical();
        GUILayout.BeginHorizontal();
        blnToggleState = GUILayout.Toggle(blnToggleState, "Soft Shadows");
        blnToggleState = GUILayout.Toggle(blnToggleState, "Particle Effects");
        GUILayout.EndHorizontal();
        GUILayout.BeginHorizontal();
        blnToggleState = GUILayout.Toggle(blnToggleState, "Enemy Shadows");
        blnToggleState = GUILayout.Toggle(blnToggleState, "Object Glow");
        GUILayout.EndHorizontal();
        GUILayout.EndVertical();
        GUILayout.BeginVertical();
        GUILayout.Button("Im a Button");
        GUILayout.TextField("Im a textfield");
        GUILayout.TextArea("Im a textfield\nIm the second line\nIm the third line\nIm the fourth line");
        blnToggleState = GUILayout.Toggle(blnToggleState, "Im a Toggle button");
        GUILayout.EndVertical();
        GUILayout.BeginVertical();
        //Sliders
        GUILayout.BeginHorizontal();
        fltSliderValue = GUILayout.HorizontalSlider(fltSliderValue, 0.0f, 1.1f, GUILayout.Width(128));
        fltSliderValue = GUILayout.VerticalSlider(fltSliderValue, 0.0f, 1.1f, GUILayout.Height(50));
        GUILayout.EndHorizontal();
        //Scrollbars
        GUILayout.BeginHorizontal();
        fltScrollerValue = GUILayout.HorizontalScrollbar(fltScrollerValue, 0.1f, 0.0f, 1.1f, GUILayout.Width(128));
        fltScrollerValue = GUILayout.VerticalScrollbar(fltScrollerValue, 0.1f, 0.0f, 1.1f, GUILayout.Height(90));
        GUILayout.Box("Im\na\ntest\nBox");
        GUILayout.EndHorizontal();
        GUILayout.EndVertical();
        GUI.DragWindow();
    }
}
 



Я, конечно, не программист, но что-то я не увидел как разные элементы гуя находят свой стиль. Кроме стилей "window" и "box" других нету. Но всё работает как надо в том числе и кнопка скролбара. Можете объяснить в чем фишка?

Re: scrollbarthumb - как назначить стиль?

СообщениеДобавлено: 28 май 2012, 15:54
fis
Ура, решил!
надо было перед элементом(ми) гуи поставить ноду GUI Set "skin":

Re: scrollbarthumb - как назначить стиль?

СообщениеДобавлено: 29 ноя 2012, 16:30
medeu
Создай GUISkin v Project, и с# код(скрипт) ! и потом закинь их на камеру! далее запусти Ctrl + P И меняй ГУЙСКИН там уже на твой вкус! скролл твой вроде написано ScrollBAr что ли покавыряйся и закинь на него текстурку свою!
вот чтобы связать GuiSkin s c# скриптом!


using UnityEngine;
using System.Collections;

public class SkinForGUI : MonoBehaviour
{
public GUISkin someskinname;
void OnGUI()
{
GUI.Skin = someskinname;
}
}