我正在尝试创建一个scrollView,但我不知道如何确定滚动的最大范围(甚至更好,最大滚动位置)。
这是我试图做的,没有任何积极的结果:
void Update()
{
//get the amount of space that my text is taking
textSize = gs.CalcHeight(new GUIContent(text), (screenWidth/2));
if(Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved && Input.GetTouch(0).tapCount==1)
{
var touch = Input.touches[0];
//check if touch is within the scrollView area
if(touch.position.x >= (screenWidth/2) && touch.position.x <= (screenWidth) && touch.position.y >= 0 && touch.position.y <= (screenHeight))
{
if(touch.phase == TouchPhase.Moved)
{
scrollPosition[1] += touch.deltaPosition.y;
if(scrollPosition[1] < 0)
{
scrollPosition[1] = 0;
}
//I subtracted this cause i read that the scrollbars take 16px
if(scrollPosition[1] > (textSize-scrollViewRect.yMax-16)) //scrollViewRect is a Rect with the size of my scrollView
{
scrollPosition[1] = textSize-scrollViewRect.yMax-16;
}
}
}
}
}
void OnGUI()
{
screenWidth = camera.pixelWidth;
screenHeight = camera.pixelHeight;
GUILayout.BeginArea(new Rect(screenWidth/2, 0, screenWidth/2, screenHeight));
GUILayout.BeginScrollView(scrollPosition/*, GUILayout.Width (screenWidth/2), GUILayout.Height (screenHeight/2)*/, "box");
GUILayout.Label (new GUIContent(text), gs);
// End the scrollview
GUILayout.EndScrollView ();
scrollViewRect = GUILayoutUtility.GetLastRect();
GUILayout.EndArea();
}
这是假设scrollView位于屏幕的右半部分。
你能帮助我吗?
提前致谢。
答案 0 :(得分:3)
如GUI.BeginScrollView的API文档所示,您可以将Vector2分配给BeginScrollView的声明,以跟踪和更新框滚动到的位置。
我举一个例子:
using UnityEngine;
using System.Collections;
public class ScrollSize : MonoBehaviour {
private int screenBoxX = Screen.width;
private int screenBoxY = Screen.height;
private int scrollBoxX = Screen.width * 2;
private int scrollBoxY = Screen.height * 3;
public Vector2 scrollPosition = Vector2.zero;
void Awake()
{
Debug.Log ("box size is " + scrollBoxX + " " + scrollBoxY);
}
void OnGUI()
{
scrollPosition = GUI.BeginScrollView(new Rect(0, 0, screenBoxX, screenBoxY),
scrollPosition, new Rect(0, 0, scrollBoxX, scrollBoxY));
GUI.EndScrollView();
// showing 4 decimal places
Debug.Log ("Box scrolled @ " + scrollPosition.ToString("F4"));
}
}
对于此示例的解释,我们假设屏幕分辨率为800 x 600。 因此,屏幕上的可视滚动框将为800宽600高,滚动框的内部区域为1600乘1800。
我们通过将Gui.BeginScrollView()指定为Vector2的值scrollPosition来创建滚动框。当滚动框水平和垂直滚动时,Vector2将使用滚动值进行更新。
如果滚动条滚动到最左上方的位置,则scrollPosition的值将为0,0。
如果滚动条滚动到最右下方位置,则scrollPosition的值将为816,616,屏幕上框的大小加上滚动条的粗细。
答案 1 :(得分:2)
我知道这是3年之后,但也许它也会帮助其他人......
我发现将scrollPosition
设置为一个非常高的数字会强制滚动条到底部:
scrollPosition.y = 999.9f;
然后你可以读到这样的位置:
scrollPosition = GUILayout.BeginScrollView(scrollPosition,
GUILayout.Width(370),
GUILayout.Height(135));
它将被设置为最大值。
希望这有帮助!