Unity 收藏本版 已有9人收藏 +发表新主题
查看: 42030|回复: 5
打印 上一主题 下一主题

[分享] 如何通过unity调用ios原生代码

[复制链接]

[分享] 如何通过unity调用ios原生代码

lovegame 发表于 2013-10-17 16:55:18 浏览:  42030 回复:  5 只看该作者 复制链接

今天这一篇教大家如何通过unity 调用 ios 原生代码,去做一些类似于通过按钮实现调用ios 电话,短信,email等的功能。


下面开始


首先我们要在界面上建立一个按钮, 方法有几种,你可以用ngui建立,也可以直接写GUI代码


这里我先用简单的GUI代码吧


GUI 的意思就是 图形用户接口, 就是一个产生界面的东西


首先在我们的


MetaioSDK 控件上添加一个脚本


点击add component



选择new script




起个名字,然后点击 create and add。我们这里选择的是C#脚本,你还可以用javaScript或者Boo




然后就会看见多了一个脚本出来




这时候双击脚本文件,进入monoDevelop 编辑脚本




每个刚开始创建的脚本都会自动填充两个方法,一个就是start()


另一个是update();


Start()方法看名字就知道是一个做一些初始化操作的方法,所以你的一些初始化操作都可以在start 里面进行


update方法就是在你程序运行的每一帧都会执行一次的方法,所以可以在里面进行更新操作


在这里因为涉及到GUI,所以我们添加一个方法


OnClick:


void OnGUI () {

if( GUI.Button( new Rect( Screen.width - 200,

0, 200, 100),"Back"))

{


}

}



很简单,就是画一个button 在屏幕右上角,下面是这篇的关键


要调用ios代码, 首先要在开头加一句


using System.Runtime.InteropServices;



然后在类体内,我们要声明我们的ios外部方法


[DllImport("__Internal")]

extern static public void _callPhone( string str );


然后我们在 方法就行了,完整代码如下


using UnityEngine;

using System.Collections;

using System.Runtime.InteropServices;


public class CallPhone : MonoBehaviour {


[DllImport("__Internal")]

extern static public void _callPhone( string str );

// Use this for initialization

void Start () {


}


// Update is called once per frame

void Update () {


}


void OnGUI () {

if( GUI.Button( new Rect(

Screen.width - 200,

0,

200,

100),"Back")) {

_callPhone( "13845129527" );

}

}

}



到这里unity的工作就完成了, 还是跟之前一样,导出build一次xcode工程


接下来的任务在xcode中完成


也很简单,打开xcode工程, 只需要在class目录中添加两个文件,这两个文件我已经写好,一会放到附件给大家下载, 文件内容很简单, 都是OC 代码






点击add 之后就可以运行了,然后你点击屏幕左上角就可以播电话了, 如果你吧callphone的参数改为变量还可以自定义 号码,是不是比较cool


下面我们来解析一下文件中的代码 , unityplugin.h文件基本没什么内容, 我们直接看unityplugin.mm 文件



这里面主要就是一个方法


extern “C”{

void _callPhone( char* str )
{
NSString* astr = [[NSString alloc] initWithCString:str encodingNSUTF8StringEncoding)];
NSString* titl = @"tel://";
NSString* allstr = [ titl stringByAppendingString:astr ];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:allstr]];
}

}


有程序基础的应该都能看得懂吧,先用utf8格式初始化参数字符串


NSString* astr = [[NSString alloc] initWithCString:str encodingNSUTF8StringEncoding)];

2,3句代码就是把字符串组合一下


NSString* titl = @"tel://";
NSString* allstr = [ titl stringByAppendingString:astr ];

最后一句,就是拨号出去了


[[UIApplication sharedApplication] openURL:[NSURL URLWithString:allstr]];



然后在这里面我们还可以添加其他功能代码,比如调用email


void _takeEmail( char* str )
{
NSString* astr = [[NSString alloc] initWithCString:str encodingNSUTF8StringEncoding)];
NSString* titl = @"mailto://";
NSString* allstr = [ titl stringByAppendingString:astr ];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:allstr]];
}


好了,这两个文件我都放在附件中。 这篇就讲到这里



分享至:
| 人收藏
回复

使用道具 举报

该用户从未签到

沙发
777 发表于 2013-10-17 16:57:17 只看该作者
支持 希望把 前几个文章也发过来
回复 支持 反对

使用道具 举报

该用户从未签到

板凳
aochulai 发表于 2013-10-17 16:59:27 只看该作者
就指着楼主教程活了
回复 支持 反对

使用道具 举报

该用户从未签到

地板
777 发表于 2014-4-5 20:59:23 只看该作者
学习
回复 支持 反对

使用道具 举报

该用户从未签到

5#
流氓兔子 发表于 2014-10-10 16:08:10 只看该作者
图片被和谐了么   看不见图解了   不过跟上了  谢谢楼主
回复 支持 反对

使用道具 举报

该用户从未签到

6#
Mec0825 发表于 2014-10-11 10:58:37 只看该作者
共同学习,之前也做过 UI 部分使用 iOS 原生,3D 部分使用 Unity 的项目~
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2013-2017 ARinChina-增强现实中国技术论坛   All Rights Reserved.