Unity 3 DはNative Pluginsを使用しています.


  • バージョン情報
  • 特別説明
  • 注意
  • 参考文献
  • コード部分
  • C中間層
  • Cは、Java中間層
  • を呼び出す.
    本論文のソースリンク:http://blog.csdn.net/qq393830887/article/details/53162179
    バージョン情報
  • ユニティ5.4.2 p 3
  • Native Plugin Bugout 0.9
  • 特別に説明する
    注意
  • C铅に慣れている自信があれば、JavaのUnity 3 Dを見に行くことができます.Native Plugins(快速便利アクセスSDK)を使用します.Java編
  • C嚔がNative Codeを呼び出した問題について、このブログの範囲内ではなく、知りたいのは自分で調べます.
  • ユニティ4リットルUnity 5以降、多少の違いがありますが、問題は大きくありません.
  • BugoutはUnityでの使用をサポートしていませんので、効果を示すことができません.Bugoutを使って説明するのは、最近接続されたプラグイン
  • です.
  • 紙面は有限で、全部のコードを貼りませんでした.
    参考文献
    https://docs.unity3d.com/Manual/PluginInspector.html http://docs.testin.cn/docs/sdk
    コード部分
    C钻中間層
    
    using UnityEngine;
    
    public class BugoutBridge
    {
        public static void Init(string appKey, string channelId, string userInfo, bool debugModel, bool errorActivity,
            bool collectNDKCrash, bool openCrash, bool openEx, bool reportOnlyWifi, bool reportOnBack, bool qAMaster,
            bool closeOption, bool logcat)
        {
            switch (Application.platform)
            {
                case RuntimePlatform.Android:
                    {
                        AndroidBugoutBridge.Init(appKey, channelId, userInfo, debugModel, errorActivity, collectNDKCrash, openCrash, openEx, reportOnlyWifi, reportOnBack, qAMaster, closeOption, logcat);
                        return;
                    }
            }
        }
    
    
        public static bool GetShakeStatus()
        {
            switch (Application.platform)
            {
                case RuntimePlatform.Android:
                    {
                        return AndroidBugoutBridge.GetShakeStatus();
                    }
            }
    
            return false;
        }
    }
    
  • この中間層の主な役割はプラットフォームを区別するためであり、特殊処理を行うのにも便利である.
  • Application.plotformを使って、プラットフォームのマクロではなくて、コードのために検索するのです.そうでなければ、コンパイルできますか?自分でも分かりません.
    C铉呼び出しJava中間層
    
    using System;
    using UnityEngine;
    
    public class AndroidBugoutBridge
    {
    #if UNITY_EDITOR || UNITY_ANDROID
        private const string UnityClassPath = "com.unity3d.player.UnityPlayer";
        private const string JavaClasPath = "com.Android.BugoutBridge";
    
        private static AndroidJavaClass _mainJavaClass;
    
        private static AndroidJavaClass MainJavaClass
        {
            get { return _mainJavaClass; }
        }
    
    
        private static AndroidJavaObject UnityJavaObject
        {
            get { return GetStatic(GetJavaClass(UnityClassPath), "currentActivity"); }
        }
    
    
        private static AndroidJavaClass GetJavaClass(string javaClassPath)
        {
            try
            {
                return new AndroidJavaClass(javaClassPath);
            }
            catch (Exception e)
            {
                Debug.LogException(e);
            }
    
            return null;
        }
    
        private static void CallApi(AndroidJavaClass jc, string apiName, params object[] args)
        {
            if (jc == null)
            {
                return;
            }
    
            try
            {
                jc.CallStatic(apiName, args);
            }
            catch (Exception e)
            {
                Debug.LogException(e);
            }
        }
    
    
        private static T CallApi(AndroidJavaClass jc, string apiName, params object[] args)
        {
            if (jc == null)
            {
                return default(T);
            }
    
            try
            {
                return jc.CallStatic(apiName, args);
            }
            catch (Exception e)
            {
                Debug.LogException(e);
            }
    
            return default(T);
        }
    
    
        private static T GetStatic(AndroidJavaClass jc, string javaInterface)
        {
            if (jc == null)
            {
                return default(T);
            }
    
            try
            {
                return jc.GetStatic(javaInterface);
            }
            catch (Exception e)
            {
                Debug.LogException(e);
            }
    
            return default(T);
        }
    #endif
    
    
        public static void Init(string appKey, string channelId, string userInfo, bool debugModel, bool errorActivity,
            bool collectNDKCrash, bool openCrash, bool openEx, bool reportOnlyWifi, bool reportOnBack, bool qAMaster,
            bool closeOption, bool logcat)
        {
    #if UNITY_EDITOR || UNITY_ANDROID
            _mainJavaClass = GetJavaClass(JavaClasPath);
            CallApi(MainJavaClass, "Init", UnityJavaObject, appKey, channelId, userInfo, debugModel, errorActivity, collectNDKCrash, openCrash, openEx, reportOnlyWifi, reportOnBack, qAMaster, closeOption, logcat);
    #endif
        }
    
    
        public static bool GetShakeStatus()
        {
    #if UNITY_EDITOR || UNITY_ANDROID
            return CallApi<bool>(MainJavaClass, "GetShakeStatus", UnityJavaObject);
    #endif
    
            return false;
        }
    }
    
  • ここではマクロ制御を使用しなければなりません.そうでなければ、他のプラットフォームでコンパイルできません.対応する方法がありません.
  • ユニティ_EDIITORはこのマクロを使っても、自分のコードを調べやすいように
  • を使っています.
  • は、マクロを加えてBugoutを開くかどうかを制御することができます.EDIOR𞓜|(UNTYuANDROID&&ENABLE UBUGOUT)は、FOBIDではなくENABLEを使用することを強く推奨しています.プラグイン
  • を除去する代わりに、より多くの組み合わせが必要です.
  • Native Codeを呼び出してプラットフォームと2つの種類に分けて書かなければならないわけではありません.一緒に書いてもいいです.このほうがもっとはっきりしています.
  • 他のプラットフォームと同じ