注:unity版本5.2.2f1.
一、for android
1、图片的导入设置,确保图片的实际尺寸不被改变。
Texture Type: 没有能设置成Texture, 因为它的改变图片的实际尺寸。这点其实你可只要将Texture Type切换成Advanced类型。看看其中的Non Power of 2的是不是None。如果不是它都有可能改变你的图片的实际尺寸。
有没有被改变你可看看设置面板的下面的预览窗口中的所给出的尺寸是不是与你的图片本的尺寸一样就知道了。
2、PlayerSettings中设置
Splash Image --> Splash scaling 选择:scale to fill(cropped)。
自适应填充(裁切不正的)满屏显示。
它是按图片的尺寸均匀绽放图片的,超出屏幕外的部分将不显示。很自然只要图片的宽高比与手机屏幕的宽高比不一至,肯定有一方(或宽或高)要超出屏幕。明白这一点很重要,因我们在接下来的Launch场景中也要将对应的图片也绽放成这个样。
3、处理Launch场景中的对应的图片大小
原则上面的2,具体代码下面有给出
二、for ios
1、图片的导入设置,确保图片的实际尺寸不被改变。
同“for android”中的1。
2、PlayerSettings中设置
iphone Launch Screen –> Launch screen type 选择:None.
会将自动拉申图片的高宽到和手机的一样。
3、处理Launch场景中的对应的图片大小
只要保持对就的图片在场景的大小与屏幕一就为ok了。
三、代码
注意:要将场景中的img的RectTransform设置成如下图所示:
//[lzh]
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class Test : MonoBehaviour
{
public RectTransform canvasRT;
public Image img;
public RectTransform imgRT;
void Awake()
{
imgRT.anchorMin = Vector2.one * 0.5f;
imgRT.anchorMax = Vector2.one * 0.5f;
imgRT.pivot = Vector2.one * 0.5f;
}
// Use this for initialization
void Start ()
{
ProcessBgImg();
}
void ProcessBgImg()
{
if(Application.platform == RuntimePlatform.Android || Application.platform == RuntimePlatform.WindowsEditor)
{
ProcessBgImg_for_android();
}
else if( Application.platform == RuntimePlatform.IPhonePlayer)
{
ProcessBgImg_for_android();
}
}
void ProcessBgImg_for_android()
{
Vector2 spriteSize = new Vector2();
Vector2 imgSize = new Vector2(img.sprite.texture.width, img.sprite.texture.height);//图片的实现大小
Vector2 canvasSize = canvasRT.sizeDelta; // 画布的大小,代码手机屏幕的大小
if (imgSize.y / imgSize.x > canvasSize.y / canvasSize.x)
{
spriteSize.x = canvasSize.x;
spriteSize.y = imgSize.y * (spriteSize.x / imgSize.x);
}
else
{
spriteSize.y = canvasSize.y;
spriteSize.x = imgSize.x * (spriteSize.y / imgSize.y);
}
imgRT.sizeDelta = spriteSize;
}
void ProcessBgImg_for_ios()
{
Vector2 canvasSize = canvasRT.sizeDelta;
imgRT.sizeDelta = canvasSize;
}
}
四、demo
大家可build出来看看,没有任何的抖动哦。
下载