当前位置: 移动技术网 > 移动技术>移动开发>IOS > Unity移动端的复制要这么写示例代码

Unity移动端的复制要这么写示例代码

2019年07月23日  | 移动技术网移动技术  | 我要评论

前言

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

本文主要给大家了关于unity移动端的复制的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧

游戏上线很久了,有些玩家慢慢就流失了,为了让刚流失的玩家再度回归所以做了召回功能!如果一个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;
 @override
 protected 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";
 }
}

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

/// <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;
}
@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];
 }
}

.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_editor
  texteditor te = new texteditor();
  te.content = new guicontent(input);
  te.onfocus();
  te.copy();
#endif
 }

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

传送门:https://gitee.com/wuzhang/unitycallclipboard.git ()

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对移动技术网的支持。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网