我怎样才能使统一gui窗口可拖动

时间:2016-09-07 15:28:50

标签: user-interface debugging unity3d

我想让我的窗户可以拖动 我目前正在制作多人游戏,并且要显示的状态有此窗口

public bool finishSession = false;
public bool showHelp = false;

private ArrayList messages = new ArrayList();
private string currentTime = "";
private string newMessage = "";
private Vector2 windowScrollPosition;

private SmartFox smartFox;
private GUIStyle windowStyle;
private GUIStyle userEventStyle;
private GUIStyle systemStyle;

public Rect rctWindow;
public float windowPanelPosX;
public float windowPanelPosY;
public float windowPanelWidth;
public float windowPanelHeight;

public StatusWindow() {
    smartFox = SmartFoxConnection.Connection;
}

public void AddSystemMessage(string message) {
    messages.Add(new StatusMessage(StatusMessage.StatusType.SYSTEM, message));
    windowScrollPosition.y = 100000;
}

public void AddStatusMessage(string message) {
    messages.Add(new StatusMessage(StatusMessage.StatusType.STATUS, message));
    windowScrollPosition.y = 100000;
}

public void AddTimeMessage(string message) {
    //messages.Add(new StatusMessage(StatusMessage.StatusType.TIME, message));
    //windowScrollPosition.y = 100000;
    currentTime = message;
}

public void Draw(float panelPosX, float panelPosY, float panelWidth, float panelHeight) {
    windowPanelPosX = panelPosX;
    windowPanelPosY = panelPosY;
    windowPanelWidth = panelWidth;
    windowPanelHeight = panelHeight;

    // Status history panel
    rctWindow = new Rect(windowPanelPosX, windowPanelPosY, windowPanelWidth, windowPanelHeight);
    rctWindow = GUI.Window (1, rctWindow, DoMyWindow, "Interreality Portal Status", GUI.skin.GetStyle("window"));
    GUI.DragWindow();
}

void DoMyWindow(int windowID)
{   
    windowStyle = GUI.skin.GetStyle("windowStyle");
    systemStyle = GUI.skin.GetStyle("systemStyle");
    userEventStyle = GUI.skin.GetStyle("userEventStyle");

    //Cuadro blanco

        GUILayout.BeginArea (new Rect (10, 25, windowPanelWidth - 20, windowPanelHeight - 70), GUI.skin.GetStyle ("whiteBox"));
        GUILayout.BeginVertical ();

        //General information area
        if (smartFox != null && smartFox.LastJoinedRoom != null) {
            GUILayout.Label ("Current room: " + smartFox.LastJoinedRoom.Name);
            //if (currentGameState == GameState.RUNNING ) {
            //GUILayout.Label(trisGameInstance.GetGameStatus()); //ACPR
            //}

        }   
        GUILayout.Label ("Activity: 1 - Construct");
        GUILayout.Label ("Elapsed time: " + currentTime);

        //Message area
        windowScrollPosition = GUILayout.BeginScrollView (windowScrollPosition);
        foreach (StatusMessage message in messages) {
            DrawStatusMessage (message);
        }                   
        GUILayout.EndScrollView ();
        //Cierra cuadro blanco
        GUILayout.EndVertical ();
        GUILayout.EndArea ();


        //Logout area
        GUILayout.BeginArea (new Rect (windowPanelWidth / 2, windowPanelHeight - 70 + 30, windowPanelWidth / 2 + 10, 30));//, GUI.skin.GetStyle("whiteBox"));
        GUILayout.BeginHorizontal ();
        if (GUILayout.Button ("Help", GUI.skin.GetStyle ("greenBtn"))) {
            showHelp = true;
        }
        GUILayout.Space (10);
        if (GUILayout.Button ("End Session", GUI.skin.GetStyle ("redBtn"))) {
            finishSession = true;
        }

        GUILayout.EndHorizontal ();
        GUILayout.EndArea ();

    GUI.DragWindow();
}

private void DrawStatusMessage(StatusMessage message) {
    GUILayout.BeginHorizontal();
    GUILayout.Space(5);
    switch (message.GetStatusType()) {
    case StatusMessage.StatusType.SYSTEM:
        GUILayout.Label(message.GetMessage(), systemStyle);
        break;
    case StatusMessage.StatusType.STATUS:
        GUILayout.Label(message.GetMessage(), windowStyle);
        break;
    case StatusMessage.StatusType.TIME:
        GUILayout.Label(message.GetMessage(), userEventStyle);
        break;
    default:
        // Ignore and dont print anything
        break;
    }

    GUILayout.FlexibleSpace();
    GUILayout.EndHorizontal();
    GUILayout.Space(1);
    GUI.DragWindow();
}

class StatusMessage {
    public enum StatusType {
        IGNORE = 0,
        SYSTEM,
        STATUS,
        TIME,
    };
    private StatusType type;
    private string message;

    public StatusMessage() {
        type = StatusType.IGNORE;
        message = "";
    }

    public StatusMessage(StatusType type, string message) {
        this.type = type;
        this.message = message;
    }

    public StatusType GetStatusType() {
        return type;
    }

    public string GetMessage() {
        return message;
    }
}

}

但是当我试图拖动窗口时,它并没有拖动它

我尝试了一个更简单的类,其中jnothing工作正常但是当我调用此窗口时它没有拖动

StatusWindow statusWindow = null;
void Start(){
statusWindow = new StatusWindow();
}
public Rect windowRect = new Rect(20, 20, 120, 50);
    void OnGUI() {
        windowRect = GUI.Window(0, windowRect, DoMyWindow, "My Window");
    statusWindow.Draw (100, 100, 100, 100);
    }

    void DoMyWindow(int windowID) {
        GUI.Button(new Rect(10, 20, 100, 20), "Can't drag me");
        GUI.DragWindow();
    }

如果对Unity GUI有更多了解的人可以提供帮助,那将是非常好的

0 个答案:

没有答案