您的位置:首页 > 产品设计 > UI/UE

ugui sprite替换方法

2017-06-08 20:36 561 查看


转载自 http://www.manew.com/thread-96801-1-1.html  网虫虫
[align=left]
[/align]
[align=left]在NGUI中,我们可以直接用spriteName = “想要替换的图片名称”;  就可以很方便的替换资源[/align]
[align=left]而UGUI却相对要麻烦一点,下面为大家介绍比较常用的三种替换方式。[/align]
[align=left]我的方法: [/align]
[align=left]      创建一个图片物体,面板拖入。在创建一个精灵图片,在资源文件夹里拖入[/align]
一、
public Image right1;
    public Sprite foulse1;
     right1.sprite = foulse1;

[csharp] view
plain copy

using UnityEngine;  

using System.Collections;  

using UnityEngine.UI;  

    

public class Test : MonoBehaviour  

{  

    

    [SerializeField]  

    Image myImage;  

    

    // Use this for initialization  

    void Start()  

    {  

        myImage.sprite = Resources.Load("Image/pic", typeof(Sprite)) as Sprite;     // Image/pic 在 Assets/Resources/目录下  

    }  

}  

二、

[csharp] view
plain copy

using UnityEngine;  

using System.Collections;  

using UnityEngine.UI;  

    

public class Test : MonoBehaviour  

{  

    

    [SerializeField]  

    Image myImage;  

    

    [SerializeField]  

    Sprite mySprite;  

    

    // Use this for initialization  

    void Start()  

    {  

        myImage.sprite = mySprite;      // mySprite 为外部指定的图片资源  

    }  

}  

三、

[csharp] view
plain copy

using UnityEngine;  

using System.Collections;  

using UnityEngine.UI;  

    

public class Test : MonoBehaviour {  

    

    [SerializeField]  

    Image myImage;  

    

    // Use this for initialization  

    void Start () {  

        StartCoroutine(GetImage());  

    }  

    

    IEnumerator GetImage()  

    {  

        string url = "http://www.5dbb.com/images/logo.gif";  

        WWW www = new WWW(url);  

        yield return www;  

        if (string.IsNullOrEmpty(www.error))  

        {  

            Texture2D tex = www.texture;  

            Sprite temp = Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), new Vector2(0, 0));  

            myImage.sprite = temp;  

        }  

    }  

}  

虽然吧里回答问题的人越来越少了,但我还是想问。

http://tieba.baidu.com/p/3790155887
怎么动态设置Image里面的Sprite。我知道Resources.Load可以。但如果把图片放到Resource目录里就无法用Sprite Packer了。求解~!如何动态更新更是个问题。网上看到雨松MOMO说把图片绑到Perfab上。难道真的只有这个解决方法?

----------------------不用啊。
首先你得获得动态的Sprite。
比如你直接 
public Sprite[] images ;//直接资源里的图片拖进去就行
public Image img;

img.Sprite = images[0];就这么简单啊。

-----------------------------------

这样是可以,但我想动态更新怎么办?而且我的逻辑部分在lua

几百张图片的话怎么办,肯定不能一个个拖吧,怎么动态加载

坟贴了还一直有人挖,我就共享下我目前的解决方法吧:
移动端:AssetBundle,不需要Resource.Load。方法7楼讲了。
电脑端:用AssetBundle不方便电脑制作和调试。因为是编辑器可以用编辑器的方法加载图片:
UnityEditor.AssetDatabase.LoadAssetAtPath<Sprite>()
如果又不想用AssetBundle,还想用SpritePacker。我知道的,只能Prefab关联。

电脑端,想不导AssetBundle,还想用SpritePacker, Resources.LoadAssetAtPath<Sprite>("Assets/xxxxx/pic.png");

从Assets开始写全路径,Assets别少了s 注意2:资源名要加后缀,如上的.png 注意3:要加载Sprite所在文件xxx.png,而不是Sprite分割后的名 u3d会自动关联寻找pack之后的图集,自动合并DrawCall
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unity2d