‘壹’ unity上做的东西怎么打包成ipad上能看的
要打包成ipad上能看的,就必须使用unity for mac版本,而这个版本你只能运行在mac上,因此你也得有台mac电脑,这是硬件条件,
软件条件嘛,如果是正式的开发者,你必须首先成为苹果的开发者,99美金一年,加入以后获得开发者权限,获得xcode下载以及开发者密匙,这样就能打包成ipad识别的格式。
具体流程是:
unity for mac 生成xcode文件,xcode生成app包,app包可以由xcode直接烧录到ipad上,也可由越狱渠道生成ipa包安装到ipad上。总之过程比较麻烦,非正式渠道的话,也可以去下载xcode生成不带签名的app包然后走越狱渠道。
‘贰’ 可以用unity制作app吗
Unity是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。但是也可以做类似交互性的、虚拟现实的app,现在网上有很多制作app的开发网站,比如应用之星等等,unity的主要功能还是做游戏比较多。app目前也很少有3d的吧
‘叁’ Unity脚本生成ipa或apk的方法
如果不关心概念只关心使用方法,可略过这里,直接去到“准备环境”、“脚本构建使用方法”。
能够使用Unity进行脚本生成ipa或apk(以下统称app)的核心前提是:
所以,使用Unity进行脚本生成app的核心步骤是:
Environment.bat
UnityToApk.bat
UnityToXCode.sh
XCodeToIPA.sh
CommandBuild.cs
‘肆’ 如何把unity 集成到现有的android app
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的视图。
‘伍’ Unity工程打包到iOS平台并上传app Store流程
公司需要将Unity工程打包上架,在这里记录一下流程供参考。
总体流程:
一.打开unity工程,点击运行,查看游戏图片显示等功能是否正常.
二.导出该工程从xcode打开.
三.在xcode上进行相关文件的添加.
四.相关参数的编辑.
五.在手机上测试无误后生成ipa文件.
六.将生成的ipa文件上传到 itunes connect 提交审核.
详细流程:
一.打开unity工程,点击运行,查看游戏图片显示等功能是否正常.
二.导出xcode工程:
1.File→Build Settings
2.在Platform中选择iOS,点击Switch Platform表示确定更换到这个平台,再打开Player Settings
3.Default Orientation 为Auto Rotation ,在Resolution and Presentation中勾出 Landscape Right(向右横版)和LandScape Left(向左横版). (这样做使得进入游戏后使界面锁定为横版).
4.在other Setting 中Scripting Backend 选择 IL2CPP,再在Building Setting 中进行 Build and Run,即在xcode 中生成, (选择IL2CPP可以减少游戏的载入时间).
5.将图标放入文件中,再拖入到default icon(这样是为了生成各种分辨率的图标):
三.在xcode上进行相关文件的添加:
如游戏启动界面
2.将之前导入的文件添加进工程中. (在上述过程中,替换的文件不用管,新添加的文件必须在这里导入,需要拖进工程目录).
四.相关参数的更改
1.确认包名(Bundle Identifier),对Version 和 Build 进行更改
3.在Build Settings 中的 Build Options 中修改 bitcode为NO. (这个选项跟包的优化有关,如果你的第三方类库不支持bitcode,就应该关掉它,一般情况都关掉,否则会报错).
4.在Other Linker Flags 中添加 -Objc. (加了这个参数后,链接器会把静态类库中的所有Objective-C类都加载到最后的可执行文件,防止函数的调用失败).
五.build 无误,并且在手机上运行无异常后,即可生成ipa文件
1.点击Edit Scheme
2.确定Archive 中的Build Configuration 为 Release.(Archive 即导出ipa文件, Release 表示正式版,对应的debug为测试版,在这里的run中 Build Configuration应为 debug,否则无法再手机上测试).
3 .在菜单栏点击 archive,等待后,
4.选中刚生成的文件,点击Export导出
5.选择第一项,即是可以用开发者账号发布app,点Next确认. (第二项用于测试包打包,第三项用于企业账号).
6.选择签名证书对应的开发者,点击choose.
7.点击Export然后选择导出的地址就可以在对应文件夹中看到生成的ipa文件了
七.将生成的ipa文件上传到 itunes connect 提交审核.
1.进入Application Loader
2.选择"交付您的应用",点击选取,选择刚才生成的 ipa文件.
3.进入itunes connect 选择对应的app(这里用升级ipa为例).点击"版本和平台",选择iOS平台.
4.输入新的版本号(一般在原版本号上加0.1)
5.在构建版本中选出上传的版本(刚上传的ipa文件会有个处理时间,届时此处会有”+"号供点击),上传完后是这样.最后保存提交审核即可.
‘陆’ 有没有人用Unity3D不是做游戏而是做App的
unity做app,我只能说你的想法很时尚,app的渲染方式与游戏完全不一样
unity 按帧固定时间绘制的
app 都是按需绘制的,只绘制脏区(更新过的区域clip)就OK了
如果unity做出app,那也会非常耗电池的。
‘柒’ unity只能用来做游戏吗可不可以用unity做应用软件
可以,但是这么做不仅没有意义还耗时,比如你说的酷狗音乐,unity本身所支持的只有.aif,.wav,.mp3和.ogg格式,那么你需要针对不同平台写解码器来支持其他格式,而这部分工作和使用源生开发没有什么不通,反而还增加了与unity工程通讯的工作量
‘捌’ unity3d 可以直接生成 ipa文件 放在iphone 上用么
不能,unityu3d无法生成文件,需要xcode才可以。
1.unity3d导出的是xcode工程,xcode可以发布iphone应用。
2.装到iphone上的就是xcode导出的ipa文件和unity3d就没关系。
3.Unity是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。4.Unity类似于Director,Blender game engine, Virtools 或 Torque Game Builder等利用交互的图型化开发环境为首要方式的软件其编辑器运行在Windows 和Mac OS X下,可发布游戏至Windows、Mac、Wii、iPhone、Windows phone 8和Android平台。也可以利用Unity web player插件发布网页游戏,支持Mac和Windows的网页浏览。它的网页播放器也被Mac widgets所支持。
‘玖’ 用Unity3D做好了自己的游戏项目,怎么导入到android手机上玩,是不是还需要调用android的SDK
unity3d制作好的工程在导出的时候找到android sdk就能导出了~ (player setting要按照标准填写好才可以)触摸可以再unity中写的,GUI上面的事件直接把鼠标左键转化成触摸的,游戏对象中自己写的鼠标事件要写成touch事件,或者用触摸插件什么的,总之不用再在eclipse下面改代码啦。
‘拾’ unity3d制作手机应用
可以,unity3d 的2D能力不输于其他专门的2D引擎。
具体的手机功能需要单独写插件,这个对别的也是一样。
缺点是无法即时更新脚本,也就是再编译能力不足,不过这个事情见仁见智。
