2014-12-24 2 views
0

Есть ли в любом случае для меня доступ к коду, который создал окно приложения Unity? Пример: в WPF вы можете установить режим изменения размера окна, самое верхнее, состояние запуска окна и т. Д. Наследование MainWindow.cs из класса Window в пространстве имен System.Window позволяет вам установить все эти материалы. Я пытаюсь найти аналогичный класс, который позволяет мне делать то же самое в Unity3D.Доступ к коду окна приложения, созданного Unity3D

В WPF

The MainWindow.cs in WPF (I'm trying to access to similar thing in Unity3D

Unity3D создано окно приложения

The Unity3D created application window

+0

Да я сделал, я не пытаюсь изменить. Я пытаюсь изменить окно целиком. Как я уже упоминал в моем примере, установив режим изменения размера, позицию запуска окна и т. Д. – Xeon

ответ

1

Извините за поздний следить, но да, это возможно. Чтобы получить эту функциональность, вы захотите использовать user32.dll. Имейте в виду, что это окна.

Как это будет только nececary в окнах автономных и, возможно, редактор единства это стоит использовать

#if UNITY_STANDALONE_WIN || UNITY_EDITOR 

Теперь вы хотите использовать положение окна, как указано в user32.dll так первый из вас импортировать fucntion из DLL

[DllImport("user32.dll", EntryPoint = "SetWindowPos")] 

и связать это с переменной

private static extern bool SetWindowPos(IntPtr hwnd, int hWndInsertAfterint x, int Y, int cx, int cy, int wFlags); 

Вы также можете найти окно, которое можно сделать аналогичным образом. Но не забудьте изменить текущий «WindowTitle» на ваш фактический заголовок окна.

[DllImport("user32.dll", EntryPoint = "FindWindow")] 
public static extern IntPtr FindWindow(System.String className, System.String windowName); 

Теперь все, что осталось это функция для вызова, так что вы можете установить положение окна. Что бы что-то вроде следующего

public static void SetPosition(int x, int y, int resX = 0, int resY = 0) 
{ 
SetWindowPos(FindWindow(null, "WindowTitle"), 0, x, y, resX, resY, resX * resY == 0 ? 1 : 0); 
} 

и, конечно, не забудьте закончить #if с

#endif 

Теперь вы можете вызвать функцию SetPosition в Awake/OnEnable Как это

void Awake() 
{ 
    SetPosition(0,0); 
} 

Другие функции, такие как изменение размера, могут быть немного сложнее, но не должны быть невозможными. Вы можете посмотреть msdn windowFunctions для получения дополнительной информации об этом

И на всякий случай. Вот полнофункциональная копия положения окна. Просто прикрепите компонент WindowModifier к геймобжектам, изменить заголовок окна с соответствующим названием, и положение, в которое когда-либо позицию, которую вы хотите

using UnityEngine; 
using System; 
using System.Collections; 
using System.Runtime.InteropServices; 

public class WindowModifier: MonoBehaviour 
{ 
    #if UNITY_STANDALONE_WIN || UNITY_EDITOR 
    [DllImport("user32.dll", EntryPoint = "SetWindowPos")] 
    private static extern bool SetWindowPos(IntPtr hwnd, int hWndInsertAfter, int x, int Y, int cx, int cy, int wFlags); 
    [DllImport("user32.dll", EntryPoint = "FindWindow")] 
    public static extern IntPtr FindWindow(System.String className, System.String windowName); 
    public static void SetPosition(int x, int y, int resX = 0, int resY = 0) 
    { 
     SetWindowPos(FindWindow(null, "My window title"), 0, x, y, resX, resY, resX * resY == 0 ? 1 : 0); 
    } 
    #endif 

    void Awake() 
    { 
     SetPosition(0,0); 
    } 
} 
+1

Большое спасибо, это та часть, которую я искал. – Xeon

Смежные вопросы