现在的位置: 首页 > 综合 > 正文

unity开发android插件(unity调用android代码) – unity3d游戏开发

2014年09月05日 ⁄ 综合 ⁄ 共 3839字 ⁄ 字号 评论关闭

使用unity开发android平台的游戏时候,大部分可能都需要加入一些广告,收费等一些额外的功能来进行游戏扩展,只要unity和android代码能够相互调用那一切都有希望。
当然工具必不可少,首先安装android sdk最新版unity4.1.5. android
sdk里面已经有了eclipse,就方便多了。

安装过程在此省略。。。

首先新建一个android项目,从unity的安装文件路径下找到一个classes.jar文件
mac版路径:找到安装路径下Unity.app,显示包内容 …/Contents/PlaybackEngines/AndroidPlayer/bin/classes.jar
pc版路径:Unity3D的安装目录下的这个文件夹中 …\Editor\Data\PlaybackEngines\androidplayer\bin\classes.jar
找到后,丢到android工程的libs文件夹下,右键选中classes.jar点击菜单:Build Path->Add To Build Path,这样jar包就添加到工程中引用。

然后打开你的工程的主Activity,把继承的Activity改成UnityPlayerActivity,并导入对应的包:import com.unity3d.player.UnityPlayerActivity;
把默认的onCreate方法中的默认方法setContentView(R.layout.activity_main);删除。
然后对应的Activity代码如下:

package com.dillon;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.DialogInterface.OnClickListener;

import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;

public class MainActivity extends UnityPlayerActivity {
	private Handler handler;

	@Override
	public void onCreate(Bundle savedInstanceState) {
	    super.onCreate(savedInstanceState);

	    handler = new Handler(){
	    	@Override
	    	public void handleMessage(Message msg) {
	    		super.handleMessage(msg);
	    		switch (msg.what) {
				case 1:
					System.out.println("show dialog!!!!!!!!!!!!!!!!!!!!!!!!!!");
					showLightDialog("tip", "Are you sure want to on/off the light?", true);
					break;

				default:
					break;
				}
	    	}
	    };
	}

	//unity中调用的方法
	public void DisplayDialog(){
		Message message = new Message();
		message.what = 1;
		handler.sendMessage(message);
	}

	void showLoginActivity(){
                runOnUiThread(new Runnable() {

			@Override
			public void run() {
				Intent intent = new Intent(MainActivity.this,LoginActivity.class);
				MainActivity.this.startActivity(intent);
			}
		});
	}

	void showLightDialog(String title, String content,boolean isCanceledOnTouchOutside) {
		AlertDialog.Builder builder = new Builder(this);
		builder.setTitle(title);
		builder.setMessage(content);

		builder.setPositiveButton("ok", new OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
				UnityPlayer.UnitySendMessage("Main Camera", "ON_OFF_Light", "");
				dialog.dismiss();
			}
		});

		builder.setNegativeButton("cancel", new OnClickListener() {

			@Override
			public void onClick(DialogInterface dialog, int which) {
				dialog.dismiss();
			}
		});

		Dialog dialog = builder.create();
		dialog.setCanceledOnTouchOutside(isCanceledOnTouchOutside);
		dialog.show();
	}
}

然后新建第二个Activity,我新建的是Android中默认的登录界面,需要在AndroidManifest中配置一下的。

AndroidManifest.xml中代码如下:

<!--?xml version="1.0" encoding="utf-8"?-->

在这个类里面,处理了两个unity调用请求:弹出对话框和跳转到login activity,android代码OK了之后就pc下的doc命令中(mac下打开终端),cd到android工程中bin/classes文件夹下,输入jar cvf class.jar com/命令,回车后会在bin文件夹下声称一个class.jar文件.

下面转到unity中,新建unity项目,在Project中新建Plugins/Android目录,
然后需要把android工程中的资源放到unity中,目录结构大致是这样子:
Plugins
–Android
AndroidManifest.xml
–bin
class.jar
–res
….

截图是这样子的:

放置完毕之后,在unity场景中新建一个任意基础物体(那方块来举例),然后新建一个光源,光源要照射到物体上;
新建c#脚本AndroidTest.cs,就开始编写unity代码,代码如下:

using UnityEngine;
using System.Collections;

public class AndroidTest : MonoBehaviour {
    AndroidJavaClass jc;
  	AndroidJavaObject jo;

    void Start ()
    {
        jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
		jo = jc.GetStatic("currentActivity");
    }

    void OnGUI()
    {
		if(GUI.Button(new Rect(240, 100, 100, 40),"Dialog")){
             jo.Call("DisplayDialog");
		}

		if(GUI.Button(new Rect(240,350,100,40),"Activity")){
			jo.Call("showLoginActivity");
		}
    }

    public Light mlight;
    void ON_OFF_Light(){
        Debug.Log("ON_OFF_Light@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
	mlight.enabled = !mlight.enabled;
    }
}

把AndroidTest脚本附加到摄像机上,然后把灯光拖拽到脚本的mLight属性里就完成了,装机后点击Dialog按钮,弹出对话框,当点击OK之后会通过android代码中UnityPlayer.UnitySendMessage(“Main Camera”, “ON_OFF_Light”, “”);方法回调
c#中ON_OFF_Light函数,打开或者关闭光源。

当点击Activity按钮后,进行了Activity跳转.

有了这些桥接,我们就可以使用Android中原生态的功能在游戏中添加各种丰富的功能.

使用有些功能可能会调用失败,部分原因如下:
1.在unity调用的方法不能更新主线程的内容,比如弹出框,弹出Toast等。
2.有些可能需要添加权限,比如录音.

3.可能会崩溃:在android的AndroidManifest.xml主activity屏幕方向要和unity中设置的方向一致,要不然当屏幕发生旋转程序可能崩溃。

抱歉!评论已关闭.