0

Unity でスクロール ビューを使用する方法がわかりません。スクロールビューを作成するために使用しているスクリプトは次のとおりです。

#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 の 3 番目の引数が何を意味するのかわかりません。ドキュメントには、「スクロールビュー内で使用される長方形」とだけ書かれています。スクロール ビュー ウィンドウとコンテンツのウィンドウの値を計算することになっていますか? 私は Android GUI 開発から来ましたが、それは必要以上の作業のようです。

4

1 に答える 1

0

さて、試行錯誤の末、スクリプトをまとめて、すべてを意図したとおりに表示することができました。気になるのは、スクロールバーのサイズを見積もり、ボタンのピクセル値を計算してスクロールビューを作成する必要があることです。より複雑な UI の場合、これらの値を明示的に計算することは非常に頭痛の種になると思います。Androidで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();
}
于 2013-10-11T19:08:02.753 に答える