Unity和Android的交互

好久没有写博客了
对于主要做unity开发而没有接触过Android开发的童鞋,应该会对Android的各种Activity头疼,还有就是面对xml的配置是各种懵逼,楼主也不是专门做Android开发的,只能说一下自己的理解

Android有且只有一个MainActivity,其他的都是通过住Activity调用的,在unity打包Android程序的时候,unity会自动打包好unity的调用入口,而需要自定义一些其他的功能的时候,例如实现Android自定义的时间振动,就需要自己写Android的jar包实现功能了,楼主不才,贴一下自己的实现

public class MainActivity extends BaseActivity
{
  public void onCreate(Bundle b)
  {
    Log.i("Unity", "SDKInit");
    super.onCreate(b);
  }


  public void Shake(String one, String oneVibrate, String two, String twoVibrate, String mode) {
    Vibrator vib = (Vibrator)getApplication().getSystemService("vibrator");


    vib.vibrate(new long[] { Integer.parseInt(one), Integer.parseInt(oneVibrate), Integer.parseInt(two), Integer.parseInt(twoVibrate) }, Integer.parseInt(mode));
  }


  public void ShakeMilliSecond(String millisecond)
  {
    Vibrator vib = (Vibrator)getApplication().getSystemService("vibrator");
    vib.vibrate(Integer.parseInt(millisecond));
  }


  public void ShakeCancel()
  {
    Vibrator vib = (Vibrator)getApplication().getSystemService("vibrator");
    vib.cancel();
  }
}

楼主的BaseActivity是自己定义了一个继承unityplayeractivity的一个java类

自己在配置文件中添加一个申请振动的属性,怎么添加百度之

在MainActivity里写上自己的调用方法,然后打包jar,不过需要用winrar打开看一下是不是里面有你不想要的文件,如果有就删掉,不然可能会出问题
打包方法网上百度,各大神都贴的油。楼主就不贴了

打包好放在unity的Plugins/Android目录下,放错了是不会调用的

unity里的调用

    /// <summary>
    /// 五个参数 振动暂停时间、振动时间、振动暂停时间、振东时间、振动模式 0为重复振动,-1只振动一次,振东时间以毫秒为单位
    /// </summary>
    /// <param name="str"></param>
    public void Shake(params string[] str)
    {
#if UNITY_ANDROID
        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
        jo.Call("Shake", str[0], str[1], str[2], str[3], str[4]);
#elif UNITY_IPHONE
        Handheld.Vibrate();
# endif
    }
    /// <summary>
    /// 以毫秒振动
    /// </summary>
    /// <param name="milliseconds"></param>
    public void ShakeMilliSecond(string milliseconds)
    {
#if UNITY_ANDROID
        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
        jo.Call("ShakeMilliSecond", milliseconds);
#elif UNITY_IPHONE
        Handheld.Vibrate();
#endif
    }
    /// <summary>
    /// 取消振动
    /// </summary>
    public void ShakeCancel()
    {
#if UNITY_ANDROID
        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
        jo.Call("ShakeCancel");
#elif UNITY_IPHONE
#endif

别问我为什么这么写,因为我也不知道,

这样就能够调用了,不过别忘了,jar包中的包名和unity里的包名要一致才可以

话说,JD_GUI打开jar包查看源码太爽了,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值