• UGUI与相机配合调整设计尺寸并进行屏幕适配,适合初学者学习

    Unity2d默认的相机适配方法是将相机的宽高比按照手机屏幕宽高比例进行调整,保持相机高度不变并通过相机高度与屏幕实际高度比例对游戏内容进行缩放。所以不同分辨率屏幕的手机所显示的游戏内容在两边要么有裁剪,要么有黑边。实际上就是一种等高度的适配方法。


    网上看到一篇文章提供了一种进行屏幕适配的方式,原文章地址为  http://www.cnblogs.com/flyFreeZn/p/4073655.html这篇文章提供的方式是一种宽度适配,即根据手机屏幕分辨率,调整camera的正交投影下的Size属性(Projection属性设置为Orthographic,Size属性就会出现),使相机的宽度与屏幕相等,而宽高比保持与手机屏幕一致,从而达到等宽适配的目的。


    camera的正交投影下的Size属性,即相机实际高度值的一半,单位不是像素而是untiy引擎的单位Unit。

    举个例子:unity2d默认情况下像素Pixels与引擎单位Unit对应比例为100(当创建Canvas的同时Canvas Scaler里有Reference Pixels Per Unit显示了该值),相机默认的Orthographic下Size为5,即实际相机的高度为5 * 2 * 100 = 1000像素。

    实际游戏中unity会根据手机屏幕大小对相机内的内容进行缩放。例如在640x960的手机屏幕下,相机的Size为5,则相机的宽度为5 * 2 * 100 / 960 * 640 = 666.67像素,即显示了设计时宽度为666.67像素即(6.6667Unit)的内容,多于此部分的内容将被裁减掉,少于此部分则会显示黑边。同时游戏内容会缩小到原来1000 / 960的比例。


    我们现在只能调节相机的Orthographic下的Size属性,即高度,那么怎么样调整相机宽度使其成为设计尺寸呢?一般可以通过调整camera的Viewport Rect属性来满足要求,但是我不建议这样做,因为这样会令适配计算变得复杂(出现小于1的小数)。


    我们可以在场景编辑器的上方标签栏中选中Scene右方的Game,然后下面有个下拉栏,如图,图中下拉栏现实的是16:10 Portrait(10:16),表示竖屏下的宽高比为10:16的分辨率,这里宽高比以括号里的为准,这里我们可以预览unity自适配在不同屏幕比例下的效果。(但并不是完全如此,在UI方面会有其他问题,也许是个bug,导致在编辑器里显示的UI内容和真机上比例不同)我们可以在这里找到我们需要的设计尺寸并选择,如果没有可以自己创建一个,步骤如下:

    1、在下拉栏最下面点+号

    2、新建的尺寸中有个type属性,选择Fixed Resolution表示宽高为实际像素尺寸,选择Aspect Ratio表示宽高为比例关系。这里可以看到下拉栏里默认的选项有“:”和"x",“:”表示为宽高比,"x"表示为实际像素尺寸。

    3、选择好设计尺寸之后,再返回Scene界面,相机就会变成我们选择的设计尺寸宽高比例

    4、然后调整Size的值与设计尺寸高度对应。例如设计尺寸是640x960,则Size 为 960 / 100 / 2 = 4.8。


    调整相机为设计尺寸之后,就可以添加Canvas到场景中进行UI设计了。但是这时候Canvas默认大小和相机并不重合,导致设计很难下手。这里有两种方法:

    第一种方法:调整Canvas的Render Mode属性为Screen Space - Camera:

    1、将映射游戏内容的Camera拖入Render Camera中,下一个属性Plane Distance表示UI与Camera的在Z轴距离(其实就是变相反映了UI的Z轴位置)。

    2、接着在Canvas Scaler属性里将Ui Scale Mode属性设置为Scale With Screen Size,表示Canvas会根据屏幕比例缩放。

    3、下面的Reference Resolution,表示UI宽和高一半的大小。例如设计尺寸为640x960,则x应为640 / 2 = 320,宽应为960 / 2 = 480。

    4、下面的Screen Match Mode属性选中Match Width Or Height,表示采用宽度(上文有提到过)或高度(Unity自带适配方式)适配。然后Match调整为0或1,0表示完全宽度适配,1表示完全高度适配,其他值表示介于两者之间采用比例适配。


    第二种方法:调整Canvas的Render Mode属性为World Space

    1、将Event Camera设置为映射游戏内容的Camera。

    2、然后调整Rect Transform组件中的Width和Height为设计尺寸的宽和高,同时将Scale属性的X和Y都调整为0.01(对应unity2d默认情况下像素Pixels与引擎单位Unit对应比例100)。这时,Canvas的宽高正好与摄像机相同。

    这两种方法都可以将UI调整为与设计尺寸一致,并且在编辑器中运行与真机中运行效果保持一致。


    最后贴出改进后的相机自适配的脚本代码,这个代码可以保证游戏的设计尺寸宽高比不变动,同时不用改变原来的设计尺寸数值(即不用修改Camera的Size值和Canvas的相关属性,例如脚本中设计尺寸为640x960,但可以在320x480的尺寸下设计游戏,最终的游戏尺寸将根据脚本中的尺寸进行适配):

    using UnityEngine;
    using System.Collections;
    
    public class CameraControl : MonoBehaviour {
    
    	// portrait 640 x 960 ; landscape 1136 x 640
    	public const float DesignWidth = 6.4f;<span style="white-space:pre">			</span>//设计尺寸宽度
    	public const float DesignHeigt = 9.6f;<span style="white-space:pre">			</span>//设计尺寸高度
    
    	public bool fitWidth = true;<span style="white-space:pre">	</span>//是否采用宽度适配
    
    	// Use this for initialization
    	void Start () {
    		if (fitWidth) {
    			Camera camera = GetComponent<Camera>();
    			float cameraWidth = camera.orthographicSize * 2.0f / Screen.height * Screen.width;
    
    			if(cameraWidth < DesignWidth){
    				float cameraHeight = DesignWidth / Screen.width * Screen.height;
    				camera.orthographicSize = cameraHeight * 0.5f * (camera.orthographicSize / (DesignHeigt * 0.5f));
    			}
    		}
    	}
    }

    展开全文
  • Canvas是所有ui元素的父物体。   当添加一个Button类型的GameObject后,在"Hierarch"窗口中自动添加了一个Canvas,以及EventSystem。   在Canvas的Render Mode中有三个选择: ...2、Screen Space - Cam

    Canvas是所有ui元素的父物体。

     

    当添加一个Button类型的GameObject后,在"Hierarch"窗口中自动添加了一个Canvas,以及EventSystem。

     

    在Canvas的Render Mode中有三个选择:

     

    1、Screen Space - Overlay 屏幕最上层,主要是2D效果。
    2、Screen Space - Camera 绑定摄像机,可以实现3D效果。
    3、World Space 世界空间,让UI变成场景中的一个物体。

     

    如果选择"Screen Space - Overlay", Canvas的"Rect Transform"项被锁定,此时,屏幕有多大,Canvas就有多大。

     

    另外在还可以让在Canvas中的Button自适应。选中Button,在"Inspector"窗口中的"Rect Transform",通过按着alt键把Button固定在相对于Canvas的某个位置,当Scene窗口大小变化,Canvas也随着变化,其中的Button也始终固定在Canvas的某个区域,呈现出自适应的效果。

     

    勾选"Pixel Perfect",在Canvas中的模糊效果消失,变得相对清晰。

     

    "Sort Order"的值用来决定不同的Canvas的层级效果。

     

    如果选择"Screen Space - Camera",UI跟着摄像机走。

     

    把"Hierarchy"中的"Main Camera"拖动到"Render Camera"属性框上。

     

    选中Button,能实现一些三维效果,而看到三维显示效果的前提是:Main Camera的"Projection"的属性值是"Perspective"。

     

    如果选择"World Space",Canvas就被作为Game Object,成为场景中的一个物体。利用这一点,可以很方便地添加跟随物体的UI。

     

    在Canvas的"Canvas Scaler(Script)"中, Dynamic Pixels Per属性用来调整字体的大小,Reference Pixels Per用来调整边框的粗细。选择Ui Scale Mode的不同项,会出现不同的属性供设置。

     

    Canvas的"Graphic Raycaster(Script)"用来调整射线。

    转自:http://www.cnblogs.com/darrenji/p/4602199.html

    展开全文
  • Canvas是所有ui元素的父物体。 当添加一个Button类型的GameObject后,在"Hierarch"窗口中自动添加了一个Canvas,以及EventSystem。...2、Screen Space - Camera 绑定摄像机,可以实现3D效果。3、World...

    Canvas是所有ui元素的父物体。

     

    当添加一个Button类型的GameObject后,在"Hierarch"窗口中自动添加了一个Canvas,以及EventSystem。

     

    在Canvas的Render Mode中有三个选择:

     

    1、Screen Space - Overlay 屏幕最上层,主要是2D效果。
    2、Screen Space - Camera 绑定摄像机,可以实现3D效果。
    3、World Space 世界空间,让UI变成场景中的一个物体。

     

    如果选择"Screen Space - Overlay", Canvas的"Rect Transform"项被锁定,此时,屏幕有多大,Canvas就有多大。

     

    另外在还可以让在Canvas中的Button自适应。选中Button,在"Inspector"窗口中的"Rect Transform",通过按着alt键把Button固定在相对于Canvas的某个位置,当Scene窗口大小变化,Canvas也随着变化,其中的Button也始终固定在Canvas的某个区域,呈现出自适应的效果。

     

    勾选"Pixel Perfect",在Canvas中的模糊效果消失,变得相对清晰。

     

    "Sort Order"的值用来决定不同的Canvas的层级效果。

     

    如果选择"Screen Space - Camera",UI跟着摄像机走。

     

    把"Hierarchy"中的"Main Camera"拖动到"Render Camera"属性框上。

     

    选中Button,能实现一些三维效果,而看到三维显示效果的前提是:Main Camera的"Projection"的属性值是"Perspective"。

     

    如果选择"World Space",Canvas就被作为Game Object,成为场景中的一个物体。利用这一点,可以很方便地添加跟随物体的UI。

     

    在Canvas的"Canvas Scaler(Script)"中, Dynamic Pixels Per属性用来调整字体的大小,Reference Pixels Per用来调整边框的粗细。选择Ui Scale Mode的不同项,会出现不同的属性供设置。

    展开全文
  • unity 画布设置

    2020-01-05 11:06:14
    世界模式(World Space)和3D的游戏对象的属性基本一致,可进行交互的UI。 Screen Space-overlay是你想把UI显示在任何游戏对象的前面。 Screen Space-Camera如果场景中只有一个摄像机这个模式和Screen Space-overlay...

    世界模式(World Space)和3D的游戏对象的属性基本一致,可进行交互的UI。
    Screen Space-overlay是你想把UI显示在任何游戏对象的前面。
    Screen Space-Camera如果场景中只有一个摄像机这个模式和Screen Space-overlay没有啥区别,如果多个摄像机在一个场景中对游戏对象有叠加的效果,紧接着进行做一些适配,如果想进行兼容一些不同的屏幕大小,UI Scale Mode 一般进行选择Scale with Screen Size(屏幕的大小),分辨率一般就是填写设计时候的分辨率。
    在这里插入图片描述

    展开全文
  • 调整背景大小有两种思路,一种是从背景源出发考虑,另一个种是从相机出发考虑。 思路1: 导入时直接调整背景源大小 在Project视窗中选中背景,然后在其Inspector视窗中改变每单元像素数(Pixels Per Unit),该数值...

    调整背景大小有两种思路,一种是从背景源出发考虑,另一个种是从相机出发考虑。

    思路1: 导入时直接调整背景源大小

    在Project视窗中选中背景,然后在其Inspector视窗中改变每单元像素数(Pixels Per Unit),该数值越大,图片在屏幕中显示得越小。图1. 背景导入设置的视窗

    思路2:调整相机参数

    点击Hierarchy视窗中的Camera,如果相机的投影(Projection)选择的是正交 (Orthographic,不带透视)则通过调整Size即可调整镜头中的背景的大小,如果投影(Projection) 选择的是 透视(Perspective) 则可通过调整视场(Field of View) 来调整镜头中背景大小。OrthrographicPerspective
    改变Viewport Rect中的参数,可以调整镜头画面位置和大小,比如可以制做类似电影院宽萤幕的效果。cinema screen另外,改变Camera的TransformScale也可以改变镜头中的背景大小,Position可以调整镜头位置。
    camera transform

    展开全文
  • Unity画布和相机

    2020-04-04 14:52:22
    相机参数 Viewport Rect 如果X+W(Y+H)大于1,则W=1-X(H=1-Y)。 ...实战:将三维模型渲染在UI之前 ... 在开发MMO游戏时,经常会有人物(装备)预览界面,...将UI所在的画布的渲染模式选择为Screen Space-Camera,并设置...
  • 例如一个Text UI元素,当文字过多的时候他不会自动增加高度而导致文字不能完全显示,这时候就可以挂载这个组件,如上图设置参数,就可以自动调整高度了。 转载于:...
  • 宋晓波:【uGUI】Canvas - 画布Unity 中有一个能够直观并且快速构建用户界面的 UI 系统,我们叫它 uGUI。
  • 原地址:... 1. 去除启动exe项目时出现的画面窗口   File ☞ Build Settings ☞Pc and Mac Standalone ☞ Player Settings ☞Resolution and Presentation ☞Display Resolution 选项改为...
  • space-camera状态下canvas和game窗口分辨率有关。 所以请去game视图窗口选择分辨率。...选好之后,canvas大小会发生变化。 game窗口可以自己定义分辨率(具体怎么定义请上网搜索)。 就是这 ↓ ...
  • NGUI是Unity3D开发中常用的UI制作插件,它提供了丰富的UI组件,为开发者提供了极大的方便。作为一个手游开发者,面对纷繁复杂的机型,UI的自适应是一个很大的问题,还好NGUI为广大开发者提供了非常方便的自适应解决...
  • 在进行unity中UGUI界面设置时,往往会利用各类组件,控件。 当分辨率变换时,相应的如何让各类组件,控件实现大小,位置,状态的自适应成为需要解决的问题 问题解决方法1: 首先明确一点:如果在UGUI界面中未出现3D...
  • 环境:Win7 64bit, Unity3D 4.6.2using System; using System.Collections; using System.Runtime.InteropServices; using System.Diagnostics; using UnityEngine; using System.Xml.Serialization;public class ...
  • using UnityEngine; using System.Collections; public class planeFitScreen : MonoBehaviour { // Use this for initialization void Start() { //摄像机是透视摄像机 Camera cam = Camera.ma...
  • Unity制作简单3D图表

    2014-11-27 00:46:20
    使用Unity3D的基本语法和知识点制作一个简单的3D图表,适合初学者
  • Unity UGUI】获取UGUI界面的屏幕大小 UGUI屏幕大小 说到屏幕大小我们可能会想到Unity自带的Screen.width,但是其实UGUI的屏幕大小是根据我们的适配情况自己算出来的,它和Screen.width是不一样的。我们在做分辨率...
  • 1,UI中新建一个Canvas, then Image.2,导入一张图片,设置为图片精灵。3,Image选图片精灵。做一下设置现在用HTC时就可以实现相机与canvas的绑定。
  • 我本以为UGUI至少是C#控件有的控件它就有,其实上这货所提供的组件少的可怜,如图所示,但是没有枪没有炮我们自己造。...亲!就你UGUI没有! 而且网上还以讹传讹,一堆不知道什么版本的原生UGUI的DrowDownList版本都...
  • &lt;!DOCTYPE html&gt;&lt;html lang="en-us"&gt; &lt;head&gt; &lt;meta charset="utf-8"&gt; &lt;meta http-equiv="Content-Type"... &am
  • 如何在Unity 3D中生成真实的地形?这里为你解决这一问题!!
1 2 3 4 5 ... 20
收藏数 655
精华内容 262