返回顶部
首页 > 资讯 > 移动开发 >Unity移动端的复制要这么写示例代码
  • 455
分享到

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

unity移动端复制 2022-06-05 03:06:21 455人浏览 独家记忆
摘要

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

前言

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里如何去调用!

步骤:

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

在Plugins目录下创建Android目录。

在Android 目录下创建bin目录。

在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"
{
  
  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类的调用

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

在Plugins目录下创建IOS目录。

在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 (本地下载

总结

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

--结束END--

本文标题: Unity移动端的复制要这么写示例代码

本文链接: https://lsjlt.com/news/30167.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Unity移动端的复制要这么写示例代码
    前言 Unity官网提供了详尽的文档和丰富的教学视频,昨天跟着视频做了一个简单的3d游戏“roll-a-ball”。游戏涉及了许多Unity的基本知识,用来入门很不错。 本文主要给大...
    99+
    2022-06-05
    unity 移动端 复制
  • Android绘制平移动画的示例代码怎么编写
    今天就跟大家聊聊有关Android绘制平移动画的示例代码怎么编写,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、具体操作步骤创建ImageView对象创建ObjectAnimato...
    99+
    2023-06-26
  • 利用Unity制作特写镜头的示例代码
    目录类似这种效果1.首先制作上下两层黑边2.摄像头聚焦的效果类似这种效果 黑边的大小可以自行调整 这里为了方便直接用两个Button绑定了方法,有需要自行调用方法 1.首先制作上...
    99+
    2024-04-02
  • Android绘制平移动画的示例代码
    目录1、具体操作步骤2、具体实施创建ImageView创建ObjectAnimator对象3、具体实例activity_main.xmlMainActivity.java1、具体操作...
    99+
    2024-04-02
  • Vue实现移动端日历的示例代码
    工作中遇到一个需求是根据日历查看某一天/某一周/某一月的睡眠报告,但是找了好多日历组件都不是很符合需求,只好自己手写一个日历组件,顺便记录一下。 先看看UI给的设计图和,需求是有数据...
    99+
    2023-05-14
    Vue实现移动端日历 Vue实现日历 Vue日历
  • Unity实现动物识别的示例代码
    接口介绍: 识别近八千种动物,接口返回动物名称,并可获取识别结果对应的百科信息;还可使用EasyDL定制训练平台,定制识别分类标签。适用于拍照识图、幼教科普、图像内容分析等场景 创建...
    99+
    2024-04-02
  • vue移动端项目代码拆分的示例分析
    这篇文章给大家分享的是有关vue移动端项目代码拆分的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。首先代码拆分应该保证本地开发的时候只有一套代码,提取所有公共页面,并且分...
    99+
    2024-04-02
  • HTML5移动端手机网站基本模板的示例代码
    这篇文章给大家分享的是有关HTML5移动端手机网站基本模板的示例代码的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 HTML5移动端最根底网页模板代码(如下HTML代码可直接拷...
    99+
    2024-04-02
  • Unity实现动物识别的代码怎么写
    这篇“Unity实现动物识别的代码怎么写”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Unity实现动物识别的代码怎么写”文...
    99+
    2023-06-29
  • shell写的告警次数控制及恢复示例代码
    俺也是新手,写的有点老土,权当练手了,供初学的朋友们参考吧。 #!/bin/bashif [ $succ_ping -gt $((ping_count-1)) ];thenif [ -f ./alarm_f...
    99+
    2022-06-04
    示例 次数 代码
  • html的图片移动代码怎么写
    本篇内容主要讲解“html的图片移动代码怎么写”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“html的图片移动代码怎么写”吧! html的图片移动(js) ...
    99+
    2024-04-02
  • OpenCV绘制圆端矩形的示例代码
    目录功能函数测试代码测试效果本文主要介绍了OpenCV绘制圆端矩形的示例代码,分享给大家,具体如下: 功能函数 // 绘制圆端矩形(药丸状,pill) void DrawPill...
    99+
    2024-04-02
  • ps文字复制粘贴移动的示例分析
    这篇文章给大家分享的是有关ps文字复制粘贴移动的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、在ps中复制粘贴文字的方法(1)看怎么用快捷键复制图层,首先找到图层面板,在ps界面右侧,如果看不到,在顶...
    99+
    2023-06-15
  • vue移动端项目中如何实现页面缓存的示例代码
    背景 在移动端中,页面跳转之间的缓存是必备的一个需求。 例如:首页=>列表页=>详情页。 从首页进入列表页,列表页需要刷新,而从详情页返回列表页,列表页则需要保持页面缓...
    99+
    2024-04-02
  • Qt实现拖动单个控件移动的示例代码
    目录1.设置窗口拖拽属性2.创建初始控件3.选中控件进行拖动3.1响应mousePressEvent事件3.2判断控件拖动3.3事件处理3.4结束拖动做惯了静态图,今天来搞一搞动态图...
    99+
    2024-04-02
  • Unity实现老虎机滚动抽奖效果的示例代码
    直接看下效果图吧: 制作思路: 设计四张图片,五个点,每个图片同时向下一个点移动,到最后一个就回到0号点,以此循环。 场景搭建: 创建Image命名为Bg作为电视框背...
    99+
    2024-04-02
  • AndroidFlutter制作交错动画的示例代码
    目录前言动画解析编码实现总结前言 之前一篇我们讲了 Flutter组合动画实现的方式 —— 交错动画。借助 GIF 和绘图技巧是可以做到类似 GIF 那种效果...
    99+
    2024-04-02
  • C++编写的WebSocket服务端客户端实现示例代码
    目录使用过标准的libwebsockets服务端库测试过,主要是短小精悍,相对于libwebsockets不需要依赖zlib和openssl 以及其他库,直接make就可以使用了,l...
    99+
    2024-04-02
  • python绘制字符画视频的示例代码怎么写
     读取视频通过imageio读取视频,除了pip install imageio之外,还需要pip install imageio-ffmpeg。由于视频中的图像都是彩色的,故而需要将rgb三色转为单一的强度,并将转化后的图像装入...
    99+
    2023-06-25
  • Java 限制前端重复请求的实例代码
    目录背景及用途实现步骤背景及用途 前端页面出现卡顿,用户反复点击操作按钮,导致后台接口短时间内多次提交 实现步骤 设置切面,增加注解,导致在规定时间内该接口不可重复调用 设置一个接口...
    99+
    2022-11-13
    Java 限制重复请求 Java重复请求
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作