[Unity3D]-Unity与Android交互
来源:互联网 发布:java变量定义规则 编辑:程序博客网 时间:2024/05/16 06:09
国产手机游戏都可以用QQ登入或者微信登入游戏.QQ登入或者微信登入SDK功能的接入就会涉及到Unity 与Android或者IOS的交互…
Unity与Android交互
Android向Unity发送消息
在Android 项目中导入Unity的jar包,导入相关类后就可以通过#UnityPlayer.UnitySendMessage(var0,var1,var2) 调用Unity中已实现的方法..
var0 - 挂载脚本组件对象名gameObjectName;
var1 - 脚本组件中的方法名;
var2 - 方法参数
Unity调用Android中的代码
如果想获取应用包名即可如下写.
using ( AndroidJavaClass player = new AndroidJavaClass("com.unity3d.player.UnityPlayer")){ AndroidJavaObject activity = player.GetStatic<AndroidJavaObject>("currentActivity"); string packageName = activity.Call<string>("getPackageName");}
AndroidJavaObject类中定义了所有调用android中代码的方法..
以下是android中的代码,最终导出jar包到Unity中调用..
public class MainActivity extends UnityPlayerActivity { public static MainActivity _instance; public static String GAMEOBJECTNAME; public static String PLUS_CALLBACK; public static String MINU_CALLBACK; public static String MYLTI_CALLBACK; public String _noStatic; @Override protected void onCreate(Bundle bundle) { super.onCreate(bundle); _noStatic = "No Static"; _instance = this; } public void Minu(float a, float b) { UnityPlayer.UnitySendMessage(GAMEOBJECTNAME, MINU_CALLBACK, String.valueOf(a - b)); } //非静态 public float Plus(float a, float b) { float res = a + b; UnityPlayer.UnitySendMessage(GAMEOBJECTNAME, PLUS_CALLBACK, String.valueOf(res)); return res; } //静态 public static float Multi(float a, float b) { float res = a * b; UnityPlayer.UnitySendMessage(GAMEOBJECTNAME, PLUS_CALLBACK, String.valueOf(res)); return res; }}
Unity调用Android代码
public class Test : MonoBehaviour{ AndroidJavaObject activity; string packageName; string a2u = ""; string u2a = ""; //#if UNITY_ANDROID && !UNITY_EDITOR void Awake() {#if UNITY_ANDROID && !UNITY_EDITOR using (AndroidJavaClass player = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { activity = player.GetStatic<AndroidJavaObject>("currentActivity"); packageName = activity.Call<string>("getPackageName"); Debug.LogError("------->>>> AndroidJavaClass 执行"); }; //静态属性的设置 activity.SetStatic<string>("GAMEOBJECTNAME", gameObject.name); activity.SetStatic<string>("PLUS_CALLBACK", "Anroid2Unity0"); activity.SetStatic<string>("MINU_CALLBACK", "Anroid2Unity0"); activity.SetStatic<string>("MYLTI_CALLBACK", "Anroid2Unity1"); //静态属性的获取 u2a += activity.GetStatic<string>("GAMEOBJECTNAME") + "\r\n"; u2a += activity.GetStatic<string>("PLUS_CALLBACK") + "\r\n"; u2a += activity.GetStatic<string>("MINU_CALLBACK") + "\r\n"; u2a += activity.GetStatic<string>("MYLTI_CALLBACK") + "\r\n"; //非静态属性的获取 u2a += activity.Get<string>("_noStatic") + "\r\n";#endif } public void JavaCall(string api, params string[] args) { using (AndroidJavaClass cls = new AndroidJavaClass(packageName + ".MainActivity")) { AndroidJavaObject jo = cls.GetStatic<AndroidJavaObject>("mInstance"); jo.Call(api, args); } } public T JavaCall<T>(string api, params string[] args) { T res = default(T); using (AndroidJavaClass cls = new AndroidJavaClass(packageName + ".MainActivity")) { AndroidJavaObject jo = cls.GetStatic<AndroidJavaObject>("mInstance"); res = jo.Call<T>(api, args); } return res; } public void Anroid2Unity0(string args) { a2u += "Android To Unity 0 : " + args + "\r\n"; } public void Anroid2Unity1(string args) { a2u += "Android To Unity 1 : " + args + "\r\n"; } public void Unity2Android(string args) { u2a += "Unity To Android : " + args + "\r\n"; } void OnGUI() { if (GUI.Button(new Rect(0, 0, Screen.width, Screen.height * 0.1f), "Call Func")) { activity.Call("Minu", 10f, 2f); float res = activity.Call<float>("Plus", 10f, 2f); Unity2Android(res.ToString()); } if (GUI.Button(new Rect(0, Screen.height * 0.1f, Screen.width, Screen.height * 0.1f), "Call Static Func")) { float res = activity.CallStatic<float>("Multi", 10f, 2f); Unity2Android(res.ToString()); } a2u = GUI.TextArea(new Rect(0, Screen.height * 0.2f, Screen.width, Screen.height * 0.2f), a2u); u2a = GUI.TextArea(new Rect(0, Screen.height * 0.4f, Screen.width, Screen.height * 0.2f), u2a); }}
如果在包下面还有其他路径的方法需要调用.例如:路径 com.example.calculate.push
Unity代码如下,其中packageName 获取方法上文中已提及
AndroidJavaClass cls = new AndroidJavaClass(packageName+".push")
阅读全文
0 0
- [Unity3D]-Unity与Android交互
- Unity3D游戏开发之Unity与Android交互调用研究
- Unity3D游戏开发之Unity与Android交互调用研究
- Unity3D与android交互
- Unity3D 与 Android 交互
- unity3d与android交互
- unity与android交互
- Unity与Android交互
- Unity与Android交互
- Unity与Android交互
- Unity与Android交互
- unity与ANDroid交互
- unity与android交互
- unity与android交互
- Unity与Android交互
- Unity 与 Android交互
- Android与unity交互
- [Unity3D]Unity3D游戏开发之Unity与Android交互调用研究
- Python中常用的图像处理操作
- 单链表的头插法和尾插法
- sql server存储过程实例
- Oracle之Hint使用总结
- 女孩有个作家梦
- [Unity3D]-Unity与Android交互
- 设计模式之抽象工厂模式
- python脚本利用windows计划定时执行
- webpack使用优化
- <NOIP> 11 . P1424 小鱼的航程(改进版)
- dl4mt:lstm语言模型训练,代码讲解
- Django+Jquery+Ajax+验证码登录案例系列之十二
- QT常用控件之QTimer,QDialog,QLabel,QLineEdit,QProgressBar,QComboBox,QPushButton,QGridLayout
- 20170630