使用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.有些可能需要添加权限,比如录音.