在Android Studio中将Unity场景显示为子视图

我对在android studio项目中显示3D模型和graphics有点困惑。

我一直在与Rajawali合作 ,这是一个Android OpenGL ES 2.0 / 3.0引擎。

感谢Rajawali,我能够显示3D模型,执行简单的animation并移动相机。

现在我想进行越来越多的动作和animation,也许会创build自定义的素材和纹理,但是Rajawali wiki是非常过时的,这个库有一些限制(在我看来)。

所以现在我想知道是否有办法在Unity3D中创build一个场景或者什么东西,比如我可以用手指旋转的animation3D模型视图,然后把它变成一个Android Java类或者一个CustomView。

谢谢。

编辑:

这是我目前得到的:

在这里输入图像描述

这是我的Android Studio APP的主屏幕。 在Backgroud中,我有一个3D模型视图,用Rajawali“加载”。

如何使用Unity获得相同的结果?

你正在寻找的是如何显示Unity场景作为子视图。

如下所示:

在这里输入图像描述

这里在Unity的论坛上有描述。 并加载Unity场景的代码:

package com.unity3d.viewexample; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.FrameLayout; import android.widget.LinearLayout.LayoutParams; import com.unity3d.player.UnityPlayer; public class JavaCubeViewActivity extends Activity { private UnityPlayer m_UnityPlayer; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Create the UnityPlayer m_UnityPlayer = new UnityPlayer(this); int glesMode = m_UnityPlayer.getSettings().getInt("gles_mode", 1); boolean trueColor8888 = false; m_UnityPlayer.init(glesMode, trueColor8888); setContentView(R.layout.main); // Add the Unity view FrameLayout layout = (FrameLayout) findViewById(R.id.frameLayout2); LayoutParams lp = new LayoutParams (LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); layout.addView(m_UnityPlayer.getView(), 0, lp); } } 

您可以将 Unity项目导出到Android Android项目,然后使用上面的代码,或者您可以编写该Java代码,然后将其编译为jar插件,并使Unity通过修改Unity Manifest在Unity中加载它。 这两种方法应该工作。

最后,你可以使用UnityPlayer.SendMessage.从Java调用Unity端的C#函数UnityPlayer.SendMessage.

清单文件:

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="preferExternal" package="com.unity3d.unity" android:versionName="1.0" android:versionCode="1"> <supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" android:anyDensity="true" /> <application android:icon="@drawable/app_icon" android:label="@string/app_name" android:debuggable="false"> <activity android:name="com.unity3d.player.UnityPlayerProxyActivity" android:label="@string/app_name" android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" android:screenOrientation="portrait"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.unity3d.player.UnityPlayerActivity" android:label="@string/app_name" android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" android:screenOrientation="portrait"> </activity> <activity android:name="com.unity3d.player.UnityPlayerNativeActivity" android:label="@string/app_name" android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" android:screenOrientation="portrait"> <meta-data android:name="android.app.lib_name" android:value="unity" /> <meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="false" /> </activity> <activity android:name="com.unity3d.player.VideoPlayer" android:label="@string/app_name" android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" android:screenOrientation="portrait"> </activity> </application> <uses-feature android:glEsVersion="0x00020000" /> <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="15" /> </manifest> 

编辑

如果你想从Java调用Unity的function,请使用

 UnityPlayer.UnitySendMessage("GameObjectName", "MethodName", "parameter to send"); 

你可以在这里find更多的信息,以及如何将它导入到Android Studio。