unity에서 scrollview 밑에 불러오는 방법
6647 단어 unity3DC#UIScrollView
///
/// Panel
///
///
///
///
/// Panel
public static GameObject createPanel(GameObject parent, string panelName, Vector3 pos)
{
if (parent == null) return null;
int depth = UIPanel.nextUnusedDepth;
UIPanel panel = NGUITools.AddChild(parent);
panel.depth = depth;
panel.gameObject.name = panelName;
panel.transform.localPosition = pos;
panel.gameObject.layer = parent.layer;
return panel.gameObject;
}
///
///
///
/// Panel
///
///
///
///
/// UIScrollView
public static UIScrollView createClipAndDrag(GameObject dragPanel, Vector4 DragCenterAndRange, UIScrollView.Movement moveDiract,
UIWidget.Pivot piovt, Vector2 clipSoftness)
{
UIPanel panel = dragPanel.GetComponent();
panel.clipping = UIDrawCall.Clipping.SoftClip; // //
panel.baseClipRegion = DragCenterAndRange; // //
panel.clipSoftness = clipSoftness; // //
UIScrollView scrollPanel = dragPanel.AddComponent();
scrollPanel.movement = moveDiract; // //
scrollPanel.contentPivot = piovt; // //
scrollPanel.disableDragIfFits = true;
return scrollPanel;
}
그리고 NGUI의 UIScroll View를 개조해 보세요.cs 스크립트, onDrag 호스팅 추가 및 Drag()에 호출
public OnDragNotification onDrag;
///
/// Drag the object along the plane.
///
public void Drag ()
{
if (UICamera.currentScheme == UICamera.ControlScheme.Controller) return;
if (enabled && NGUITools.GetActive(gameObject) && mShouldMove)
{
if (mDragID == -10) mDragID = UICamera.currentTouchID;
UICamera.currentTouch.clickNotification = UICamera.ClickNotification.BasedOnDelta;
// Prevents the drag "jump". Contributed by 'mixd' from the Tasharen forums.
if (smoothDragStart && !mDragStarted)
{
mDragStarted = true;
mDragStartOffset = UICamera.currentTouch.totalDelta;
if (onDragStarted != null) onDragStarted();
}
Ray ray = smoothDragStart ?
UICamera.currentCamera.ScreenPointToRay(UICamera.currentTouch.pos - mDragStartOffset) :
UICamera.currentCamera.ScreenPointToRay(UICamera.currentTouch.pos);
float dist = 0f;
if (mPlane.Raycast(ray, out dist))
{
Vector3 currentPos = ray.GetPoint(dist);
Vector3 offset = currentPos - mLastPos;
mLastPos = currentPos;
if (offset.x != 0f || offset.y != 0f || offset.z != 0f)
{
offset = mTrans.InverseTransformDirection(offset);
if (movement == Movement.Horizontal)
{
offset.y = 0f;
offset.z = 0f;
}
else if (movement == Movement.Vertical)
{
offset.x = 0f;
offset.z = 0f;
}
else if (movement == Movement.Unrestricted)
{
offset.z = 0f;
}
else
{
offset.Scale((Vector3)customMovement);
}
offset = mTrans.TransformDirection(offset);
}
// Adjust the momentum
if (dragEffect == DragEffect.None) mMomentum = Vector3.zero;
else mMomentum = Vector3.Lerp(mMomentum, mMomentum + offset * (0.01f * momentumAmount), 0.67f);
// Move the scroll view
if (!iOSDragEmulation || dragEffect != DragEffect.MomentumAndSpring)
{
MoveAbsolute(offset);
}
else
{
Vector3 constraint = mPanel.CalculateConstrainOffset(bounds.min, bounds.max);
if (constraint.magnitude > 1f)
{
MoveAbsolute(offset * 0.5f);
mMomentum *= 0.5f;
}
else
{
MoveAbsolute(offset);
}
}
// We want to constrain the UI to be within bounds
if (restrictWithinPanel &&
mPanel.clipping != UIDrawCall.Clipping.None &&
dragEffect != DragEffect.MomentumAndSpring)
{
RestrictWithinBounds(true, canMoveHorizontally, canMoveVertically);
}
if (null != onDrag)
onDrag();
}
}
}
자, 목록 만들기
private GameObject m_dragPanel;
private UIScrollView m_scrollView;
///
///
///
private void createDragList()
{
m_dragPanel = NGUIComponentFactory.createPanel(m_gamePanel, "dragPanel", Vector3.zero);
m_scrollView = NGUIComponentFactory.createClipAndDrag(m_dragPanel, new Vector4(0, 29.5f, 500, 360),
UIScrollView.Movement.Vertical, UIWidget.Pivot.Top, Vector2.one);
m_scrollView.onDragFinished = onPanelDragFinished;
m_scrollView.onDrag = onPanelOnDrag;
// //
}
그리고 트랜잭션 리셋 함수를 정의합니다
private UILabel m_loadMoreTips;
private int m_curDisplayNum;
private void onPanelDragFinished()
{
if (null != m_loadMoreTips)
{
// //
}
}
private void onPanelOnDrag()
{
if (null == m_dragPanel || null == m_scrollView) return;
Vector3 constraint = m_dragPanel.GetComponent().CalculateConstrainOffset(m_scrollView.bounds.min, m_scrollView.bounds.max);
if (null == m_loadMoreTips && constraint.y < 0)
{
m_loadMoreTips = NGUIComponentFactory.createLabel(m_dragPanel, "tipsLoadMore", ResourceManager.instance.myFont,
new Vector3(0, 250f - 102f * m_curDisplayNum - 85f, 0), 30);
m_loadMoreTips.overflowMethod = UILabel.Overflow.ResizeFreely;
m_loadMoreTips.text = " ";
}
}
레이블을 만드는 인터페이스는 다음과 같습니다.
///
/// Label
///
///
///
///
///
///
/// UILabel
public static UILabel createLabel(GameObject parent, string labelName, UIFont font, Vector3 pos, int fontSize)
{
UILabel lbl = NGUITools.AddWidget(parent);
lbl.gameObject.name = labelName;
lbl.bitmapFont = font;
lbl.fontSize = fontSize;
Transform transform = lbl.gameObject.transform;
transform.localPosition = pos;
return lbl;
}
자, 다른 논리는 스스로 뇌보합시다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Rider (추가 : Visual Studio for Mac도)에서는 C#으로 작성된 Unity 표준 클래스를 직접 볼 수있는 이야기여러분은 Unity 코드를 어떤 편집기를 사용하여 작성합니까? Visual Studio (for Mac 포함) Visual Studio Code 다양한 옵션이 있다고 생각하지만 Rider를 사용하고 있습니다. 최근 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.