unity sdk -AppLovin MAX 广告聚合平台接入+Firebase统计

这篇具有很好参考价值的文章主要介绍了unity sdk -AppLovin MAX 广告聚合平台接入+Firebase统计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

unity版本:2019.4.40f1

Android Studio :4.2.1

sdk版本:5.4.6

max对应unity的官方文档:

MAX Mediation Documentationhttps://dash.applovin.com/documentation/mediation/unity/getting-started/integration

1、阅读官方文档 下载sdk 全部导入

unity sdk -AppLovin MAX 广告聚合平台接入+Firebase统计

 2、集成器设置

unity sdk -AppLovin MAX 广告聚合平台接入+Firebase统计

 a、集成max SDK 的更新 unity sdk -AppLovin MAX 广告聚合平台接入+Firebase统计

b、其他中介平台组加入(我这边加入了 google admob 和Mintegral和Pangle 三个中介平台)

unity sdk -AppLovin MAX 广告聚合平台接入+Firebase统计

 c、Applovin  key 添加,其他部分根据需求一般保持不变

unity sdk -AppLovin MAX 广告聚合平台接入+Firebase统计

 d、Android 配置设置

unity sdk -AppLovin MAX 广告聚合平台接入+Firebase统计

 3、Firebase接入

Firebase接入文档https://mp.csdn.net/mp_blog/creation/editor/126500929

按以上文档接入,需要注意 以上已经接入了google admob的sdk,所以Firebase sdk里面的google部分会冲突,所以冲突部分不需要导入

unity sdk -AppLovin MAX 广告聚合平台接入+Firebase统计

设置完所有平台和其他插件后Force Resolve 下,就会下载所需的.arr文件

unity sdk -AppLovin MAX 广告聚合平台接入+Firebase统计

例如: 

 unity sdk -AppLovin MAX 广告聚合平台接入+Firebase统计

4、代码初始化调用

using System.Collections;
using UnityEngine;
using System.Collections.Generic;
using System;

public class ServicesManager_MAX : MonoBehaviour
{
    public static ServicesManager_MAX instance { get; set; }

    public bool openShowOpenAD = true;
    public bool openShowBanner = false;

    public string appIDAndroid;
    public string appOpenIDAndroid;
    public string bannerIDAndroid;
    public string interstitialID;
    public string rewardedVideoAdsID;

    bool isRewardAdded;

    [Header("IOS")]
    public string appIDIos;
    public string appOpenIDIos;
    public string bannerIDIos;
    public string interstitialIDIos;
    public string rewardedVideoAdsIDIos;

    private string sdkKey;
    private string appOpenID;
    private string bannerID;
    private string InterstitialsID;
    private string VideoID;

    private void Awake()
    {
        if (instance == null)
        {
            instance = this;
            DontDestroyOnLoad(this.gameObject);
        }
        else
        {
            GameObject.Destroy(this.gameObject);
        }
    }

#if ADS_MAX
    void Start()
    {
        Application.targetFrameRate = 60;

        if (Application.platform == RuntimePlatform.IPhonePlayer)
        {
            sdkKey = appIDIos;
            bannerID = bannerIDIos;
            InterstitialsID = interstitialIDIos;
            VideoID = rewardedVideoAdsIDIos;
        }
        else
        {
            sdkKey = appIDAndroid;
            bannerID = bannerIDAndroid;
            InterstitialsID = interstitialID;
            VideoID = rewardedVideoAdsID;
        }

        //---test--start--测试id
//        sdkKey = "ENTER_MAX_SDK_KEY_HERE";
//        bannerID = "ENTER_BANNER_AD_UNIT_ID_HERE";
// 
//         InterstitialsID = "ENTER_INTERSTITIAL_AD_UNIT_ID_HERE";
//         VideoID ="ca-app-pub-ENTER_REWARD_AD_UNIT_ID_HERE/5224354917";
// 
        //---test---end-

        InitMAX();
    }

    void InitMAX()
    {
        MaxSdkCallbacks.OnSdkInitializedEvent += (MaxSdkBase.SdkConfiguration sdkConfiguration) =>
        {
            if (sdkConfiguration.ConsentDialogState == MaxSdkBase.ConsentDialogState.Applies)
            {
                //MaxSdk.SetHasUserConsent(true);
                //MaxSdk.SetHasUserConsent(false);
                // Show user consent dialog
                //MaxSdk.UserService.ShowConsentDialog();
            }
            else if (sdkConfiguration.ConsentDialogState == MaxSdkBase.ConsentDialogState.DoesNotApply)
            {
                // No need to show consent dialog, proceed with initialization
            }
            else
            {
                // Consent dialog state is unknown. Proceed with initialization, but check if the consent
                // dialog should be shown on the next application initialization
            }

            // AppLovin SDK is initialized, start loading ads
            InitAD();
            CheckFirebase();
        };

        MaxSdk.SetSdkKey(sdkKey);
        //MaxSdk.SetUserId("USER_ID");
        MaxSdk.InitializeSdk();
        //MaxSdk.InitializeSdk(new[] { "YOUR_AD_UNIT_ID_1", "YOUR_AD_UNIT_ID_2" });

        //MaxSdk.SetVerboseLogging(true);
    }

    void InitAD()
    {
        if (openShowBanner)
        {
            InitializeBannerAds();
        }

        if (openShowOpenAD)
        {
            InitializeOpenAd();
        }
        //

        Invoke("InitializeInterstitialAds", 0.5f);
        Invoke("InitializeRewardedAds", 1f);
    }


    void CheckFirebase()
    {
        Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task =>
        {
            var dependencyStatus = task.Result;
            if (dependencyStatus == Firebase.DependencyStatus.Available)
            {
                // Create and hold a reference to your FirebaseApp,
                // where app is a Firebase.FirebaseApp property of your application class.
                //app = Firebase.FirebaseApp.DefaultInstance;

                // Set a flag here to indicate whether Firebase is ready to use by your app.
                Debug.Log("Create and hold a reference to your FirebaseApp");
            }
            else
            {
                UnityEngine.Debug.LogError(System.String.Format(
                  "Could not resolve all Firebase dependencies: {0}", dependencyStatus));
                // Firebase Unity SDK is not safe to use here.
            }
        });
    }
#endif

        private void Update()
    {
        AdOpenTime += Time.deltaTime;
    }

    //-----------------------------------横幅---------------------------------------------
#if ADS_MAX
    public void InitializeBannerAds()
    {
        // Banners are automatically sized to 320×50 on phones and 728×90 on tablets
        // You may call the utility method MaxSdkUtils.isTablet() to help with view sizing adjustments
        MaxSdk.CreateBanner(bannerID, MaxSdkBase.BannerPosition.TopCenter);
        //MaxSdk.SetBannerExtraParameter(bannerAdUnitId, "adaptive_banner", "true")

        // Set background or background color for banners to be fully functional
        MaxSdk.SetBannerBackgroundColor(bannerID,new Color(1,1,1,0));

        MaxSdkCallbacks.Banner.OnAdLoadedEvent      += OnBannerAdLoadedEvent;
        MaxSdkCallbacks.Banner.OnAdLoadFailedEvent  += OnBannerAdLoadFailedEvent;
        MaxSdkCallbacks.Banner.OnAdClickedEvent     += OnBannerAdClickedEvent;
        MaxSdkCallbacks.Banner.OnAdRevenuePaidEvent += OnBannerAdRevenuePaidEvent;
        MaxSdkCallbacks.Banner.OnAdExpandedEvent    += OnBannerAdExpandedEvent;
        MaxSdkCallbacks.Banner.OnAdCollapsedEvent   += OnBannerAdCollapsedEvent;
    }

    private void OnBannerAdLoadedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
    {
        //Invoke("ShowBannerAdmob", 1);
        ShowBannerAdmob("", "");
    }

    private void OnBannerAdLoadFailedEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo) {}

    private void OnBannerAdClickedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo) {}

    private void OnBannerAdRevenuePaidEvent(string adUnitId, MaxSdkBase.AdInfo adInfo) {}

    private void OnBannerAdExpandedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)  {}

    private void OnBannerAdCollapsedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo) {}
#endif

    public void ShowBannerAdmob(string eventName, object data)
    {
        Debug.Log("ShowBannerAdmob loaded succesfully");
#if ADS_MAX
        MaxSdk.ShowBanner(bannerID);
#endif
    }

    public void HideBanner()
    {
#if ADS_MAX
        MaxSdk.HideBanner(bannerID);
#endif
    }

    //-----------------------------------自制开屏(用插屏当开屏)---------------------------------------------
#if ADS_MAX
    bool isOnceOpenAd = false;
    void InitializeOpenAd()
    {
        isOnceOpenAd = true;
    }

#endif

    //-----------------------------------插页---------------------------------------------
#if ADS_MAX
    int retryAttemptInterstitial;

    DateTime lastNow = DateTime.Now;
    public void InitializeInterstitialAds()
    {
        // Attach callback
        MaxSdkCallbacks.Interstitial.OnAdLoadedEvent += OnInterstitialLoadedEvent;
        MaxSdkCallbacks.Interstitial.OnAdLoadFailedEvent += OnInterstitialLoadFailedEvent;
        MaxSdkCallbacks.Interstitial.OnAdDisplayedEvent += OnInterstitialDisplayedEvent;
        MaxSdkCallbacks.Interstitial.OnAdClickedEvent += OnInterstitialClickedEvent;
        MaxSdkCallbacks.Interstitial.OnAdHiddenEvent += OnInterstitialHiddenEvent;
        MaxSdkCallbacks.Interstitial.OnAdDisplayFailedEvent += OnInterstitialAdFailedToDisplayEvent;

        // Load the first interstitial
        LoadInterstitial();
    }

    private void LoadInterstitial()
    {
        MaxSdk.LoadInterstitial(InterstitialsID);
    }

    private void OnInterstitialLoadedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
    {
        // Interstitial ad is ready for you to show. MaxSdk.IsInterstitialReady(adUnitId) now returns 'true'

        // Reset retry attempt
        retryAttemptInterstitial = 0;

        DateTime newTime = DateTime.Now;
        TimeSpan ts1 = new TimeSpan(lastNow.Ticks);
        TimeSpan ts2 = new TimeSpan(newTime.Ticks);
        TimeSpan tsSub = ts1.Subtract(ts2).Duration();
        if (tsSub.TotalSeconds < 5 && isOnceOpenAd)
        {
            Debug.Log("OpenAd loaded succesfully");
            isOnceOpenAd = false;
            ShowInterstitialAdmob("ShowInterstitialAdmob", "");
        }
    }

    private void OnInterstitialLoadFailedEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo)
    {
        // Interstitial ad failed to load 
        // AppLovin recommends that you retry with exponentially higher delays, up to a maximum delay (in this case 64 seconds)
        print("OnInterstitialLoadFailedEvent Name: " + errorInfo.WaterfallInfo.Name + " and Test Name: " + errorInfo.WaterfallInfo.TestName);

        retryAttemptInterstitial++;
        double retryDelay = Math.Pow(2, Math.Min(6, retryAttemptInterstitial));

        Invoke("LoadInterstitial", (float)retryDelay);
    }

    private void OnInterstitialDisplayedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo) { }

    private void OnInterstitialAdFailedToDisplayEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo, MaxSdkBase.AdInfo adInfo)
    {
        // Interstitial ad failed to display. AppLovin recommends that you load the next ad.
        LoadInterstitial();
    }

    private void OnInterstitialClickedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo) { }

    private void OnInterstitialHiddenEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
    {
        // Interstitial ad is hidden. Pre-load the next ad.
        LoadInterstitial();
    }
#endif

    //带回掉的展示插屏
    public void ShowInterstitialAdmob(string eventName, object data)
    {
#if ADS_MAX
        click = (System.Action)data;

        if (MaxSdk.IsInterstitialReady(InterstitialsID))
        {
            Debug.Log("Interstitial was loaded succesfully! interstialId=" + InterstitialsID[0]);
            MaxSdk.ShowInterstitial(InterstitialsID);
        }
        else
        {
            Debug.Log("Interstitial Loding " + InterstitialsID);
        }
#endif
    }

    //限制时间的回掉插屏
    float AdOpenTime = 120f;
    public void ShowInterstitialAdmobTime(string eventName, object data)
    {
        if (AdOpenTime < (int)data)
        {
            return;
        }

#if ADS_MAX
        click = null;
        if (MaxSdk.IsInterstitialReady(InterstitialsID))
        {
            AdOpenTime = 0;
            Debug.Log("Interstitial was loaded succesfully! interstialId=" + InterstitialsID[0]);
            MaxSdk.ShowInterstitial(InterstitialsID);
        }
        else
        {
            Debug.Log("Interstitial Loding " + InterstitialsID);
        }
#endif
    }


    //-----------------------------------激励视频---------------------------------------------
#if ADS_MAX
    System.Action click;

    int retryAttemptRewarded=0;

    public void InitializeRewardedAds()
    {
        // Attach callback
        MaxSdkCallbacks.Rewarded.OnAdLoadedEvent += OnRewardedAdLoadedEvent;
        MaxSdkCallbacks.Rewarded.OnAdLoadFailedEvent += OnRewardedAdLoadFailedEvent;
        MaxSdkCallbacks.Rewarded.OnAdDisplayedEvent += OnRewardedAdDisplayedEvent;
        MaxSdkCallbacks.Rewarded.OnAdClickedEvent += OnRewardedAdClickedEvent;
        MaxSdkCallbacks.Rewarded.OnAdRevenuePaidEvent += OnRewardedAdRevenuePaidEvent;
        MaxSdkCallbacks.Rewarded.OnAdHiddenEvent += OnRewardedAdHiddenEvent;
        MaxSdkCallbacks.Rewarded.OnAdDisplayFailedEvent += OnRewardedAdFailedToDisplayEvent;
        MaxSdkCallbacks.Rewarded.OnAdReceivedRewardEvent += OnRewardedAdReceivedRewardEvent;

        // Load the first rewarded ad
        LoadRewardedAd();
    }

    private void LoadRewardedAd()
    {
        MaxSdk.LoadRewardedAd(VideoID[0]);
    }

    private void OnRewardedAdLoadedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
    {
        // Rewarded ad is ready for you to show. MaxSdk.IsRewardedAdReady(adUnitId) now returns 'true'.

        // Reset retry attempt
        retryAttemptRewarded = 0;
    }

    private void OnRewardedAdLoadFailedEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo)
    {
        // Rewarded ad failed to load 
        // AppLovin recommends that you retry with exponentially higher delays, up to a maximum delay (in this case 64 seconds).

        retryAttemptRewarded++;
        double retryDelay = Math.Pow(2, Math.Min(6, retryAttemptRewarded));

        Invoke("LoadRewardedAd", (float)retryDelay);
    }

    private void OnRewardedAdDisplayedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo) { }

    private void OnRewardedAdFailedToDisplayEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo, MaxSdkBase.AdInfo adInfo)
    {
        // Rewarded ad failed to display. AppLovin recommends that you load the next ad.
        LoadRewardedAd();
    }

    private void OnRewardedAdClickedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo) { }

    private void OnRewardedAdHiddenEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
    {
        // Rewarded ad is hidden. Pre-load the next ad
        LoadRewardedAd();
    }

    private void OnRewardedAdReceivedRewardEvent(string adUnitId, MaxSdk.Reward reward, MaxSdkBase.AdInfo adInfo)
    {
        if (click != null)
        {
            click();
        }
        // The rewarded ad displayed and the user should receive the reward.
    }

    private void OnRewardedAdRevenuePaidEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
    {
        // Ad revenue paid. Use this callback to track user revenue.
    }
#endif

    /// <summary>
    /// 展示视频广告
    /// </summary>
    /// <param name="_newPage">标签页</param>
    /// <param name="action">奖励回掉</param>
    /// <param name="action2">失败回掉</param>
    public void ShowRewardedAd(string eventName, object data)
    {
#if ADS_MAX
        click = (System.Action)data;

        isRewardAdded = false;
        if (MaxSdk.IsRewardedAdReady(VideoID))
        {
            AdOpenTime = 0;
            Debug.Log("Rewarded was loaded succesfully! " + VideoID);
            MaxSdk.ShowRewardedAd(VideoID);
        }else
        {
            Debug.Log("Rewarded Loding " + VideoID);
            
        }
#endif
    }

}

5、打包发布

由于unity2019,自带版本的gradle较低,跟sdk有冲突(需要升级gradle)

unity中会显示类似这些报错:

Deprecated Gradle features were used in this build, making it incompatible with Gradle 6.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/5.1.1/userguide/command_line_interface.html#sec:command_line_warnings
62 actionable tasks: 62 executed

android studio 中显示如下的错误:

unity sdk -AppLovin MAX 广告聚合平台接入+Firebase统计

 插件版本与所需gradle版本的关系

Android Gradle 插件版本说明  |  Android 开发者  |  Android Developers

unity sdk -AppLovin MAX 广告聚合平台接入+Firebase统计

解决方案:我这边用的是  插件版本4.1.1  gradle 版本6.5

方案1、unity中解决

Gradle Distributions 版本下载https://services.gradle.org/distributions/下载gradle-6.5-all.zip

unity sdk -AppLovin MAX 广告聚合平台接入+Firebase统计

下载完成后,我们需要把解压出来的gradle文件中的lib文件复制替换到你使用的unity对应位置,如D:\Program Files\2019.4.40f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\gradle中的lib

unity sdk -AppLovin MAX 广告聚合平台接入+Firebase统计

 在发布设置中勾选 base gradle Template

unity sdk -AppLovin MAX 广告聚合平台接入+Firebase统计

将 Plugins 中Android 中的baseProjectTemplate 中 classpath 修改成  4.1.1(根据你下载gradle 版本对应的插件版本)

unity sdk -AppLovin MAX 广告聚合平台接入+Firebase统计

 方案2、导出安卓工程在 android studio 中设置版本

unity sdk -AppLovin MAX 广告聚合平台接入+Firebase统计

unity sdk -AppLovin MAX 广告聚合平台接入+Firebase统计

6、剩余问题(关于欧盟等其他地区隐私问题,目前也没搞懂放哪,有研究懂的兄弟可以回复我)

unity sdk -AppLovin MAX 广告聚合平台接入+Firebase统计

 文章来源地址https://www.toymoban.com/news/detail-406849.html

到了这里,关于unity sdk -AppLovin MAX 广告聚合平台接入+Firebase统计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity使用Gradle打包方式接入Firebase时配置文件google-services.json遇到的坑

    1、首先在mainTemplate.gradle最上引入 ‘’com.google.gms.google-services’ 如下图: 2、在mainTemplate.gradle添加任务,将下载下来的google-services.json复制到gradle项目根目录下 如下图: 将你原始文件 google-services.json 中的 package_name 的属性值 改为 com.unity3d.player 如下图:

    2024年02月11日
    浏览(43)
  • 抖音广告Unity接入示例

     一、初始化 Unity端初始化 建议用户同意隐私协议后再进行SDK的初始化方法,传入在聚合平台申请的appID及其他设置: 二、IOS版本编码 导出原生端初始化 iOS 配置启动函数UnionAppController.mm,初始化SDK,必须放在加载广告前,建议用户同意隐私协议后再进行SDK的初始化方法,开发者需

    2024年02月14日
    浏览(33)
  • Unity 之 最新原生广告Ads接入 -- 助力增长游戏收益

    Unity Ads 是由 Unity Technologies 开发的广告平台,可以用于在移动应用程序中显示广告。它提供了多种广告类型,包括插屏广告、横幅广告、视频广告等。 在本文中,我们将详细介绍如何接入 Unity Ads 广告 SDK。 在使用 Unity Ads 广告 SDK 之前,需要先登录Unity Ads后台。地址: https:/

    2024年02月11日
    浏览(35)
  • 【unity接入SDK案例】从0到1 如何接入百度地图SDK到unity中【一】

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 :Unity基础实战 下载入口 下载入口 android studio版本是:2021.2.1.16, 打开后 点击SDK Manager 我们需要更改一下SDK的安装路径 选择自己新建的文

    2024年03月17日
    浏览(42)
  • 【unity接入SDK案例】从0到1 如何接入百度地图SDK到unity中【二】

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 :Unity基础实战 下载入口 下载入口 android studio版本是:2021.2.1.16, 打开后 点击SDK Manager 我们需要更改一下SDK的安装路径 选择自己新建的文

    2024年04月09日
    浏览(46)
  • 福禄开放平台PHP接入封装SDK

    开放平台提供专业的数字权益商品标准化接口和免费接入服务,数字权益商品涵盖话费、流量、游戏、Q币、视频会员、加油卡、礼品卡等多种品类,可满足使用者多方面的业务需求,丰富企业的产品内容、提升竞争优势。 商品管理:提供API商户可以进行对接的商品类目和编

    2024年02月11日
    浏览(38)
  • Unity接入SDK

    C#是托管语言,C++是非托管语言。 托管代码和非托管代码的区别 1、托管代码是一种中间语言,运行在CLR上;非托管代码被编译为机器码,运行在机器上。 2、托管代码独立于平台和语言,能更好的实现不同语言平台之间的兼容;非托管代码依赖于平台和语言。 3、托管代码可

    2024年02月16日
    浏览(39)
  • Unity接入PICO Unity Integration SDK

     1.我下载的SD版本是 2.2;  2.支持Pico3 ,Pico 4开发   3.Pico设备的系统版本要在5.6.0以上 4.注意支持的Unity 版本最低为2020.3.21  我用的是2021.2.5 下载完成并且解压出来  1.打开包管理器,选择从磁盘中加载选择 packakge.json  回到unity后会看见是否切换新版输入系统,然后等待unity重启

    2024年02月07日
    浏览(41)
  • 创建Firebase项目并接入Firebase推送: Firebase Cloud Messaging (FCM)

    Firebase Cloud Messaging (FCM) 是一种跨平台消息传递解决方案,可供您可靠地传递消息,而且还是免费的服务。支持 Android,IOS,Web,Flutter,Unity. 消息类型 可以使用 FCM 向客户端发送两种类型的消息: 通知消息,有时被称为“显示消息”。此类消息由 FCM SDK 自动处理。 数据消息,由客

    2024年02月04日
    浏览(35)
  • 【第三方SDK接入汇总】Unity接入VuforiaAR(图片识别)

    目录 一.注册Vuforia账号 二.获取许可秘钥 三.获取Vuforia的SDK导入unity 四.搭建创建AR场景 五.打包到手机 注册地址:Engine Developer Portal 申请地址:https://developer.vuforia.com/vui/develop/licenses 方式一: 官网下载 下载地址:SDK Download | Engine Developer Portal  下载后把package包导入unity即可。

    2024年04月08日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包