安卓:
一、准备jar包,供Unity使用
Unity和Android交互,这个jar包就是一个中间商,也就是说,我们获取相册里的相片路径,并告知Unity这个路径,这一部分功能在安卓端实现
(1)androidstudio新建工程,这一系列没有什么好说的,新建一个空工程,值得注意是下图圈起来的两个地方,packagename==>这个必须要和你的Unity工程的包名一样,
不然打出来的包安装完成后会闪退的,还有就是最低支持的API等级,这个也必须和Unity里面的buildsetting里面的对应
(2)接下来在MainAcitivy里面复制我下面的代码,这里要注意在复制代码的时候,第一行是包名,这里被我删了,因为每个人包名都不一样,包名需要保留,不能没有
之后你会发现TakePhoto是灰色的,不用管它,这个Unity调用android的入口,这个函数名要是改了话,Unity的C#代码也需要改对应的,不然调不到
然后你还会发现WebViewActivity和UnityPlayerActivity报错,先别慌,稳住,看下一步!
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import com.unity3d.player.UnityPlayerActivity;
public class MainActivity extends UnityPlayerActivity{
private static String LOG_TAG = "LOG_My";
Context mContext = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = this;
}
//Unity中会调用这个方法,用于打开本地相册
public void TakePhoto(String str)
{
Log.d(LOG_TAG,str);
Intent intent = new Intent(mContext,WebViewActivity.class);
this.startActivity(intent);
}
}
(3)导入Unity的classes.jar
先说这个文件在哪,在你所使用的Unity的安装目录里面,这里需要注意呀,不是什么版本的Unity的这个classes.jar都能用的,必须是你Unity工程所使用的版本的安装目录
将这个jar包赋值一份,并拷贝到刚才新建的Android项目的app\libs文件夹里点击左上角的Android图片,切换到project视图就能找到这个文件夹
然后右键这个classes.jar,选择add as library,会弹出一个框,确定是给app添加的就行,确定后等待编译一会,UnityPlayerActivity就会正常了,这是因为Android需要和Unity通信,就必须得调用Unity的类才行
(4)创建WebViewActivity类,切换回Android视图找到我们的MainActivty,这个都会在app\java\第一个包名的文件夹下
然后右键,new一个javaclass,命名就是WebViewActivity,创建的时候什么都不用管,都是默认就行
然后你就会看到什么报错都没了,接下来把下面的代码复制到WebViewActivity,这里还是一样不能自己的包名给粘贴调哈
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Log;
import android.view.KeyEvent;
import com.unity3d.player.UnityPlayer;
import java.io.IOException;
public class WebViewActivity extends Activity
{
public static final int NONE = 0;
public static final int PHOTORESOULT = 3;
public static final String IMAGE_UNSPECIFIED = "image/*";
private String LOG_TAG = "LOG_ZDQ";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = new Intent(Intent.ACTION_PICK, null);
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, IMAGE_UNSPECIFIED);
startActivityForResult(intent, PHOTORESOULT);
Log.d(LOG_TAG, "打开相册!");
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d(LOG_TAG, "resultCode :" + resultCode);
if (resultCode == NONE)
return;
if (data == null)
return;
ContentResolver resolver = getContentResolver();
Bitmap bm=null;
Uri originalUri = data.getData();
try {
bm = MediaStore.Images.Media.getBitmap(resolver, originalUri);
} catch (IOException e) {
e.printStackTrace();
}
String[] proj = {MediaStore.Images.Media.DATA};
65
Cursor cursor= getContentResolver().query(originalUri,proj,null,null,null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
70 cursor.moveToFirst();
72 String _path = cursor.getString(column_index);
UnityPlayer.UnitySendMessage("Main Camera", "GetPhoto", _path);
super.onActivityResult(requestCode, resultCode, data);
78 this.finish();
}
}
这里需要注意的地方
这是调用Unity的main camera 上的脚本里的Getphoto方法,path是传递过去的参数
unity里面需要在什么地方加这个功能,以及脚本挂载什么对象身上,这些都要先考虑好之后才能打这个jar包,到这里第一阶段Android的功能已经写完了,接下来就是打包了,坑较多,一定要注意了
(5)准备打jar包,新建module file - new - new module - Android Library - next 这里的packagename和最小版本sdk也要设置一下和上面的一样
然后之前写的两个脚本复制到你新建的module的同样的位置,然后切换