Unity中当Uisprite组件切换图片时的小技能

        NGUI应该算是unity中用的最多的组件。Uisprite是一个好同志,辛勤的帮助游戏引擎提高渲染效率。但我不太理解,为毛Uisprite的transform组件的localSize是需要设置成图片原本的大小才能正常的显示出来,为什么不是让localsize = new vector3(1,1,1)就好了呢?

       这样也带来一个问题,游戏中一个带有sprite的gameobject在切换成到其他的sprite的时候,还会保持原来的sprite的transform属性不变,这样有些图片就可能在切换的过程中变得比例失调。比如看下面的两张图,我们游戏中的主角换了个动作之后,就因为图片的大小不一致而发生了拉伸。

Unity中当Uisprite组件切换图片时的小技能_第1张图片

Unity中当Uisprite组件切换图片时的小技能_第2张图片

       于是,每次切换都要重新设置sprite的localSize。那从哪里可以知道sprite的大小呢,其实在sprite组件里面是没有相关的属性的,这个属性藏在sprite对应的altas中。于是,我就写了下面一段代码。专门用于切换sprite时的大小调整。代码也挺简单,应该很容易懂。

using UnityEngine;
using System.Collections;

public class SpriteHelper : MonoBehaviour
{

    //调整uisprite
    public static void adjustScale(UISprite uiSprite)
    {
        //依据spritename找到uiatlas中的sprite
        UIAtlas.Sprite sprite = uiSprite.atlas.GetSprite(uiSprite.spriteName);
        uiSprite.transform.localScale = new Vector3(sprite.outer.width, sprite.outer.height, 0);
    }
   //调整uitexture
    public static void adjustScale(UITexture uiTexture)
    {
        Texture texture = uiTexture.mainTexture;
        uiTexture.transform.localScale = new Vector3(texture.width, texture.height, 0);
    }
}
 
  Unity中当Uisprite组件切换图片时的小技能_第3张图片 
  
       好啦,现在完美解决了

你可能感兴趣的:(unity)