㈠ unity3d怎么打包android
方法原理倒是很简单,通过对比Unity打包的apk,与普通的Android apk的文件差别,找出Unity文件存放的目录,随后对应存放到Android studio工程目录中,最后通过Android studio完成对Unity相关文件的打包。
首先将apk添加zip的后缀,方便用beyond compare进行对比:
1. 发现只是多了assert/bin目录,在这个目录之下,可以看到unity相关dll库 ;
2. 将该文件,拷贝到Android studio工程的src/main/assert目录之下;
3. 在Android studio调试时,可以将aar library工程设置为app工程,这样就可以编译apk运行到手机了;
4. 用Android studio对该工程进行编译,发现assert/bin目录成功被打包进去;
5. 直接apk install 运行,可以看到跟Unity编译打包的apk,是相同的效果;
㈡ 如何使用Unity制作Android游戏
第一步先搭建环境
1,下载安装java的JDK:
http://www.oracle.com/technetwork/java/javase/downloads/index.html
(JDK中,包含JRE)
如果是64位的系统,推荐安装64位的java。
2,下载安装Android Studio,生成 Android SDK:
Google已经逐步转向Android studio了,我也比较推荐用这种来开发。
ps. 2014年刚写这篇文章的时候,用的是Android studio 1.0.0 的版本,现在(2017-03-10)已经是2.3了,并且老的ADT方式,已经被废弃了…………所以本文也与时俱进,删除了ADT方式的配置。
国内有不少镜像源(现在连网络软件里都有了),贴两个下载地址:
官方下载地址:
https://developer.android.com/studio/index.html
国内社区:
http://www.android-studio.org/
安装时,分开装【Android studio】和【Android SDK】,
3,更新(管理)SDK:
默认安装的包,是跟包一起发布的(一般只包含最新的SDK),所以,可以根据开发需要,下载所需的老旧SDK包:
【windows】-->【Android SDK Manager】,打开SDK管理器(也可以点击菜单栏上的图标)
打开后,会发现有如下几种状态:未安装(Not installed)、已安装(Installed)、可更新。在前面的复选框里,勾选你需要的包,然后 install即可。
这里,我要开发支持Android4.2.2的游戏,下载的就是 Android 4.2.2(API 17),如下图所示。
附注A:
SDK包代表的意思:
Documentationfor Android SDK:Android的SDK文档,一般在最新的API里才有。
SDK Platform: Android的SDK套件
Samples for SDK: SDK的使用例子,在\sdk\samples目录中会看到对应文件
ARM EABI v7a System Image:这是一个核心镜像,提供对NDK使用的支持。是创建模拟器需要的文件
Intel Atom x86 System Image:支持x86的Android模拟器。创建模拟器需要的文件
MIPS System Image : MIPS系统(处理器)的核心镜像,创建模拟器需要的文件
Google APIs:谷歌地图提供的一套API
Sources for Android SDK:SDK的源码,在\sdk\sources目录中会看到对应文件夹,比如:android-17
4,让unity与JDK、SDK、NDK关联
启动unity,选择【Edit】-->【Preferences】-->【External Tools】,在弹出的对话框中,选择【Android SDK Location】,【Browse..】指定 Android SDK 的位置,使unity与 Android SDK 关联。
注意,SDK, 和JDK是必须的,NDK非必须。设置好JDK和SDK就可以出包了,目前是这样。
NDK需要去安卓官网进行下载:
https://developer.android.com/ndk/downloads/index.html
---------------如果只想Build出APK包,那么上边的步骤就可以了,下面的不用了------------------------
5,安装Android设备驱动
打开Eclipse,然后打开Android SDK Manager,确保【Google USB Driver 】已经安装。如果没安装,就自己勾选,安装一下,否则会爆出找不到安卓设备的错误。
6,连接手机
插好USB数据线,打开手机的USB调试模式(Android版本不同,打开方式略有不同)。【设置】-->【开发人员选项】-->【USB调试】
如果是win7系统,那么点击:【开始】-->【设备和打印机】 ,找到【Android】设备。正常情况(驱动完好,可以连接),是下图这样:
ps.如果在【Android】设备上出现叹号,那么右键【属性】-->【更新驱动程序】。指定文件夹,比如我的是:D:\ptools\android_SDK\sdk\extras\google\usb_driver。
如果还是有黄色叹号,也可以用个更绝的办法:用360手机助手,或者QQ手机助手之类的工具。这些工具会自动安装安卓的USB调试驱动。
完成环境搭建
至此,unity的Android环境,搭建完毕!希望可以帮助到你 有想要的unity插件到http://www.narkii.com/club/去找 上面有很多
㈢ unity怎么调用android
方法/步骤
1
首先我们要创建一个android项目
步骤阅读
2
因为项目需要使用Unity提供的接口,所以需要将接口classes.jar引入至当前工程但中。接口包的所在地,打开Finder->应用程序->Unity->点击Unity图标,鼠标右键选择“显示包内容”->Contents->PlaybackEngines->AndroidPlayer->bin->classes.jar
。接口包引入工程后,开始编写JAVA代码。
3
UnityTestActivity是主Activity,Unity程序一起动就会调用这个Activity,它是在AndroidManifest.xml中配置的。它需要继承UnityPlayerActivity,然而它就是刚刚我们引入的classes.jar包中提供的接口类。UnityTestActivity对外提供了两个方法接口,StartActivity0(String
name) 方法与StartActivity1(String
name)方法,这两个方法是在Unity中使用C#脚本调用的,意思是调用后程序将打开一个新的Activity,参数name也是由C#脚本传递过来的,接着将传递的String参数继续传递给新打开的Activity。
步骤阅读
4
接下来就是设置xml文件和布局文件了。对于会android编程的同学就很熟悉了。
5
把写好的java代码发布成jar包。接下来就创建unity工程,Unity工程中文件夹的结构如下,Plugins->Android的名称不能修改,必需保持一致。接着把Eclipse中Android的工程文件拷贝至这里,除了Android工程中的src文件夹,将其它文件夹全部拷贝至Plugins->Android文件夹中。最后在Plugins->Android文件夹中创建bin文件夹,然后将刚刚生成的.jar文件拷贝进来,jar的名称可以随便修改,但是jar包里面必须是com->xys->你的class文件,否则运行程序后提示找不到类文件。
步骤阅读
6
接下来就是如何在C#中调用android的方法的代码了。
加入如下代码。
AndroidJavaClass jc = new
AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo =
jc.GetStatic<AndroidJavaObject>("currentActivity");
jo.Call("StartActivity0","第一个Activity");
先得到AndroidJavaClass,然后得到AndroidjavaObject就是当前Activity的对象,也就是我们在上面创建的主UnityTestActivity.JAVA。拿到它的对象后调用jo.Call()参数1表示调用UnityTestActivity.JAVA类中的方法名称,参数2表示该方法传递过去的参数。如下图所示:“第一个Activity”与“第二个Activit”就是我在C#中传递过去的字符串。
7
发布成android平台apk
㈣ 用UNITY3D开发android游戏要学习什么
你可以先去【绘学霸】网站找“游戏特效/unity3D”板块的【免费】视频教程-【点击进入】完整入门到精通视频教程列表: www.huixueba.net/web/AppWebClient/AllCourseAndResourcePage?type=1&tagid=305,306&zdhhr-11y17r-560576480037136404
想要系统的学习可以考虑报一个网络直播课,推荐CGWANG的网络课。老师讲得细,上完还可以回看,还有同类型录播课可以免费学(赠送终身VIP)。
自制能力相对较弱的话,建议还是去好点的培训机构,实力和规模在国内排名前几的大机构,推荐行业龙头:王氏教育。
王氏教育全国直营校区面授课程试听【复制后面链接在浏览器也可打开】:
www.cgwang.com/course/gecoursemobilecheck/?zdhhr-11y17r-560576480037136404
在“游戏特效/unity3D”领域的培训机构里,【王氏教育】是国内的老大,且没有加盟分校,都是总部直营的连锁校区。跟很多其它同类型大机构不一样的是:王氏教育每个校区都是实体面授,老师是手把手教,而且有专门的班主任从早盯到晚,爆肝式的学习模式,提升会很快,特别适合基础差的学生。
大家可以先把【绘学霸】APP下载到自己手机,方便碎片时间学习——绘学霸APP下载: www.huixueba.com.cn/Scripts/download.html
㈤ 如何在unity中生成android工程
最近使用unity开发android程序,但是如何能够生成android工程,并且结合android sdk 一起开发,下面就给大家讲解一下:
首先在unitu界面之下选择file下拉菜单中的BuildSettings,然后在BuildSettings中点击addCurrent添加场景如图:
打开android eclipse 导入生成的android工程,就可以运行在android手机上了!有想要了解更多的unity插件,可以到纳金论坛上去找 希望可以帮助到你
㈥ Unity打包安卓版本与手机安卓版本不一致会怎样
一般导出设置会让你设置最低android版本和目标版本,手机上的android版本低于你设置的最低版本在不能安装。要是你的手机android版本高于你导出设置的最低版本,则正常运行。但是你设置的目标版本低于你手机android版本,运行也基本没问题,但是一些高版本的新特性你的这个应用是不能享受的。也就是没有新特性功能。
㈦ unity怎么打开unity做的安卓程序,急急急
unity不能打开apk,如果想要提取apk里的资源,可以先解压apk后使用资源提取器(网上可以搜到),前提是该APK没有进行加密;
㈧ unity3d与android交互的sdk怎么接
1、打开Android Studio——>configure——Android SDK。
注意事项:
SDK可能附带了使其不能在不兼容的许可证下开发软件的许可证。例如产品供应商提供一个专有的SDK可能与自由软件开发抵触。
㈨ 如何将unity模型导入android程序中
1.Android端代码可以在Eclipse中开发(AndroidStudio没有试,应该也可以)
2.Unity3D端代码要在Unity中开发
3.Android和Unity3D端,两边都需要加入一些代码从而可以使之关联交互。
4.将Android端代码编译成jar文件以插件形式放入到Unity端中
5.在Unity中将整个项目Build成apk文件,然后安装到手机或模拟器里运行
本文主要讲解1,2,3。对于4,5建议大家去看雨松MOMO的Unity博客的第17篇和第18篇。
UnityPlay:
在编写Android端和Unity3d端代码前,有必要先了解一下可以使两部分交互的类UnityPlay。
个人理解UnityPlay是个Unity提供给外部交互的一个接口类。
为什么是“个人理解”?这我不得不爆粗口了,TMD官网根本就没有相关的API和文档(如果大家有谁找到一定给我来一份,就当我骂自己了)。
在关联Android时,想拿到UnityPlay以及相关类的jar包可以从下面的地址找到:Unity安装路径\Editor\Data\PlaybackEngines\androidplayer\bin在bin文件夹下有一个classes.jar的jar文件,它就是我们想要的。
而在bin同目录下有一个src文件,点击到最后有3个类,分别是UnityPlayerActivity.java,UnityPlayerProxyActivity.java,UnityPlayerNativeActivity.java。前两个打开个后只有一行代码,说的是UnityPlayerActivity和UnityPlayerProxyActivity都继承自UnityPlayerNativeActivity。而打开UnityPlayerNativeActivity中居然有代码,而且我估计这应该是UnityPlayerNativeActivity的源码。
由于关于UnityPlay的资料我只找到这么一个,所以我把UnityPlayerNativeActivity中的代码都贴出来,如果我注解有不对的地方希望大家指正。
/**
* UnityPlayerActivity,UnityPlayerProxyActivity都继承自UnityPlayerNativeActivity
* 而UnityPlayerNativeActivity继承自NativeActivity
* 在该类里定义了一些和ANDROID生命周期相同的回调方法,留给自定义的Activity子类重写。
*/
public class UnityPlayerNativeActivity extends NativeActivity
{
//UnityPlayer的引用,并且我们不能改变这个引用变量的名字,它被native code所引用
protected UnityPlayer mUnityPlayer;
protected void onCreate (Bundle savedInstanceState)
{
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
// 设置显示窗口参数
getWindow().takeSurface(null);
setTheme(android.R.style.Theme_NoTitleBar_Fullscreen);
getWindow().setFormat(PixelFormat.RGB_565);
// 创建一个UnityPlayer对象,并赋值给全局的引用变量
mUnityPlayer = new UnityPlayer(this);
//为UnityPlayer设置一些参数
if (mUnityPlayer.getSettings ().getBoolean ("hide_status_bar", true))
getWindow ().setFlags (WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
int glesMode = mUnityPlayer.getSettings().getInt("gles_mode", 1);
boolean trueColor8888 = false;
// UnityPlayer.init()方法需要在将view附加到layout之前调用。它将会调用native code
mUnityPlayer.init(glesMode, trueColor8888);
// 从UnityPlayer中获取到Unity的View视图
View playerView = mUnityPlayer.getView();
// 将Unity视图加载到根视图上
setContentView(playerView);
// 使Unity视图获取焦点
playerView.requestFocus();
}
protected void onDestroy ()
{
// 当Activity结束的时候调用UnityPlayer.quit()方法,它会卸载之前调用的native code
mUnityPlayer.quit();
super.onDestroy();
}
// 下面几个方法都是ANDROID相关回调方法,确保在ANDROID执行相应方法时UnityPlayer也需调用相应方法
protected void onPause()
{
super.onPause();
mUnityPlayer.pause();
}
protected void onResume()
{
super.onResume();
mUnityPlayer.resume();
}
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
mUnityPlayer.configurationChanged(newConfig);
}
public void onWindowFocusChanged(boolean hasFocus)
{
super.onWindowFocusChanged(hasFocus);
mUnityPlayer.windowFocusChanged(hasFocus);
}
public boolean dispatchKeyEvent(KeyEvent event)
{
if (event.getAction() == KeyEvent.ACTION_MULTIPLE)
return mUnityPlayer.onKeyMultiple(event.getKeyCode(), event.getRepeatCount(), event);
return super.dispatchKeyEvent(event);
}
}
看完这个类后就知道了为什么在自定义的Activity中继承了UnityPlayerActivity等类以后,只要重写了onCreate并调用super.onCreate()方法后不需要任何其他的代码就会自动的显示出Unity3D的视图。因为初始化Unity视图的代码都在UnityPlayerNativeActivity父类中实现了。
ANDROID端代码:
在写ANDROID代码的时候,一定要导入Unity3D提供给我们的jar包,jar包的位置我在上面说了。引入jar包加入到buildpath中这些最基本的我就不多说了。
要想和Unity交互,我们就不能继承ANDROID提供给我们的Activity,我们需要继承刚才jar包中引入的Unity提供的Activity类,一共有这么3个:
UnityPlayerActivity,UnityPlayerProxyActivity,UnityPlayerNativeActivity。具体区别不知道,因为没有文档,没有API,没有源码(这里再次鄙视一下)。刚才我们看过UnityPlayerNativeActivity的代码(虽然很短,但我觉得这个就是源码),知道UnityPlayerActivity,UnityPlayerProxyActivity都是它的子类,而且最终父类为NativeActivity。所以我们继承Unity提供的最外层的子类是最好的选择,我这里选择的是UnityPlayerActivity,因为名字最简单,觉得该封装的都应该封装好了。
public class MainActivity extends UnityPlayerActivity {
private Button topButton;
private Button bottomButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 设置test为我们的根布局
setContentView(R.layout.test);
// 通过刚才的源码分析,知道mUnityPlayer为一个全局的引用变量,而且已经在父类中设置好了,所以直接拿来用就可以了
View playerView = mUnityPlayer.getView();
// 将Unity的视图添加到我们为其准备的父容器中
LinearLayout ll = (LinearLayout) findViewById(R.id.unityViewLyaout);
ll.addView(playerView);
// 上面的button设置监听器
topButton = (Button) findViewById(R.id.topButton);
topButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//发送消息给Unity端,该函数第一个参数为接受消息的类对象,第二个该类对象用接受消息的方法,第三个参数为传递的消息
//所以下面的意思就为:调用Main Camera下面的Previous方法,传送的消息为空
UnityPlayer.UnitySendMessage("Main Camera","Previous","");
}
});
// 为下面的button设置监听器
bottomButton = (Button) findViewById(R.id.bottomBtn);
bottomButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//调用Main Camera下面的Next方法,传送的消息为空
UnityPlayer.UnitySendMessage("Main Camera","Next","");
}
});
}
}
最后看一下Android端的布局文件,布局很简单,上下各有一个button按钮,两个按钮中间是Unity的视图。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:id="@+id/topButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:text="PREVIOUS" />
<LinearLayout
android:id="@+id/unityViewLyaout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/bottomBtn"
android:layout_below="@+id/topButton"
android:orientation="horizontal" >
</LinearLayout>
<Button
android:id="@+id/bottomBtn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:text="NEXT" />
</RelativeLayout>
Android端的代码就介绍完了,很简单。唯一的难点就是UnityPlayerActivity和UnityPlayer的使用。
㈩ unity工程是怎么在android上运行的
首先我们要创建一个android项目 因为项目需要使用Unity提供的接口,所以需要将接口classes.jar引入至当前工程但中。接口包的所在地,打开Finder->应用程序->Unity->点击Unity图标,鼠标右键选择“显示包内容”->Contents->PlaybackEngines->AndroidPlayer->bin->classes.jar 。接口包引入工程后,开始编写JAVA代码。 UnityTestActivity是主Activity,Unity程序一起动就会调用这个Activity,它是在AndroidManifest.xml中配置的。它需要继承UnityPlayerActivity,然而它就是刚刚我们引入的classes.jar包中提供的接口类。UnityTestActivity对外提供了两个方法接口,StartActivity0(String name) 方法与StartActivity1(String name)方法,这两个方法是在Unity中使用C#脚本调用的,意思是调用后程序将打开一个新的Activity,参数name也是由C#脚本传递过来的,接着将传递的String参数继续传递给新打开的Activity。 接下来就是设置xml文件和布局文件了。对于会android编程的同学就很熟悉了。 把写好的java代码发布成jar包。接下来就创建unity工程,Unity工程中文件夹的结构如下,Plugins->Android的名称不能修改,必需保持一致。接着把Eclipse中Android的工程文件拷贝至这里,除了Android工程中的src文件夹,将其它文件夹全部拷贝至Plugins->Android文件夹中。最后在Plugins->Android文件夹中创建bin文件夹,然后将刚刚生成的.jar文件拷贝进来,jar的名称可以随便修改,但是jar包里面必须是com->xys->你的class文件,否则运行程序后提示找不到类文件。 接下来就是如何在C#中调用android的方法的代码了。 加入如下代码。 AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); jo.Call("StartActivity0","第一个Activity"); 先得到AndroidJavaClass,然后得到AndroidjavaObject就是当前Activity的对象,也就是我们在上面创建的主UnityTestActivity.JAVA。拿到它的对象后调用jo.Call()参数1表示调用UnityTestActivity.JAVA类中的方法名称,参数2表示该方法传递过去的参数。如下图所示:“第一个Activity”与“第二个Activit”就是我在C#中传递过去的字符串。 7 发布成android平台apk