重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

unity开发鸿蒙app,鸿蒙 unity3d

unity3d开发的App怎么自动检测更新

额外写一个更新检查程序,或当登陆器用,它是永远不更新的,然后每次通过它查询本机版本号和服务器端是否有差异,有差异则怎么怎么样.......

成都创新互联公司专业为企业提供天涯网站建设、天涯做网站、天涯网站设计、天涯网站制作等企业网站建设、网页设计与制作、天涯企业网站模板建站服务,十多年天涯做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

Unity3D制作APP,那就是填坑的活

因为一个虚拟现实APP项目的需要,原生APP不好搞,只能用Unity3D制作APP,开发中遇到的坑实在太多太多了,填多填不完。有些坑,按照网上的解决方案根本无法解决。

最终结论:Unity3D根本无法实现项目中的所有功能,最终还是需要原生APP开发来配合,做对接和调用。

终于在Unity3D、IOS原生、安卓原生三者配合下,项目终于搞定了。

后面我来整理整理材料,细述哪些是Unity3D开发APP中不好解决的功能。

如何把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做app游戏 音效什么格式 优化最好

(1)Wav/mono(stereo)/44.1KHZ/16位

网络游戏音效一般都是采用这种格式和标准,wav为window标准格式,可以保证最好的声音品质;同时可以减轻游戏的下载负担,除了部分环境音效外,绝大部分的音效都是使用mono即单声道格式,由程序在游戏过程中即时安排音效的立体声向位。

44.1KHZ是音效的采样级别,16位是采样大小,44.1KHZ/16位为windows无压缩标准采样格式,也就是说.Wav/mono(stereo)/44.1KHZ/16位的格式在windows环境下是最保真的音频格式。

(2)mp3/stereo/128K

有的游戏也采用.mp3格式,mp3为压缩格式,理论上说音质次于.wav。由于.mp3文件要比.wav小,所以有更多空间使用.stereo立体声格式,提升音效环境的空间感。

一般.mp3音效都采用128K的采样频率,这是在品质和文件大小二者的最佳平衡。对文件大小要求更严格则可用96K,对品质要求更高则可使用192K采样频率。

(3)ACC

ACC格式的音效只有mp3的一半大小,ACC格式的音效通常多用于手机游戏,较少用于网络游戏之中。

一般的概念中.wav文件最能保证品质,.mp3是在文件大小和品质之间寻求一个平衡,即文件尺寸变小了,音质也相应下降,所以开发商通常更倾向于使用.wav格式文件。但是在实际的操作中,声音的品质并不是完全由格式来决定的,如果音源或声音素材本身品质不高,采用任何格式都无济于提升其品质。举例来说,一个采样级别只有11KHZ的音效,即使转换成44.1KHZ的采样级别,它同样是11KHZ的品质。

游戏音效格式相对复杂,但是格式本无好坏之分,具体要根据游戏引擎的兼容性决定

unity3d手机游戏开发有什么优势?

1、对于移动平台来说,unity3D编程周期短,模块丰富,适合小型开发团队

随着手游市场的崛起,大量新生的开发团队开始着手研发手机游戏,在游戏引擎的选择上,某游戏团队负责人认为unity3D有着很大的优势:“如果采用C++基础语言或者以此为基础的引擎来编写游戏,整个开发周期会很长,小团队无法承受如此漫长周期中的开销,而unity3d拥有很多现成的模块可以调用,在其商店中也有很多实用组件购买,大大缩短了开发周期。”

2、可移植性很高,对多平台的支持非常平滑

目前来看,游戏多平台上线已成主流趋势,近日艾瑞公布的数据显示,月流水高居榜首的十款游戏均为网页端与移动端同步运营,因此对于开发新游戏来说,支持多平台的游戏引擎将倍受青睐。

Unity官方相关人员称:“相对于其他游戏引擎来说,unity3d拥有丰富的插件,对多平台的适应度更高,通俗来说,unity3d可以在同一个开发环境下轻松制作出在适应多平台的游戏。”

虽然手游市场的开发者们正如火如荼的摸索着新的道路,但是部分游戏厂商仍然固步自封,使用平台局限性较强的adobe引擎。

“互联网是个变化迅速的市场,更别说游戏行业了,网页游戏是在06年开始崛起的,之后的一年里面,市场上就出现了大量高质量的作品,在这个过程中被淘汰掉的企业数不胜数,大部分都是因为不适应突然从端游向页游的转变,现在的情况很相似,以前在页游界做得好的中小型企业现在的处境其实是相当危险的,如果还迟迟不能意识到游戏引擎更替的重要性,不能抢占先机,那么轻则盈利下滑,重则被市场淘汰。”

可以用unity制作app吗

Unity是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。但是也可以做类似交互性的、虚拟现实的app,现在网上有很多制作app的开发网站,比如应用之星等等,unity的主要功能还是做游戏比较多。app目前也很少有3d的吧


分享名称:unity开发鸿蒙app,鸿蒙 unity3d
网页网址:http://cqcxhl.com/article/dscoids.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP