新手,求指教.Unity3D中的panel的宽度怎么获取

新手,求指教.Unity3D中的panel的宽度怎么获取,第1张

panel1Width = 200;panel1Height = 100;panel1BorderStyle = BorderStyleFixedSingle; //设置边框以便查看大小,可以删去。

需要在头文件里面定义一下

我圈中的那哪里,不能没办法获取到image组件

using UnityEngine;

using SystemCollections;

using UnityEngineUI;

using UnityEngineSprites;

public class OnButton : MonoBehaviour {

private Button button;

private Image image;

void Start () {

button=thisGetComponent<Button>();

image=thisGetComponent<Image>();

}

private void ButtonDown()

{

buttoninteractable=false; imageoverrideSprite=ResourcesLoad("Textures/TechBlue/background",typeof(Sprite))as Sprite;//这里就是修改他的,

imagecolor=Colorred;

}

}

最后记住,在哪里我们需要换一下类型,不然没办法修改他的

在Scence *** 作视图中,创建image并在Source Image放入你自己希望更改的后,利用本身的描点属性进行等比 *** 作(描点默认在视图中心的四个白色边框小三角)

四个三角分别拖拽到sence白色帆布四角/左右两端/上下两端等,image随着game视图放大缩小等比变化

IOS:

IOS:使用shell命令打包并上传Itunes

Unity3d:

Unity3d:Canvas适配屏幕分辨率与锚点(Anchors与Pivot)

Unity3d:在屏幕边缘显示其他玩家方位

Unity3d:命令行打包Android

Unity3d:命令行编译IOS

Unity3d:使用Jenkins自动编译打包IOS(只能打包Development)

Unity3d:使用Jenkins自动编译打包IOS(打包Ad-hoc,上传itunes)

所有的UI都有一个Root Canvas,该Canvas的RectTransform不可修改。

所有 Canvas坐标系 方向都是 右侧为X轴正方向 上方为Y轴正方向

该Canvas还带有一个 Canvas Scaler 组件,可以通过该组件适配不同的屏幕分辨率。

Canvas Scaler 中有一个 UI Scale Mode 属性,用于确定画布中的UI元素如何缩放。

以下假如屏幕分辨率为1500 3000。

使Canvas宽高保持与屏幕分辨率一致。屏幕分辨率有多大,Canvas宽高就有多大( Scale Factor 缩放因子为1时)。

所以, Canvas宽高 = 屏幕分辨率 / 缩放因子

使Canvas的宽高比与屏幕分辨率的宽高比保持一致。

缩放时需要基于下面的 Reference Resolution(参考分辨率) 进行缩放。

因为此时屏幕分辨率的宽高比为:1500 / 3000 = 05,所以在该模式下,无论怎么调整参数,Canvas宽高比也一直为05,不会变。

所以, Canvas宽高比 = 屏幕分辨率宽高比

缩放时用的参考分辨率。

下面假设参考分辨率是1080 1920。

如果屏幕分辨率与参考分辨率的宽高比不一致,则根据选择的模式对Canvas宽高进行缩放。

如果屏幕分辨率与参考分辨率的宽高比一致,该选项怎么调都不管用。

基于下面 Match 对Canvas宽高进行缩放。

缩放后,Canvas的宽高一定不低于参考分辨率的宽高。

缩放后,Canvas的宽高一定不高于参考分辨率的宽高。与 Expand 类似。

锚点说难不难,只是不好描述,但可以用例子来说明。

假如Canvas拥有一个Image节点。

对于 Image所在的坐标系 坐标系方向与Canvas坐标系方向相同

下面看下Image节点的 锚点在Canvas的不同位置 的情况:

单锚点 ,从Unity上看,就是4个小三角形聚在一个点。

单锚点在Canvas的位置(假设为点p) 都满足以下逻辑:

可以总结出以下公式(p为单锚点在Canvas的位置,pivot为单锚点的Pivot属性):

Image所在坐标系 原点在Canvas中的坐标 = (px + ImageWidth (05 - pivotx), py + ImageHeight (05 - pivoty))

双锚点 ,从Unity上看,就是2个小三角形聚在一个点。

左上角有2个小三角形,左下角有2个小三角形

此时,Image拥有 PosX,Top,Width,Bottom 这四个位置参数。

而且, 锚点的Pivot的Y不起作用

Image的Height = (CanvasHeight - Top - Bottom) / 2

如果设置Image的Top,Bottom都为0的话,则Image的高会与Canvas的高一致。

Image所在坐标系原点在Canvas中的坐标 = (ImageWidth (05 - Pivotx) + PosX , ImageHeight / 2 + Top)

底部边框的中心有2个小三角形,顶部边框的中心有2个小三角形

此时,Image拥有 PosX,Top,Width,Bottom 这四个位置参数。

而且, 锚点的Pivot的Y不起作用

Image的Height = (CanvasHeight - Top - Bottom) / 2

如果设置Image的Top,Bottom都为0的话,则Image的高会与Canvas的高一致。

Image所在坐标系原点在Canvas中的坐标 = (ImageWidth (05 - Pivotx) + CanvasWidth / 2 + PosX , ImageHeight / 2 + Top)

右上角有2个小三角形,右下角有2个小三角形

此时,Image拥有 PosX,Top,Width,Bottom 这四个位置参数。

而且, 锚点的Pivot的Y不起作用

Image的Height = (CanvasHeight - Top - Bottom) / 2

如果设置Image的Top,Bottom都为0的话,则Image的高会与Canvas的高一致。

Image所在坐标系原点在Canvas中的坐标 = (ImageWidth (05 - Pivotx) + CanvasWidth + PosX , ImageHeight / 2 + Top)

左上角有2个小三角形,右上角有2个小三角形

此时,Image拥有 Left,PosY,Right,Height 这四个位置参数。

而且, 锚点的Pivot的X不起作用

Image的Width = (CanvasWidth - Left - Right) / 2

如果设置Image的Left,Right都为0的话,则Image的宽会与Canvas的宽一致。

Image所在坐标系原点在Canvas中的坐标 = (ImageWidth / 2 + Left , ImageHeight (05 - Pivotx) + PosY)

左侧边框的中心有2个小三角形,右侧边框的中心有2个小三角形

此时,Image拥有 Left,PosY,Right,Height 这四个位置参数。

而且, 锚点的Pivot的X不起作用

Image的Width = (CanvasWidth - Left - Right) / 2

如果设置Image的Left,Right都为0的话,则Image的宽会与Canvas的宽一致。

Image所在坐标系原点在Canvas中的坐标 = (ImageWidth / 2 + Left , ImageHeight (05 - Pivotx) + CanvasHeight / 2 + PosY)

左下角有2个小三角形,右下角有2个小三角形

此时,Image拥有 Left,PosY,Right,Height 这四个位置参数。

而且, 锚点的Pivot的X不起作用

Image的Width = (CanvasWidth - Left - Right) / 2

如果设置Image的Left,Right都为0的话,则Image的宽会与Canvas的宽一致。

Image所在坐标系原点在Canvas中的坐标 = (ImageWidth / 2 + Left , ImageHeight (05 - Pivotx) + CanvasHeight + PosY)

四锚点 ,从Unity上看,就是4个小三角形全都是分散的( 左下角、左下角、右上角、右下角 )。

此时,Image拥有 Left,Top,Right,Bottom 这四个位置参数。

而且, 锚点的Pivot不起作用

Image的Width = (CanvasWidth - Left - Right) / 2

Image的Height = (CanvasHeight - Top - Bottom) / 2

如果设置Image的Left,Top,Right,Bottom都为0的话,则Image的宽高会与Canvas的宽高一致。

Image所在坐标系原点在Canvas中的坐标 = (ImageWidth / 2 + Left , ImageHeight / 2 + Top)

屏幕坐标系与Canvas坐标系都是 左下角为原点,向右为X轴正方向,向上为Y轴正方向

在屏幕坐标系上有个点P(x, y),我们先把屏幕分辨率的宽高缩放到与Canvas的宽高一致,此时P点的坐标也会随着缩放。

因为屏幕坐标系与Canvas坐标系都是左下角为原点,所以缩放完成后的P的位置(记作P2),就是P点在Canvas坐标系上的位置。

P2 = (Px CanvasWidth / ScreenWidth, Py CanvasHeight / ScreenHeight)

现在有一个Image UI,我们先把该Image的锚点设置为左下角( AnchorsMin(0, 0),AnchorsMax(0, 0) ),然后把P2的位置赋值给Image的anchoredPosition,此时该Image刚好就在P点的位置。

在Canvas坐标系上有一个Image UI,我们先把该Image的锚点设置为左下角( AnchorsMin(0, 0),AnchorsMax(0, 0) ),然后把Canvas的宽高缩放到与屏幕分辨率的宽高一致,此时Image的anchoredPosition(记作P)也会随着缩放。

因为屏幕坐标系与Canvas坐标系都是左下角为原点,所以缩放完成后的Image的anchoredPosition(记作P2),就是Image在屏幕坐标系上的位置。

P2 = (Px ScreenWidth / CanvasWidth, Py ScreenHeight / CanvasHeight)

因为上卷关于创建讲过这次直接跳过吧

随便选择一个资源目录里的文件夹右键Import New Asset(一般项目都会规定一个文件夹,这里没有要求就随便选一个文件夹)导入新资源就这样了。还有一种比较便捷快速的方法就是直接把文件拖进来。

然后点击刚刚导入的,Inspector面板中会显示如下图的界面,然后设置一些参数

1、游戏屏幕适配

屏幕适配是为了让我们的项目能够跑在各种电子设备上(手机,平板,电脑)

那么了解是适配之前首先要了解两个知识点:

1-1、什么是像素

单位面积中构成图像的点的个数。

特点:单位面积内的像素越多,分辨率越高,图像的效果就越好。

1-2、什么是分辨率?

分辨率可以从显示分辨率与图像分辨率两个方向来分类。

示分辨率(屏幕分辨率)是屏幕图像的精密度,是指显示器所能显示的像素有多少分辨率的单位有:(dpi点每英寸)、lpi(线每英寸)和ppi(像素每英寸)。

特点:

图像的分辨率越高,所包含的像素就越多,图像就越清晰,印刷的质量也就越好。

同时,它也会增加文件占用的存储空间。

1-3、移动设备分辨率 –以iphone 为例

Paste_Imagepng

2、什么是适配

什么是适配?

适应、兼容各种不同的情况

游戏开发中,适配的常见种类

¤系统适配

针对不同版本的 *** 作系统进行适配,例如Unity3D 54系统

¤屏幕适配

针对不同大小的屏幕尺寸进行适配,例如Iphone5s,iphone7

iPhone的尺寸

35inch、40inch、47inch、55inch

iPad的尺寸

79inch、97inch

屏幕方向

竖屏

横屏

3、Unity3D 中的屏幕分辨

3-1

屏幕的宽高比(Aspect Ratio) = 屏幕宽度/屏幕高度

3-2

Unity2D中摄像机镜头的尺寸决定了我们实际看到游戏内容的多少,在编辑器中我们可以通过调整摄像机Camera的orthographicSize属性值来调整摄像机的大小

Paste_Imagepng

注:Unity3D中这个比例的默认值是100,即100像素等于1单位。

如果我们的游戏屏幕有640像素高,那么实际换算成单位高度则是64个单位,

当我们摄像机的orthographicSize值是32时,摄像机大小刚好与屏幕大小相等

4、Unity3D中的屏幕适配设置

4-1:像素适配设置(固定分辨率)

Paste_Imagepng

2、屏幕宽高比

屏幕的宽高比Aspect Ratio = 屏幕宽度/屏幕高度

Paste_Imagepng

5、Unity3D中的摄像机设置

Unity编辑器中只能直接调整摄像机的高度,那摄像机的宽度是如何确定的呢?

答案就是我们最前面提到的屏幕宽高比。Unity会根据当前屏幕实际的宽高比和摄像机的orthographicSize值来计算出摄像机的宽度值,即:

摄像机实际宽度 = 摄像机orthographicSize 2 屏幕宽高比

即是

摄像机实际宽度 = 摄像机高度 屏幕宽高比

我举个例子说明一下,iPhone4的屏幕像素为640960,宽高比为2:3,假设Pixels To Units值为100,那么如果设摄像机高度size值为48,那么摄像机实际宽度按照公式算出64,刚好就是屏幕的单位宽度。

6、Unity3D中的像素比设置

Paste_Imagepng

6、Unity3D:关于适配的一些UI问题解决

这里就是重中之重,也是坑点较多的地方

调整相机为设计尺寸,添加Canvas到场景中进行UI设计,但是Canvas默认大小和相机并不重合。

怎么办?

6-1:办法1:

调整Canvas的Render Mode属性为Screen Space - Camera:

将映射游戏内容的Camera拖入Render Camera中,下一个属性Plane Distance表示UI

与Camera的在Z轴距离(其实就是变相反映了UI的Z轴位置)。

接着在Canvas Scaler属性里将Ui Scale Mode属性设置为Scale With Screen Size,

表示Canvas会根据屏幕比例缩放。

下面的Reference Resolution,表示UI宽和高一半的大小。例如设计尺寸为640x960,

则x应为640 / 2 = 320,宽应为960 / 2 = 480。

下面的Screen Match Mode属性选中Match Width Or Height,表示采用宽度(上文有提到过)

或高度(Unity自带适配方式)适配。然后Match调整为0或1,0表示完全宽度适配,

1表示完全高度适配,其他值表示介于两者之间采用比例适配

Paste_Imagepng

6-2:办法2:

调整Canvas的Render Mode属性为World Space

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

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

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

Paste_Imagepng

6-3:办法3:

给摄像机挂下图脚本就可以搞定比例问题:

Paste_Imagepng

6-4:设定好就如下图所示

Paste_Imagepng

解决屏幕分辨率适配的问题,其实就是解决如何让游戏摄像机尺寸限定在给定范围的问题。

usingSystemCollections;usingSystemCollectionsGeneric;usingUnityEngine;publicclassLeoPlayerSetting:MonoBehaviour {voidUpdate(){//  按ESC退出全屏  if(InputGetKey(KeyCodeEscape))        {            ScreenfullScreen =false;//退出全屏          }//设置76801080的全屏  if(InputGetKey(KeyCodeB))        {            ScreenSetResolution(1920,1080,true);        }if(InputGetKey(KeyCodeC))        {            ScreenSetResolution(Screenwidth, Screenheight,true);        }//按A全屏  if(InputGetKey(KeyCodeA))        {//获取设置当前屏幕分辩率  Resolution[] resolutions = Screenresolutions;//设置当前分辨率  ScreenSetResolution(resolutions[resolutionsLength -1]width, resolutions[resolutionsLength -1]height,true);            ScreenfullScreen =true;//设置成全屏,  }    }}

7、适配总结

1游戏有效内容,指游戏中一定需要完整显示在屏幕上的内容;

2游戏实际内容,指全部的游戏内容,包括有效内容和主要是为了适配多分辨率的或其他不重要的目的而增加的内容。

实际的分辨率适配问题与三个尺寸相关,他们分别是:摄像机尺寸,游戏内容尺寸(包括有效内容尺寸和无效内容尺寸)和实际屏幕尺寸。

8、了解游戏中的摄像机

相机(Camera)

是向玩家捕获和显示世界的设备。通过自定义和 *** 纵摄像机,

你可以使你的游戏表现得真正独特。您在场景中摄像机的数量不受限制。

他们可以以任何顺序设定放置在屏幕上的任何地方,或在屏幕的某些部分。

Paste_Imagepng

8-1、摄像机属性:

Paste_Imagepng

Clear Flags 清除标识

确定了屏幕哪些部分将被清除,方便多个摄像机画不同的游戏元素

Paste_Imagepng

Skybox 天空盒:这是默认设置。屏幕上的任何空的部分将显示当前相机的天空盒。

如果当前的相机没有设置天空盒,它会默认在渲染设置(Render Settings )选择天空盒

Solid Color 纯色

任何空部分,屏幕显示为当前相机的背景色。

Depth Only 仅深度

如果你想绘制一个玩家的q,又不让它内部环境被裁剪,你会设置深度为0的相机绘制环境,

和另一个深度为1的相机单独绘制武器。武器相机的清除标志(Clear Flags )应设置 为depth only。

Don't Clear 不清除

此模式不清除颜色或深度缓存。每一帧在下一帧结束后绘制,看上去像是涂抹(smear-looking)的效果。

这在游戏中不常用,最好是在自定义着色器(custom shader)上使用。

Rendering Path-渲染路径

定义什么绘制方法被用于相机的选项

Paste_Imagepng

Use Player Settings 使用玩家设置:在玩家设置(Player Settings)相机使用哪个渲染路径。

Vertex Lit 顶点光照 :所有被这个相机渲染的物体都将渲染成Vertex-Lit物体。

Forward 正向渲染:所有对象每材质渲染只渲染一次,和Unity 2x中的标准一样

Deferred 延迟照明:所有物体将在无光照的环境渲染一次,然后在渲染队列尾部将物体的光照一起渲染出来。

Traget Texture-目标纹理:

Paste_Imagepng

渲染纹理 (Render Texture)包含相机视图输出。这会使相机渲染在屏幕上的能力被禁止。

补充:Vertex Lit:顶点光照

这个Shader是Vertex-Lit,是最简单的Shader之一。这个Shader渲染代价是非常小的

所有照射在该物体上的光源通过一次光能传递渲染完成并且只计算顶点光源。

因为是Vertex-Lit,所以不会有任何基于像素渲染的效果,例如:Light Cookies,Normal Mapping

和Shadows。这个Shader对模型的细分同样更加敏感,假如在很靠近立方体的地方放置一个

点光源,并且应用这个Shader,这个光源只会在此角落进行计算

General shader performance 通常的着色器性能

Unlit This is just a texture, not affected by any lighting�不发光。这只是一个纹理,不被任何光照影响

VertexLit 顶点光照

Diffuse 漫反射

Normal mapped �法线贴图,比漫反射更昂贵:增加了一个或更多纹理(法线贴图)和几个着色器结构

Specular This adds specular highlight calculation �高光。这增加了特殊的高光计算

Normal Mapped Specular Again, this is a bit more expensive than Specular �高光法线贴图。这比高光更昂贵一点

Parallax Normal mapped This adds parallax normal-mapping calculation �视差法线贴图。这增加了视差法线贴图计算

Parallax Normal Mapped Specular�视差高光法线贴图。这增加了视差法线贴图和镜面高光计算

>

以上就是关于新手,求指教.Unity3D中的panel的宽度怎么获取全部的内容,包括:新手,求指教.Unity3D中的panel的宽度怎么获取、UGUI怎么获取Image,怎么动态的更换Image、unity如何将图片铺面整个Image等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10148545.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存