2013-10-11 3 views
0

Unity에서 스크롤보기를 사용하는 방법을 이해하지 못합니다. 스크롤 뷰를 만들 때 사용하는 스크립트는 다음과 같습니다.Unity의 GUI.BeginScrollView

#pragma strict 

//not implemented yet 
var selectObjectIcon : Texture2D; 
var addEntityIcon : Texture2D; 
var selectNextEntityIcon : Texture2D; 
var createPathIcon : Texture2D; 
var assignPathIcon : Texture2D; 
var changeSpeedIcon : Texture2D; 
var deleteObjectIcon : Texture2D; 
var zoomIcon : Texture2D; 

//not supposed to be implemented 
var dragEntityIcon : Texture2D; 
var assignPointIcon : Texture2D; 
var haltIcon : Texture2D; 
var warpIcon : Texture2D; 
var glowStickIcon : Texture2D; 
var selectWeaponIcon : Texture2D; 
var reviveIcon : Texture2D; 
var lineOfSightIcon : Texture2D; 

var buttonDimensions : float; 
var buttonStyle : GUIStyle; 

private var scrollPosition : Vector2 = Vector2.zero; 

function OnGUI() { 
    //scrollPosition = GUI.BeginScrollView(Rect(Screen.width-buttonDimensions, 0, buttonDimensions, Screen.height), scrollPosition, Rect(0, 0, buttonDimensions, buttonDimensions)); 
    scrollPosition = GUI.BeginScrollView(Rect(Screen.width-buttonDimensions, 0, buttonDimensions, Screen.height), scrollPosition, Rect(0, 0, buttonDimensions, Screen.height)); 
    GUILayout.BeginVertical(); 

    if(GUILayout.Button(selectObjectIcon, buttonStyle)){ 
     Debug.Log("select object pressed"); 
    } 
    if(GUILayout.Button(addEntityIcon, buttonStyle)){ 
     Debug.Log("select object pressed"); 
    } 
    if(GUILayout.Button(selectNextEntityIcon, buttonStyle)){ 
     Debug.Log("select object pressed"); 
    } 
    if(GUILayout.Button(createPathIcon, buttonStyle)){ 
     Debug.Log("select object pressed"); 
    } 
    if(GUILayout.Button(assignPathIcon, buttonStyle)){ 
     Debug.Log("select object pressed"); 
    } 
    if(GUILayout.Button(changeSpeedIcon, buttonStyle)){ 
     Debug.Log("select object pressed"); 
    } 
    if(GUILayout.Button(deleteObjectIcon, buttonStyle)){ 
     Debug.Log("select object pressed"); 
    } 
    if(GUILayout.Button(zoomIcon, buttonStyle)){ 
     Debug.Log("select object pressed"); 
    } 

    if(GUILayout.Button(dragEntityIcon, buttonStyle)){ 
     Debug.Log("select object pressed"); 
    } 
    if(GUILayout.Button(assignPointIcon, buttonStyle)){ 
     Debug.Log("select object pressed"); 
    } 
    if(GUILayout.Button(haltIcon, buttonStyle)){ 
     Debug.Log("select object pressed"); 
    } 
    if(GUILayout.Button(warpIcon, buttonStyle)){ 
     Debug.Log("select object pressed"); 
    } 
    if(GUILayout.Button(glowStickIcon, buttonStyle)){ 
     Debug.Log("select object pressed"); 
    } 
    if(GUILayout.Button(selectWeaponIcon, buttonStyle)){ 
     Debug.Log("select object pressed"); 
    } 
    if(GUILayout.Button(reviveIcon, buttonStyle)){ 
     Debug.Log("select object pressed"); 
    } 
    if(GUILayout.Button(lineOfSightIcon, buttonStyle)){ 
     Debug.Log("select object pressed"); 
    } 

    GUILayout.EndVertical(); 
    GUI.EndScrollView(); 
} 

그러나 의도 한대로 작동하지 않습니다. 버튼이 너무 멀리 떨어져있어 잘려나 간다. 스크롤 할 수 없다. 또한 BeginScrollView에 대한 세 번째 인수가 bea bout으로 가정되는 내용을 이해하지 못합니다. 워드 프로세서는 "스크롤 뷰 내부에 사용 된 사각형"이라고 말합니다. 스크롤 뷰 윈도우의 값과 내용의 윈도우를 계산하기로되어 있습니까? 나는 안드로이드 GUI 개발에서 왔고, 그것은 필요한 것보다 훨씬 더 많은 작업처럼 보인다.

답변

0

시행 착오를 통해 스크립트를 모아서 모든 것을 의도 한대로 표시 할 수있었습니다. 스크롤 바의 크기를 추정하고 버튼의 픽셀 값을 계산하여 스크롤 뷰를 생성해야했습니다. 나는이 값을 명시 적으로 계산하는보다 복잡한 UI가 매우 두통을 유발할 것이라고 생각합니다. 안드로이드에서 ListView를 만드는 비교적 쉬운 방법과 비슷하게 이것을 할 수있는 더 좋은 방법이 있습니까?

#pragma strict 

//not implemented yet 
var selectObjectIcon : Texture2D; 
var addEntityIcon : Texture2D; 
var selectNextEntityIcon : Texture2D; 
var createPathIcon : Texture2D; 
var assignPathIcon : Texture2D; 
var changeSpeedIcon : Texture2D; 
var deleteObjectIcon : Texture2D; 
var zoomIcon : Texture2D; 

//not supposed to be implemented 
var dragEntityIcon : Texture2D; 
var assignPointIcon : Texture2D; 
var haltIcon : Texture2D; 
var warpIcon : Texture2D; 
var glowStickIcon : Texture2D; 
var selectWeaponIcon : Texture2D; 
var reviveIcon : Texture2D; 
var lineOfSightIcon : Texture2D; 

var buttonDimensions : float; 
var buttonStyle : GUIStyle; 

private var scrollPosition : Vector2 = Vector2.zero; 
private var scrollBarWidth : float = 17.5; 

function OnGUI() { 
    scrollPosition = GUI.BeginScrollView(Rect(Screen.width-buttonDimensions-scrollBarWidth-buttonStyle.padding.right, 0, buttonDimensions+scrollBarWidth+buttonStyle.padding.right, Screen.height), scrollPosition, Rect(0, 0, buttonDimensions, (buttonDimensions+buttonStyle.padding.bottom+buttonStyle.padding.top)*16)); 
    GUILayout.BeginVertical(); 

    if(GUILayout.Button(selectObjectIcon, buttonStyle)){ 
     Debug.Log("select object pressed"); 
    } 
    if(GUILayout.Button(addEntityIcon, buttonStyle)){ 
     Debug.Log("select object pressed"); 
    } 
    if(GUILayout.Button(selectNextEntityIcon, buttonStyle)){ 
     Debug.Log("select object pressed"); 
    } 
    if(GUILayout.Button(createPathIcon, buttonStyle)){ 
     Debug.Log("select object pressed"); 
    } 
    if(GUILayout.Button(assignPathIcon, buttonStyle)){ 
     Debug.Log("select object pressed"); 
    } 
    if(GUILayout.Button(changeSpeedIcon, buttonStyle)){ 
     Debug.Log("select object pressed"); 
    } 
    if(GUILayout.Button(deleteObjectIcon, buttonStyle)){ 
     Debug.Log("select object pressed"); 
    } 
    if(GUILayout.Button(zoomIcon, buttonStyle)){ 
     Debug.Log("select object pressed"); 
    } 

    if(GUILayout.Button(dragEntityIcon, buttonStyle)){ 
     Debug.Log("select object pressed"); 
    } 
    if(GUILayout.Button(assignPointIcon, buttonStyle)){ 
     Debug.Log("select object pressed"); 
    } 
    if(GUILayout.Button(haltIcon, buttonStyle)){ 
     Debug.Log("select object pressed"); 
    } 
    if(GUILayout.Button(warpIcon, buttonStyle)){ 
     Debug.Log("select object pressed"); 
    } 
    if(GUILayout.Button(glowStickIcon, buttonStyle)){ 
     Debug.Log("select object pressed"); 
    } 
    if(GUILayout.Button(selectWeaponIcon, buttonStyle)){ 
     Debug.Log("select object pressed"); 
    } 
    if(GUILayout.Button(reviveIcon, buttonStyle)){ 
     Debug.Log("select object pressed"); 
    } 
    if(GUILayout.Button(lineOfSightIcon, buttonStyle)){ 
     Debug.Log("select object pressed"); 
    } 

    GUILayout.EndVertical(); 
    GUI.EndScrollView(); 
}