如题,本文将介绍关于如何制作unity插件,并通过unity调用Android中的程序,并打开Webview访问网页。本文参考雨松momo的文章http://www.xuanyusong.com/archives/1418,在此表示感谢。

   开发环境:win7,Unity,Eclipse

   手机:me525+

   首先,我们在Eclipse中新建一个工程OpenWebView,会默认生成一个MainActivity.java。在写程序之前我们要去你安装Unity程序的目录下Unity->Editor->Data->PlaybackEngines->androidplayer->bin->classes.jar ,将这个classes.jar文件拷贝出来,先放在桌面上,然后打开Eclipse将我们刚刚找到的classes.jar文件放在工程的libs文件下面。

   好了,现在可以开始编程了.

   在MainActivity.java文件中

package com.cheng.jack;
import com.unity3d.player.UnityPlayerActivity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
public class MainActivity extends UnityPlayerActivity {
    private Context mContext;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mContext = this;
    }
    //这个函数将是我们通过unity调用的函数
    public void OpenWeb(){
        //这里是直接跳转到M_Webview这个Activity中
        Intent intent = new Intent();
        intent.setClass(mContext, M_Webview.class);
        mContext.startActivity(intent);
                                                                                                                                                                                                                                                                                                                                                                                              
    }
}

   接下来我们再在Eclipse中新建一个Class,命名为M_Webview(这个名字自己)

M_Webview的代码如下:

package com.cheng.jack;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
public class M_Webview extends Activity {
    private WebView mView;
    private Button mButton;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        super.setContentView(R.layout.activity_main);
        //获得我们的WebView和Button
        mView = (WebView)findViewById(R.id.webview);
        mButton = (Button)findViewById(R.id.btn);
                                                                                                                                                                                                                                                                                                                                                                                     
        //将WebView的初始状态设为百度网页
        mView.loadUrl("http://www.baidu.com");
        mView.getSettings().setJavaScriptEnabled(true);
        mView.setWebViewClient(new WebviewClient());
                                                                                                                                                                                                                                                                                                                                                                                     
        //设置button的监听事件,当button按下时,我们关闭Activity
        mButton.setOnClickListener(new OnClickListener() {
                                                                                                                                                                                                                                                                                                                                                                                         
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                M_Webview.this.finish();
            }
        });
    }
    //这个就是实现在程序中打开一个新的连接,还停留在这个程序中
    private class WebviewClient extends WebViewClient{
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            // TODO Auto-generated method stub
            view.loadUrl(url);
            return super.shouldOverrideUrlLoading(view, url);
        }
                                                                                                                                                                                                                                                                                                                                                                                     
    }
}

然后就是我们的配置文件,配置文件其实没什么,里面就是一个Webview和一个Button


    
    

AndroidManifest.xml这个文件是个重要的文件,里面有几个配置是必须的,我们后来新建了一个Activity,所以必须要在这里体现出来,然后我们要人我们的程序必须有联网权限,代码如下:


    
    
        
            
                
                
            
        
        
        
    
    
    


现在我们在Eclipse这边的代码部分基本上都完成了,接下来我们要将我们的程序都打包成jar文件(这个将在我们的unity中将会用到,这就是我们说的所谓的插件)。我们运行windows下面的终端,从终端进入我们的OpenWebView工程,进入OpenWebView->bin->classes文件夹下,我们执行命令:

jar -cvf class.jar *  然后在classes文件夹下面将会生成一个class.jar文件,我们先将它拷贝到桌面上,除了这个文件我们还要拷贝两个文件,一个是工程下面的AndroidManifest.xml文件和res文件,好了Eclipse这边算是完成了,我们现在确保桌面上有三个文件,class.jar ,res,AndroidManifest.xml。


   现在我们来到unity下面,在写程序之前,我们要做些准备工作。首先,新建一个Unity工程,在工程的Assets文件夹下面新建一个文件夹,名字必须是Publigs,然后在Publigs文件夹下面新建一个Android文件夹。ok,现在我们将我们放在桌面上的三个文件放到Android文件夹下面。准备工作做好了。接下来就是编程写代码了。我们新建一个c#文件,名字叫做OpenWebview

using UnityEngine;
using System.Collections;
public class OpenWebView : MonoBehaviour {
                                                                                                                
    void OnGUI(){
        if(GUI.Button(new Rect(100,100,100,30),"OpenWebView")){
            AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            AndroidJavaObject jo = jc.GetStatic("currentActivity");
            jo.Call("OpenWeb");
        }
    }
}


   在这里要说明几点啊,jo.call("OpenWeb");这个就是调用我们的Android程序了,在我们编译运行之前我们要配置我们的Unity,第一点Bundle Identifier这个必须要和我们的Android的包名称相同,我这里是com.cheng.jack  ,第二点unity设置中的最低版本和Android设置中的最低版本要相同(这点让我纠结了好长时间)。

然后运行就ok了,这里上两张效果图。

Unity之调用AndroidWebView_第1张图片

Unity之调用AndroidWebView_第2张图片




最后附上工程地址

http://down.51cto.com/data/861687