问题:如何在unity3d的游戏中实现分享功能,如图
思路:
1、分享功能的实现方式有多种,较方便快捷的一种是直接调用android的API来调出系统的分享界面
2、unity3d里面调用android的API需要为此编写一个android的插件
3、在插件(android的jar包)里面调用Intent类来实现Activity间的消息传递,换出系统的分享控制台
代码:
Android插件代码
1 package com.XXX.XXX; 2 3 import android.content.Intent; 4 import android.os.Bundle; 5 import com.unity3d.player.UnityPlayerActivity; 6 7 public class MainActivity extends UnityPlayerActivity { 8 9 @Override 10 protected void onCreate(Bundle savedInstanceState) { 11 super.onCreate(savedInstanceState); 12 13 } 14 15 public void onPress(String msg) 16 { 17 Intent shareInt = new Intent(Intent.ACTION_SEND); 18 shareInt.setType("text/plain"); 19 shareInt.putExtra(Intent.EXTRA_SUBJECT, "选择分享方式"); 20 shareInt.putExtra(Intent.EXTRA_TEXT, msg); // 要分享的内容 21 shareInt.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 22 23 startActivity(Intent.createChooser(shareInt, getTitle())); 24 } 25 }
unity3d调用代码
1 void OnGUI() 2 { 3 if (GUILayout.Button("Send WeChat", GUILayout.Height(200))) 4 { 5 AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 6 AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); 7 jo.Call("onPress", new object[] {"这游戏真好玩,快来下载吧!"}); 8 } 9 }
注意:
1、编写插件需要用到eclipse ADT,可以在Android Develop官网下载Android SDK,直接使用里面的eclipse就OK
2、创建一个Android工程,将bundle标示设置为与unity3d一致,比如都叫com.xxx.yyy
3、导入com.unity.player.UnityPlayerActivity包(路径在“Unity安装目录EditorDataPlaybackEnginesandroidplayerin”下)修改MainActivity类的继承
4、将整个jar包导出,存放到Assets/Plugins/Android目录下,并将jar包中的libs、res、AndroidManifest.xml也放入同级目录下
5、在unity3d中通过jo.Call<返回类型>/jo.Call来调用Android插件接口,传入对应的参数
6、该行为不能在unity编辑器中测试,因为需要调用Android API