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; } }
小时候我把老婆种到地下,长大了我能收获一大堆老婆!
我是威少,我是一名Unity游戏的主程,我为自己带盐,希望此文能给您一点点微不足道的帮助,祝你成功!
分类:
Unity_Android
标签:
Unity和Android交互
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类