[NGUI] ScrollView Clipping

Графический интерфейс пользователя

[NGUI] ScrollView Clipping

Сообщение Lost 24 май 2015, 22:48

Приветствую, делаю скроллбар твердо и четко по примеру, Unity 5.0.2f1, NGUI 3.7.9
У панели задан необходимый размер и режим отсечения.
Часть итемов, либо исчезает, либо остается видна если выходит за габариты панели, как повезет.
На скриншотах можно проследить все древо и используемые компоненты, все добавляются в скрипте, который я на всякий случай прикрепил.
Буду благодарен за любую помощь.

Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class ScrollViewHelper : MonoBehaviour {
        public GameObject gridNode;
        public GameObject scrollviewNode;
        public GameObject backgroundNode;

        [HideInInspector]
        public GameObject[] items;

        [HideInInspector]
        public UIGrid grid;

        [HideInInspector]
        public UIPanel panel;

        [HideInInspector]
        public UICenterOnChild centerOnChild;

        [HideInInspector]
        public UIScrollView scrollView;

        void Start() {
                if (!scrollviewNode) {
                        scrollviewNode = transform.FindChild("scrollview").gameObject;
                }
                if (!scrollviewNode) {
                        Debug.LogError("ScrollView was not found!");
                }
                if (!gridNode) {
                        gridNode = scrollviewNode.transform.FindChild("grid").gameObject;
                }
                if (!gridNode) {
                        Debug.LogError("Grid was not found!");
                }
                if (!backgroundNode) {
                        backgroundNode = transform.FindChild("background").gameObject;
                }
                if (!backgroundNode) {
                        Debug.LogError("Background was not found!");
                }

                //Vector3 position = scrollviewNode.transform.position;
                //position.x = 0;
                //scrollviewNode.transform.position = position;

                Rigidbody rigidbody = scrollviewNode.AddComponent<Rigidbody>();
                rigidbody.useGravity = false;
                rigidbody.isKinematic = true;

                scrollView = scrollviewNode.AddComponent<UIScrollView>();
                scrollView.contentPivot = UIWidget.Pivot.Left;
                scrollView.movement = UIScrollView.Movement.Horizontal;
                scrollView.disableDragIfFits = true;
                scrollView.scrollWheelFactor = -2;
               
                UISprite backgroundSprite = backgroundNode.GetComponent<UISprite>();

                panel = scrollviewNode.GetComponent<UIPanel>();
                panel.renderQueue = UIPanel.RenderQueue.Automatic;
                panel.cullWhileDragging = true;
                panel.softBorderPadding = true;
                panel.widgetsAreStatic = true;
                panel.sortingOrder = 0;
                panel.generateNormals = false;
                panel.anchorOffset = false;
                panel.depth = backgroundSprite.depth + 1;
                panel.clipSoftness = new Vector2(10, 0);
                panel.clipping = UIDrawCall.Clipping.SoftClip;
                panel.SetRect(0, 0, backgroundSprite.width, backgroundSprite.height);

                int itemsCount = gridNode.transform.childCount;
                Bounds itemBounds;

                items = new GameObject[itemsCount];
                for (int i = 0; i < itemsCount; i++) {
                        GameObject container = gridNode.transform.GetChild(i).gameObject;
                        GameObject item = container.transform.GetChild(0).gameObject;

                        UISprite sprite = item.GetComponent<UISprite>();
                        sprite.pivot = UIWidget.Pivot.Left;
                        sprite.depth = (panel.depth + 1);
                       
                        itemBounds = sprite.CalculateBounds();

                        BoxCollider boxCollider = container.AddComponent<BoxCollider>();
                        boxCollider.isTrigger = true;
                        boxCollider.size = new Vector3(100, 100, 0);
                       
                        container.AddComponent<UICenterOnClick>();
                        container.AddComponent<UIDragScrollView>();

                        items[i] = item;
                }
               
                //centerOnChild = itemsContainer.AddComponent<UICenterOnChild>();

                grid = gridNode.AddComponent<UIGrid>();
                grid.cellWidth = itemBounds.max.x;
                grid.cellHeight = -itemBounds.min.y * 2;
                grid.pivot = UIWidget.Pivot.TopLeft;
                grid.arrangement = UIGrid.Arrangement.Horizontal;
                grid.hideInactive = true;
                grid.Reposition();
                grid.enabled = false;
        }

        void Update() {
        }
}
 
У вас нет доступа для просмотра вложений в этом сообщении.
Все меняется, но не обязательно к лучшему...для этого нужны поступки, нельзя просто болтать и надеяться на лучшее (с) Доктор Хауз
Аватара пользователя
Lost
UNец
 
Сообщения: 9
Зарегистрирован: 01 ноя 2009, 13:47
Откуда: Мурманск
  • ICQ

Re: [NGUI] ScrollView Clipping

Сообщение Order 25 май 2015, 07:33

на сколько я помню, там есть настройка, обрезать или нет возле границ.

Можно расширить границы немного и сделать по бокам декоративные накладки.
Добавить rusorder в Skype , _juc4you@mail.ru ;
Платные консультации, программирование ваших проектов Unity3d,C#,IOS,Android.
Скрытый текст:
_ttp://www.youtube.com/watch?v=1m2qTnatSjM&list=UUjcKNvONEUHCILG7QrX1NFg
Order
Старожил
 
Сообщения: 805
Зарегистрирован: 21 фев 2010, 10:34

Re: [NGUI] ScrollView Clipping

Сообщение Lost 25 май 2015, 11:52

Настройка на обрезку как раз задана, и задана верно.
Проблему решил весьма нетривиальным способом, перенес все приготовления из Start в Reset, таким образом при назначении скрипта обьекту, все компоненты развешиваются в редакторе еще до старта приложения. Не очень удобно, но работает и вышеописанных багов больше нет.
Все меняется, но не обязательно к лучшему...для этого нужны поступки, нельзя просто болтать и надеяться на лучшее (с) Доктор Хауз
Аватара пользователя
Lost
UNец
 
Сообщения: 9
Зарегистрирован: 01 ноя 2009, 13:47
Откуда: Мурманск
  • ICQ


Вернуться в uGUI

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2