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游戏的主程,我为自己带盐,希望此文能给您一点点微不足道的帮助,祝你成功!