首先在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