0

Unityを初めて使用するため、Unity3dで実行時にDropDownListを作成する方法がわかりません。

以下のリンクhttp://wiki.unity3d.com/index.php?title=PopupListに示されている例のように、シーンが読み込まれるとリストを作成できます。

しかし、実行時にそれらを作成する方法がわかりません。このクラスを作成してみました。

#pragma strict
class CustomList extends MonoBehaviour 
{
    var title:String;
    var top:int;
    var left:int;
    var width:int;
    var height:int;
    private var listEntry = 0;
    private var list : GUIContent[];
    private var listStyle : GUIStyle;
    private var showList = false;
    public function CustomList(title:String,top:int,left:int,width:int,height:int){
       this.title = title;
       this.top=top;
       this.left = left;
       this.width = width;
       this.height = height; 

       list = new GUIContent[1]; 
       list[0] = new GUIContent("Granite");
       // Make a GUIStyle that has a solid white hover/onHover background to indicate highlighted items
       listStyle = new GUIStyle();
       listStyle.normal.textColor = Color.white;
       var tex = new Texture2D(2, 2);
       var colors = new Color[4];
       for (color in colors) color = Color.white;
       tex.SetPixels(colors);
       tex.Apply();
       listStyle.hover.background = tex;
       listStyle.onHover.background = tex;
       listStyle.padding.left = listStyle.padding.right = listStyle.padding.top = listStyle.padding.bottom = 4;  

    }

    function Start () {

    }
    function OnGUI () {
       Debug.Log("title for list is  : "+title);
       GUI.Label (Rect(10, 10, 100, 10), "You picked !");
       if (Popup.List (Rect(top, left, width, height), showList, listEntry, GUIContent(this.title), list, listStyle)) {
         GUI.Label (Rect(200, 70, 400, 20), "You picked !");
       }
    }
}

しかし、以下のようにforループに追加することはできません

for(var objCategory:Category in objCategoryList.listCategory){

       new CustomList(objCategory.categoryName,100,ctr*100,100,20);
       ctr++;
    }

誰かがこのコードスニペットの何が間違っているのか、そしてunity3dのjavascriptでこれを行う正しい方法は何であるかを提案できますか?

4

1 に答える 1

0

コードを以下に変更して機能させる

#pragma strict
class CustomLayout extends  MonoBehaviour 
{
    private var listEntry = 0;
    private var list : GUIContent[];
    private var listStyle : GUIStyle;
    private var showList = false;
    public function testLayout(){       
        list = new GUIContent[1];   
        list[0] = new GUIContent("Granite");
        // Make a GUIStyle that has a solid white hover/onHover background to indicate highlighted items
        listStyle = new GUIStyle();
        listStyle.normal.textColor = Color.white;
        var tex = new Texture2D(2, 2);
        var colors = new Color[4];
        for (color in colors) color = Color.white;
        tex.SetPixels(colors);
        tex.Apply();
        listStyle.hover.background = tex;
        listStyle.onHover.background = tex;
        listStyle.padding.left = listStyle.padding.right = listStyle.padding.top = listStyle.padding.bottom = 4;            
    }

    function OnGUI () {
        var ctr:int =0;     
        for(var objCategory:Category in DropdownList.objCategoryList.listCategory){
            if (Popup.List (Rect(50, 50+(ctr*25), 100, 20), showList, listEntry, GUIContent(objCategory.categoryName), list, listStyle)) {
                GUI.Label (Rect(200, 70, 400, 20), "You picked !");
            }
            ctr++;
        }       
    }
}

そして、このようにメインクラスでインスタンス化する

gameObject.AddComponent(CustomLayout);
于 2013-01-18T08:25:57.403 に答える