unity与原生android混合开发
2016-12-15 10:33
465 查看
一、unity导出android工程
1.打开unity软件
2.选择File-->BuildSetting在弹出对话框里选择Android 并在右侧勾选Goolgle Android Project ,然后选择导出。
二、AS工程导入
打开AS选择File-->New-->Import Project
三、unity调用android原生方法
1、unity代码
void Start(){
jc = new AndroidJavaClass ("com.Xreal.TJYH.u3d"); //com.Xreal.TJYH.u3d-->android对应activity的全类名
jo = jc.GetStatic<AndroidJavaObject> ("currentActivity");//currentActivity-->android对应activity的静态属性
}
void OnGUI()
{
if (GUI.Button(new Rect(50, 50, 200, 50), "StartRecording"))
{
jo.Call ("startRecording");//startRecording-->调用的android方法名
}
if (GUI.Button(new Rect(50, 150, 200, 50), "StopRecording"))
{
jo.Call ("stopRecording");//stopRecordin-->调用的android方法名
}
}
2、android代码
public class u3d extends UnityPlayerActivity {private static final int SHOW = 1;
private static final int CANCEL = 2;
public static Context currentActivity ;
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case SHOW:
if (isRecording){
Toast.makeText(u3d.this,"录制已开始",Toast.LENGTH_SHORT).show();
}else {
startScreenCapture();
isRecording = true;
}
4000
break;
case CANCEL:
if (isRecording){
mediaRecorder.stop();
mediaRecorder.reset();
mediaProjection.stop();
virtualDisplay.release();
isRecording = false;
insertVideoToMediaStore(getSaveDirectory()+videoName);
Toast.makeText(u3d.this,"录制结束",Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(u3d.this,"没有开始录制",Toast.LENGTH_SHORT).show();
}
break;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_u3d);
currentActivity =this;
}
/**
* unity调用的方法,需要用一个handler进行处理实现功能,直接无法实现。
*/
public void stopRecording() {
mHandler.sendEmptyMessage(CANCEL);
}
/**
* unity调用的方法,需要用一个handler进行处理实现功能,直接无法实现。
*/
public void startRecording() {
mHandler.sendEmptyMessage(SHOW);
}
}
四、android原生调用unity方法
1、android代码
private class MyBtnCameraOnClickListener implements View.OnClickListener {@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, u3d.class);
intent.putExtra("type","photo");
startActivity(intent);//启动unity界面
}
}
private class MyBtnCookOnClickListener implements View.OnClickListener {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, u3d.class);
intent.putExtra("type","cook");
startActivity(intent);
}
}
public class u3d extends UnityPlayerActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_u3d);
Intent intent = getIntent();
String type = intent.getStringExtra("type");
Toast.makeText(u3d.this,type,Toast.LENGTH_SHORT).show();
if ("cook".equals(type)){
UnityPlayer.UnitySendMessage("Cube","CallUnityFunction","cook");//unity方法
}else {
UnityPlayer.UnitySendMessage("Cube","CallUnityFunction","photo");//unity方法
}
}
2、unity代码
[插入]
相关文章推荐
- RN和原生Android混合开发之相互调用
- 【Android 进阶】原生Android结合H5混合开发小结
- (React-Native 学习之八) Rn混合开发之--Android原生代码 和 ReactNative 通信
- 史上最详细的Android原生APP中添加ReactNative 进行混合开发教程
- 史上最详细的Android原生APP中添加ReactNative 进行混合开发教程
- Android Unity混合开发之Unity调用Android方法的坑
- 史上最详细的Android原生APP中添加ReactNative 进行混合开发教程
- Unity3D 原生Android结合UnityPlayerActivity开发遇到的问题
- 史上最详细的Android原生APP中添加ReactNative 进行混合开发教程以及问题解决
- Cordova自定义插件,解决Android混合开发向原生开发的过渡
- Android原生APP中添加ReactNative 进行混合开发教程
- Android和Unity混合开发——解决方案
- 【Android 进阶】原生Android结合H5混合开发小结
- android混合开发之unity
- H5+RN+Android(iOS)原生混合开发(一)为什么选择混合开发
- Mac android原生工程中潜入react-native混合开发项目搭建
- Android:前端与原生混合开发尝试
- Unity原生平台插件开发简介(Android/iOS)
- Android原生APP中添加ReactNative 进行混合开发教程
- 史上最详细的Android原生APP中添加ReactNative 进行混合开发教程