将Unity应用程序整合到原生Android应用程序中

时间:2015-09-24 11:37:06

标签: android unity3d import

我有一个Unity Android应用程序,只使用设备中的本机摄像头,并继续制作一些AR。我想在Android项目中实现这个应用程序,我有我的所有UI(抽屉菜单,启动画面,功能等)。

这可能,或者我不能混合使用Unity应用和Android原生应用吗?

2 个答案:

答案 0 :(得分:0)

经过一番研究,这完全有可能。

您可以将Unity活动启动到Android原生活动中。您需要将Unity项目导出到可以从Android项目中使用的库中。

答案 1 :(得分:0)

您可以使用自己的方式重载Unity播放器活动,也可以在团结项目中插入自己的活动。

以下代码来自一个插件,允许您将Gallery打开为活动。 (但你应该可以做类似的事情)

// @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);

以下是有关如何从Unity应用启动活动的示例。您应该能够用自己的代码替换它,或者如果您想以相反的方式执行它 - 从您的活动开始统一活动,您将需要构建一个统一的android项目并在此上进行扩展。

干杯!