【问题标题】:Integration of Unity and EclipseUnity 和 Eclipse 的集成
【发布时间】:2014-05-15 06:43:18
【问题描述】:

在将 Unity 集成到 Eclipse 方面我需要一点帮助。

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

我有 Unity3D Pro 版本和 Android Plugin Pro 版本

  • 像往常一样设置您的 Unity Android 项目并点击 构建。
  • 进入你的项目文件夹,进入Temp/StagingArea。
  • 将所有项目文件复制到新文件夹。
  • 在 Eclipse 中将此文件夹作为新的 Android 项目导入。
  • 在属性窗口中将此项目标记为库 项目。 (右击项目名称,进入Properties->Android 并标记“是图书馆”。)
  • 在 Eclipse 中创建一个新的 Android 项目。这将构成 您项目的 Java 部分。
  • 将 Unity Android 项目作为库添加到您的新项目中。 (右键项目名称,进入Properties->Android,选择 “添加...”,添加项目。)
  • 将 classes.jar 库添加到新的库引用中 项目。 (在属性中,转到 Java_Build_path->Libraries,选择 “添加外部 Jar...”,导航到 UNITY_INSTALLATION\Editor\Data\PlaybackEngines\and 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 或控制台中没有收到任何类型的错误,一切都很清楚。

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

【问题讨论】:

    标签: android eclipse unity3d integration


    【解决方案1】:

    对于必须同时显示 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 项目时都必须重复。

    编码:

    本指南假定您的目标是拥有一个同时显示 Unity 模型和常规 Android UI 的 Android 活动。

    1. 将以下行添加到项目清单文件的基础:''。
    2. 将清单中的以下行添加到应该包含 Unity 模型的活动:''。这使得触摸事件能够同时传递给 Unity 模型和常规 Android UI。
    3. 使 Activity 扩展 UnityPlayerActivity 而不是 Activity。
    4. 不要在 onCreate() 中直接添加“setContentView”——这会导致不希望的行为——在我的例子中,Unity 模型非常小,无法与之交互;相反,在 onResume() 中找到 UnityPlayer 对象的父视图,并在其中膨胀布局并添加所有其他 UI 元素。请注意,可能需要在单独的线程中找到所述视图。

    疑难解答:

    • NoClassDefFoundException(或类似)在扩展 UnityPlayerActivity 的类上:转到您的 Android 项目的属性,然后是 Java 构建路径 -> 订购和导出并勾选 classes.jar(在我的情况下,它位于列表顶部,如果有什么不同)。按 OK,清理项目,尝试再次运行并祈祷……
    • 多个 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;
    }
    

    【讨论】:

    • (对于 Unity 4.5):您是否尝试过在 Unity 的构建设置对话框中使用 [export] "Google Android Project" 选项?这将创建一个 Android 项目。我的方法是将生成的项目合并到我的 Android 项目中,方法是从 Unity 生成的项目中获取所有相关文件,但使用我自己的 java 文件(类似于统一生成的项目中的文件,但使用我自己的附加代码),我的清单等。然后我会用 gradle 构建。有什么理由不起作用?
    【解决方案2】:

    您使用的是哪个 Unity 版本? if 4.X 我写了一篇关于eclipse集成的教程here

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-30
      • 1970-01-01
      相关资源
      最近更新 更多