日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

删除 jar 的 asset_【unity游戏开发】SDK学习(1)-C#与jar交互

發布時間:2025/3/20 C# 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 删除 jar 的 asset_【unity游戏开发】SDK学习(1)-C#与jar交互 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

引言

通常一款游戲開發到后期,一般都會涉及到第三方SDK的接入與集成

對于不熟悉SDK接入的同學來說,接SDK每次都是云里霧里,
而熟悉SDK接入的同學又覺得不斷地重復做接入SDK工作這樣沒有成就感,太尼瑪無聊了(Android渠道一弄就十幾個,直接吐血)。

概述

其實通常情況下接入SDK都是很簡單的一個過程,這邊記錄一下自己學習接入ShareSDK的過程。

  • 創建Android工程,編寫代碼,導出Android項目為Jar包供Unity調用
  • Unity端工程調用jar的接口,實現unity調用java函數
  • 打包測試調用結果

  • 實踐

    一、創建Android工程(Android Studio)

    注意包名要和unity的包名一致

    二、導入Classes.jar包到Android工程中

    Unity和Android做交互,他們兩個之間不認識肯定,沒法直接通信,因此需要一個中間的搭橋牽線的人,Classes.jar就起到了這個作用。
    Classes.jar是由Unity提供給我們的,我們需要找到它并且引入到我們的Android項目中。Claess.jar的路徑一般如下
    如果用MONO:Unity5.6.6EditorDataPlaybackEnginesandroidplayerVariationsmonoReleaseClasses
    如果用il2cpp:Unity5.6.6EditorDataPlaybackEnginesandroidplayerVariationsil2cppReleaseClasses

    我們找到它直接拖到我們的Android工程的libs目錄下。

    關鍵一步:右鍵-Add as Library,導入成功就可以開始編寫代碼了

    三、編寫Android端的代碼

      我們在Android端編寫一些代碼,提供一些接口來供Unity一會的調用。

    打開我們的MainActivity.java,然后添加代碼。需要注意的是,讓我們的MainActivity繼承Jar包中的UnityPlayerActivity類,這樣,Unity才能調的到

    還需要把 setContentView(R.layout.activity_main); 這段代碼注釋掉,要不然會顯示Android的默認布局文件,上面就一個 Hello World。

    package com.Aver3.Snake;import com.unity3d.player.UnityPlayerActivity; import com.unity3d.player.UnityPlayer; import android.os.Bundle;public class MainActivity extends UnityPlayerActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// setContentView(R.layout.activity_main); 注釋掉 不顯示View}//供U3D調用的方法public int Add(int x,int y){return x + y;}// Android調用Unity的方法public void JavaCallUnityFunc(){String str="Android Call Unity.";String UnityClass="Canvas";String UnityMethod="ForJavaCallFunc";//參數1:unity腳本掛載的gameobject 參數2:方法名 參數3:要傳遞的參數UnityPlayer.UnitySendMessage(UnityClass, UnityMethod, str);} }

    四、導出Android項目為Jar包

  • 修改build.gradle模塊文件
  • //apply plugin: 'com.android.application' apply plugin: 'com.android.library' //說明是Library模塊android {compileSdkVersion 28defaultConfig { // applicationId "com.Aver3.Snake"minSdkVersion 17targetSdkVersion 28versionCode 1versionName "1.0"multiDexEnabled true}buildTypes {release {//混淆minifyEnabled false//加載默認混淆配置文件proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}}lintOptions {abortOnError false}dexOptions {javaMaxHeapSize "4g"} }//刪除build.gradle里的依賴 //這里要刪的話,導出前刪,否者會XML配置會報錯 dependencies {implementation fileTree(include: ['*.jar'], dir: 'libs')implementation 'com.android.support:appcompat-v7:28.0.0'implementation files('libs/classes.jar') }task makeJar(type: Copy) {delete 'build/libs/mysdk.jar' //刪除舊的Jar包from('build/intermediates/intermediate-jars/release') //從該地址復制into('build/libs/') //復制到該地址include('classes.jar') //包含文件rename ('classes.jar', 'mysdk.jar') //重命名 }makeJar.dependsOn(build)

    2. 刪除單元測試

    刪除androidTest和Test

    3. 刪除布局文件

    刪除activity_main.xml

    4. 忘記有沒有改AndroidManifest.xml文件了,也附上

    <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.Aver3.Snake"android:installLocation="auto"><applicationandroid:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"><activity android:name=".MainActivity"android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application> </manifest>

    5. 同步gradle

    6. 運行makeJar 任務

    可以直接輸入makeJar搜索,找到后雙擊運行這個任務,第一次運行需要下載一些依賴,可能需要一會兒,運行結束,jar就打好了。

    五、導入 Unity

  • 將生成的jar和AndroidManifest.xml導入unity 工程的 Asset/Plugins/Android/ 目錄下。沒有的話就手動創建目錄。
  • 2. 修改AndroidManifest.xml文件

    <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.Aver3.Snake"><applicationandroid:theme="@style/UnityThemeSelector"android:icon="@drawable/app_icon"android:label="@string/app_name">android:theme="@style/UnityThemeSelector"><activity android:name="com.Aver3.Snake.MainActivity"android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter><meta-data android:name="unityplayer.UnityActivity" android:value="true" /></activity></application> </manifest>

    六、unity和Jar交互

  • unity調用jar
  • AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");string message = "this is my title";string body = "this is my content";jo.Call("ShareText", message, body);

    unity 中調用 android 層的接口基本都是通過 AndroidJavaClass 、AndroidJavaObject 的方式。

    2. jar調用unity

    //參數1:unity腳本掛載的gameobject 參數2:方法名 參數3:要傳遞的參數 UnityPlayer.UnitySendMessage("headImage","AndroidSaveHeadImageOver","headImage.png");

    例子:

    using UnityEngine; using UnityEngine.UI;public class Test : MonoBehaviour {public Button btn1;public Button btn2;public Text logText;private void Start(){btn1.onClick.AddListener(TestCallJavaFunc);btn2.onClick.AddListener(TestFromJavaCallUnityFunc);logText.text = "Start";}private const string JAVA_CLASS_Name = "com.unity3d.player.UnityPlayer";private void CallJavaFunc(string javaFuncName, params object[] args){try{//獲取到AndroidJavaClass,至于這里為什么調用這個類,我也不是很清楚//獲取unity的Java類,只能調用靜態方法,獲取靜態屬性using(AndroidJavaClass jc = new AndroidJavaClass(JAVA_CLASS_Name)){//獲取到Activityusing(AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity")){//調用Java方法jo.Call(javaFuncName, args);}}}catch(System.Exception ex){Debug.Log("callSdk error:" + ex.Message);}}void TestCallJavaFunc(){try{AndroidJavaClass javaVM = new AndroidJavaClass(JAVA_CLASS_Name);AndroidJavaObject currentActivity = javaVM.GetStatic<AndroidJavaObject>("currentActivity");int result = currentActivity.Call<int>("Add", 1999, 1);logText.text = "Call Java Func :Add ,rusult:" + result.ToString();}catch(System.Exception ex){Debug.LogError("Call Sdk Error:" + ex.Message);logText.text = ex.Message;throw;}}public void ForJavaCallFunc(string str){logText.text = str;}public void TestFromJavaCallUnityFunc(){CallJavaFunc("JavaCallUnityFunc");} }

    七、打包測試

    打包也是很多坑

    sdk版本不匹配啊 Unity編譯時找不到AndroidSDK的問題 | Unable to list target platforms

    AndroidManifest.xml的包名和unity包名不匹配會閃退啊,各種坑,一腳一個深。

    整了好久,終于可以互相調用了

    理解了基本原理,下面接一個簡單的分享鏈接的shareSDK測試一下是否能用。

    AS導出具體流程: Android Studio 如何導出 Jar 給 Unity 使用

    Classes.jar 介紹: Extending the UnityPlayerActivity Java Code

    Android Studio導出jar包并在Unity3d中使用?gameinstitute.qq.com【Unity游戲開發】SDK接入與集成--小白入門篇 - 馬三小伙兒 - 博客園?www.cnblogs.com

    總結

    以上是生活随笔為你收集整理的删除 jar 的 asset_【unity游戏开发】SDK学习(1)-C#与jar交互的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。