У панели задан необходимый размер и режим отсечения.
Часть итемов, либо исчезает, либо остается видна если выходит за габариты панели, как повезет.
На скриншотах можно проследить все древо и используемые компоненты, все добавляются в скрипте, который я на всякий случай прикрепил.
Буду благодарен за любую помощь.
Синтаксис:
Используется 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() {
}
}
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() {
}
}