游戏上线很久了,有些玩家慢慢就流失了,为了让刚流失的玩家再度回归所以做了召回功能!如果一个200级的玩家10天没上线且成功召回的,就会给予召回玩家丰厚的奖励!

Q:那如何召回这个流失的玩家呢?

A:召回肯定得有类似召回码的东东啊,是的。服务器根据玩家ID生成一定位数的字母和数字组合,发给客户端,客户端召回界面显示召回码

Q:不可能让玩家一个一个在聊天框输入吧?玩家肯定会骂:“什么傻逼设计,老子不玩了,,,”

A:玩家是大爷,所以做复制召回吗功能还是很有必要的!

那么如何实现这个功能呢?Unity不支持复制吗?是的,Unity是支持,仅仅支持PC端的,就是这玩意TextEditor!

TextEditor text = new TextEditor();
text.content = new GUIContent(yourText);
text.OnFocus();
text.Copy();

这么就实现了PC端的复制,那么移动端的怎么做呢,别着急,小伙子,一个一个来,先看看Android是怎么复制的!

首先创建安卓库工程,在MainActivity里添加这段代码就好,导出jar包在Unity中调用即可,接下来会说Unity里如何去调用!
步骤:

1. 在Untiy3D项目的Assets目录下创建Plugins目录。

2. 在Plugins目录下创建Android目录。

3. 在Android 目录下创建bin目录。

4. 在bin 目录下放置你编写的类的jar包

package com.wuzhang.testandroid;
import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;
import android.R.string;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningAppProcessInfo;
import android.app.Service;
import android.content.ClipData;
import android.content.ClipDescription;
import android.content.ClipboardManager;
import android.content.Context;
import android.os.Looper;
import android.support.v4.app.NotificationCompat;
import android.support.v4.content.FileProvider;
import android.view.ContextThemeWrapper;public class MainActivity extends UnityPlayerActivity {private Vibrator mVibrator01;//声明一个振动器对象  private static Context instance;private String TAG = "log";public static String gameObgectName = "Main Camera";public static String methodName = "OnCoderReturn";public static ClipboardManager clipboard = null;private BatteryListener listener;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);instance = getApplicationContext();}public static Context getContext(){return instance;}/** 向剪贴板中添加文本  */public void copyTextToClipboard(final String str) throws Exception {  if (Looper.myLooper() == null){  Looper.prepare();  }  clipboard = (ClipboardManager) MainActivity.instance.getSystemService(Activity.CLIPBOARD_SERVICE);  ClipData textCd = ClipData.newPlainText("data", str);  clipboard.setPrimaryClip(textCd);  }  /** 从剪贴板中获取文本*/public String getTextFromClipboard() {if (clipboard != null && clipboard.hasPrimaryClip()&& clipboard.getPrimaryClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN)) {ClipData cdText = clipboard.getPrimaryClip();ClipData.Item item = cdText.getItemAt(0);return item.getText().toString();}return "null";}}

View Code

安卓中如何调用这段代码呢?

 /// <summary>/// 剪切文本  /// </summary>/// <param name="input"></param>public void CopyToClipboard(string input){
#if UNITY_ANDROID// 对Android的调用  AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");AndroidJavaObject activity = jc.GetStatic<AndroidJavaObject>("currentActivity");if (activity == null)return;// 复制到剪贴板  activity.Call("copyTextToClipboard", input);//从剪贴板中获取文本  string text = activity.Call<string>("getTextFromClipboard");
#endif}

安卓的好了,接着该是高大上的IOS了,有些人看到IOS就怂了,不知道从哪下手,不知道该怎么去写,完全没概念。不好意思,我和你们也是一样怂,我也是大姑娘上轿,头一回!不要怂,就是干,大不了第一次不会成功,就去调试呗!有这个心态,说明你还是幸运的,我们直接是线上项目,没有时间去调试的,做完时,我心里没一点底啊!超怂的那种,,,后来出iPhone的测试包,没想到一次过了,心里的大石头终于落下了!那我们看看IOS是怎么实现的吧?IOS使用的ObjectC和C语言还是有些类似的,在OC中.h文件是声明,.m文件是实现,所以需要Clipboard.h和Clipboard.mm两个文件!
首先去声明这个Clipboard类,

@ interface Clipboard : NSObject
extern "C"
{/*  compare the namelist with system processes  */void _copyTextToClipboard(const char *textList);
}
@end

接下来是Clipboard.mm文件,切记千万不要忘记引用 #import "Clipboard.h"

#import"Clipboard.h"
@implementation Clipboard
//将文本复制到IOS剪贴板
- (void)objc_copyTextToClipboard : (NSString*)text
{UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];pasteboard.string = text;
}
@endextern "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];}
}

.h文件和.mm文件需要放在Unity项目的Assets/Plugins/下的任意路径下即可,一般程序员大多数是有洁癖的不放到Assets/Plugins/IOS/文件夹下,心里就是不舒服!再啰嗦两句.m和.mm有什么区别吗?还真有,“.m"中只能编写Object-C代码,而”.mm"中可以编写C代码。所以有 extern "C" 说明我们使用的是C代码!

Unity3D对IOS类的调用

1. 在Untiy3D项目的Assets目录下创建Plugins目录。

2. 在Plugins目录下创建IOS目录。

3. 在IOS 目录下放置".h"文件和".mm"文件。

好了,赶紧说怎么调用呢,这会都夜里1点了,再啰嗦就天亮了!调用.h声明的函数即可:

//调用clipboard.h中的接口
_copyTextToClipboard (input);
Debug.LogError ("CopyToClipboard_______"+input); 

就这么调用就OK了,是不是很失望!这个是所有平台的调用

public static void CopyToClipboard(string input){
#if UNITY_ANDROID// 对Android的调用  AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");AndroidJavaObject activity = jc.GetStatic<AndroidJavaObject>("currentActivity");if (activity == null)return;// 复制到剪贴板  activity.Call("copyTextToClipboard", input);
#elif UNITY_IPHONE//调用clipboard.h中的接口
        _copyTextToClipboard (input);  Debug.LogError ("CopyToClipboard_______"+input);
#elif UNITY_EDITORTextEditor te = new TextEditor();te.content = new GUIContent(input);te.OnFocus();te.Copy();
#endif}

好了,到此写完了,现在感觉熬夜写博客事件很奢侈的事情了,睡觉喽!有问题的小伙伴记得@我,共同交流,下篇写获取手机剩余存储空间的插件!
传送门:https://gitee.com/wuzhang/UnityCallClipboard.git

转载于:https://www.cnblogs.com/wuzhang/p/wuzhang20180826.html

Unity 移动端的复制这么写相关推荐

  1. unity Android 剪贴板,Unity移动端的复制要这么写示例代码

    前言 Unity官网提供了详尽的文档和丰富的教学视频,昨天跟着视频做了一个简单的3d游戏"roll-a-ball".游戏涉及了许多Unity的基本知识,用来入门很不错. 本文主要给 ...

  2. Unity移动端游戏性能优化简谱之 常见游戏内存控制

    <Unity移动端游戏性能优化简谱>从Unity移动端游戏优化的一些基础讨论出发,例举和分析了近几年基于Unity开发的移动端游戏项目中最为常见的部分性能问题,并展示了如何使用UWA的性能 ...

  3. Unity 讯飞实时语音转写(二)—— 接收转写结果

    目录 Unity 讯飞实时语音转写(一)-- 使用WebSocket连接讯飞语音服务器 Unity 讯飞实时语音转写(二)-- 接收转写结果 Unity 讯飞实时语音转写(三)-- 分析转写结果 正文 ...

  4. Unity移动端游戏性能优化简谱之 以引擎模块为划分的CPU耗时调优

    <Unity移动端游戏性能优化简谱>从Unity移动端游戏优化的一些基础讨论出发,例举和分析了近几年基于Unity开发的移动端游戏项目中最为常见的部分性能问题,并展示了如何使用UWA的性能 ...

  5. vue之实现移动端的复制粘贴功能(两种写法)

    实现vue移动端的复制粘贴 第一种使用 vue-clipboard2 1.npm i vue-clipboard2 – save 安装后,在main.js中引入 // vue剪切板功能 import ...

  6. 开源Unity服务端客户端(双端C#)网络通讯框架(Lidgren)[一]

    开源Unity服务端客户端(双端C#)网络通讯框架(Lidgren)[一] 1. 简介 1.1 结识Lidgren的机缘巧合 开发Unity的各位或多或少都可能在工作中遇到非客户端开发的一些内容.大型 ...

  7. 网页端无法复制粘贴的解决方案

    由于瑞格系统无法复制粘贴,写java代码比较难受,所以就找了一些方法来解决网页端无法复制粘贴的问题 1.打开浏览器的设置界面,并打开拓展程序 2.在拓展程序中选择左上角的拓展程序,并打开Chrome网 ...

  8. 写时复制,写时拷贝,写时分裂,Copy on write

    2019独角兽企业重金招聘Python工程师标准>>> 写时复制,写时拷贝,写时分裂 (Copy-on-write,简称COW)是计算机资源管理方面的一种优化技术,有着广泛的应用,比 ...

  9. unity发布android报错,Unity移动端入门 - Android那些事 /AAR包发布错误

    老师,您好! Unity移动端入门 - Android那些事的第31节 发布JAR包我两次都成功了,但任务32:0506-互相调用模式之导出Aar包 总是失败,卡在这里都半个月了.请老师指点迷津 打包 ...

最新文章

  1. 小谈多生成树协议--MSTP
  2. pycharm中python解释器的配置
  3. Leetcode: Reorder List
  4. git的常用命令总结
  5. python3num='0123456789,num「:6:-1」=gt; '987'?「1:6:-1」为空
  6. java第九章编写一个能够产生_第九章java教程.ppt
  7. emacs mysql_使用Emacs作为MySQL的客户端
  8. bzoj1500: [NOI2005]维修数列
  9. “谷歌杀手”发明者,科学天才 Wolfram
  10. 网络安全基础——对称加密算法和非对称加密算法(+CA数字证书)
  11. 2017GAITC丨朱小燕:人机对话能直接能减少90%人工,极大提升效率
  12. mac 外接双显示器
  13. 电子签名法学习-(1)电子认证服务机构
  14. 北京信息科技大学计算机科学,2020年北京信息科技大学计算机科学与技术考研经验分享...
  15. graylog3.0收集飞塔防火墙日志
  16. 网易云课堂吴恩达Andrew Ng深度学习笔记(二)
  17. 水星MW300R无线路由器无线网频繁掉线的解决方法除了重启路由还有???
  18. 计算机专业学习资源合集 | 视频电子书资源
  19. 2.2 电阻的串联和并联
  20. 构造方法,接口有无构造方法

热门文章

  1. oracle忽略损坏表空间,Oracle表空间文件损坏后的排查及解决
  2. 服务链路追踪配置mysql_学习微服务的服务链路追踪——Spring Cloud Sleuth+zipkin
  3. 在linux中docker安装mysql_Linux系统:用docker安装mysql。
  4. php7版本搭建sqli labs,CentOS 7 LAMP搭建并且部署sqli-labs
  5. 集训8.21树状数组讲解
  6. mysql插入日期_MySQL 的两个特殊数据类型属性 unsigned与 zerofill
  7. 2018青岛ICPC ZOJ 4062: Plants vs. Zombies(二分)
  8. bzoj 1296: [SCOI2009]粉刷匠(DP+DP)
  9. java使用jxl包读写excel表格文件,即xls格式文件
  10. jquery遍历元素children、find、parent、parents、parentsUntil、next、prev、siblings、closest、filter、not