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 @   威少小二orz  阅读(668)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
点击右上角即可分享
微信分享提示