麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 系統 > iOS > 正文

Unity移動端的復制要這么寫示例代碼

2019-10-21 18:39:56
字體:
來源:轉載
供稿:網友

前言

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 : NSObjectextern "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_EDITOR  TextEditor te = new TextEditor();  te.content = new GUIContent(input);  te.OnFocus();  te.Copy();#endif }

好了,到此寫完了,現在感覺熬夜寫博客事件很奢侈的事情了,睡覺嘍!有問題的小伙伴記得@我,共同交流,下篇寫獲取手機剩余存儲空間的插件!

傳送門:https://gitee.com/wuzhang/UnityCallClipboard.git

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 最新午夜综合福利视频 | 亚洲国产精品久久久久婷婷老年 | 日韩黄网站 | 精品国产观看 | h色网站免费观看 | 国产亚洲美女精品久久久2020 | 黄色成人在线播放 | 亚洲国产精品500在线观看 | 久久精品视频亚洲 | 久久伊 | 欧美一区二区三区久久精品视 | 成人国产精品色哟哟 | 成人免费看视频 | 中国妞xxxhd露脸偷拍视频 | 久久精品亚洲国产奇米99 | 欧美成人精品一区二区 | 欧美一级一区二区三区 | 国产精品视频在 | 免费一级a毛片在线播放视 日日草夜夜操 | 国产视频第一区 | 午夜精品福利视频 | 国产做爰全免费的视频黑人 | 国产成人高清在线 | 免费看真人a一级毛片 | 最新国产毛片 | 在线成人免费观看视频 | 美女视频黄视大全视频免费网址 | 久久国产精品久久久久久 | 龙床上的呻吟高h | 亚洲天堂ww| 久久久久亚洲精品国产 | 中文字幕1区2区 | 免费黄色小网站 | 亚洲国产中文字幕 | 免费久久精品 | 国产色视频一区 | 91精品国产福利尤物免费 | 国产亚洲精品综合一区91555 | 中文字幕免费在线看 | 草草在线观看 | 好吊色欧美一区二区三区四区 |