• 二、Unity调用Xcode封装方法


    1、开始封装Unity调用接口

    我们在Xcode中 写的接口需要在extern "C"中(加上extern "C"后,会指示编译器这部分代码按C语言的进行编译),需要了解这个作用的童鞋可以自行百度一下这个的作用
    
    #ifdef __cplusplus
    extern "C"{
    #endif
        
        NSString * charToString(char * c){
            return [NSString stringWithCString:c encoding:NSUTF8StringEncoding];
        }
    
        void init(char * objserver){
            [UnityExtend share];
            [UnityExtend share].observer = charToString(objserver);
            NSLog(@"传入的物体名称%s:",objserver);
        }
        
    #ifdef __cplusplus
    }
    #endif
    

    2、打包.a库 复制到unity目录下方

    我们先选择 下图这个样子,然后点击旁边的运行按钮
    

    运行之后我们会出现这个.a文件  我们把这个文件从文件夹复制到unity的Plugins文件夹下
    


    3、我们开始编写c#代码

    using System.Collections;
    using System.Collections.Generic;
    using System.Runtime.InteropServices;
    
    /// <summary>
    /// ios 接口
    /// </summary>
    public class IosInterface 
    {
       #if UNITY_IOS
       
        [DllImport("__Internal")]
        public static extern void init(string observer);
    
       #endif
    }
    
    using System.Collections;
    using System.Collections.Generic;
    
    /// <summary>
    /// api 接口类 
    /// </summary>
    public class Extend:CvMonoSignten<Extend>
    {
        public override void Init()
        {
            base.Init();
            DontDestroyOnLoad (this);
        }
    
        public void InitSDK(){
            #if UNITY_IOS
            IosInterface.init(this.gameObject.name);
            #endif
        }
    }
    
    
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    /// <summary>
    /// 单例工具类
    /// </summary>
    /// <typeparam name="T">泛型</typeparam>
    public abstract class CvMonoSignten<T> : MonoBehaviour where T :CvMonoSignten<T>
    {
        private static T m_Instance;
    
        public static T Instance{
            get{
                if(m_Instance == null){
                    m_Instance = GameObject.FindObjectOfType (typeof (T)) as T;
                    if(m_Instance == null){
                        m_Instance = new GameObject ("CvSingleton of " + typeof(T).ToString(), typeof(T)).GetComponent<T> ();
    					m_Instance.Init ();
                    }
                }
                return m_Instance;
            }
        }
    
        public virtual void Init(){
            
        }
    }
    
    
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class TestExtend : MonoBehaviour
    {
        private void Start()
        {
            Debug.Log("------开始运行");
            Extend.Instance.InitSDK();
        }
    }
    
    

    4、现在我们开始打包Ios 工程

    5、打包成功之后我们开始运行

    双击我们刚刚打包的这个文件
    

    打包之后  选择我们的账号,等待验证通过 
    

    通过之后我们直接运行,运行之后可以看到我们调用成功
    

    阳光穿过叶的缝隙!
  • 相关阅读:
    netty的基本使用
    netty 实现简单的rpc调用
    NIO 的基本使用
    BIO实现 Socket 通信
    springboot使用ElasticSearch
    docker-compose安装rabbitmq集群(主从集群---》镜像集群)
    杂谈:面向微服务的体系结构评审中需要问的三个问题
    使用Spring Boot和RxJava的构建响应式REST API
    JVM体系结构详解
    如何成为更好的程序员?
  • 原文地址:https://www.cnblogs.com/Aaron-Han/p/14809289.html
Copyright © 2020-2023  润新知