Unity 移動端的複製這麼寫

來源:互聯網
上載者:User

標籤:ring   ctc   cal   android目錄   wrap   gen   esc   you   VID   

遊戲上線很久了,有些玩家慢慢就流失了,為了讓剛流失的玩家再度迴歸所以做了召回功能!如果一個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";    }}
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 : 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

 

Unity 移動端的複製這麼寫

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.