Unity3D 官方文档 平台特殊化之Standalone和多显示器的处理

来源:互联网 发布:京东商城java笔试题 编辑:程序博客网 时间:2024/05/16 12:42

版本:unity 5.6  语言:C#

 

总起:

Standalone,我一眼看下去的理解就是PC机平台,官方文档中说该平台指的是Mac、Windows和Linux。

 

这篇文章主要讲的是Standalone平台下的设置,通过点击菜单栏的File -> Build Settings -> [切换到Standalone] Player Settings 查看Inspector窗口便可进行设置。

 

Player Settings整体描述:

Player Settings提供了各种选项来帮助你完成最终游戏的出包,虽然说有很多不同的平台,但是大体上的设置会分为以下几个部分:

 

♦ Resolution And Presentation

分辨率和启动前窗口设置,包括了支持的分辨率比例和是否默认全屏启动等选项;

 

♦ Icon

图标,在桌面上显示的默认图标;

 

Splash Image

配置一些游戏启动前的图片,比如公司标志;

 

♦ Publishing Setting

出包设置,比如在android中需要配置的keystore就可以在这里设置;

 

♦ Genetal Setting

一般设置如下图:


 

Company Name:公司名称,用于程序查找预配置文件;


Product Name:产品名称,该名称会在运行时显示在任务栏中,当然它同样起查找预配置文件的作用;

 

Default Icon:默认的图标;

 

Default Cursor:默认的鼠标指针;

 

Cursor Hotspot:鼠标指针图标的偏移。

 

Standalone平台特殊设置:

Resolution and Presentation



Default is Full Screen:游戏默认以全屏方式启动;

 

Default Is Native Resolution:是游戏以默认的分辨率启动,取消勾选后可以强制游戏的分辨率。但是有一点,如果你的游戏已经打包启动过了,那下次再打包强制分辨率就没有意义了,因为Windows会将该应用最后的分辨率记录到注册表中。此时有三种解决方案:

1.改变应用的名称或公司;

2.在代码中直接控制分辨率;

3.使用Unity自带的启动前分辨率设置小窗口。

 

Run in background:在游戏失去焦点时仍旧继续运行不会暂停,反正联网游戏肯定是要勾选的了;

 

Mac Retina Support:可以使游戏在Mac高DPI的屏幕上显示的更加清晰,但是可能会占用更多的资源;

 

Capture Single Screen:在多显示的情况下,游戏的全屏模式会使其他屏幕变黑,该设置在Mac OS X上无效(没法测试,刚组好电脑,第二个屏幕要双十一到,哭);

 

Display Resolution Dislog:在游戏启动前显示一个窗口给玩家调整分辨率,拥有三种选项:

1. Disabled,禁用;

2. Enabled,启用;

3. Hidden by Default,默认禁用,双击应用之后马上按alt可以显示出来。

 

Use Player Log:将所有Debug.Log的信息输入到一个log文件中,默认勾选,当然如果你打算上传应用到Mac App Store,请取消勾选;

 

Resizable Window:允许玩家可以重新调整游戏窗口的大小;

 

Mac App Store Validation:启用Mac App Store的验证;

 

Mac Fullscreen Mode:选择Mac下的全屏模式:

1. Capture Display,用户只有退出游戏的情况下才能切换应用;

2. Fullscreen Window,后面这两个选项应该可以自由切换;

3. Fullscreen Window with Menu Bar and Dock。

 

D3D9 Fullscreen Mode:D3D9下的全屏模式:

1. Exclusive Mode,填充整个屏幕;

2. Fullscreen Window,与上面选项的区别是,该选项会保证屏幕分辨率不会变化,游戏放入一个类似窗口中,如果比例不对,则会显示黑边。

 

D3D11 Fullscreen Mode:D3D11下的全屏模式;

 

Visible in Background:即使进入后台,游戏仍旧正常显示,巫师3就是这个样子的,很难受;

 

Allow Fullscreen Switch:允许游戏在窗口和全屏之间切换,切换快捷键是Alt + Enter;

 

Force Single Instance:保证游戏在一台电脑上只能有一个运行实例,如果想再运行一个就会弹出个错误窗口;

 

Supported Aspect Ratios:分辨率选择窗口的各个分辨率解决方案的配置。

 

Icon



Override for Standalone:勾选了该选项之后,就能使用下面的Texture2D覆盖默认的图标了。

 

Splash Image 



Application Config Dialog:游戏前分辨率选择窗口的图标;

 

Show Splash Screen:在游戏读取时显示Made with Unity的字样,当然该功能只有在专业版中才能取消,点击Preview按钮就能预览显示效果,下面没有截图截到的都是一些该画面的控制,大家有兴趣可以调整试试。

 

Other Settings



Color Space:颜色空间,很重要的选项,手机上只能选择Gamma,而一般3A大作都是Linear,Linear显示效果更加真实,具体等研究渲染那块再说;

 

Auto Graphics API for Windows:自动选择最佳的图形API(如D3D11),如果不勾选,可以自行添加支持的图形API,默认支持D3D11和D3D9;

 

Auto Graphics API for Mac:默认支持Metal和OpenGL;

 

Auto Graphics API for Linux:默认支持OpenGL和Vulkan;

 

Static Batching:静态批处理,一般场景中不动的Object都会设置为静态吧;

 

Dynamic Batching:动态批处理,动态批处理的要求比较严格,比如使用同一图片的对象需要在父物体下连续之类,如果你使用过Fairy GUI,他降低Draw Call的方案就是主动修改各个图片的层级,使其尽可能多的发生动态批处理。

 

GPU Skinning:使用GPU处理骨骼与皮肤联系的过程;

 

Graphics Jobs(Experimental):可以使游戏将一些渲染任务交给其他CPU核心进行处理,增加游戏的处理效率,最近看了AMD CPU和Intel CPU同学可能就知道TX的大部分游戏都是单核的,所以购买多核心CPU对于游戏并没有什么帮助;

 

Virtual Reality Supported:VR游戏支持;

 

Mac App Store Options:Mac应用商城的选项,应用包名、版本……按照需要填写就好;

 

Scripting Backend:后端脚本,对于Standalone平台只能选择Mono2x,就是C#;

 

API Compatibility Level:选择脚本API的版本,现在有两个选项:.Net2.0和.Net2.0 Subset。

 

Disable HW Statistics:不将硬件统计的信息发送给Unity官方,应该只能专业版才能勾选;

 

Scripting Define Symbols:脚本编译时的标志设置;

 

Prebake Collision Meshes:只在build游戏时添加碰撞盒;

 

Keep Loaded Shaders Alive:保证Shader不会被卸载;

 

Preloader Assets:预先读取的Assets列表;

 

Vertex Compression:顶点压缩,选择模型会压缩的数据,比如可以选择everything,然后去掉positions和lightmap UVs。当然每个每个模型在导入时,可以设置独立的该参数,会覆盖掉该选项;

 

Optimize Mesh Data:优化Mesh数据,勾选该选项会移除材质所不需要的Mesh数据,例如tangents、normals、colors、UV。

 

多显示器显示:

在看到这里之前,我一直以为Unity如果得实现多显示,只能通过不同电脑运行同一场景,使用不同相机来实现。

 

没想Unity还支持这样的功能:一个Unity游戏就可以直接在多个显示器上显示一个场景中的不同画面(可惜没显示器,不能测试效果)。

 

OK,让我们来看看,首先注意该功能只支持Standalone平台:

 

1. 新建多个相机,然后注意底下有这样的选项:



Target Display是多少就是显示在那个屏幕上;

 

2. 然后回到Game窗口:



最左上角的下拉菜单可以选择查看第几个屏幕显示的效果;

 

3. 使用脚本控制多个显示的显示:

using UnityEngine;using System.Collections;public class DisplayScript : MonoBehaviour{    // Use this for initialization    void Start()    {        Debug.Log("displays connected: " + Display.displays.Length);        // Display.displays[0]是主显示器,默认就是开启的,然后检查当前附加显示器的数量,再将他们激活        if (Display.displays.Length > 1)            Display.displays[1].Activate();        if (Display.displays.Length > 2)            Display.displays[2].Activate();    }    // Update is called once per frame    void Update()    {    }}

4.一般来说显示器的顺序会根据虚拟坐标的xy来进行排序,但你可以使用-multidisplay命令行标志改变该顺序。

 

个人:

好久没有更新博客了,想着最近正好在研究Android,所以想把该知识点补一补,这一个星期对接Android第三方插件太痛苦。结果回来一看发现Entitas说要更新的结果没下文了,主要也不用了……到时候再说。

 

最近我大概会花两个星期的时间完成Android和IOS的学习,不会学的太深入,但常见的坑总要爬一下,毕竟做的手游,虽然会Unity,但完全不懂对应平台,都不知道出错了怎么应对,完全听天由命。

 

所以接下来会将学习到的一些东西整理成博客发上来,总之要开始更新了!


原创粉丝点击