Unity和Eclipse的集成

时间:2014-04-03 12:20:04

标签: android eclipse unity3d integration

嘿伙计们,我需要一点帮助将Unity集成到Eclipse中

我的参考页面是这个=> here

我有Unity3D Pro版和Android插件专业版

  • 按照正常情况设置Unity Android项目并点击 建立。
  • 输入您的项目文件夹,转到Temp / StagingArea。
  • 将所有项目文件复制到新文件夹。
  • 将此文件夹导入Eclipse中的新Android项目。
  • 将此项目标记为属性窗口中的库 项目。 (右键单击项目名称,转到Properties-> Android 并标记“Is Library”。)
  • 在Eclipse中创建一个新的Android项目。这将构成 Java项目的一部分。
  • 将Unity Android项目作为库添加到新项目中。 (右键单击项目名称,转到Properties-> Android,选择 “添加...”,添加项目。)
  • 将classes.jar库添加到新的库引用中 项目。 (在属性中,转到Java_Build_path-> Libraries,选择 “添加外部Jar ...”,导航到 UNITY_INSTALLATION \ Editor \ Data \ PlaybackEngines \和roidplayer \ bin和 添加classes.jar)

到现在为止,如果我将这个小项目运行到我的设备中,我会得到类似这样的内容

您可以通过此链接查看图片。

https://copy.com/vVaCyQTEUECV

下一步是:

  • 将资源文件夹从库项目移动到新项目。 (Android不允许在图书馆中使用资产,这一点 重建Unity项目时,必须重复最后一步。)

我正在将资产文件夹和res文件夹从库项目移动到新项目。

之后我将从库移动AndroidMnifest.xml并替换项目

这是我的MainActivity.java代码

package com.Developer.PackMan;

import com.unity3d.player.UnityPlayerNativeActivity;


import android.os.Bundle;

public class MainActivity extends UnityPlayerNativeActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

}
}

这是Manifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.Developer.PackMan" android:theme="@android:style/Theme.NoTitleBar" android:versionName="1.0" android:versionCode="1" android:installLocation="preferExternal">
  <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.UnityPlayerNativeActivity" android:label="@string/app_name" android:screenOrientation="landscape" android:launchMode="singleTask" android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale">
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
      <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
      <meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="false" />
    </activity>
  </application>
  <uses-sdk android:minSdkVersion="9" android:targetSdkVersion="19" />
  <uses-feature android:glEsVersion="0x00020000" />
  <uses-feature android:name="android.hardware.sensor.accelerometer" />
</manifest>

在构建之后,我收到了以下文本的错误

应用程序)进程com.Developer.Packman)意外停止,请再试一次。

问题是我在LogCat或Console中没有出现任何错误,一切都很清楚。

我真的需要你的帮助。谢谢。

2 个答案:

答案 0 :(得分:5)

对于必须同时显示Unity3d和常规Android UI的应用程序,我编写了一份供将来使用的指南。 AFAIR它基于Unity3d 4.3版。我希望它足够详细:)

基于链接: http://forum.unity3d.com/threads/98315-Using-Unity-Android-In-a-Sub-View/page4?p=1477830&viewfull=1#post1477830

https://developer.vuforia.com/resources/dev-guide/extending-unity-android-activity-and-adding-custom-views-eclipse

<强>预设置:

要开始集成Unity3d和Android,您需要在'... Unity \ Editor \ Data \ PlaybackEngines \ androidplayer \ bin'中找到classes.jar文件。您可以将它放在工作区目录中。

<强>设定:

  1. 从一个包含所有Android的Android项目开始 位。
  2. 准备Unity3d Android项目。导入Unity项目 像普通的Android项目一样进入你的工作区。
  3. 人民币在Unity项目上,单击“属性”,然后转到“Android”并勾选“是” 图书馆?“复选框。
  4. 人民币在Android项目上,单击“属性”,然后转到“Android”并单击“添加”将一个库 - Unity项目 - 添加到Android。
  5. 仍然在“属性”对话框中,转到“Java构建路径”并选择“库”选项卡。 在那里,单击“添加外部JAR”并导航到classes.jar 文件。
  6. 确保两个项目都针对同一个SDK。
  7. 将“assets”文件夹从Unity项目移动到Android项目中。这一步 每次重建Unity项目时都必须重复。
  8. <强>编码

    本指南假设您的目标是开展Android活动,该活动将同时显示Unity模型和常规Android UI。

    1. 将以下行添加到项目清单文件的基础:''。
    2. 将清单中的以下行添加到应包含Unity模型的活动中:''。这样可以将触摸事件传递给Unity模型和常规Android UI。
    3. 使活动扩展UnityPlayerActivity而非活动。
    4. 不要在onCreate()中直接添加'setContentView' - 这会导致不必要的行为 - 在我的情况下,Unity模型非常小,无法与之交互;相反,在onResume()中找到UnityPlayer对象的父视图,并在其中膨胀布局并添加所有其他UI元素。请注意,可能需要在单独的线程中查找所述视图。
    5. <强>故障排除:

      • 对扩展UnityPlayerActivity的类的NoClassDefFoundException(或类似):转到Android项目的属性,然后转到Java Build Path - &gt;订单和导出并勾选classes.jar(在我的情况下,如果它有任何区别,它位于列表的顶部)。按确定,清理项目,尝试再次运行并按PRAY ...
      • 多个dex文件定义Lcom / unity3d / player / nativeloader - 确保Unity项目中的“libs”目录不包含“unity-classes.jar”文件。
      • (不确定但值得一试)src文件夹中的问题 - 删除src文件夹的内容

      下面是一些示例代码,用于说明保存Unity3d对象的Activity

      private Button buttonChangeColour;
      private UnityPlayer unityPlayer = null;
      
      @Override
      public void onResume() {
      
          super.onResume();
      
          if (unityPlayer == null) {
      
              View rootView = findViewById(android.R.id.content);
              unityPlayer = findUnityPlayerView(rootView);
      
              if (unityPlayer != null) {
      
                  ViewGroup unityPlayerParentView = (ViewGroup)(unityPlayer.getParent());
                  View mainHomeView = getLayoutInflater().inflate(R.layout.activity_home, null);
                  LayoutParams layoutParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
                  unityPlayerParentView.addView(mainHomeView, layoutParams);
      
                  buttonChangeColour = (Button) findViewById(R.id.buttonChangeColour);
                  buttonChangeColour.setOnClickListener(new OnClickListener() {
      
                      @Override
                      public void onClick(View arg0) {
                          // [...]
                      }
                  });
              }
          }
      }
      
      private UnityPlayer findUnityPlayerView(View view) {
      
          if (view instanceof UnityPlayer) {
      
              return (UnityPlayer) view;
          }
          if (view instanceof ViewGroup) {
      
              ViewGroup childrenViews = (ViewGroup) view;
      
              for (int i = 0; i < childrenViews.getChildCount(); i++) {
      
                  UnityPlayer foundView = findUnityPlayerView(childrenViews.getChildAt(i));
      
                  if (foundView != null) {
      
                      return foundView;
                  }
              }
          }
      
          return null;
      }
      

答案 1 :(得分:1)

你正在使用Unity版本吗?如果是4.X我写了一篇关于eclipse集成的教程here

你也可以查看我以前的教程,我解释了如何在不使用eclipse的情况下编写插件。