当前位置:   article > 正文

ARFoundation从零开始3-创建ARFoundation项目_ar foundation 从零开始

ar foundation 从零开始

项目示例源代码:

https://github.com/sueleeyu/framework

一、创建项目工程

1. unity版本2020.2.6f1,新建项目:

2.Hieraychy下Scene重命名为GeospatialScene,选择Window-Package Manager- Unity Register,依次下载:

XR Plugin Management 4.0.7

AR Foundation 4.1.10

ARCore XR Plugin 4.1.10

ARKit XR Plugin 4.1.10

3.如下:

4.删除原有摄像机, 点击Hierarchy的“+”,添加AR Session Origin和AR Session:

5.切换项目平台,File-Build Settings,先添加Scene,然后Platform下切换到Android:

6.Player Settings设置,点击Build Setting下的Player Settings:

Scripting Backend选择IL2CPP,这样Target Architectures可以勾选ARM64:

7.XR-Plugin Management:

8.打包设置:因ARCore Extensions需要build gradle 插件在4.0.1以上,打包时需要勾选下图选项:

与android工程的对应关系:

Main Gradle Template–> unityLibrary库的build.gradle文件

Launcher Gradle Template->launcher库的build.gradle文件

Base Gradle Template->android工程的build.gradle文件

Gradle Properties->android工程的gradle.properties文件

否则会出现打包错误:

9.测试打包APK

如果打包时间较长,

a.打开项目下

\Assets\Plugins\Android\baseProjectTemplate.gradle文件,更改为:

  1. // GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN
  2. allprojects {
  3.     buildscript {
  4.         repositories {**ARTIFACTORYREPOSITORY**
  5.            maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
  6.             google()
  7.             jcenter()
  8.         }
  9.         dependencies {
  10.             // If you are changing the Android Gradle Plugin version, make sure it is compatible with the Gradle version preinstalled with Unity
  11.             // See which Gradle version is preinstalled with Unity here https://docs.unity3d.com/Manual/android-gradle-overview.html
  12.             // See official Gradle and Android Gradle Plugin compatibility table here https://developer.android.com/studio/releases/gradle-plugin#updating-gradle
  13.             // To specify a custom Gradle version in Unity, go do "Preferences > External Tools", uncheck "Gradle Installed with Unity (recommended)" and specify a path to a custom Gradle version
  14.             classpath 'com.android.tools.build:gradle:4.2.2'
  15.             **BUILD_SCRIPT_DEPS**
  16.         }
  17.     }
  18.     repositories {**ARTIFACTORYREPOSITORY**
  19.        maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
  20.             google()
  21.             jcenter()
  22.         flatDir {
  23.             dirs "${project(':unityLibrary').projectDir}/libs"
  24.         }
  25.     }
  26. }
  27. task clean(type: Delete) {
  28.     delete rootProject.buildDir
  29. }

b.\Assets\Plugins\Android\mainTemplate.gradle文件,改为:

  1. //AAA Android Resolver Repos Start
  2. ([rootProject] + (rootProject.subprojects as List)).each { project ->
  3.     project.repositories {
  4.         def unityProjectPath = $/file:///**DIR_UNITYPROJECT**/$.replace("\\", "/")
  5.         maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
  6.         maven {
  7.             url "https://maven.aliyun.com/repository/google/" // Assets/GoogleMobileAds/Editor/GoogleMobileAdsDependencies.xml:7
  8.         }
  9.         mavenLocal()
  10.         jcenter()
  11.         mavenCentral()
  12.     }
  13. }
  14. //AAA Android Resolver Repos End
  15. apply plugin: 'com.android.library'
  16. **APPLY_PLUGINS**
  17. dependencies {
  18.     implementation fileTree(dir: 'libs', include: ['*.jar'])
  19. **DEPS**}
  20. android {
  21.     compileSdkVersion **APIVERSION**
  22.     buildToolsVersion '**BUILDTOOLS**'
  23.     compileOptions {
  24.         sourceCompatibility JavaVersion.VERSION_1_8
  25.         targetCompatibility JavaVersion.VERSION_1_8
  26.     }
  27.     defaultConfig {
  28.         minSdkVersion **MINSDKVERSION**
  29.         targetSdkVersion **TARGETSDKVERSION**
  30.         ndk {
  31.             abiFilters **ABIFILTERS**
  32.         }
  33.         versionCode **VERSIONCODE**
  34.         versionName '**VERSIONNAME**'
  35.         consumerProguardFiles 'proguard-unity.txt'**USER_PROGUARD**
  36.     }
  37.     lintOptions {
  38.         abortOnError false
  39.     }
  40.     aaptOptions {
  41.         noCompress = ['.ress', '.resource', '.obb'] + unityStreamingAssets.tokenize(', ')
  42.         ignoreAssetsPattern = "!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~"
  43.     }**PACKAGING_OPTIONS**
  44. }**REPOSITORIES**
  45. **IL_CPP_BUILD_SETUP**
  46. **SOURCE_BUILD_SETUP**
  47. **EXTERNAL_SOURCES**

如果首行是如下内容也要同时删除:

// GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN

提示:如果我们修改了Unity生成的文件,比如build.gradle,比如UnityPlayerActivity.java等,那么可以删除这些文件中以下注释,来防止Unity覆盖该文件:

GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN

c.打开Android Resolver设置:

d.取消覆盖mainTemplate.gradle的设置:

10.签名打包的APK:打开命令提示符-进入证书所在目录,把未签名的APK放到当前目录,更名orient.apk,命令行输入:

jarsigner -verbose -keystore user.keystore -signedjar sign.apk orient.apk 212

user.keystore为证书,如:F:\unity\sign\user.keystore

orient.apk为未签名APK,如:F:\unity\sign\orient.apk

sign.apk为签名后的APK

212为证书创建时设置的别名

11.查看SHA-1 指纹,命令行输入:

keytool -list -printcert -jarfile sign.apk

二、安装ARCore Extensions软件包(不涉及地理空间和云锚点不用安装)

安装要求:

1.翻墙

2.ARCore扩展包需要ARFoundation4.1.5以上。

3.unity版本2020.2.6f1以上

google参考文档:

开始使用 ARCore Foundation for AR Foundation  |  Google Developers

1.导入ARCore扩展包:windows-package manager,点击 “+”  按钮,然后从下拉菜单中选择 Add package from git URL... 选项

2.复制以下网址到文本字段中,点击Add:

GitHub - google-ar/arcore-unity-extensions: Google ARCore Extensions for Unity's AR Foundation

安装后:

2.添加ARCore Extensions游戏对象:Hierarchy-“+”-XR-ARCore Extensions

3.关联游戏对象:拖动对象到相应字段

4.制作ARCoreExtensionsConfig(和ARCoreExtensionsCameraConfigFilter)素材资源: Project > Assets-右键创建Configurations文件夹,Configurations内右键点击 Create > XR > ARCore Extensions Config点击后添加。

5.拖动关联素材资源:

6.在 Unity 中,转到 Edit > Project Settings > XR > ARCore Extensions。 Android Authentiation Strategy 下拉菜单中,选择 API Key

7.在Android API Key 字段中,粘贴从 Google Cloud Platform 获得的 API 密钥(下述),并勾选Optional Features 下的两个要使用的API的复选框:

授权完成。

三、添加UI

1.Hierarchy右键-Create Empty,点击创建的组件,右侧Inspector命名UI。Hierarchy右键-Create Empty,点击创建的组件,右侧Inspector命名Game:

2.UI下新建Text,命名Log,设置:

四、添加脚本

1. Assets-新建Scripts文件夹,新建Logger.cs脚本文件:

  1. using System.Collections.Generic;
  2. using System.Text;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5. namespace FrameworkDesign.Example
  6. {
  7.     public class Logger : MonoBehaviour
  8.     {
  9.         [SerializeField]
  10.         Text m_LogText;
  11.         public Text logText
  12.         {
  13.             get => m_LogText;
  14.             set => m_LogText = value;
  15.         }
  16.         [SerializeField]
  17.         int m_VisibleMessageCount = 40;
  18.         public int visibleMessageCount
  19.         {
  20.             get => m_VisibleMessageCount;
  21.             set => m_VisibleMessageCount = value;
  22.         }
  23.         int m_LastMessageCount;
  24.         static List<string> s_Log = new List<string>();
  25.         static StringBuilder m_StringBuilder = new StringBuilder();
  26.         void Awake()
  27.         {
  28.             if (m_LogText == null)
  29.             {
  30.                 m_LogText = GetComponent<Text>();
  31.             }
  32.             lock (s_Log)
  33.             {
  34.                 s_Log?.Clear();
  35.             }
  36.             Log("Log console initialized.");
  37.         }
  38.         void Update()
  39.         {
  40.             lock (s_Log)
  41.             {
  42.                 if (m_LastMessageCount != s_Log.Count)
  43.                 {
  44.                     m_StringBuilder.Clear();
  45.                     var startIndex = Mathf.Max(s_Log.Count - m_VisibleMessageCount, 0);
  46.                     for (int i = startIndex; i < s_Log.Count; ++i)
  47.                     {
  48.                         m_StringBuilder.Append($"{i:000}> {s_Log[i]}\n");
  49.                     }
  50.                     var text = m_StringBuilder.ToString();
  51.                     if (m_LogText)
  52.                     {
  53.                         m_LogText.text = text;
  54.                     }
  55.                     else
  56.                     {
  57.                         Debug.Log(text);
  58.                     }
  59.                 }
  60.                 m_LastMessageCount = s_Log.Count;
  61.             }
  62.         }
  63.         public static void Log(string message)
  64.         {
  65.             lock (s_Log)
  66.             {
  67.                 if (s_Log == null)
  68.                     s_Log = new List<string>();
  69.                 s_Log.Add(message);
  70.             }
  71.         }
  72.     }
  73. }

2. 挂载Log,选择Log组件,将Logger.cs拖动添加为Component,关联Log(拖动Log到LogTest栏)

五、常见问题

1. unity运行提示:Display 1 No cameras rendering

 

解决方法:Game视图-右键-取消第一个的勾选

 

六、参考文献

1. Unity api:

Unity - Manual: Unity User Manual 2021.3 (LTS)

2. Geospatial 文档:

使用 ARCore Geospatial API 打造全球规模的沉浸式 AR 体验  |  Google Developers

3.本项目示例源代码:

https://github.com/sueleeyu/framework

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/473862
推荐阅读
相关标签
  

闽ICP备14008679号