Unity中支持PC、移动端和Webgl端的复制文本到剪贴板

在Unity中开发软件中,会出现很多时候需要将Unity中的文本内容复制到剪贴板中,然后复制到其他软件的应用中去,例如分享一个链接,例如会议软件复制会议号码等

注意 除了本篇的复制文本功能,其他的Webgl扩展功能请查看另一篇专栏文章
该专栏文章《Unity的Webgl端编写jslib常用功能》,提供了10个常用功能,功能如下(后续如果有增加功能还会更新至该文章中):
1、“监听网页关闭或刷新”
2、“获取当前设备时PC还是移动端”
3、“获取当前网址”
4、“获取LocalStorage的数据”
5、“保存数据到LocalStotage”
6、“获取SessionStorage的数据”
7、“保存数据到SessionStorage”
8、“将文本拷贝到剪贴板”
9、“关闭当前网页”
10、“打开网页”

首先C#语言中提供了一个字段,只要将字符串内容赋值给这个字段,就能将文本内容复制到系统的剪贴板中

这个字段如下

        GUIUtility.systemCopyBuffer = “测试内容复制到剪贴板”;

只需要将复制文本内容赋值给上面这个字段即可,但是这个字段原先只有在PC端有效果,现版本的Unity,不知道是语言版本更新导致的还是Unity版本里做了适配,支持移动端的复制到剪贴板了。

但在Webgl端还是不支持,Webgl端是个特殊的版本,因此很多C#语言库中的方法和功能都会在跨平台编译时导致失效,不管是用Mono还是IL2CPP的跨平台编译。

因此将文本复制到剪贴板这个功能就无效,需要我们自己写js代码放到Unity中调用,好在新版本的Unity已经支持js代码了

因此我们只需要在Assets文件夹下创建一个txt文件,将后缀改成jslib,就可以在该文件中编写js代码了如下图:

在这里插入图片描述

在jslib文件中首先需要声明一个对象,并且将全局对象添加到Unity的全局库中
例如:

var WebglPlugin = {
};
 
mergeInto(LibraryManager.library, WebglPlugin);

如此一来,所有在WebglPlugin对象中编写的js方法,都可以在Unity中通过C#调用,
这里的功能是将文本复制到剪贴板,那么js代码就是常用的复制功能即可,但是需要注意的是Unity传输到js的内容需要进行转换,因为两种代码编译方式不同,如果不转换的话会导致乱码

Unity传输到js的 字符串转换方式:UTF8ToString
js传回给Unity的 字符串转换方式:stringToUTF8

下面直接贴上js的复制代码:

	CopyTextToClipboard: function (ptr) {
        var text = UTF8ToString(ptr);
        navigator.clipboard.writeText(text).then(function () {
            console.log('Async: Copying to clipboard was successful!');
        }, function (err) {
            console.error('Async: Could not copy text: ', err);
        });
    },

编写完之后jslib并且将文件放在Assets文件夹下后,就可以在C#中调用了
C#中调用也很简单,声明一个和jslib中方法名以及参数一样的静态方法,再加上调用外部方法的特性即可,但是需要注意的是该方法只有Webgl平台可用,因此如果需要打包其他平台时,最好加上声明方法前加上预编译,代码如下:

#if UNITY_WEBGL && !UNITY_EDITOR

    [System.Runtime.InteropServices.DllImport("__Internal")]
    public static extern void CopyTextToClipboard(string text);

#endif

合并其余平台的复制方法形成一个通用的复制到剪贴板的方法:

    public static void CopyToClipboard(string value)
    {
#if UNITY_WEBGL && !UNITY_EDITOR

        CopyTextToClipboard(value);

#else
        GUIUtility.systemCopyBuffer = value;
#endif
    }

到此将文本内容复制到剪贴板的功能就完成了,但是目前这个方法,本人测试过只有Windows,Android,Webgl这三个平台,理论上Mac和IOS也可以使用,但是这两个平台当时不是我弄,就不清楚是否有问题。

如果有朋友测试有问题,可以将解决方案写到评论区哦,我会更新到文章代码中。非常感谢~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TenderRain。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值