我有一个Unity Android应用程序,它仅使用设备中的本机相机并开始制作一些AR。我想在一个Android项目中实现这个应用程序,我拥有所有的用户界面(抽屉菜单,闪屏,功能等)。将Unity应用程序整合到原生Android应用程序中
这是可能的,还是我不能混合Unity应用程序和Android本地应用程序?
我有一个Unity Android应用程序,它仅使用设备中的本机相机并开始制作一些AR。我想在一个Android项目中实现这个应用程序,我拥有所有的用户界面(抽屉菜单,闪屏,功能等)。将Unity应用程序整合到原生Android应用程序中
这是可能的,还是我不能混合Unity应用程序和Android本地应用程序?
经过一番研究,这完全有可能。
您可以将Unity活动启动为android原生活动。你需要将你的Unity项目导出到一个库中,你可以从你的android项目中使用它。
你可以用自己的超载统一玩家活动也可以在TOT他团结项目插件你自己的活动。
下面的代码是从一个插件,可以让你开辟画廊作为活动。 (但你应该能够做同样的事情)
// @desc UnityProxyActivity - This class is part of Native Galley and a subset of Camera Capture Kit for Unity.
// @author Tastybits
// @link www.tastybits.io | https://www.assetstore.unity3d.com/en/#!/content/56673
public class UnityProxyActivity extends Activity {
static final String ACTION_FINISH = "com.Tastybits.ACTION_FINISH";
private BroadcastReceiver broadcastReceiver;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("Unity", "ProxyActivity: OnCreate");
// Start a Gallery.....
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_PICK);
startActivityForResult(intent, 100);
}
@Override
protected void onDestroy() {
super.onDestroy();
if(AndroidGallery.OpenGallery_Callback!=null)
AndroidGallery.OpenGalleryFireCallback(/*ok*/false, /*cancelled*/true, "");
}
private String getRealPathFromURI(Uri contentURI) {
Cursor cursor = getContentResolver().query(contentURI, null, null, null, null);
if (cursor == null) { // Source is Dropbox or other similar local file path
return contentURI.getPath();
} else {
cursor.moveToFirst();
int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
return cursor.getString(idx);
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK)) {
if(AndroidGallery.OpenGallery_Callback!=null)
AndroidGallery.OpenGalleryFireCallback(/*ok*/false, /*cancelled*/true, "");
finish();
}
return super.onKeyDown(keyCode, event);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d("Unity", "UnityProxyActivity: onActivityResult(" + requestCode + ", " + resultCode + ", " + data);
this.finish();
if(requestCode == 100) {
try {
Uri uri = data.getData();
String spath = getRealPathFromURI(uri); //uri.getPath();
if(AndroidGallery.OpenGallery_Callback!=null)
AndroidGallery.OpenGalleryFireCallback(/*ok*/true, /*cancelled*/false, "file://"+spath);
} catch(Exception e) {
Log.d("Unity","UnityProxyActivity - caught unknown exception");
if(AndroidGallery.OpenGallery_Callback!=null)
AndroidGallery.OpenGalleryFireCallback(/*ok*/false, /*cancelled*/false, "");
}
} else {
Log.d("Unity", "NativeGallery: Unknown requestCode " + requestCode);
}
}}
你将不得不通过一些启动活动像
Intent i = new Intent(UnityPlayer.currentActivity,com.NativeGallery.UnityProxyActivity.class);
UnityPlayer.currentActivity.startActivity(i);
以下是关于如何活动从统一启动的例子应用程序。你应该能够用你自己的代码替换它,或者如果你想以相反的方式来做 - 从你的活动开始统一活动,你将不得不建立一个统一的android项目,并在此基础上扩展。
干杯!
已经找到了这个问题的一些答案,但对于IOS。这里是链接:http://www.makethegame.net/?s=Add+unity3d+to+native – Nashkar