Unity 5.2.3 Android 开发入门
2015-12-29 16:04
447 查看
1. 安装 Android 开发环境
Java, Android SDK, Eclipse,NDK 都要下载到位;
2. 下载 Unity 软件:
Unity 5.2.3:
http://pan.baidu.com/s/1kT6gTDl 密码:mmla
3. 安装 Unity 后,需要创建一个账号,然后使用这个账号登陆
登陆后创建一个 Test1的工程,在启动的界面,选择菜单 Edit->Preferences,然后点击 External Tools,在右边 Android 一列,填入 SDK,JDK,NDK的路径。
NDK目前只能用 r10b版本的,先不管它。
4. 选择菜单 File->Build Settings,选择下面的 Android 图标,然后点击 Switch Platform 按钮,然后点击 Player Settings按钮, 会弹出 Settings for Android窗口,
选择 Other Settings,在 Identification 一列填写 Bundle Identifier:com.example.UnityTest1,这个不填会报错误,其他配置自己看情况设置。
5. 点击 Build SEttings 窗口的 Build & Run 按钮,连接手机到电脑,就会在手机上安装编译好的程序。
注意在开发 Android 插件程序时用到的 classes.jar文件在下面这个位置:
C:\Program Files\Unity\Editor\Data\PlaybackEngines\androidplayer\Variations\mono\Development\Classes
6. 使用 Eclipse 创建 Android 工程 Test1。
将上步骤的classes.jar文件添加到libs目录,然后在此文件上点击鼠标右键,在弹出菜单上选择Build Path->Add to build path
修改 MainActivity.java:
注意修改 layout文件:
activity_test_activity0.xml
修改 AndroidManifest.xml文件,主要是将三个Activity都置为全屏:
使用 Eclipse 进行编译工程。
使用命令行进入 bin\classes目录,把子目录里生成的 R*.class文件都删掉,因为 Unity 也会编译 res 目录,这样会产生重复。
然后使用命令 jar -cvf Test1.jar * 这样会在bin\classes目录下生成Test1.jar文件;
或者有个更简单的办法,用鼠标选中src,然后右键选择导出,这样导出的 jar 就跟使用命令生成的一样。
7. 切换到Unity界面,在 Test1工程里面添加内容:
在 Project 详情页面选择 Assets,然后点击Create按钮,创建Plugins目录,然后再创建Android子目录:
a. 创建 bin 目录,把上步产生的 Test1.jar 文件复制到此处;
b. 把Eclipse工程的 res文件夹,libs文件夹和 AndroidManifest.xml 文件复制到 Android 子目录,删除libs文件夹下面的classes.jar文件;
8. 在 Assets目录下创建Scripts目录,
然后点击Create按钮,选择C# Script,然后重命名这个文件为 Test,双击编辑内容:
这时候会启动Visual Studio,需要些时间。默认调用的是 Visual Studio Community 2015, 免费的,但是需要注册下账号。
使用下来,Visual Studio 不如内置的编辑器 MonoDevelop 好用,在菜单 Edit->Preference,启动后找到External Tools,第一项选择 Mono Develop(builtin)即可。
然后再双击Test.cs文件,则启动 Mono Develop 来编辑代码,填写如下代码:
注意 Unity 界面 Assets目录下文件都不显示后缀名的。
9. 关联 MainCamera 和 Test.cs脚本
这一步很关键,不关联的话脚本得不到执行。
在主界面的 Hierarchy 窗口里面点击 Main Camera,在右边Inspecator窗口Main Camera设置项底部点击 Add Component 按钮,下面选择Scripts/Test.cs就可以了。
8. Unity界面按下 Ctrl+B 进行编译运行,这时候可能碰到以下问题:
a.Unable to convert classes into dex format.
这是因为刚才拷贝 Eclipse工程内容的时候,把 libs 目录下的classes.jar也拷贝进来了,这个文件 Unity自己本就有,所以需要删除它,然后再编译;
b.Unable to find unity activity in manifest. You need to make sure orientation attribute is set to fullSensor manually.
在 AndroidManifest.xml文件中有继承自Unity的Activity加入一行 :
c.OBSOLETE - Providing Android resources in Assets/Plugins/Android/res is deprecated, please move your resources to an Android Library.
这是个警告,不是错误。
这是因为把资源放在Assets/Plugins/Android/res/目录里已经不推荐了,有可能产生资源冲突。建议使用android新的aar格式,可以在 Android Studio完成。
参考这个解释:http://stackoverflow.com/questions/29498365/how-do-i-get-android-studio-to-include-resources-in-a-jar-file
d. CommandInvokationFailure: Unable to convert classes into dex format. See the Console for details.
C:/Program Files/Java/jdk1.7.0_71\bin\java.exe -Xmx2048M -Dcom.android.sdkmanager.toolsdir="D:/Android/sdk\tools" -Dfile.encoding=UTF8 -jar "C:\Program Files\Unity\Editor\Data\PlaybackEngines\androidplayer/Tools\sdktools.jar" -
stderr[
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/example/unit1/R;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/example/unit1/R$attr;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/example/unit1/R$dimen;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/example/unit1/R$drawable;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/example/unit1/R$id;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/example/unit1/R$layout;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/example/unit1/R$menu;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/example/unit1/R$string;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/example/unit1/R$style;
9 errors; aborting
]
这个错误网上搜了一堆都没有解决,是因为使用 Eclipse 的 Export JAR导出太多东西导致的,到处是用鼠标选中src,
然后右键选择导出,这样导出的 jar 就不含 R*了。。
如果 app 启动就闪退,要检查下 Player Settings 里面 bundle identifier 是否是 eclipse创建的工程的包名,比如com.example.unit1
Java, Android SDK, Eclipse,NDK 都要下载到位;
2. 下载 Unity 软件:
Unity 5.2.3:
http://pan.baidu.com/s/1kT6gTDl 密码:mmla
3. 安装 Unity 后,需要创建一个账号,然后使用这个账号登陆
登陆后创建一个 Test1的工程,在启动的界面,选择菜单 Edit->Preferences,然后点击 External Tools,在右边 Android 一列,填入 SDK,JDK,NDK的路径。
NDK目前只能用 r10b版本的,先不管它。
4. 选择菜单 File->Build Settings,选择下面的 Android 图标,然后点击 Switch Platform 按钮,然后点击 Player Settings按钮, 会弹出 Settings for Android窗口,
选择 Other Settings,在 Identification 一列填写 Bundle Identifier:com.example.UnityTest1,这个不填会报错误,其他配置自己看情况设置。
5. 点击 Build SEttings 窗口的 Build & Run 按钮,连接手机到电脑,就会在手机上安装编译好的程序。
注意在开发 Android 插件程序时用到的 classes.jar文件在下面这个位置:
C:\Program Files\Unity\Editor\Data\PlaybackEngines\androidplayer\Variations\mono\Development\Classes
6. 使用 Eclipse 创建 Android 工程 Test1。
将上步骤的classes.jar文件添加到libs目录,然后在此文件上点击鼠标右键,在弹出菜单上选择Build Path->Add to build path
修改 MainActivity.java:
public class MainActivity extends UnityPlayerActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.activity_main); 这一行务必注释掉 } public void StartActivity0(String name) { Intent intent = new Intent(this, TestActivity0.class); intent.putExtra("name", name); this.startActivity(intent); } public void StartActivity1(String name) { Intent intent = new Intent(this, TestActivity1.class); intent.putExtra("name", name); this.startActivity(intent); } }新建两个Activity: TestActivity0, TestActivity1:
public class TestActivity0 extends Activity { private TextView tv; private Button bn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test_activity0); tv = (TextView)findViewById(R.id.ta0_tv); bn = (Button)findViewById(R.id.ta0_bn); Intent intent = getIntent(); if(intent != null && intent.getStringExtra("name")!=null){ tv.setText(intent.getStringExtra("name")); } bn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub TestActivity0.this.finish(); } }); } }
public class TestActivity1 extends Activity { private TextView tv; private Button bn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test_activity1); tv = (TextView)findViewById(R.id.ta1_tv); bn = (Button)findViewById(R.id.ta1_bn); Intent intent = getIntent(); if(intent != null && intent.getStringExtra("name")!=null){ tv.setText(intent.getStringExtra("name")); } bn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub TestActivity1.this.finish(); } }); } }
注意修改 layout文件:
activity_test_activity0.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.jwaoo.unit1.TestActivity0" > <TextView android:id="@+id/ta0_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> <Button android:id="@+id/ta0_bn" android:layout_below="@id/ta0_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button for Activity0" /> </RelativeLayout>activity_test_activity1.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.jwaoo.unit1.TestActivity1" > <TextView android:id="@+id/ta1_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> <Button android:id="@+id/ta1_bn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/ta1_tv" android:layout_below="@+id/ta1_tv" android:text="Button for Activity1" /> </RelativeLayout>
修改 AndroidManifest.xml文件,主要是将三个Activity都置为全屏:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.jwaoo.unit1" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="21" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:name=".TestActivity0" android:label="@string/title_activity_test_activity0" > </activity> <activity android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:name=".TestActivity1" android:label="@string/title_activity_test_activity1" > </activity> </application> </manifest>
使用 Eclipse 进行编译工程。
使用命令行进入 bin\classes目录,把子目录里生成的 R*.class文件都删掉,因为 Unity 也会编译 res 目录,这样会产生重复。
然后使用命令 jar -cvf Test1.jar * 这样会在bin\classes目录下生成Test1.jar文件;
或者有个更简单的办法,用鼠标选中src,然后右键选择导出,这样导出的 jar 就跟使用命令生成的一样。
7. 切换到Unity界面,在 Test1工程里面添加内容:
在 Project 详情页面选择 Assets,然后点击Create按钮,创建Plugins目录,然后再创建Android子目录:
a. 创建 bin 目录,把上步产生的 Test1.jar 文件复制到此处;
b. 把Eclipse工程的 res文件夹,libs文件夹和 AndroidManifest.xml 文件复制到 Android 子目录,删除libs文件夹下面的classes.jar文件;
8. 在 Assets目录下创建Scripts目录,
然后点击Create按钮,选择C# Script,然后重命名这个文件为 Test,双击编辑内容:
这时候会启动Visual Studio,需要些时间。默认调用的是 Visual Studio Community 2015, 免费的,但是需要注册下账号。
使用下来,Visual Studio 不如内置的编辑器 MonoDevelop 好用,在菜单 Edit->Preference,启动后找到External Tools,第一项选择 Mono Develop(builtin)即可。
然后再双击Test.cs文件,则启动 Mono Develop 来编辑代码,填写如下代码:
using UnityEngine; using System.Collections; public class Test : MonoBehaviour { // Use this for initialization void Start () { if(Input.GetKeyDown(KeyCode.Escape)||Input.GetKeyDown(KeyCode.Home)||Input.GetKeyDown(KeyCode.Menu)) { Application.Quit(); } } // Update is called once per frame void Update () { if(GUILayout.Button("Open Activity", GUILayout.Height(80))) { AndroidJavaClass jc = new AndroidJavaClass("com.example.unit1"); AndroidJavaObject jo = jc.Get<AndroidJavaObject>("currentActivity"); jo.Call("StartActivity0", "Heelo Activity0 for Unity"); } } }
注意 Unity 界面 Assets目录下文件都不显示后缀名的。
9. 关联 MainCamera 和 Test.cs脚本
这一步很关键,不关联的话脚本得不到执行。
在主界面的 Hierarchy 窗口里面点击 Main Camera,在右边Inspecator窗口Main Camera设置项底部点击 Add Component 按钮,下面选择Scripts/Test.cs就可以了。
8. Unity界面按下 Ctrl+B 进行编译运行,这时候可能碰到以下问题:
a.Unable to convert classes into dex format.
这是因为刚才拷贝 Eclipse工程内容的时候,把 libs 目录下的classes.jar也拷贝进来了,这个文件 Unity自己本就有,所以需要删除它,然后再编译;
b.Unable to find unity activity in manifest. You need to make sure orientation attribute is set to fullSensor manually.
在 AndroidManifest.xml文件中有继承自Unity的Activity加入一行 :
<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
c.OBSOLETE - Providing Android resources in Assets/Plugins/Android/res is deprecated, please move your resources to an Android Library.
这是个警告,不是错误。
这是因为把资源放在Assets/Plugins/Android/res/目录里已经不推荐了,有可能产生资源冲突。建议使用android新的aar格式,可以在 Android Studio完成。
参考这个解释:http://stackoverflow.com/questions/29498365/how-do-i-get-android-studio-to-include-resources-in-a-jar-file
d. CommandInvokationFailure: Unable to convert classes into dex format. See the Console for details.
C:/Program Files/Java/jdk1.7.0_71\bin\java.exe -Xmx2048M -Dcom.android.sdkmanager.toolsdir="D:/Android/sdk\tools" -Dfile.encoding=UTF8 -jar "C:\Program Files\Unity\Editor\Data\PlaybackEngines\androidplayer/Tools\sdktools.jar" -
stderr[
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/example/unit1/R;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/example/unit1/R$attr;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/example/unit1/R$dimen;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/example/unit1/R$drawable;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/example/unit1/R$id;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/example/unit1/R$layout;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/example/unit1/R$menu;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/example/unit1/R$string;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/example/unit1/R$style;
9 errors; aborting
]
这个错误网上搜了一堆都没有解决,是因为使用 Eclipse 的 Export JAR导出太多东西导致的,到处是用鼠标选中src,
然后右键选择导出,这样导出的 jar 就不含 R*了。。
如果 app 启动就闪退,要检查下 Player Settings 里面 bundle identifier 是否是 eclipse创建的工程的包名,比如com.example.unit1
相关文章推荐
- 场景模型的获取与播放模型动画
- Unity3D核心类型一览
- Unity手游之路<十二>手游资源热更新策略探讨
- Unity手游之路<十一>资源打包Assetbundle
- 基于unity3d和leap motion的拼图游戏
- Unity3D游戏开发从零单排(四) - 制作一个iOS游戏
- Unity 脚本生命周期流程图
- UNITY中帧动画的制作
- .unity3d格式打包与解包
- Unity3D 2D游戏开发 官方教程。(十五)
- Unity3D 2D游戏开发 官方教程。(十四)
- Unity3D 2D游戏开发 官方教程。(十三)
- Unity3D 2D游戏开发 官方教程。(十二)
- Unity3D 2D游戏开发 官方教程。(十一)
- Unity3D 2D游戏开发 官方教程。(八)
- Unity3D 2D游戏开发 官方教程。(七)
- Unity3D 2D游戏开发 官方教程。(六)
- unity3d 参考坐标系
- 【Unity】工具类
- unity 5.3 的 JSON Serialization