Unity从Android的drawable里获取图片并展示

Unity从Android的drawable里获取图片并展示:

话不多说,上代码。

原理:

1、将图片放到Android层的drawable里面。

2、Unity调用Android,通过Android的方法获取到它,类型为Bitmap。

3、获取到它之后转成二进制byte[]。

4、Unity收到这个二进制后,通过Texture2d.LodImage的方法转换为Texture2d的图片,就可以直接使用了。

另外:

1、对于指定图片大小,可以从安卓层的Bitmap上获取,或者取图片的时候R.drawable.game_bg后面可以再点出尺寸。

2、byte[]传到unity后,可以指定新尺寸,也可以指定为原尺寸。

3、至于原尺寸的获取,因为返回值只有一个参数,所以多取一次就好了,都2022年了,还在乎多交互一次引起效率问题?

Unity层:

public AndroidJavaObject GetAndroidJO()
        {
            if (jo == null)
            {
                jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
                jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
            }
            return jo;
        }
 public byte[] GetDrawableByPackageName(string packageName)
        {
            if (Application.platform == RuntimePlatform.Android)
            {
                byte[] bs  = GetAndroidJO().CallStatic<byte[]>("getDrawableByPackageName",packageName);
                return bs;
                //Texture t = new Texture(bs);
            }
            return null;
        }
void Start()
{ 
byte[] drawableBytes = AndroidUnity.au.GetDrawableByPackageName("game_bg");
            Texture2D texture2D = new Texture2D(1000, 1000);
            texture2D.LoadImage(drawableBytes);
            this.transform.Find("Texture").GetComponent<UITexture>().mainTexture = texture2D;
}

 

Android层:

//Unity层调它
public static  byte[] getDrawableByPackageName(String packageName)
    {
        Resources res= app.getResources();
        Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.game_bg);
        byte[] bs = Bitmap2Bytes(bmp);
        return bs;
    }
//将bitmap转成byte[]数组,unity接收这个
    private static byte[] Bitmap2Bytes(Bitmap bm){
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
        return baos.toByteArray();
    }
    private Bitmap Bytes2Bimap(byte[] b){
        if(b.length!=0){
            return BitmapFactory.decodeByteArray(b, 0, b.length);
        }
        else {
            return null;
        }
    }

 

posted @ 2022-07-29 16:40  威少小二orz  阅读(593)  评论(0编辑  收藏  举报