美文网首页
Unity调用IOS和Android

Unity调用IOS和Android

作者: 游戏创作者 | 来源:发表于2020-12-07 21:52 被阅读0次

    Author :JerryYang
    Create by 2020.12.07

    环境:
    Unity:2019.4.2f1
    Xcode:12.2
    Android Studio:4.1.1


    在用unity进行移动端开发时,有时会需要和原生进行通讯。接下来以unity调用原生震动为例
    unity自己有震动的接口:

    Handheld.Vibrate();
    

    这个接口调用一次震动时长为0.5s,不能修改,并且手机关闭震动的情况下无效。
    那么我们就需要在IOS和安卓端分别写好接口给unity调用。

    一、unity和iOS通讯

    1. 首先打开Xcode,新建一个工程Vibrator,然后新建一个类VibratorTool继承NSObject,具体代码如下:
    VibratorTool.h文件:
    //
    //  VibratorTool.h
    //  Vibrator
    //
    //  Created by 飞杨 on 02.12.20.
    //
    
    #import <Foundation/Foundation.h>
    
    NS_ASSUME_NONNULL_BEGIN
    
    @interface VibratorTool : NSObject
    
    @end
    
    NS_ASSUME_NONNULL_END
    
    
    VibratorTool.m文件:
    //
    //  VibratorTool.m
    //  Vibrator
    //
    //  Created by JerryYang on 02.12.20.
    //
    
    #import "VibratorTool.h"
    #import <UIKit/UIImpactFeedbackGenerator.h>
    
    @implementation VibratorTool
    
    #if defined (__cplusplus)
    extern "C"
    {
    #endif
         void setVibrator(float Intensity){
            UIImpactFeedbackGenerator * generator;
            if (@available(iOS 13.0, *)) {
                generator = [[UIImpactFeedbackGenerator alloc]init];
                [generator impactOccurredWithIntensity:Intensity];
            } else {
                if (Intensity< 0.33) {
                    generator = [[UIImpactFeedbackGenerator alloc]initWithStyle:UIImpactFeedbackStyleLight];
                }else if(Intensity >=0.33 && Intensity < 0.66){
                    generator = [[UIImpactFeedbackGenerator alloc]initWithStyle:UIImpactFeedbackStyleMedium];
                }else{
                    generator = [[UIImpactFeedbackGenerator alloc]initWithStyle:UIImpactFeedbackStyleHeavy];
                }
                [generator impactOccurred];
            }
        }
        
    #if defined (__cplusplus)
    }
    #endif
    
    @end
    
    
    1. 在unity随便个文件夹,把这两个文件拖进去,勾选iOS平台


      勾选对应平台.png
    2. 在unity引入命名空间:

    using System.Runtime.InteropServices;
    

    新建类 Visrator.cs 具体的代码如下:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using System.Runtime.InteropServices;
    
    /// <summary>
    /// 震动反馈
    /// Author JerryYang
    /// Create by 2020.12.03
    /// </summary>
    
    public class Visrator
    {
    #if UNITY_IOS && !UNITY_EDITOR
        [DllImport("__Internal")]
        private static extern void setVibrator(float Intensity);
    #endif
    
    
        public void SetVibrator(float Intensity = 1)
        {
    #if UNITY_IOS && !UNITY_EDITOR
               setVibrator(Intensity);
    #endif
        }
    
    }
    

    二、unity和android通讯

    1. 首先打开Android,新建一个工程Vibrator,然后新建一个类VibratorTool,具体代码如下:
    package com.example.vibrate;
    import android.content.Context;
    import android.os.Vibrator;
    
    public class VibratorTool {
        public void setVibrator(Context act, long t){
            Vibrator vibrator = (Vibrator) act.getSystemService(Context.VIBRATOR_SERVICE);
            vibrator.vibrate(t);
        }
    }
    

    unity默认是加了震动权限,如果没有权限,请在 AndroidManifest.xml 文件中添加:

    <uses-permission android:name="android.permission.VIBRATE" />
    
    1. 在unity随便个文件夹,把这个文件拖进去,勾选Android平台


      勾选对应平台.png
    2. 在 Visrator.cs 文件中修改SetVibrator方法为:
    public void SetVibrator(float Intensity = 1)
        {
    #if UNITY_ANDROID && !UNITY_EDITOR
            AndroidJavaObject jo = new AndroidJavaObject("com.example.vibrate.VibratorTool");
            AndroidJavaClass act = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            var actObj = act.GetStatic<AndroidJavaObject>("currentActivity");
            long l = (long)(Intensity * 10);
            jo.Call("setVibrator", actObj,l);
    #elif UNITY_IOS && !UNITY_EDITOR
               setVibrator(Intensity);
    #endif
        }
    

    这样简单的通讯功能就完成了,同时用到了OC,C#,Java,C++。

    注意:只有真机才能测试哦!

    相关文章

      网友评论

          本文标题:Unity调用IOS和Android

          本文链接:https://www.haomeiwen.com/subject/zfhxgktx.html