参考博客 http://www.cnblogs.com/xiaozefeng/p/Unity_Android_IOS.html?utm_source=tuicool&utm_medium=referral
本文基于unity 5.3.5 xcode 7.3 我参照 枫露霜阳 大牛的博客实现的,做了部分修改和整理,
关于unity和ios的交互问题,必须要用unity 的 c# 代码调用 ios 中的 c 代码,再用 c 调用ios的 oc 代码。最近也对unity在ios设备中的view跳转问题小有研究,不久便会写出来给大家看看,共同学习。
下面是代码部分,
@ interface Clipboard : NSObject
extern "C"
{
/* 接口方法 */
void _copyTextToClipboard(const char *textList);
}
@end
这个是Clipboard.h文件,这里的方法,就会在unity的c#代码中调用
#import "Clipboard.h"
@implementation Clipboard
//将文本复制到IOS剪贴板
- (void)objc_copyTextToClipboard : (NSString *)text
{
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
pasteboard.string = text;
}
@end
extern "C" {
static Clipboard *iosClipboard;
void _copyTextToClipboard(const char *textList)
{
NSString *text = [NSString stringWithUTF8String: textList] ;
if(iosClipboard == NULL)
{
iosClipboard = [[Clipboard alloc] init];
}
[iosClipboard objc_copyTextToClipboard: text];
}
}
这是Clipboard.mm文件,因为.m文件不能写
c 。在xcode中编写的时候不要担心错误问题,这点请教过 枫露霜阳大牛的。
ok,ios中的代码部分已经完成,这两个文件要放到,(你的工程目录/Assets/Plugins/iOS/)文件夹下面。这样打包的时候会放到xcode的libraries文件夹里面。
然后就是在unity中的c#代码。
首先是在接口文件****.cs文件中声明接口
#if UNITY_IPHONE
[DllImport("__Internal")]
public static extern void _copyTextToClipboard(string text);//对ios剪切板的调用
#endif
然后是方法内容,unity中需要调用的方法,
//剪切文本
public static void CopyToClipboard(string input)
{
#if UNITY_ANDROID
// 对Android的调用
AndroidJavaObject androidObject = new AndroidJavaObject("ClipboardTools");
AndroidJavaObject activity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity");
if (activity == null)
return ;
// 复制到剪贴板
androidObject.Call("copyTextToClipboard", activity, input);
// 从剪贴板中获取文本
//// String text = androidObject.Call<String>("getTextFromClipboard");
#elif UNITY_IPHONE
//调用clipboard.h中的接口
_copyTextToClipboard (input);
Debug.LogError ("CopyToClipboard_______"+input);
#endif
}
其中的安卓方法见我另一篇博客,也是参考 枫露霜阳的方法实现的。
如此就是在需要的用的时候
******.CopyToClipboard (sign.text);
这样就实现了。
一直信仰这句话,前人栽树后人乘凉,感谢大牛的经验分享,努力成为那样的人。