一、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方法名
}
}
{
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 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;
}
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);
}
}
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;
}
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);
}
}
@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方法
}
}
@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方法
}
}