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

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

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

现在我想执行越来越复杂的 Action 和动画,也许还可以创建自定义 Material 和纹理,但是 Rajawali wiki 已经过时了,而且这个库有一些限制(在我看来)。

所以现在我想知道是否有一种方法可以在Unity3D中创建场景或其他东西,例如我可以用手指旋转的动画3D模型 View ,然后将其转换为Android Java类或CustomView。

谢谢。

编辑:

这是我目前得到的:

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

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

请您参考如下方法:

您正在寻找的是如何将 Unity 场景显示为 subview 。

如下所示:

这是描述的here在 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); 
    } 
} 

您可以export将 Unity 项目转换为 Android Android 项目,然后使用上面的代码,或者您可以编写该 Java 代码,然后将其编译为 jar 插件,并通过修改 Unity 中的 Android Manifest 来让 Unity 加载它。两种方法都应该有效。

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

list 文件:

<?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的函数,使用

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

您可以找到有关此内容以及如何将其导入 Android Studio 的更多信息 here .


评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!