求问大神,如何将unity前端程序unity在手机上运行

求问大神,如何将unity程序在手机上运行?【unity3d吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:87,400贴子:
求问大神,如何将unity程序在手机上运行?收藏
就是我用unity写完一个小游戏,想在安卓手机上运行。怎么弄啊,是要安装安卓sdk吗?
SiKi学院上有大量的项目案例课程,可以让学员随时随地学习!通过案例来从入门到深入的学习Unity!
你不仅要装安卓sdk,还有一大堆坑要填
登录百度帐号查看: 9400|回复: 4
unity发布的游戏在真机上闪退是什么原因?
2级会员(论坛居民)主题帖子CG券
2级会员(论坛居民), 积分 25, 距离下一级还需 175 积分
2级会员(论坛居民), 积分 25, 距离下一级还需 175 积分
发布了一个Android版的展示模型用的程序(40M+),在真机上一运行之后出现unity标志,一会就闪退,这是怎么回事?坐等大神指点~~~
Powered byUnity软件中运行是好的,可是打包成exe后他就不执行代码了,是怎么回事啊,有哪位大神晓得
做的FPS游戏,Unity中运行人物可以控制视角的旋转(用鼠标),射击,等等,但是打包成exe之后就不能旋转,不能射击了。为什么会这样啊大神们。
要评论请先&或者&
这个问题我不久之前回复过了,一般传统的系统,如果你代码错,整个APP会崩掉的,但是由于UNITY3D插件框架的特殊性(其他很多语言也有插件框架,JAVA,JS等等也是类似的)我最近才发现unity3d做的插件性质特别彻底,就是你执行前面的代码错了,APP不会崩溃,可能是小问题,整个游戏很难查问题,要到很后面才发现前面代码逻辑不对,(java,js等插件出错了,整个页面停掉的,单个页面比较好调试)甚至是后面的一大段代码其实是不执行的,作为开发者是不准确确定的,无法control everything很难受
例如;
int i = &ss&;
if(Input.x'x'x
那么Input就不会执行了,但是游戏render这些其他插件是很正常的(这也是游戏框架很需要的,unity做得很好),所以就没有旋转
我只是举例子,就是你可以调试一下,为什么exe环境下,你得input之前的代码报错了(这我可以肯定的),为什么unity editor环境下缺不报错
你写了#if ediotr #end if这种,代码,很容易有你这种问题的,很正常,很常见,你这种问题
肯定是在Input代码之前出错了(80%的可能性),可能在同一个类里,也可能是其他类
说点题外话,一个好的输入control manager框架还是需要的,除了基本的只是手柄,重力感应,触摸等多个基本功能外,比较好的框架最重要是需要“解耦”,就是不要因为一个程序员的代码出错,导致这个control manager不执行,“啊,为什么debug可以,编译成exe缺不行呢,开发好难啊”,分析要花一大轮时间,调试又花一大轮时间,这就是你现在所经历的,
最理想的状态是集中经历在制作游戏上,而不是花时间DEBUG
其实好的框架完全能避免你这种情况,但好的框架是不存在的,完全“解耦”是不存在的,但是要做到尽量少依赖,利用好插件框架,好的设计模式和框架确实能提高开发效率了在网络上,关于Unity与Android如何进行交互,雨松MOMO大神已经有两篇文章简单介绍了如何操作(1)(2)。这两篇文章简单介绍如何操作,但是具体的内部细节并没有涉及到。下面介绍两种Unity与Android交互的方式(或者说就是接入Android SDK),分别是(1)Unity导出Android工程,然后你将SDK工程作为Library来接入(2)Plugins方式,这种方式就是在Assets目录下新建Plugins/Android目录,把你需要的资源、jar包等按规定放进去。
(1)Unity导出Android项目
通过在Build Settings中选择Google Android Project选项,点击Export,可以得到一个Unity生成的Android项目。
将项目导入到Eclipse中,可以看见如下的项目结构:
让我们先不管src的源代码,首先关注libs。
libs有三部分:前两者(armeabi-v7a, x86)表示手机的两种硬件设备,包含了各自所需的so文件,我们可以在Unity的Player Settings-&Other Settings-&Device Filter中来进行选择。而unity_classes.jar就是UnityPlayerActivity类所在的jar包,其实就是Unity目录下的Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Development\Classes\classes.jar。(注意,这个路径是Unity5.3的路径,不同版本的Unity中,该路径是不同的)
下面我们来查看classes.jar(即unity_classes.jar)的内容
classes.jar
在网上下载一个Java反编译工具,比如JD-GUI,打开classes.jar,我们可以看见如下结构:
其中jnibridge应该是用来实现Java与其他语言的通信,而fmod是用来控制音频的,剩下的com.unity3d.player才是我们需要重点关注的。通常我们自己新创建的Activity,都是要继承UnityPlayerActivity类,因此我们首先查看该类,其部分内容如下:
该类的内容十分简单,其中最为重要的是UnityPlayer:
回忆一下,我们在Android里定义自己的Activity:
public class UnityTestActivity extends UnityPlayerActivity
在Unity里调用Android的方法的步骤:
AndroidJavaClass jc = new AndroidJavaClass(&com.unity3d.player.UnityPlayer&);
AndroidJavaObject jo = jc.GetStatic&AndroidJavaObject&(&currentActivity&);
jo.Call(&StartActivity0&,&第一个Activity&);
因为我们继承了UnityPlayerActivity,那么当我们的UnityTestActivity调用onCreate方法时,就同时把自己这个实例传递到了UnityPlayer中的currentActivity。因此在Unity中我们就可以利用currentActivity来调用我们自定义的UnityTestActivity中的方法。
这时回头查看src的源代码,可以发现其内容和classes.jar中差不多。
清单文件 AndroidManifest.xml
一个默认的清单文件中有以下重要内容:
这里,package是在Player Settings-&Other Settings-&Bundle Identifier设置。默认UnityPlayerActivity为主Activity。
除了通过导出Android工程来查看自动生成的内容,也可以通过Unity安装目录下的Editor\Data\PlaybackEngines\AndroidPlayer来查看,其目录内容如下:
我们重点看Apk、Source、Variations,这三者里面就包含默认的AndroidManifest.xml,res目录和assets目录等。
(2)Plugins/Android
我们可以通过在Plugins/Android中添加东西来影响Unity生成的Android项目。
AndroidManifest.xml
我们可以直接在Android目录下添加一个AndroidManifest.xml文件,这个文件会影响最终的Android项目中的清单文件。注意,这里的程度只是影响,而不是完全替换,比如package会最终替换为Bundle Identifier的设置,如果没有以下几行
&uses-feature android:name=&android.hardware.touchscreen& android:required=&false& /&
&uses-feature android:name=&android.hardware.touchscreen.multitouch& android:required=&false& /&
&uses-feature android:name=&android.hardware.touchscreen.multitouch.distinct& android:required=&false& /&
如果是默认设置他也会默认加上去,等等。
PS: AndroidManifest.xml要放到Android目录下才会对主清单文件起作用,如果你放到其他目录,比如test,则不会对最终的Android项目有作用。
你可以在Android目录下增加一个res目录。不管这个目录是空的还是有东西,导出来的Android项目都会多一个叫unity-android-resources的Library工程,而我们的主Android工程则引用了该Library,如图:
观察这个Library就知道,这个工程主要就是存放资源的,比如我们这里把东西放到res目录中,则这些多出来的东西就会放到Library工程中。注意,res目录的东西不能随便乱放,要按照合格的目录结构来,即一般如下:
如果你是随便把资源放到res目录下,或其他错误名字的子目录,比如res/test等目录下,都会报出以下的错误:
assets目录
assets目录和res目录类似,都是存放资源的,只是res目录里面的资源会在R文件中生成ID,而assets目录不会生成ID,需要自己手动根据路径来访问资源。
在查看网上的相关文章时,发现大多数文章都说要把jar包放到Plugins/Android目录的libs或bin目录。不知道是不是Unity5做出了修改,我发现jar包不管放到哪,只要在Assets目录下,都能起作用,成为最终Android工程的libs中的内容。
Library工程
你可以在Plugins/Android目录下放置一个Android Library工程,只要设置得当,这个工程就会被Unity识别并在最终生成的Android工程中引用。这个也是我接入Android SDK时主要使用的方式,十分方便并且易于管理(毕竟这让你知道哪些资源、jar包是归哪个SDK的。而如果所有资源都放在res目录,jar包都放在libs目录,这样就不知道某个SDK原本的东西在哪了)
我的SDK接入工作流程
下面介绍我接入SDK时的流程,这只是我个人感觉比较方便的流程,如果大家有更好的流程,希望能在评论区告知。我一般会同时使用上述两种方式,因为第一种方式的缺点是不好进行项目管理(毕竟有两个分开的项目),并且要打包一个apk也比较麻烦;而第二种方式的缺点就是不直观,调试不方便。
(1)建立SDK的Android Demo工程
根据文档,将需要的功能以Unity易于调用的方式写成接口,比如我一般定义函数签名为void FuncName(String params, String callbackTarget, String callbackMethod)
这里,params就是SDK接口需要的参数(或者是参数列表,以&;&等分隔符连接具体的参数,比如: &A12&),callbackTarget就是Unity里调用回调方法的GameObject的名字,而callbackMethod就是回调方法的名字。
然后创建简易的界面(比如几个按钮)来调用这些写好的接口,确定接口的功能无误
(2)将Demo工程转换为Library工程
去掉Demo工程中测试用的Activity、布局文件,在清单文件中去掉主Activity的设置,最后把项目设置为Library。
(3)Unity导出Android工程,和上面的Library工程一起导入到Eclipse中
导入完成后,如果你的Library工程用到classes.jar,你需要先删掉该classes.jar,然后再添加Unity的Android工程的unity_classes.jar引用。
(4)把Library工程添加到Unity工程
通过(3),我们可以得到一个设置正确的Library工程,这时候我们可以直接把该工程拖到Unity工程的Plugins/Android目录下
(5)在Unity中编写调用Library工程接口的代码
(1)Unity在直接导出Apk时,会在Temp目录(与Assets目录同级)下的StagingArea目录生成一些临时的Android代码
(2)在Eclipse中,如果adb一直提示断开连接,可以用360手机助手连上手机,这时adb就能正常工作了
Views(...) Comments()用Unity3D模拟史上最牛游戏2开发手机游戏,跪求大神帮忙
[问题点数:50分]
本版专家分:0
CSDN今日推荐
本版专家分:0
本版专家分:0
本版专家分:0
本版专家分:0
本版专家分:0
本版专家分:0
匿名用户不能发表回复!|
CSDN今日推荐}

我要回帖

更多关于 unity 退出程序 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信