unity是由UnityTechnologies开发的一款游戏开发引擎,它的特点就是易用、跨平台、开发效率高,所以也成了目前为止手机游戏和虚拟现实领域中最受欢迎、市场占有率最多的开发工具。
unity在做一些windows的应用程序时,需要在主屏上显示程序1,在扩展屏上显示程序2,两个程序可以通过通信的方式来互动,也可以充当无互动的显示屏。本文主要介绍unity如何在一台机器上使程序自动运行在扩展屏上。
首先介绍需要用到的函数原型
SetWindowPos(IntPtr hWnd,IntPtr hWndInsertAfter,int x,int y,int cx,intcy,uintuFlags)
函数功能:设置一个窗口显示的位置,大小,以及在空间中Z轴的位置情况。
hWnd 要设置的窗口,本文就是指要显示在扩展屏上的窗口
hWndInsetAfter 是窗口在空间Z周上的位置,显示在其他窗口的前或者后(当值为-1,窗口显示在所有窗口最前面)
x 窗口在整个大屏上距离左边的X轴位置起始点
y 窗口在整个大屏上距离左边的Y轴位置起始点
cx 扩展屏宽度,也就是窗口的width
cy 扩展屏高度,也就是窗口的height
GetActiveWindow()
函数功能:得到当前程序的线程的活动窗口
具体操作过程:
1.启动unity,新建脚本Windowshow.cs,并挂在摄像机上
using UnityEngine;
using System.Collections;
using System;
using System.Runtime.InteropServices;
public class WindowShow : MonoBehaviour
{
[HideInInspector]
//导入设置窗口函数
[DllImport("user32.dll")]
static extern bool SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
//导入当前活动窗口
[DllImport("user32.dll")]
static extern IntPtr GetActiveWindow();
//显示窗口
const uint SWP_SHOWWINDOW = 0x0040;
//扩展屏在整个大屏的X起始位置
int x = 1920;
//扩展屏在整个大屏的Y起始位置
int y = 0;
//扩展屏宽度
int width = 1366;
//扩展屏高度
int height = 768;
void Start ()
{
SetWindowPos(GetActiveWindow(), -1, x, y, width, height, SWP_SHOWWINDOW);
}
}
2.PlayerSetting里面把 Visible In Backgroud 打钩
3.打包运行,效果可见
说明:由于我做测试的扩展屏是1366*768,主屏是1920*1080,所以函数如上所示,你可以根据自己的需求和实际情况来定。