unity怎么开发wpunity3d手机游戏开发

本帖子已过去太久远了,不再提供回复功能。&&& Android与都有大量的游戏,而且还有很多游戏开发工具来为其提供支持。后起之秀Windows Phone 8也不甘人后,最近Windows Phone 8和Windows 8就得到了专业游戏引擎Unity3D的支持。
WP8和Win8得到专业游戏引擎Unity3D支持(图片引自BGR)
&&& 这也就意味着开发者们可以通过Unity3D工具简单的从其他平台移植一些高品质的图像密集型游戏到Windows Phone 8和Windows 8中。Unity Technologies公司CEO David Helgason就已经证实了这一消息,并称,现在已经有53%的游戏开发商在使用Unity3D。
&&& David Helgason也表示,非常期待能够与Windows Phone 8和Windows 8合作,将会为大型游戏开发提供帮助。
主屏尺寸 4G网络
投诉欺诈商家:
天津重庆哈尔滨沈阳长春石家庄呼和浩特西安太原兰州乌鲁木齐成都昆明贵阳长沙武汉郑州济南青岛烟台合肥南京杭州东莞南宁南昌福州厦门深圳温州佛山宁波泉州惠州银川
本城市下暂无经销商
4¥54975¥24996¥22997¥83888¥69889¥348810¥2398Android与Unity交互研究
与Unity交互研究
Android与Unity交互研究 unity与android交互的由来 unity简单介绍 unity与android交互介绍 unity调用android的方法 android调用untiy的方法
unity与android交互的由来
本人在项目开发过程中,遇到这样一个需求,把unity的场景放到android中去显示。刚开始做的时候也是一头雾水,unity是什么东西都没听说过。后来也是查询很多资料,才实现了需求的效果。所以把自己的一些总结记录于此,方便各位同行参考。
unity简单介绍
unity是可以开发诸如三维视频游戏、建筑模型、三维动画等交互类内容的多平台综合游戏开发工具,具有很强大的跨平台性。在unity之中编写好场景和程序之后,可以导出Android、ios、windows phone、PC等多个平台的版本。
如上图,列出了unity可以导出的所有平台。
unity与android交互介绍
一般的都是,把unity作为android程序中的一部分,将一个u3d场景当成一个界面或者一个界面的一部分。
还有的是把android作为unity的一部分进行开发。不过这种形式的开发很少,也没必要。
我们下面以一个例子来介绍二者之间的交互。
首先,在unity中搞了一个游戏场景,运行之后如下图:
此场景中&1&是一个label,用来显示从android中设置的怪兽人物的名称。&2&用于在android程序中控制大小显示变化的。&3&是用与unity中测试大小变化的。
unity调用android的方法
我们需要在运行起来Unity引擎之后,调用java类中的方法获取怪兽的姓名,就需要Uniy调用Android的方法。
unity调用java方法一共有四种形式,分别是:
没有返回值的普通方法
AndroidObject jo = new AndroidJavaObject(android.content.res.Configuration);
jo.Call(setToDefaults);
带有返回值的普通方法
AndroidJavaObject jo = new AndroidJavaObject(java.lang.String, some string);
int hash = jo.Call(hashCode);
没有返回值的静态方法
AndroidJavaObject jo = new AndroidJavaObject(android.os.Binder);
jo.CallStatic(flushPendingCommands);
带有返回值的静态方法
AndroidJavaObject jo = new AndroidJavaObject(java.lang.String);
string valueString = jo.CallStatic(valueOf, 42.0);
我们往游戏对象上绑定一些操作&Operate.cs :
using UnityE
using System.C
public class Operate : MonoBehaviour {
public UIL
public bool flag =
/// 定义旋转速度
public float RotateSpeed=45;
// Use this for in
itialization
void Start () {
//Debug.Log(hello);
this.name = M
GetData ();
/// 通过调用android中的方法获取name,并为label赋值
void GetData(){
AndroidJavaClass jc = new AndroidJavaClass (com.unity3d.player.UnityPlayer);
AndroidJavaObject jo = jc.GetStatic (currentActivity);
string name = jo.Call (getName, 成功调用android方法);
label.text =
// Update is called once per frame
void Update () {
//target.Rotate (Vector3.up * Time.deltaTime * RotateSpeed);
void OnClick(){
Screen.orientation = ScreenOrientation.L
if (flag) {
target.localScale = new Vector3 (0.5f, 0.5f, 0.5f);
//label.text = 123456;
target.localScale = new Vector3 (0.75f, 0.75f, 0.75f);
//label.text = 000000;
/// 顶掉之前的scene
void Unload(){
Application.LoadLevel (1);
AndroidJavaClass jc = new AndroidJavaClass (com.unity3d.player.UnityPlayer);
AndroidJavaObject jo = jc.GetStatic (currentActivity);
jo.Call (makePauseUnity);
void ZoomIn(){
target.localScale = new Vector3 (0.75f, 0.75f, 0.75f);
void ZoomOut(){
target.localScale = new Vector3 (0.5f, 0.5f, 0.5f);
代码和场景编写好之后,就可以使用unity到处apk文件运行了。不过我们需要在eclipse中进行二次开发,所以需要到处android工程。
在导出的时候,可以选择导出&Google Android Project&。
如上图,如果不勾选此选项,则导出的是一个apk文件。
在导出android工程或apk之前,需要在&Player Settings&进行一些配置:
这些配置与我们在eclipse等工具进行开发设置的基本一致。
导出android工程之后,看到目录结构如下:
vc7Sw8e1xLK8vtbW0Dwvc3Ryb25nPqGjPC9wPg0KPGhyIC8+DQo8cD61vLP2YW5kcm9pZLmks8zWrrrzo6y74bP2z9bBvdbWx+m/9qO6PC9wPg0KxOPS0b6t09BhbmRyb2lkuaSzzMHLo6y0y8qx1rvQ6NKqsNFhc3NldHO1xM7EvP66zWxpYnO1xLD8v72xtLW9xOO1xM/uxL/W0Milo6zU2rDR0OjSqsXk1sO1xMDg1NpBbmRyb2lkTWFuaWZlc3QueG1s1tDF5NbD0rvPwqGjIMO709C5pLPMo6zEx8O01rvQ6NKqsNF1bml0ebW8s/a1xLmks8y1vMjrxOO1xElERdbQvLS/yaGjDQo8cD6/tNK7z8JNYWluQWN0aXZpdHm1xLK8vtajujwvcD4NCjxwcmUgY2xhc3M9"brush:">
贴上逻辑代码之前,先介绍一下Android调用unity方法的方式:
android调用untiy的方法:
UnityPlayer.UnitySendMessage(Manager, ZoomIn, );
第一个参数是Game Object对象,所以需要在游戏对象上绑定脚本,第二个参数是unity中定义的方法名,第三个参数是定义方法的参数(可空)。
既可以在定义场景的时候将游戏对象改名字,也可以在代码中设置:
void Start () {
this.name = M
GetData ();
在unity中运行之后,就会发现出现一个&Manager&的游戏场景了。
下面看一下activity的代码:
package com.jacksen.unity2
import com.unity3d.player.UnityP
import android.os.B
import android.view.KeyE
import android.view.V
import android.view.View.OnClickL
import android.widget.B
import android.widget.LinearL
import android.widget.T
public class MainActivity extends UnityPlayerActivity {
private LinearLayout u3dL
private Button zoomInBtn, zoomOutB
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
u3dLayout = (LinearLayout) findViewById(R.id.u3d_layout);
u3dLayout.addView(mUnityPlayer);
mUnityPlayer.requestFocus();
zoomInBtn = (Button) findViewById(R.id.zoom_in_btn);
zoomOutBtn = (Button) findViewById(R.id.zoom_out_btn);
zoomInBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
UnityPlayer.UnitySendMessage(Manager, ZoomIn, );
zoomOutBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
UnityPlayer.UnitySendMessage(Manager, ZoomOut, );
public String getName(final String str) {
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(MainActivity.this, str, 1000).show();
return 我是怪兽,哈哈哈;
* 3D调用此方法,用于退出3D
public void makePauseUnity() {
runOnUiThread(new Runnable() {
public void run() {
if (mUnityPlayer != null) {
mUnityPlayer.quit();
} catch (Exception e) {
e.printStackTrace();
MainActivity.this.finish();
* 按键点击事件
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
onDestroy();
protected void onDestroy() {
super.onDestroy();
//UnityPlayer.UnitySendMessage(Manager, Unload, );
mUnityPlayer.quit();
// Pause Unity
protected void onPause() {
super.onPause();
mUnityPlayer.pause();
// Resume Unity
protected void onResume() {
super.onResume();
mUnityPlayer.resume();
public void onBackPressed() {
super.onBackPressed();
// mUnityPlayer.quit();
// this.finish();
OK,运行效果如下:
跳转到MainActivity之后,unity场景启动,调用android中的getName()方法为怪兽头上的label赋值。
点击放大后缩小按钮分别调用Unity中的ZoomIn()和ZoomOut()方法,控制怪兽变大变小。
OK,至此unity与android的简单交互叙述完毕。

我要回帖

更多关于 unity手机游戏开发 的文章

 

随机推荐