首先在Android Plugin的Java檔案中建立一個方法,來取得外部檔案,並且轉換成byte後回傳,當然這個方法也可以給它輸入的參數,像是路徑的String等等,不過這邊就先寫死了。
JAVA Code
public byte[] GetTexture() { //假設我在SD卡的download資料夾下有張材質 File filePath = new File("/sdcard/download/test.jpg"); //取得檔案並轉換成byte並回傳 if(filePath.exists()) { Bitmap myBitmap = BitmapFactory.decodeFile(filePath.getAbsolutePath()); ByteArrayOutputStream output = new ByteArrayOutputStream(); myBitmap.compress(Bitmap.CompressFormat.PNG, 100, output); byte[] result = output.toByteArray(); return result; } return null; }
Plugin內的方法做完重新build一次jar檔案後,之後就可以在Unity裡面呼叫這個方法使用,呼叫在Plugin裡面做好的方法GetTexture()並設定好回傳值,也就是byte[],確認有取得資料而不是空資料後建立一個Texture,然後把這個材質設定到物件上,就可以看到物件的材質改變了。
Unity C# Code
public GameObject obj; void Start() { AndroidJavaClass activityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject currentActivity = activityClass.GetStatic<androidjavaobject>("currentActivity"); byte[] result = currentActivity.Call<byte[]>("GetTexture"); if(result != null) { //測試的Text.jpg材質圖檔為256x256大小 Texture2D tex = new Texture2D(256, 256); tex.LoadImage(result); //改變一個測試場景中物件的貼圖 obj.renderer.material.mainTexture = tex; } }
3 comments:
你好~Unity3D要调用android里的method,如果不用jar还有其他方法吗?因为我的andriod package里有用到许多图案和xml档案开发环境是android studio,那在这种情况下,要怎么解决呢? 求指导~~~~谢谢~~
可以試著使用WWW來載入檔案,我做了個簡單的說明http://www.iverv.com/2015/12/unity-androidassetbundle-unityapi.html,但如果只是要呼叫某個編譯好的jar裡面的方法的話可以用AndroidJavaClass、AndroidJavaObject、AndroidJNI,來載入呼叫
@Ling
可以輸出成.aar檔放入unity project任何地方
Post a Comment