From baec94b4afe55614f30e6bbd632f8d91d6103d5c Mon Sep 17 00:00:00 2001 From: timbotimbo Date: Tue, 2 Jul 2024 00:18:03 +0200 Subject: [PATCH 1/9] Copy android 2022_3 package to a new android_6000 folder. Update most references to 2022. --- flutter_embed_unity_6000_android/.gitignore | 33 ++ flutter_embed_unity_6000_android/.metadata | 30 ++ flutter_embed_unity_6000_android/CHANGELOG.md | 3 + flutter_embed_unity_6000_android/LICENSE | 21 ++ flutter_embed_unity_6000_android/README.md | 21 ++ .../analysis_options.yaml | 4 + .../android/.gitignore | 9 + .../android/build.gradle | 79 +++++ .../android/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59821 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + .../android/gradlew | 234 ++++++++++++++ .../android/gradlew.bat | 89 ++++++ .../android/lib-proguard-rules.txt | 8 + .../android/libs/unity_classes_2022.3.LTS.jar | Bin 0 -> 133834 bytes .../android/settings.gradle | 1 + .../android/src/main/AndroidManifest.xml | 2 + .../FlutterEmbedUnityAndroidPlugin.kt | 129 ++++++++ .../constants/FlutterEmbedConstants.kt | 15 + .../messaging/SendToFlutter.java | 41 +++ .../messaging/SendToUnity.kt | 33 ++ .../platformView/IUnityViewStackable.kt | 9 + .../platformView/UnityView.kt | 78 +++++ .../platformView/UnityViewFactory.kt | 67 ++++ .../platformView/UnityViewStack.kt | 102 ++++++ .../unity/CopyMotionEvent.kt | 56 ++++ .../unity/FakeUnityPlayerActivity.java | 26 ++ .../unity/IFakeUnityPlayerActivity.java | 22 ++ .../unity/ResumeUnityOnActivityResume.kt | 24 ++ .../unity/UnityPlayerSingleton.kt | 146 +++++++++ .../FlutterEmbedUnityPluginTest.kt | 27 ++ .../example/.gitignore | 44 +++ .../example/README.md | 13 + .../example/analysis_options.yaml | 29 ++ .../example/android/.gitignore | 13 + .../example/android/app/build.gradle | 70 ++++ .../android/app/src/debug/AndroidManifest.xml | 7 + .../android/app/src/main/AndroidManifest.xml | 33 ++ .../MainActivity.java | 7 + .../res/drawable-v21/launch_background.xml | 12 + .../main/res/drawable/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 544 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 442 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 721 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1031 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 1443 bytes .../app/src/main/res/values-night/styles.xml | 18 ++ .../app/src/main/res/values/styles.xml | 18 ++ .../app/src/profile/AndroidManifest.xml | 7 + .../example/android/build.gradle | 34 ++ .../example/android/gradle.properties | 7 + .../gradle/wrapper/gradle-wrapper.properties | 5 + .../example/android/settings.gradle | 14 + .../plugin_integration_test.dart | 24 ++ .../example/lib/main.dart | 268 ++++++++++++++++ .../example/pubspec.lock | 299 ++++++++++++++++++ .../example/pubspec.yaml | 30 ++ .../example/test/widget_test.dart | 27 ++ .../lib/flutter_embed_unity_6000_android.dart | 4 + flutter_embed_unity_6000_android/pubspec.yaml | 32 ++ 59 files changed, 2341 insertions(+) create mode 100644 flutter_embed_unity_6000_android/.gitignore create mode 100644 flutter_embed_unity_6000_android/.metadata create mode 100644 flutter_embed_unity_6000_android/CHANGELOG.md create mode 100644 flutter_embed_unity_6000_android/LICENSE create mode 100644 flutter_embed_unity_6000_android/README.md create mode 100644 flutter_embed_unity_6000_android/analysis_options.yaml create mode 100644 flutter_embed_unity_6000_android/android/.gitignore create mode 100644 flutter_embed_unity_6000_android/android/build.gradle create mode 100644 flutter_embed_unity_6000_android/android/gradle/wrapper/gradle-wrapper.jar create mode 100644 flutter_embed_unity_6000_android/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 flutter_embed_unity_6000_android/android/gradlew create mode 100644 flutter_embed_unity_6000_android/android/gradlew.bat create mode 100644 flutter_embed_unity_6000_android/android/lib-proguard-rules.txt create mode 100644 flutter_embed_unity_6000_android/android/libs/unity_classes_2022.3.LTS.jar create mode 100644 flutter_embed_unity_6000_android/android/settings.gradle create mode 100644 flutter_embed_unity_6000_android/android/src/main/AndroidManifest.xml create mode 100644 flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/FlutterEmbedUnityAndroidPlugin.kt create mode 100644 flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/constants/FlutterEmbedConstants.kt create mode 100644 flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/messaging/SendToFlutter.java create mode 100644 flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/messaging/SendToUnity.kt create mode 100644 flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/platformView/IUnityViewStackable.kt create mode 100644 flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/platformView/UnityView.kt create mode 100644 flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/platformView/UnityViewFactory.kt create mode 100644 flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/platformView/UnityViewStack.kt create mode 100644 flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/unity/CopyMotionEvent.kt create mode 100644 flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/unity/FakeUnityPlayerActivity.java create mode 100644 flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/unity/IFakeUnityPlayerActivity.java create mode 100644 flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/unity/ResumeUnityOnActivityResume.kt create mode 100644 flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/unity/UnityPlayerSingleton.kt create mode 100644 flutter_embed_unity_6000_android/android/src/test/kotlin/com/learntoflutter/flutter_embed_unity_test/FlutterEmbedUnityPluginTest.kt create mode 100644 flutter_embed_unity_6000_android/example/.gitignore create mode 100644 flutter_embed_unity_6000_android/example/README.md create mode 100644 flutter_embed_unity_6000_android/example/analysis_options.yaml create mode 100644 flutter_embed_unity_6000_android/example/android/.gitignore create mode 100644 flutter_embed_unity_6000_android/example/android/app/build.gradle create mode 100644 flutter_embed_unity_6000_android/example/android/app/src/debug/AndroidManifest.xml create mode 100644 flutter_embed_unity_6000_android/example/android/app/src/main/AndroidManifest.xml create mode 100644 flutter_embed_unity_6000_android/example/android/app/src/main/java/com/jamesncl/dev/flutter_embed_unity_android_example/MainActivity.java create mode 100644 flutter_embed_unity_6000_android/example/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 flutter_embed_unity_6000_android/example/android/app/src/main/res/drawable/launch_background.xml create mode 100644 flutter_embed_unity_6000_android/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 flutter_embed_unity_6000_android/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 flutter_embed_unity_6000_android/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 flutter_embed_unity_6000_android/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 flutter_embed_unity_6000_android/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 flutter_embed_unity_6000_android/example/android/app/src/main/res/values-night/styles.xml create mode 100644 flutter_embed_unity_6000_android/example/android/app/src/main/res/values/styles.xml create mode 100644 flutter_embed_unity_6000_android/example/android/app/src/profile/AndroidManifest.xml create mode 100644 flutter_embed_unity_6000_android/example/android/build.gradle create mode 100644 flutter_embed_unity_6000_android/example/android/gradle.properties create mode 100644 flutter_embed_unity_6000_android/example/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 flutter_embed_unity_6000_android/example/android/settings.gradle create mode 100644 flutter_embed_unity_6000_android/example/integration_test/plugin_integration_test.dart create mode 100644 flutter_embed_unity_6000_android/example/lib/main.dart create mode 100644 flutter_embed_unity_6000_android/example/pubspec.lock create mode 100644 flutter_embed_unity_6000_android/example/pubspec.yaml create mode 100644 flutter_embed_unity_6000_android/example/test/widget_test.dart create mode 100644 flutter_embed_unity_6000_android/lib/flutter_embed_unity_6000_android.dart create mode 100644 flutter_embed_unity_6000_android/pubspec.yaml diff --git a/flutter_embed_unity_6000_android/.gitignore b/flutter_embed_unity_6000_android/.gitignore new file mode 100644 index 0000000..8109248 --- /dev/null +++ b/flutter_embed_unity_6000_android/.gitignore @@ -0,0 +1,33 @@ +# Example unity project build files +example/android/unityLibrary/ + +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +# Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock. +/pubspec.lock +**/doc/api/ +.dart_tool/ +.packages +build/ diff --git a/flutter_embed_unity_6000_android/.metadata b/flutter_embed_unity_6000_android/.metadata new file mode 100644 index 0000000..f0a33ef --- /dev/null +++ b/flutter_embed_unity_6000_android/.metadata @@ -0,0 +1,30 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled. + +version: + revision: f468f3366c26a5092eb964a230ce7892fda8f2f8 + channel: stable + +project_type: plugin + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: f468f3366c26a5092eb964a230ce7892fda8f2f8 + base_revision: f468f3366c26a5092eb964a230ce7892fda8f2f8 + - platform: android + create_revision: f468f3366c26a5092eb964a230ce7892fda8f2f8 + base_revision: f468f3366c26a5092eb964a230ce7892fda8f2f8 + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/flutter_embed_unity_6000_android/CHANGELOG.md b/flutter_embed_unity_6000_android/CHANGELOG.md new file mode 100644 index 0000000..cfddc62 --- /dev/null +++ b/flutter_embed_unity_6000_android/CHANGELOG.md @@ -0,0 +1,3 @@ +## 0.0.1-alpha + +Based on version 1.1.0 of `flutter_embed_unity_2022_3_android`. \ No newline at end of file diff --git a/flutter_embed_unity_6000_android/LICENSE b/flutter_embed_unity_6000_android/LICENSE new file mode 100644 index 0000000..4d43196 --- /dev/null +++ b/flutter_embed_unity_6000_android/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 James Allen + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/flutter_embed_unity_6000_android/README.md b/flutter_embed_unity_6000_android/README.md new file mode 100644 index 0000000..e17aff8 --- /dev/null +++ b/flutter_embed_unity_6000_android/README.md @@ -0,0 +1,21 @@ +# flutter_embed_unity_android + +An Android implementation of [`flutter_embed_unity`][1]. + +## Usage + +### Import the package + +This package has not yet been endorsed. +Besides `flutter_embed_unity`, you should add `flutter_embed_unity_android` as a +dependency: + +```yaml +... +dependencies: + ... + flutter_embed_unity_6000_android: ^0.0.1 + ... +``` + +[1]: https://pub.dev/packages/flutter_embed_unity diff --git a/flutter_embed_unity_6000_android/analysis_options.yaml b/flutter_embed_unity_6000_android/analysis_options.yaml new file mode 100644 index 0000000..a5744c1 --- /dev/null +++ b/flutter_embed_unity_6000_android/analysis_options.yaml @@ -0,0 +1,4 @@ +include: package:flutter_lints/flutter.yaml + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/flutter_embed_unity_6000_android/android/.gitignore b/flutter_embed_unity_6000_android/android/.gitignore new file mode 100644 index 0000000..161bdcd --- /dev/null +++ b/flutter_embed_unity_6000_android/android/.gitignore @@ -0,0 +1,9 @@ +*.iml +.gradle +/local.properties +/.idea/workspace.xml +/.idea/libraries +.DS_Store +/build +/captures +.cxx diff --git a/flutter_embed_unity_6000_android/android/build.gradle b/flutter_embed_unity_6000_android/android/build.gradle new file mode 100644 index 0000000..0d061a7 --- /dev/null +++ b/flutter_embed_unity_6000_android/android/build.gradle @@ -0,0 +1,79 @@ +group 'com.learntoflutter.flutter_embed_unity' +version '1.0-SNAPSHOT' + +buildscript { + ext.kotlin_version = '1.8.20' + repositories { + google() + mavenCentral() + } + + dependencies { + classpath 'com.android.tools.build:gradle:8.0.2' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +allprojects { + repositories { + google() + mavenCentral() + } +} + +apply plugin: 'com.android.library' +apply plugin: 'kotlin-android' +apply plugin: 'org.jetbrains.kotlin.android' + +android { + namespace 'com.learntoflutter.flutter_embed_unity_android' + compileSdkVersion 33 + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = '1.8' + } + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + test.java.srcDirs += 'src/test/kotlin' + } + + defaultConfig { + minSdkVersion 22 + // Add proguard rules for the plugin code, these are needed to prevent + // the plugin breaking (reflection is used when passing messages between + // Flutter and Unity). consumerProguardFiles are combined with the consuming + // app's proguard rules when R8 is run. See + // https://developer.android.com/studio/projects/android-library#Considerations + consumerProguardFiles 'lib-proguard-rules.txt' + } + + dependencies { + testImplementation 'org.jetbrains.kotlin:kotlin-test' + // This is to include the .jar file in the libs folder containing Unity classes required + // to compile the plugin (because for example we extend com.unity3d.player.UnityPlayer) + // The .jar file is taken from the currently supported Unity Editor files: for Unity 2022.3 + // LTS on Windows this can be found at: + // \2022.3.7f1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Development\Classes + // Use compileOnly because we only need this to compile the plugin during development - at + // runtime this dependency will be provided by the user's exported Unity project + compileOnly fileTree(dir: 'libs', include: ['*.jar']) + } + + testOptions { + unitTests.all { + useJUnitPlatform() + + testLogging { + events "passed", "skipped", "failed", "standardOut", "standardError" + outputs.upToDateWhen {false} + showStandardStreams = true + } + } + } +} diff --git a/flutter_embed_unity_6000_android/android/gradle/wrapper/gradle-wrapper.jar b/flutter_embed_unity_6000_android/android/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..41d9927a4d4fb3f96a785543079b8df6723c946b GIT binary patch literal 59821 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 literal 0 HcmV?d00001 diff --git a/flutter_embed_unity_6000_android/android/gradle/wrapper/gradle-wrapper.properties b/flutter_embed_unity_6000_android/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..da1db5f --- /dev/null +++ b/flutter_embed_unity_6000_android/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/flutter_embed_unity_6000_android/android/gradlew b/flutter_embed_unity_6000_android/android/gradlew new file mode 100644 index 0000000..1b6c787 --- /dev/null +++ b/flutter_embed_unity_6000_android/android/gradlew @@ -0,0 +1,234 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/flutter_embed_unity_6000_android/android/gradlew.bat b/flutter_embed_unity_6000_android/android/gradlew.bat new file mode 100644 index 0000000..107acd3 --- /dev/null +++ b/flutter_embed_unity_6000_android/android/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/flutter_embed_unity_6000_android/android/lib-proguard-rules.txt b/flutter_embed_unity_6000_android/android/lib-proguard-rules.txt new file mode 100644 index 0000000..aa9b7b2 --- /dev/null +++ b/flutter_embed_unity_6000_android/android/lib-proguard-rules.txt @@ -0,0 +1,8 @@ +# This file will be combined with the proguard rules used by the main app +# because it is specified in consumerProguardFiles in the library build.gradle + +# We need to tell proguard to keep the Unity classes in the Unity JAR file +# otherwise we get: +# java.lang.ClassNotFoundException: com.unity3d.plugin.UnityAndroidPermissions + +-keep class com.unity3d.plugin.** {*;} \ No newline at end of file diff --git a/flutter_embed_unity_6000_android/android/libs/unity_classes_2022.3.LTS.jar b/flutter_embed_unity_6000_android/android/libs/unity_classes_2022.3.LTS.jar new file mode 100644 index 0000000000000000000000000000000000000000..bd5b3492fea9e0e0ef7c80f14069a17e7df295f5 GIT binary patch literal 133834 zcmb@tRcu{d)+}m_IWesEO`NRFEX^5Z z6r@G|^+smQU}|UV?5wT^4F>+tM@8!E&S>iBpX(gMO~lYTbmR>o*zja|)>Ptu(Bu4w zrDq!wW>AHI_1=kg?aR@x%0~E}^Dw@*;etX2$pJ%LL0miqtRK=7R5|U`4O0y#Pc@Hc z+>cq_6VKVslke}YczT|OBiq7A}+9JHY8yKGQ3deQI(&MQbEjv25t&>ZU|B)Ev?RNt=-nnjW00G(!%|cza`$RBR}@w6 z2fTZ6YyK#vCZ~B16J~pBKhwvz<4~sH0%61*Em-dw%|a|w?6qkrk-)ssgNfjL$JGTH z9;~f(bwM^LYHFXbtHJu)5kZ5LdM_7sHbKNoSNt8L9Vo9lh zd@v4tZDl_o-e7j}X}ogeT4UVFs2zr#N*28ogA!c8fJj%rnGI{#mzIz zy%t?Pci8>+BC3tSWTHl6ka24FrCBMZnP}b$e(d`ypG7i4_PlSChk8Y&-s?{l{XrQ{kpe%%>F*J*TjCrd4z zSDGCO;DG5w|ZC_SH8&GBeFGx0RCjx+dSk1gnMT_;@kG(l;AsbzmYO?A+H zuk~Dy**-K!fiT)VA(z13WFWCnUd|(ShU$(A3G8l4hw=h%#(~m{7|5mk_Pz6b64@iL zixT$n?)9f}jh5Xd4&BrDZK=F~-TuCF%CJ{lDSolV8_}l}v?!>}_+G%>HsS!E7kmMi z)UM`LAp8e%j8{i)prAy>7BmK5FD1GJp$}u2IV!ox=uwgwjXx|%qMvs>ZJ9knn`FNl zwSVx4w%AutP~vGp+y8L!+f;W?mtoiXB_Y7bhwB*~3p(?G@;m7V?G0Jy+IjCgOiR)m z5&_Awk4Wjnj6e}yt_vFUr>dE6Gxg@1;*lboqib495gO8(42PpGKK6s)w^zb|M>X71 z{-5%3XWRkn(wm3qT8v*k*yJvi5EH*+ydlSUvjw2U#;C{y8uTs3^m{vBM8${?Npf=U5nfNTdo6Vl8sUCd}T_OeJWG8il_ z7dMebq;-jGA9OBViekMk{&V*k@dHUo76#Tw=9wP@8VoE24h&4`Ke8>+e`VW$5eNx&w?&`>@g11%&acMNl(EX=ZRQDLP5xu&~`*`Ny*7ngEAgYw-D3v(Q;*F*7EIz z2f9p{lv6X?D(az2I9*3WrJ9lVU&U+O=OdL$OU6gf^MhS`F z^$yLq7q>u#2LM42Fe#?c-*9vq=0Jf^Jg8QoBH*Lkj_%OC85(r@m>zb{o0FfrS7QCe z39WUoMoPDg5zSjxHIf9L#&A_jF2Z0CO=Un8n2yBwn7^7}&&1Uu76 zTh8`%Hn<5YAmLvxz-jtD9;76}wv=RA~LI*DTKOEnNwBkB0~;CM${pdL7^T zoc|dpEf+GrW^!b^V2eKs%vUMEE1spHkus&YGsAviygpT*Gjz^^n*WymNmzfCTfL~D7EaE$b^afFspWy$X+!vdKC>8nr#lH`WY)`@cb5p}Y2My}jLSiB6#?E1qz1A?5>WFvN-lhmxpR z3Nn4sWCxtf3TqOA%4)``l9eaFzH)G#!JF@E#1ZPTw2Ky{aU`^w^Fw;C@~*zN%j2D& zK@(aE2kUddqM4$Si{|aFnE^>&W(GQIvNQBD$gqOc4(#*Pv~~2kN|E1KnNjmldEgXz zELmvq^(g5+#1%tzB4ZN1;)`$^!!=cF`wv=O;fVA>$q16k|gTxCsa&t5l{0> zIsWCLu;d_D$uRC<;`ddZ&g*KsHLaVTftJvwXGA>4F=_Zwla))0Vh&Xs-&z-zK)T1q zboXg9FeTJm3kbw|gc~35PrIijwUIx#tx>B&Ew?v-3Un`IZ_W#DoIyP>Jd(o6Jl<=h zQ$a(s*p$-k*zvq&(P*WV5b84I7#(8o62Qdv9sA8&8inG1yPn9X^#WS`sq}p(%)MLN z;>)$}YYa^0&)PeTSc*dU1sQ6XinJ^vyW^cN3xgULg#SRsq$|*}|F3sMhy4E=GA94V zm;VoBW-;B$Xs6(*{1%F2bXNgzWT-Yi#|V8O7-H=2CGE54E5{QS7Ne2zpL;=h(|v?n zu`C;yVH8&)6s*p_C)S(+2ai7qe}i?1ClYfDezv^!p9B4=cK)n8zjx`n`?AZB49`mS zN5{iM^*6=^;t3Cfb0YZ@z2)J=Mzt><&V;p9xL4D@no^gY$ytedz}s=^j%Qbbu60*0 zH1VR0BXK?QRPxZj$3j--6YY^22j(r}P|>TEda@w5^%iBR&_2?c;iL%OvR+7k58b#H zLinzgW_oq;lm;CcaBt-dO1{A8Qyo~P)P-NSNb|?)SANMcE}7}vy*)pH6KzuA2W}ZL z$9mGmR}V7xo>YS2iGvyol1|wodK1)WP}-6vpjNbqmlx3ot;ss8;OT#%yoMRq&%ARc z6sVzf`Le3;J6^$_dh+#|f_nS|+v^Q5b6B*(G2s?_x^JmZEj_xGI=Jx=7;hbG_lRP> z5r*={;xbj-u3k`^him-k?x-T3?Y+v?HuGY8w($Fy<%OM0gNs-fYHc=JJX@>YYQ3ZvN1=29MM{#;h{~-`BYo2D%1P{-mIK5B7f9hQMpQ z^k5ebVQI8JK+P7;p5V)Ks;L$7GsSHDg!l(u(@YF2*MH$f^Ize`{(sL%{|2sXHGfq! zO?3WPL)nG-a%hx>d|e&R?Lm<|nefJyQYl1}fSoCS9>(@qGvoTq3xE}G_KWL_yCsv` ziJYL2pxSCZ9Js2DrK4rS<3pGCWb5Nv`{m?szfZ_N_Iy~SzddTZo)WcFCUW5QoQGZ9 z#;9lEY+WZ)!?C{1HcqKGNRDW-Xz=|S@mMLNv1A0ynK)ZZzSL&06!ga&D)c@cH&y4S zU9*i%j!n>w$q!DPbv)k^1^vX?J0L2Hvs&KIfiV$BM<&C;|=!LtGT=hd^ z@V-bma)-RsRP<-gOG#_?NRBYC&L~7-zl7auGv=WC$92m;A;$tMfYo zq~*+|*eiSgAi;ajNcYmw$}2-l{NfBYbbtz=d!_mLKJbS!ZIL+?I$)F%)g#yExxfi} zLQSm>m1+NvF>RIh^2{pbkJj~p{Fuk9^gmJef;sE;S&YT-8zKToouqNnYHGI->2b`W z9}1_Tn?{zk_N>ys|8zFQy{g^x)q)_3o~pK$uS3grzFmcZ)~65<`2fvEAt3~|4XAMf zHgjnE0&m^Q_jfB(SHY}Dpvs2jB_sNy@=*Q8h)S9q6M4(WpVz8X!Sw41^v9gobDCQr zBDWGf37Y1-`bGSoB=HHwqJ+ zu(O>E*v)u}o{=>Qa=;|@ZZ#OU|J?(#%gFqJ`{G8;neGkkd_zu=G4v5}hcdK1Vm#+6 z0aqp33Mq$gbif{E|7A(u=cQxU_cYA(DUS3OFU4tB-e&{Y>J8-)dtCIRp!J-?1kI46 z)+g=;%U_sK8G52N5GAQ)weVE??rmIi$Esnv#Y@Zs?wwwQUmTBeSCd|1=Y zVS(Zb1jIF@wO|nbuUkkQyT;&??bhpW|CDibQ-hK2-xB8h^50Z~6$?)TAI)(p`F!vvh{Eyo%i+hG4>}I$8|!UualF~->$9I znXJ&(UR$AeL|0+S<`sO=j|!o33S%!;jHm?_ildc=OMV-_OhHy#7wJ1yd~?3j&*dX1 z@aZ-Z6?Dazdy}%3S`8%y>-85NhykU1s3t6s0g)ZUI@O(iY;&+v>{;w!$NEL*wL0%s zCqF|gWxhCos5_2(PagoI=k*Z!lIPeEpo_Ts*#Sd9?a7b)1rf9}?u0GHJVu@ONIH$I zOtvPVP*UE4IBZA$NFBW@#mc0hL0mDbUCt@nFwXQglG^1rUK8JGeI<^BvnEd*KFoGu zL}wt+N><0r5~GdQn^xdE7mrxB5L578Rqc&9J6{3CalGRD>4uBY@-r|T1~D-R`^)$E zILbRq!?tbaUOA3O&GOSo(^pg?as)*=z5$ZnKCr+5a*#6W$~4c-DFHot?}<^Z-(f`u zmfM{`tcR>}Ae|FMN^MV#&o~jJCy$r6k?Jhfz@z35dDpVf(-F&ReGQ*$TMtaECWTA0 z)CQax3~KQPJjWuF*4pM7IFWr>2gM@`sY~ml+ zw>P)ff2+PLFVCxZOVopo<@io@BYF%!KchT#Bd(jVP^`O&3VeH#FxpY#GeD7fQi-k9 zJ|f2VBl-@{i9X_vho=*f5+cyE_h_tL1KTiQD2)B9bJUS^m*JWx$t%XOEk*r=O!&wv z{)R_KHo3*PFJm27kQ>C;^OU-SNiq*V^VP}m(jB=}^a zO|EjPkTtZhL#jBi{tK=rPYZ^ojPmRjgqhR8oW4-ivw!TOmb&!JP>ZkzT;JY6^aGH1 z>XG1AmefJ+$AXm6W%)DAKx4b`t1gqO=@~kEx=-ovsK^s3HiV@MXcl{uzFsN@P0XRs z5Ej=6##^MJ3w1h}RVcr-MzyRKu64_IHT5Xb1=;IE@Sy36zfc+Z^VI3mEkbpn=0)!V zVEiY)p!IXu=$B&jD2bl9<@OztZR|fmf0UtpHG9`X0gC<#>1a+(PVgc|ACM9q+Ki{r zj*#o|=ji0K$c0Hl-BxFCHG8mNH0R{zcrxz#OmyEp+U0lbn6bOq3SH!yvD?__p0>xY z=;#}^M--HN$(s|tbOM-TXN__*I-X$+!17}I2W)F{Nj|~6Gcv0W1B&4$xlf6By~5~) zwD$QBT8l$$Vw$lwgBY0YcOHF;p53pVfEHMqmzM#TCfn?o>6_#Bbmry&w1+EqVCe3r z)NZ?)bLnmUAFIxx`X_wcW$O?Bf0g9oNCU-RC5ibvjQP)l7`FdwCHXf$n5-G@jkbvL zSxN3`?>SCP_Xj*QmnWPqZr^bUof6#+Esk_`?u#CVjwOBNe*a8WU3=XwYD`nZv2bhy zG5sB^{I^*s+^m&AC>a&2#FPz7uTA?E!Mx{}`RqrHx_up?Uy461+&4Nro!=}Dj$ix@ zTOe}bKL6SXpBC>~VZ-0}cq$Do4)u&2Te_!_$7Kx}N%ZQAfzfzNxI zhN_#BIT+c)gvj?nfUEbXh|{5NnXy1z_ytWwXptCge|pjhMY)_Gt#;anf+?C&r17WZ z*@RnwS2dl}ds``cw1bsZIC~pPDjK%bSJ#JXokP%I+h&j!>$v(#kr#}pu9~Fq{L(3a zNRha~RKXYV6gW1BJ5g_J5lCQF`ZF>_XK7iP(2-;_jt$D!ZrY_K;f&H_ttZbvwJvtm zH|xSFI;X_}@R~(3*&isJYsm4Z8((2LwtrHDE-L@Rq(rw}+$t>_*xOSOmq*lr!2f8g zff77f(+c|mMYy5%m2v?!3Zc+@zJ;ACZvztnj;d30Ud=Z0$Lia8zo>R|D(xoi_V-`z z1?YINoc(&Vq6NW4S_3ibWX9a(%d-|(OP0o?8gR|V(5Cj=zYbIviH(cKZK(g4Y#)=X zI9;f;=ZY5BdzSnLtgNL~p=|t8;=#zEU!dFeJ99MUbwjn0l1)Qku{^wJTC|eo{cfa7 z0#&ucLc#;bSXh;ukx~VWu86eCGPocUirdlmsKC=dqBz#gU@+mtK+lek71P3-f^K+m z0LrvjX~8GQ5qnRc4t(#B|5L6D8%flXT!bzQNTk>PlVE+`hGR2qbxr1MC%B;;JN zS3(RsFIjH#3sl_G2Gf zi1AFJaOd5l0YdT${3MnR&=I?^CbR~yKoto7)?SM}Shj0116)?|VmWRAXvuWw;xM5* z*JOH7Al2>g$5Y-EJf&qKezg3!|L|&Q?Lp!cpw7c|XIWI7vSOiMt|9Y@xaZ>( zkoP2e(!}WTFBwxB%NV2fDb5NOpfyU*BU`#-J&5YjXZ<>MyECPCreyJWcwLC6&Sg(& z!{bO-N0CY5`U=2(DY+8Id|{mCYfH}!tCng(aIZ)HiK0|jt=~5r1rpCH;+B=fDvX$n zcqR8inyiC!-dHX}dOl~dTB7Jb$Ye1cI+T3N)R?CjM-atPvZ@=nt=$iu?HnMqAi+C8N~(!Yq6OgU zFv6Fzv6u~iPksp@N!&0GF<;1@W?K;TNa+f%_*GM-j0}rKt-h;#Gd5lpmU=Ffn7e&tK#6I?jKl)8M+WZIJA zwR7ND6n3TyC|+9Cph*y4b>_^1WG6MrL4Q=-LYHr1r^_m1y0Y+Yd-<218}`J+ET8!; zUG|1;j7@D-0Jw~5$**IILAmze&Fx3It8Y+4P?NdRXyKpaR-}oE<;9LbIR856Pr7Yr zJ(E9AwA`~Jukz-x;?51C3YQjexy%F$rNJJXrsB%eWodKMs_%E2;0@tbtWa!8y}bYi z7uxF@Z-f#T?QIwG67pY!&NAz1sy2yPGvbk|Cj?^acVhh_I-e64Tz48GbIlZy>;Z64 z;aQ;64cxP4&@6JcsUy!sLedZasp_x<|J|6%IY(H)shxNas>&EZ{xB%O%H=ugx}ykQmvTBoJk7<;Y`Pv>vOY{9m$7a6nZ;*bAvQ}q@V7@rHdZ{Ys5xeF zN!cZdgg4~$d$$l%jSVUcC2+`@Eb_4{m~>iblWgOWPk@RDcX)?15jJ5vRz6M)Bej%7 zx5^+e6RIEp!NUht(G2JWp(wZItnIVC;<2?7iN1x)wgq0-iSh_sk@+1Z02&0w9KmJn z-{I%%&wcH+;VPCIBknmyFY|*!@p?x0S`JG5t!!3ydr0yQZ(f^p1e^Y}AGRwnn3BP+ znIqzABtPCp*X0FYWJ<-aL4xlLYpPmZ8D&s))N*#=!p1`o%}^Z~4nX{M-BxU_3Dc?I zWjN{|&U@imrO4YAnM2VY!yRJEpyJFggd)(ABJ%O})Ud9r#3AlMl6lN4@yWMM?MYBY zt(HG`5bhz-$K9l&&MK~Lo?nw*SQyOCs{psEcWUlKdT53u&B{ejafROoMUATk1ZOnA zt_1oGVqV$*nhXb!3-bg(Adge-d27FU1Qs1(LA7iEbqs{!3_+UCDVq6a5sP5ZkLtze znzJyPPQhr5e{a&E<1X_pVM-E6MY+Kma5Nvzmw=t**PgwFex6kpNU3~bSI9$E6bxl4 z6H>3AbzY9-k!`RzEkS9BD+sJJ8b3vZg3G2<#x#PxZ&NUVG)~O?f+-TWh36Yi_p7Giqm51lcb4Tz2`22wc|+&&5g-l^W> zASp+$A4J2YAwgLJfs)+(AD|CP1~L#j>nWt3Nl(uwMe5c?qklzRz--Joy(M}SH7LxU{>zOy2M#5X z{#}Vhq5L;DhWo$Wm@B~A#go;H@t+3%Zy-VV-#nMEn!YNYI<}tzTANv>O70ZRR79-} zELa8e46ahz8Fs)Z)2M^aMR^X zZk!qFyuAl?4Gl`8HFdf|Wb+o6osn7dAcb-U&b`T08=!@mevYt6>c5hfGomoAH}2u( z#&a#oh~0|}J%!tJOsIgTv%VABGoOMkhW+CHEU-ui&}_J$shaYI=0{{*iFj=0p2(1dwhGJ=H$+rM>;rxQKD*`+CnODVBUW%lBOv-t*oH76W^Jil zaRixog_JuR!65PiqfF%bVHuba-SKG{sx{@;XE}ntcNLiENnl^5-14`s!FC;*=Z9mf zbqq4i5c4ucM_e`XGE|2%u|r?7Mol01&T?c0+0U}drf6~SOXDoXd$Vk^XXX+Rl9cU0 z%Ef)@OK`t4T3R>{ROnGL<{yUPw&o0PXc&znp&a7CpDmVS1C^4G%rT@y?$QWEC|AxF zs;Q?XmlLvu|A+<3b8Pd7Mv+uOY2p7IT1Och4r|q;8Vrn}0}R2q+SQ*?&hv4fMH5oEc@~h?qpRX%1qM9oFa6sfrGV_p|>b>5zdhpY@mAR zpA19l2Aey=PaEvp&$Kazv+TG<^|HKN^P7yZ96}B}XTe$dpWJt7HnWRV+7f#Td^tV4ttk=sq%o4LHP8~#NZ*f!fYu}_J5-@E!enEiv@GqLSHYDRN%Y_D=up*Yf`BjEE^o2FMxtLch;y~&DS^(75T zYnSHvbBq~ZoJ@q0Q!Qyv`Fgw?XOwqd>ntWs5(ewihiQ{(QJNchP~0m{>EeQICf@v% zL3O5k0g*@m(yt}wg3LD4`{b7RfJQ>zs?8hqwM3X6=Ojc#GT6k_9T_bd53GgZ=b{Eu zNYdbRa0q?KF9A@-7gj>r?6AZ7sonfNPS;`l5Sy-atB)kd;u@-hr=`j^D5(7^v_Z^f zvr;BLHQ6joW!&j(PH7`VAujN}X~cAx-(ZlY?5(EJ4_tcrB40LsXJ--^DDwnw?`(f# ztnidYWP7gK8mdQr^2467cngB_;{zk5&B92_i}!hkMspa-CP<~VWlXE$Gv?6t8|Z<= z66W5kEk(1xUd^zS-bthX$#3$2Gup?$>9U3JPfH%)ye}N^cSpnUcT)DBTk`)P0wVu* zqrPgosZoSBr$wP!FxhM_A}BmCWG;xd5Ujf zhFQ}*yFt74pF>!K{M#fpjoH!@+^^>s&6^j)&4fRHgSCLfK{FQ@1;d&rAmgsBm?DL; zgW?Pg`DU#;1PP<|38m>qu59m)KS)0lnH`=)Epjp$-<+m3OE{tfCuhq!J;T=Mu;8I8 z949ILd9d-m<9sJ1xEYUUzIR28+D0Uw8jT@P8>H)0V=7;pEg=`f=0O^~(OaEyx3i6e zdHH1yQ}Jd_l$Y1F`s;5p0tb;m_I?ZpG=RrJuwl}YKOag*K*6q0xuuXh8TL3zl&F_D z9qfUY&ow+%@Q$?7F{{iR@_GxweaErP6sAsy4YL$hND;xS1eZ41fMIUqqhT z6djR=g=i@|37vCpXKt1y?2XUtqGY|Y`Ec*+qz^GOK4rie0u_=M9^7FYVZkESV5Tv^ zeK#;2bc@KcT&GZm|4TzwZvfiZDj2sLZtD^drtnMI2QJmDA)h`5T#w?T>bB2~&fRi? zee^>vN6RUaxI6?uQ3`I2Nc2(g9xWM>U75UBY#7rg2g@_gy%Jj@X8NgDz6S#Yg)*xC z{sYT-tzwCST0lv%Y8PH`ZRwy`iYKN57-bx2e8u@J^5qrkPAPlevD1!g0P~SdjwS2v z_CjG|eN8i#%jP$y_E6F=#iF?!G1{Q(nvs=jHoksA4TdBQyVbItQ*>VShMfTBYO*82 z*FJ*0X?@Vfrz!aulZ$7^o>w=@V8I-V1&}w!JFVdR_*7AmjT5*pcuMq4d98A;?-}@G z5cJ}=BVLrEfLvoKvOaa#$6W1HYd%b?`Ec0xW3qdfD^i6b!MuI`zSwYZZZLjcuyNX% z?>Z`kjwjYg+0(ca5}VZF^ZaaKk9XhaT#$Sn@(OKQmR5ehK45X72CBl7Pi=&3*WcL* z70REKAR#RaSHT7MM&8QEJO|(5xr8GV<~GMHIG)p1l~B!%Q(ngQ8*NU@ny>eq2VujX zLv7B!R?W)9n#?o#Yc2VDKeOFlOlvGvR5*4D5L>(!Ik*Uf!|b{>&e8-2@2rXGR`V6453{nI&lSv5!CX5A zdmqoR&zkeZIKR6^m+$8d#vfHav!kCmfXc4h6+S*xnwy1=nq7KNZD`Qcxf3B%d6nvI!TLVbpU(kcKo%L3?mwZP=O0reyb7Wf$RISh&=6o>ID z^ubsTb=Cw5X~W?3#gsV-s`!-}%0;UcDki20C4hWB9^$iQ!khmv>z1aDf3@jqp^7V> zcoJ|lAZT?i_>=MX=jdj(oKq@svqEf-(hA32Pqn9iXtQZV$p);w0maIc;847?$R9mU z+o(8NHrX_ayYJZ}H3MPwEssxVYm+V4;LAioEuMLBQi%n=fbQ|1#unG4Yn{$xx`$dd z8?lX#*7QH#|D1{61ObT;{{;sP>iFKSzw8_RU)h)P|17Yge?vP?#w?nD(>jj-LtLXZ zPXGFG^iO?*QPaE*6?xAFc?8gv7L_`34My#Bk{VUOf{?EsM`}&Y*?@2E(USilqYqUK z5&`e7WY#sK6Hkm6pbkzg(aMd&-Ff2jZQ?YC_4$1Ar$0CoWF+z9-SNtqd%S(sB?2v4 zdgKvrd~Fzja1Sxj8)P3%xP&9@B$*c29+=d=MzH7}(slU)126-GW>#TGa@CXX#W-X@ z@uJ7bK9Hs5q-C}6vtOJf&cdFUkST8u#cL0?>z*dPKY=;{9~IB+Ux23`71%ZTd?iG}4jAbfCub!srxnSzywIE+}FY zb>jyoRYjDCzBEasjW5;C*Wm@INqlBHvBb|YzmHET)bQXaW<4{x=ZUY2{X8KTyyPcJ z&^GDHE!aCmLFJiEw1KeddbBiEta>96DqFHm4xS+SuRj z*$!qg`Jz3j;&8j)K08y|*t~Py+wggSm~&X6SmlaW6k1@g3T~0ZH$7-{N-CzADzaP0 zpc(Z>VqCTy8pPnKjtIcrOj#iwN4rry;9~1r)R{W=OkXw%0oV=wtO#+3zEq`j-2@KZ z<|{k~t2r^q1hWO`NDEZ&K+-iDp%ALX<|kW(f*iWIP=Gl1l8CJAsJ}4U=uAYM)+}2z z02}$2%WBS>`i)4Vvd^tq=N=@Y1Y@NhN@r7)YBZW2)uQJ8yVoS=qTxEGM|m6Q2XwBr zh1*9`+{JYEx%#5+jqKdmbvSr4DIgj(l>Dt(jlz8rt9WOYD0*C?#oZXqVoPm|pIFI; zaV&%H2(#=OYEu?A&iuUYfQAYYbXQ)Qs$9hhqTv^2qRodR62|EPb1Oy9hAzUZHJ(il zXekBn@H`yXyD6D`eM8Dr^lajU=7OLu`4@JnAs(J~(__k#Ba_K#)))Ldz70NNYOUrq zoe)<1EOhbhLToZ23w+0ru<+?+RM|ryd#qGIApY8)aj+TLl3=z$KanG7i5N&R!~!g- z6L_-VBX96ZsPsNHjG5RB%^kWdt$(E4ImAb`;)j56o3wR4Va>-rvZW;_uANhu6bfgg@j8*c6fds<$ET zA^6mr`}7Rn9X;kuIUYJ<23wkg0Too=k~Mm$+VEjjlOf3^EqFLO=FwJ4;lE}2n>m!T z8?$2IW|ZVAS1dA2R7fn~y|F_NC>26a%su9N_PSE&jHw^3=}0l{flMgy>EF6;mk4NZ zw6#8e{;oG-W)hw+K2ebd%_Yx$4_HJDztIjQX7u4i&qjp-|F^QPI@- zIsh0{U~7sa7tEif<|bwI$$g6H)cR&Z-wDp_C)Wm=WBlhv(nP=23I7$Fs=w#|+Ukq{ z+l@qPA^527V|@N3JC}E0jBA3Tvqzy3$!tOwN1-lNiqKFAObW%S@W@m&JLW9PM42!_BGBI@)>M}iEnCuv`yR@X)!)eTbVjgew7Pv+Uz62RD(rgKqFD*xkd_}!(PzrP%NsVp#-ZE^ecj0diQQFmRE9=EawBgOv}Rr6JGlnZHp) z_E)Gz8AzfU#;l(9>ApPTno3xXg?)2>uvD3Ta@4#8d?XP7)}^hoJj)icaWQk1#mO_+ z=8ORtd|awQgtvPD<~*CFv9pK)((w1-XZp%+>t|;uecXv2)LLK@$SaGOH5KJ#q?E>r zd`uyI(R|#+BGKBcjyiG6`q+NGG7ssT2I7clY)5?2(gQ7MIVzo^A=$8HG7PWR!bW-u zThWYFH#&(q!@`oMR^%*8RLdneKExi;Qe>1}D=3D$7M5Bn&Lbo6Eor_*IIFv<+!9UlH{J-O#+;bN>Jn(zem$*n5OcG{~Bj zokD?uA+*i}Bj(-qng^r0`}Ev|*8Rg}9IPGMqaZ@3BYf)4e^KcQv)C7;LFH#n$86Py z-;9vgQ6onci9|;&IPJDm>5&Bm^iHbrQ%m*lvT%2z*z7}1zLivz9{DF!$sdU3A55g(QJIupLL zsqWA#<8)vJ>u#MDU%@u%#L_vSmqEZ#fe9K3$(`%eXAKEI7>_~OS%1D_OSOaaTDqyt zmv312J*vQ~WYrum({E$dD>J_~ifs2bxZW~>0WRZudrZpUzBHme_^Z0XD9-K@z1`nr z*Q}3swfk;biwUsPdFK2)%28=dig;I^zB?Tkb+r!*7@O9j`8D3>$7y7Zonk^=)3Zje zZ;Rm_Ar%S8ng%|`xdOSKvt(NqyLv$MsSd5r53tpfpoR2}SJ}l*oY0hWcq1|8Uq4dZd+q)_Os$1@FMkp+nXq!B}6$uJe)*2WJ*q~LUh&}*^j3? z|LPa`b7bHrIg|{SO(u2ajaE#t3~umGXAz09qbpd=9>%`-!z)=gGW`=NSsW*--B7XP z#iwYGn~tgTdMD3~fC~)}F-$;rpJcu>)d#r08grN+cVj1OM$A_U(<~Ase-uQ-ooakl z(=cNFU_*=T6dWQdd*g9Ol(ZLCi3s-x#n6S%{a_E76|`6@kLmc%zImMp5CqvLX^j`^ zr}=Hrff9+i!mZ_YRH5l*qI+tXVrDK`7Mjdg>o38fYfdwK4DJ|BO*LB!N$Coa9J6Gr zrO{%u($o{@;dUN{mQk_Q));mrMU2LmvcdY5?UAshYUN6evryIUZc_DJh=tR3(dAP6 z3_pCtVPv$)sMRV|2r^(Tv%j#R-;8QEiWYgY86NO6Vp-h78&8EvAY}o|3nY448QsBB z>>sW3;0d$KcDOSpQ7mfgM_H_u>WPlId1No#hSry}0NN62eVWlaEzY||y3oJm#m5zg zdEgsa$$>;o>BnLm7%3AiPgau^&Ko=>YHe&f3fVNSQ}6=psIMI^45@l62at@}lmM>T z&W3WT9dmo?h8557qv#qs9`td7)e@%Z<0!{=QQK14A_VKotSI~5+oM2f^~t9>{~zFnGcUZf_ef?HLWiY$F)q}pPZ$ewZM*LGID z?}P6Jv=s5hGaiDzdAx+b8&hvIcwT+dkR?-k=ASM*%Bp0)70-;WJqj9^BGtuiu_ffE zON&6_>?)E!vYM=SX&F&kZDhY%VI6rTypMEZD&HiDLc7+xm6w=Nfm4glM2ReJxV3b$ zAbhy`m$w;Yham}5lyC*LxE*zC#`E3#XtSB9`l6Ur=@B+k{8;6PNI1X7TycZ8n9FO# z=HvA*9ietiJ7%@&nN!De*R9jM~3In zAFu4GZ-PdjH`{iP4)+h$in#u4Kd5?x*w^ePccv{N+cv&i?b@zFVa_nq?KrT0Ud{KY z=o7+zx#RF9+FFds>o+xiWH$gH&8?%g%=K6x5O+?B{2q1h z>8XN8Xt%9S7zH!DkQg0Ln=O9D)Lv5crZM?Y+9+yvRzAA40X6U{!Tz0R0+$PM0xiqgSpkghSKSSGP6W?RCtJ->0Qw zKk9t=(OeRE4dnwQg@w9vd!Dwwof+~Py``ieOips?sq;M~Y|aiaJ8D1WR?qa%pJM_l zH0gXA9!xO>fUxR~p^F3(=I2PKZy2Gu3w}yWflw`P~pC zGJNLUb8na)o*G`&e4|UsHVVEC4W7e!+A!oPiI2l;mdfAaiF;NpYsY7 zyUgssqgpq6u~R*`I!FaeVri zMd`0vfGBv=d2v%N_1GIz_I@v_g3$E)CaeK;A09y+ZuSW3adXH0jxW*Ixg)mNbUYKk z6D|g`U2ZS<-ejQYV2@NCUE1mSx|eKj9g%A<7G&sVYepFCBEGz`8jqc5xUKWduE=-FH z$d;Ou2!XsBaitUzwJ+xOVu{@9D6YUZ=@}j}0!|#enm^JJBeFq4kTG+Oe(dO-HrqNh z08ztalsLP_5qUt>e4W&O-78vpwT5GrnVZ2|(!+vRg~fdNJ3&5H1ecUDtShUMl1cJo zr$;nVtwdJ5K3*J+%{}4Zm|+nr+gQ1CG#@%a*(M`6R#vfD9aG-v>z6bZN~>Cj7;#yy zciVL&O!|FvAlJPsCVf2>Q+T03O;MicHy5s^)hC;2Zr6son2G8F1Ui%PNPF8ZG-&58 zn=VH$`nF)v#vFQforVBbw(w;yqd+gZ6Z)Q^c)f&^qnovbiTYUV+%oKo*gu1oFeUFC zk!g>F^gl`=Bk3}`h606hHgIvP=NH#w%7q|P@6l%Q{Q^9N?DlE-a#o$B zNc1IrG4+92FZ3(y>W6H(FofH;zhbItt*$K88VFDd(=+LD(+fMjj3%M_>0}m^BdWch zY?a&oAk>>t-g;6N22BF;-#H{b)0ix7!PQ;`|LL>B47KC2kifviaQ|DMh5vsZ>Ph^M zRJ?2azf$p_P2=YE^EMHBE!{uW7>yw*{d0X^!mL&7$u#8cL`3c^+Om6kT$-1c6Oc)N zOOwTm6E$EG5;QoV)W~)73%I1IC6$W#T1HmfS{R?oIY9r3$JW6^ZzJlGU%O zN&!DL%?+L2XRAPFbn73yaBokg%#MQzgyBQybU;Yl-a7%oy{f(Ls#m_WC`2>t1BM+W zY{V$mq&BQkd!^P%B|mph-#nGh2Af^@Gkh00yc!&q97IUrcD3?#f7-6&O9V!W2V8i} zn>6zwzzf+!54qLf9 zNC99zA~2LebGO?wBDdvEvYkz2UD6dM%5U0}ffLWK4v8=frUC53jm~H)HjYSR#r;%d z5XXt$!LJH54$mjimRNX+N@q-a4S%B~v!u~xH@7I0B(y=}4MhR}RJx9+Lll1coD{#dt3?N?3zc$aKYyujN(Ce3r>R|ji-QkY|# ze6_`A`|+<8s~2<6*~;IByy?GAfd9joMB?9@a`n@HeuVm5=UXCU2(*gAy+Wx3fqjV- z-!oQ6mPfMc&yTbRF6;Hk)cySpO6a7Z(*C%&iI6vlm4LufM{qTME6G}LCH+HOp@fv5 zb30GO%AMlTV)8lr@O{1Bzw_z*8<^x3zv#uoIf6YW328aUM6_BVe}1$CE@?*k_%Y7> zw0r@zZ86s{ea?3IxHNb1iu?-p;=sAjLQF$!IZh_0#IGjuJu87k;w7kNyE;nY(e8tw z&~NO^I?l3tDc_=u5un2kk=D~~r2Cz5TqAU^4d4JE`SSQWIev_vQ_p5TahPxhph{bu zGgWdaL^<=N6g|8t;S-b>@}m;wzkOht7E#j%{UKYr<$!b zEd+)jmmyf=Ovn0cVxfUZaO@u2GzRfh6p2cva#Pr3aOtJ~ns~k(N|sXVjcN;S0u0a2 zVujM{D4W7v$e1ELYo}(IcrZ6p#@+)HMv#5zQ9jb@9E$f?C?~cLwQRPUB+FVTB%<)pX?qE2gwSN2tEeAxGM(>VQVEQU4cb@7S2>)@+S-(n&hF zW81dTNjkP|+qQAXw#|<1q+@h!vtyf`lU~o+?}xSbTIW6c!}SO18go?5s!?OY@&-}^ zSkniTLsHVUMx(dI8m!#I`lmb^ef{8rclFbSlmuhw9=Yd-!ql+VC$#CcYdZ=|cd9{$ zbp}GWaL3axx%i-*QbF?Dq*Y7EOUA@tlA{AWFl#7n#QV0w(A3>vcZt3O`uvs4=+~Lr z1~F%k)x8q*TF}jgVd&y3!(uSYl|O)1&X;}LZ724V|3PWeOI0u0Q&~DMaElHD+rZc7?;xYvxEQPwg+oZ zeRT-eiw^P)Tv~kga64KeXF#di*o6K_WHd98Q9GSZcbea2R=8O0GZ@x|q9b}Ra{6zm zzAY8@aVbryci6WzmuEMZpsp+e;yUok`5jOG_woUTKsPfQ)Q9q&b22Mdw&`csPUk*J zq+G^gmO-rj8e=p~m?cDNJyVdEc-9xod{}TCC4;_tvuuB%@V*$R$xGTwotgs{9?T5^ z%aJ@7CwNNkb}Y|;ea}no;?6VK(`d>YGu6aB9Io|x4mtyb+-*t^(`htC6am!OQyQCt zHfWA&oC39rCJz%eio@2BaM6l#I&ST+)(!3@NloFoAu1z~?!K>3KC<605UJKGd9THf z;HfHqV>Up%WxvD*`doO|4N~U4pr-ivPtHC;>bROtp?5I{cIJi0F1D;Hi}vz3Z->OD zfb+|q2`T{#V;@$uJ&uUr!)M+B($a|*k09kielwNca^(q$`71euLy%Xz8No=%!NHb1 zvi8d2gNZc#@n2hiT*EJOs z*FL`zdp)=u)XQJHNrI0c$}n?IWYgP*7ohijlD?QcJus(Ety=Fr189c@=kx*?#E3_1 zbg`ca4L)k3xt?Y-DI~&DEfl|2ITW`DP(*L}t&sL0KI=Tu1?LskFYu zIcUe8pN;CcdCG*ODs4k zRn*_{CdKwn+Y24Shm;*SM^c0GjqI!Iag{Nbuiv_(5h(ky(cX0;@F{K?djz5Twq!&9 zBRxXF^aknuFf}^)`2M+BP4Pb$QKEmD8}KU#ez+O%+nN6@Ks+&%AHxKM!IJH2KWNcv z9)FPVA3_0xL3Wo02EG2CM-u{hRv9iSU{M_j*nrAz*whk)vWTE)1U{5M2TPbHP&;;v+BZ*uy z_I9|5X*w8d9l|U34XW>VuCMnzj0MA9wXz=I8k|VdsSRJG7qeBA95=q4iQ0Eiw?duAYTaoR7HZ@EdjIXQ>!OpL z+4uL`Ba|L|HDtociR??t1fLr*=JSOAF1XC>)lawlhR`G^O~YNu2~h<}eNyz0-lmSc zTM-worU`z6h9qh76<cDey(ZQ?k~*Hr)!k>N>pY?lkfnHTt>OATzq=!s&N~j<<&UspK{y4WO1a-Z~j#YkvZlq^T#O_Tv~w$n(cc0`&Uf0&5&4l24Kj2XOuVpI9|9l+9MC25m^qrg?Nf`eIj$lP;MdS|& zprApQ8bJUNC=pHRHZ=?c2ox1atrTVtkr}E^slF>Hb;f!Nb6z3M6MiPQ#~^6M^%ndk z{?U&*b|HA5{>qiJqea`c1LsMfr{71+ewce0R3RZJ^|rUxHs?@_GY3xfg)v9Ps#QyH zs!a#cDLj%0=P;snloTyvzgk+UfAXl)N_toI<5CVf`QDS)D>>ujpTX$P_<%AUh275W zwXl#gJ+ES52;!qMlvh>4F(u2}Kl)!r4aH=mp{go#vS12_>ie}PUo0oF6r0e`WLhthPpFcfcNFbYgV+%_EMo4jBI`5Z8`lMP^cd8Gqr}w|yQhuheyR zZgkV<4%^w1%m@Em%Cic1gJp%kssQ=``lms&*b-R);5q>IVdBoyV4$WL_%MSzn)F@D zL^>L=YNM5HaJ!f2W1i?2K~$3qS?#?i!3l(c8g7!iB&3V zv9k{$N#JA0+61!X`bVk>12)11QjJodrdUjCb1yZv*D7ImrCz&1qs9iB5AO7J74<7= zh$JNmVzTz^6^XO8aH)1o(11!{#-X_IH@#Fc_!=Xo7K8?ieD<&iz2TX1N@Q{&7yF7gi&@O7kWIpCyjf!M!=*JEubwSRn{2&3Nb7=(JVk_T zUcq8CABTV=VwNv*djQ9w#^;;cDB@exO7G1ne@}k*0MAmbbSuaQDDx6!j00Ji#wzDL z7eP z3#zwrrASn$|DJ$Xhc6qt zL2#NP-^j14F5PEvi@0s92LagaFN|ccXR4E@9T_Q-!+0MQrV~5k@#9ui5zKrA8O)Ld zVX}l_bqp)#&;NDnR-6z1U_8oyWxPKYjeqQv{5r;t%|LT;6n$sj*y&E z9NZ0E!!S|2$z)aSnllUH9>b}&vf9v_dSHK(R~iagT(WU9+LIB z#9xL#UXvDU^ry#C6d$=6;sBxERWV#e61 ztevXA)+B!98$!hIy`OTuY}U1W@EIA7|jd2X%sgb>rEZVfz=pBY+PoQ{wJKe=pagG~K$v*y z*^j_1)OoaqTlSLriDa@vag!KT)s8aU@latpV1X>?Dmt94VQjsfYJ!-|bx~QX^w6f% zOhgo!sHJQte=Ybbd#=o3acFAz7dY{uX^WGH4tStbhV=Hq1CK7sP47Ch^G@D}9f$T- z$3^=6zLDyyEoILXbHbC?^{rh+{4sjh_LsBhfNA_V7CV@dt4}l^g>Og3#VMnJ{JF=SSu{e_EZ)Lv|o0?oAEl(lW^N9P!$;9qE_%0CRMa2dnMqBQv z2gP&;zkK0Cs7%XO$#<5c5vijrO1jd=Oh8RxIG@wvNF>-6l9*i>J|g|tl9t5XMV9ag zReG0{vaJ2dXfozjgH(JP!nC}`ETl?QJL%gy3L@MVrg_`V*KQp?9{}t=OsJty;}AXS z@>7vsR281f<`TLF$9sn)eFbb!-F#~0ma@~ybCy8zY6mI^Qt)vK47D|`**fVYY>ld= z>=iaZlZG5V;aOACI)T>PAux1nmnj`k8+e4=Pk#a*#~NX9!eDhuVyUfCLceO`!GL5@u>oEjmq)qfP;@kXgAC2Q4I4*CqwpwKqn0zFnQ1uzzxN>yzW?IA0bADAhdPIHIJcwMKZP`${GP~dte>Ho9ZG%vO6t&VpbqvOda=Nb ziG;j_%(MhKn=whLE9eJC8>PQat+ekq^{FwmP4ucRs=Tl~!xYt48~gTB+dbFdZAmk@ z!D_MC0G=@<4NMGEjA6U>EiMy&cAQo8rs@*Q3t6A=S9jos6apisCYm%;mjQ;tMPaB7 zBTLzIB_v+1q6kbIk(pp2Dxni|{~W>jFQt7Ay#-h4cC~|}HmM!AXJ~KD-lVCaDfhl? z`%H&%?w%BM)M3M21$xBf$#FM zK_ueN!qbI8=fRG|7f{V~<}#fFzpq9WwsN=bLXib%s+1aPAxjx)OY~-o7=Z zsFl{rCxpzf)XYh#=M?)!rEK1G2%j`LZ$DY)CzgN|ZwiHSVYi5~v%0=Tz$I@;>p3mq z-fHD5+v0)@Yn-FN8x9?E3Y`&gU9&Ps#)iVCE;t-O9yB=K9xO~=?xDyc*D6Nh8ty>y zkcV1cG5_rN+AAaiGa$p@D?RVd&#EX353mS&j@F@dMHC-HreVtGstD=GH)URuO$P-o zHkjox^~L&r{wtAdIj@#~Byq5RmE80F&xu@|-_g<7N$$f1@&7d~60&u*v9i@S`p<>t zzbq2}c0h!q`6WLyA_SAGt$QF&;yEfDvL&I?oQU7n37gj*dZ+)iX&xt&jITtg{q{5P zTMs^IaVST~(B;18&zI-lk6?b5941reF0#AqU3{%%1#T0@BVV*uiYr-xE9nij;rSP0 z$R6QCq|Zup;#J;@ZrLfNJg_a;?{UT@&i!nAUOz>Nv7>>iDP<`Ik=+mejKjO1r_;Es zm`OFFG#&C=?y`Gn(A|J5=W-VZW6|7g`<{cFoW z?Ef;z(zXWXR>ng5PWpnjHYVl{*7{E7wl@C|Z0qP+nLY*t;3QFO-4z%ho6q7npFrL@ zu#Q1V7#CxSZlcK9vzBOqLZu?1_jR|26QJ`C#*O2UIRZIOQO&9ftAO;(P|t# zWloR-3*Pz$3V)2`6YnR&Eke}Njr10J%X!B0k?$oh2o${Jv78!OaXIay3_J$?Y4uT8 zXY`YRw3r6YOvsj{EjZKy?K0s;LR?1;k{jg`2ls!7?H?fb@gW48)~0(PUToYKPO&6G(%z9| z6QMSO({oBUC$OBEAiKE0@Snopd|b*!!!(65`xrW&@GiW)eZ4??Fl4|RUf#T}$x=$2 zj8q(`lnK8musUm+J1HCPw5iKa(V7bsUuqE#Sx8%qb(wI|$}z(hX1&G*FLLR9t;2cc z7Yixa9(Vp}kvRIm3kkA|5bLJcN~cX)IT&pfzs{K82`7v~9mWz_CD_bkU4 zKn!w#y{4Z(oj5Y#vwfK|cR-r3mE>A&LY_&0_yj{YI> z5m=z9x%GD)p(~KJ1c3x4BDG`627-WGrAyv*sTpgwjFxsvlv?=xA0KMwepm|B%rW>) zuW!sbx)=DL>|jFx$7e3QKEGg4z>gATTZSKFBg!j^1jwmz6O|>hu@!=nUme2O5G0X; zttH0DF{va4Z3eqd7ASr-vSOaR;Pr1)bhH5~Fa}<&KSlB%!V5(u+aQ<7SK0}ZwRw^# zO02r<-_FE3D=L+H|GdxZ+cFEbj6^x+_E4)3YvDa*qXe-_f^{@O;DGB+_cbT_mz7IrbVar%3#m8Hi&VvUj6*jSd$eF$?Zo;RXG zq~`HJ0QsA*)7G_n$(lVQb{#BW>C4U5=SR5@2XZI6zE{S-!dzwlQ|{tHHbS*4*+Nw2 zhEx?i$6h(9v6d-yw8*%K@)=e=KHH!rj#n95;p=8{Ha(0v&$wItqcvJ(W9@?c?k+Eu zJKJOxonrMqr*B38qtO*#!$c78Vt!LyiO5qDxfFl7YO)QN!w+%{#!M??^5CR% z;kD}KLV*B5VEyRZa%E;^A=x+sSGSu9$6E?-6B*bHGLVrB!;Zm3i~*bo9~R*C7dP0L zNVe^MAoow__WyT@C-FCYCMmD~HA&X4t0C-%mwOFrD^^IjL{JZj)zI~rUm)gu+EDF%EcgQd2!C69CMD{5P8L_~B*L7) z)82h!?|ZQJ@ua}razW0g+g(ZE>&(nt?MYQ(X1Z!agJnRodh#|!A%H8L?we%cs-0}8pouj zmFFOHDWDQ=P9Iya-m|{-V66>IVl3Ruz;2u>Se}#^eZKd-R`1ZsQ^&sn`Rnv)58SCn zvsqYpC=b9uMUr}vj0wqF1jtd*%5jZK5$r41Z=3*L0~ zsJL=1o9Svfkr@V;b3}~(!=TmYfr|9~N~eB*Jj?2#S4LkoXdMhFnLz<$MDw=sj=h>) ziupJ;HlhQRV{_N}w!6HX`fnnYiPKS;T6!EhMb5>2*x0@`7A+uvYikbv?LDvTXd2rL zs;m|$Dso{$pnd$o9hx!Tfv6l+j#Ah=L?K%O6AS}~N1LZdn@9UIv*;;?@e+GEjgew_ zzica2Cj;Gbj6D2IGNuRH*{pONJ5hHoAgp9lcR$8Q_31iM;R6u<4tG^s+ zFh}2lnU{lu0Tmif79qI$MQWAG>`hBg0V&l%soHQkZ@2z%L~*D&geQMYvh0xl!k(nu;Ro``!42e3VL9l9*e5Stz7syd)5)uiR%h z)#*db_NX@GgLrXsxoFOPg~&~WE`5D!r}}M8S)SZRFYL?HRG5qtYfp3xMITi$5pUk{ zwFIJi#AHimj6E!D6oWFO!cS7vK7qqyltZ}OE^Uf1 z)6Dt}?oRs4#D+*t?Y%N6FCuXR@l&?IJc1PY(_8g9O;U+cP~>k zI}GzQDuA|clf_`WsaOx3LwU?U=nSt{ejAUB>T#8{&ofjx))94Y2bxZ`$B0v>4b*6~ zM+>~g07S>Y0pHp(wKU021XEpPn-I-P*3KFepJsRe>BX+u^>=8DbxV}>LFa3I-*bm# zWsl|#CC^FCSo}*Fg_g^1A?as~k4ZF^pcYwd;~sZ1jXScg`nBa+-QI&*?H=)~&B(XI zr(5ACY`Gis?C{51TaSUi1}-I1>Yj)qm zp5pEp*nzmU%r_%Ap<8}gL+3ce%y zntN_asRcppXa4MHy`bCdyl8jbzwmv3MDCG)?bRFq324-XjVW6Z&YlE*?Ok!>z+3n! zF3GN>%6>zeV3M4$why6-E0e)FZ$9my)qaRVmSs28V!^?U*R*=TIs^mcw-Ektb(0Nf zS_rHZg=^$k`O$RQh{XV`L?MtLJ~>y?WYfnyMrlSiB~fCW)0K;`=#{%c4)d>t(Q+iM zFy_eJuWu?dMHbG|l_`X|Zz;dhnH_d$r!2z)`qA@4yHtolGBPCP@k6bg8>zWUk#9o* zv*PrU_UjwfVpb5!Yvb~$h_c!B5+a?Ke##v@hQ_n0YG)fSq03VdlbM2b6EQGq@ z+%9A_n)Tcx7@g`ZDKF;*X#=joT*nlExN-Y@pZ2a0Pt{}Am&R&b?+%f$Fxk*5Xo}_v zGUssf1UQJw^cM3;^l@Tq@ud@URPxqlgSHvD>FUD4auyqc%)oakt4Xd949xVGZa+oW zJH^H7LCTXtC}$jK1J}o32pe9d9h@OUjB$jpg*Ef$3^TwbdyxV0>EqB)=E5pmH`l!3 zE|{`Al)Wq_Cr@EUGVFDI`{t`Z+ZzvWU1MkoC88neLXmWmD9V&1?2Ow5E7N>>u9f0G zM8%NM=c4F$(#tpE=PgZ~q+VZCy8mBz6V&y!Cs5r8S zp#$R$)DEX~hrCY{!*W9CLJ-13U+D;M%#=jdESA@{UE;{gFd7!8)dGDiIOppqXo1P0 zb!*P1H_-B&So~Q1jzn8iOp?AD-2Dz}YSD5VRY$f+pNXlZ#U607(c9AW!qG@N_zd|N z$-yWUK%fvPb$Z8`bowc>9Q=1dKKNCY0v6kkwp6ap#nN+6{WAW3xM2cGS^hVcb2CO*sNIoJmXT zUb8*r1etT^cOrdOF+badO|MF2W))|c&3cwnC7Fb=R!;0CmAVV;ol{KHtnAPAdDv1L zW;fa(OSddHU4GTx3_xQ#`;|9T-<25E9mD2$5(>rfs+;Jbrd!H};CHjip%+4~M0gCg zN$ND2{FDWt*-%U}KqQ{J*c|F=2!LJc;a#5nAPiVd1`L5qLtj$zCR{=B`s!`bQa$!R zDhxV%HF`O~9jmqw%4qa1vT$1al<|EI(T$R##Y@llzb!Ex9Q% z&jKb6s-jEZ^_d&06xx~O&0ht!v=^&wY+C9R?%1^U7kel^D_m2OGsm*hbm!Of)~M&z zCCnGxm(bk;Qf`TWpJ}UR6BP0*xyqKs7xbs$DRz5!O+tp#7-15JmsLZ-7p#wQRhB=_ z3t+xYD|`aX=4^vy(}h?S$66kBk#mqhNgQU2rfcy%!()cM`b0r%h4;*hev+Xk<@P+M zOZ-Xm%m$wr8=Yj=6m)YUa&S3H8@UMB?b}D__bW-X!{-4WD#NMYEyAJ|~g!x~T<5GVk@F?Y@KLq~X zNy0FKfT-95TM0o!2vRVhg3?BTCJiMCUK!Zrl0oz#>wNKf==%2i=@ArrvHhUUcom;&b06Ec*3`7JmbAQ;LWs;uM`SwnPk4&t8mTnW2*}ZoN}r{j zok}1Fct?I6p_3fHZs0OU!+|m`;%Wa&+*vA}BKQ5Q5J!JWPQsnf>%QGnznB(j7lm@{ zD*%aicnVQ+GH>o@W}l->oni%f*8OUc8P~8}^M?oP4~AsJ;7A7{iJZH{APY>^(4bmC z5+PU(QzUfIfQ_>`x^k}uVv~dj?m{qP08Pb(iCQZp927QYuhQ?gH8z;!L2F=CZ83Na ztqr+tdP9hO3JVTX0rTfq70Ye+!k72^ipq-E0MWGa4qV?=u&_R zP}wnz98$pnj~nWNF>#rQT#z6cNwpc*n(2H94#Ky>TuiA=yI8`NAqaAfm$?8&@8m$) z!AD6}R@fZ@K8yi=@&p*{g5;v8Ho9r7p*{~~2){x#6((BxNP>G@KU_-BZnh8JK?q_? ze;?LD37oH05R#s}uGSPmFb6^_FMgeu5&?Vxs#!tJ!8*FwgzDTvQM?Heq35d9%*O%X z4ZB11{7Tt%YMKQi`V_PI9lVTO2qzQ14j8-zt$=%9K8pAiUjtxi157xNw zl5-6yTl(SCUuF(!FNN3(8Ts`31{MIL8qlpI|hq3ams!nLFOR*x!as3W;mX8-gh=5CKK+EGr zVuX=w2|kuzcRGV(7@%aZF>b7I^R$8{nVYhR>mCD+L?13FvU*B zOs80#RYV8_ZIO)|+efWixR*eOlxvC3G|+7w8x}7(teHhrg7HPVgLHp-H9x6cs0m>M zb@r9#YO!`WgEU&pA71cQ!>hl>03?UR>(rQ>2~lhsR~knBfRb{K{84ET+)HFxLQ%07 zU5PcqbR6m&vAqeU7W}pPvN4kW3O1`GAw3)T;3t^1P_X}HfSVw_I11;2)=0F4mAdTk zSJP}?aDVYV0O1$NH?JMef-G6?fOCmSqRL-$J-2()@21C&*9ef)rO7r^EZ+EsLT6x8}$cN43pYH0|A?BNW+R z*LVP*b6K@ty=e7cI}iEW1remmX9wT;?KE8@D>IE-!I zjB)V_b|K20>0CzmWg7`8xRie9jk*d%`%F4joC$%!GB|9;8#f8%ED$CZGzH;uvzPS8 z1A6(zl&i`bJw*=R0iJo` z6mpvI3v)&BRp@Xv*>DlULDCc{mXY7!e-Z?>wzaG#6#oWL45tt@hT+5{&)c; zxG_w)H0u>+Wd3Y5JqYuE_+}+N4SwE;D>Rvl&a) z`M#UDk_8;_n5?5c(ja*#)MR>~x#>A;);8>fnV1fY?*8lJX?Q17u=pKwR>}(6ND2h0&eSdMTo`@jP@IH$fzl&-hp3x1~96|e# z%ea0@x?g-XYB|Uy$_>}5PW7+T8IP{Z--Cv7-bLGpcrS{uAl?PLE!j>Tll~$MP zY8&^DgBf)%@(b1x5fmM8QZu9nj+La@WDEnj7y8+d@-XuF`4d~wO5FNQ{cr&sx@*f% zPGL%Wp!Jar4*mefua}#VTz49A*Ev%;6<(q?LYv*vqQCQ;X@Z=X3X?vJ*@z#J+z{%R zojCa;(Hw6XA>Ez1b1=0|(0}9Wy!!tv?c~+T#vR!;{IwjXg-tKJIgAf{{hB{{(7FnR zhB?jLzifFAX1+O1SqycgSUQTCIQ(?!>czFj*BXG=DR5kg5sh;|fy;sPyW1h6tAA&) zXHxeM$dswogHS$(U)dj?Q~%r){09d=X=f`Zb5(O2BU@KRXFEGv2dBTG?&B4_KYnjK zi)gdJfW-Vq|9trxB?&$y1UYk%tmt2cW=V1A9fi#Z;t5jm0f&c=?3eJ5y%G3<(SKg; zK!T6XkP8Q8=E@p5TVHpaIA34S>F#>}#1JG3xL<9)>8nmMuBwEpFN~znP(M;;`EGCm z@!&KjrCJeB&`u2aq0K*`d|uqBoLAX8AO1Zuv2{CKX8>~}hDH@Ouy-MN7bzPM=>6v1 z3^7x+@U65X%#YD2&QF8Y+19b9a0Ox$C7Mf{mD`)2U2;Jr&tf%sR~(YDp=0Yri?yXS ze}b+X0ZScwnCqMJFs(`5Q&~~)+RwdHP(jPz1a(`SZLLhBQ;4Cr_I)*MGtqW;s$RI|nK9=odhq(c~;fy1m4pcmo586T2zik1Wak zR&@uO&O(P(73TDkYDMS*o(RAwqw$9cO$u#^LUn6Yp1aBYNP(1n*`<+OPq_u7zqHxi5yH>Rfl9h+zw;@Sw3)5j32diCb`XQ4~e=Ejf_R=_T|8p!%DV zATOltRMmJDSOq?t#yp1Bx4tKTzE(?#AD{riK1EF&-0=d3SbbT>fKFP z+hqYbvyLg(E7u!A65;n(QrPUU@thzw2N6P~jgDxbRVIrUxJhC9$X*x-4KkQzB7gZ^ zmXcocW<|0_95S{z@IFa2ZeQ?CLEi|2?&zFwub+xCRAHKmOF7>>|H+QW#zVGsd$SK2 z#8dG{!EY(Y_Ct7dYl+l*P!9fGa{mRKgdfty_+j%G(q_5u4I;N$M3R{@BBp}J)I0cZ zS;P!?`TJcej_lsO%d|oYUt3ymSK!!g@?t<&NuMd`<`E|;5%KMb@2tKoLdHh!uERa! zee^xhkjm&=W~naptY8!#KlkRHf$!X;yrIOm#GnyfPck0@CU~+$f?TF~CI(5Fgs(pB zvNkqp_{5=1`--?!2T+h5Kiw`6A?3t+$LuS`ib%KVgajeChsG$b+5S16J#5LVJRe6h z`(J0%{~*hd`P*syKf?dM7+6$r@+GW#0%Cs-eyRY6z@cYOjD>I4n#6gKa3XP^_v8?% zg^!p9P?$H(x_t3;KP_NTvpl@K>?`6AXSa^ts;p{FHdKxk+wDcPNsMys#x|d(1_`>8 zh@ZxtskbTIvXPT>&z|ka{QPawlU%L{ho#i&b*TpOXZX+RNd&cUFq{Aih;HaMN6 zSsyW_n3{PgFerbgzX3w{0I5b8?vyAkc1(xG9fE@fmuH-XPzZ-(&?rJDWt zm}309?w|C3o^Z;1%!yr$r9Q^<|IH6gIO@;94Mq53X+>$h1#u0k-Xibl&%})$CAjUx zhRfZ2R)$QU3<{+df4>+0P&BMs?8=%h(-ZIE@#YS83zHpme!C{sXE=%Nt3z3)c)~~= zi?RGKl|}cXoqVaVR&q%$gcNLCgL=Yx7-_^knpw6fvFD@ZpIDaamLp$&o5n_x@0JX4 zq>2-LdqDt&=g!4SS$rW;PMY_;K2AE&NKfG+#m^(QYoD)FQE6}V(6kgl_I%8pZfG|P^=ZHsn+Te)3ghtKGdqS%eYGjRWn$b zyAbp+U&p6>gbS1wF=R+wI+bVbf~Q0620lECv`ipL;>YBj2#`d+<^$v#gXx0a09U?2 zlA(V%(#sx!6Y~HX2zAGG&@l_hDkfzTpa^!v)(TgkXBS zE5-yB$csTb6NDN9(7lW@j&H(Fn5CMljZ~rxAbASQWxtdo$;3jd*Z;I*iM!(D8gYc~ z)Xx;cAJH`v6A>hNiKU%-Oq6PmuhvL5PY^K0fcs^FcH`KZX65qxhsE#Ty}hqHNLSpE z2A>YN?9jr#QL(krq$kB4hwbTV+kld2LI>*iGYZY|!Xb&2BJ8YAhiZ1@9;JVW3ejiU zmORcVXN{kU-swoW@6EP(;*i8B;mpUbH*)N|3etllV-lxw2Tkd12^Bvc*obEq88PBG z*KPVTgIOGVKVes7O!2@Wo*NfqCgX@9R69*K${m%)P_+vYD3q46K#Mpaee2nz>C~a# zHVDXaPw9f}|D1tCANFHcO{P=uLBa*b+JC%R%!YtdZOCqR zOTPhEv-Jg)xQq`sg`EKWLonAQzW+U&GrQc-Q2m^s zTrlvZ!CLeCKt0f=Y36ZmSE#uCZ7%HX+Xso<&A$k|W(E2X>4U(9|CPZ1K`tQk-w&OP zt+T1V(|_9mPf}c$LFUKc>1$eVqAAKH*n)4%Pd=LrNDUQ}k}@QMvdc3IaGgDyvQaZh z&!PolxWni4SR&Piq4WCL7NQT@u2%937^E7x_;fi=uy3X<<9By^f4Rhf$K)Css#f{7 z1bco4v)r&~Wjk55l+AVc2omE(`u$5erP((W|1AxSSNMj`rlHTYR4y%C zLg&tbetIE9bNwYzNh=Cx(+lGOJ@G#G+WNG;k&qN3E&&B&L;h;6Gx9@V{XZSe|j zalT?dtmmz-%=|MLFtq40@~$(gP~tq%8V5*i!|e1adIAaPhJ@1d9MXiyq<~NFg^Y2A z7~fJN{O!vvZkU#{nT!^^LBAQQ(P>AwJuU(JASunG;q`J&*Xu7L;BU;too;hXd z{W4lc^rqWapjzi}QAGe{GlM%{VQyNohG^FaL$K%AY1Re=;MCU)F%++(_WC4fxiL88 zhzyg~l(_1)08}&yI$1j8_Bx_Yx|$vJ%yvU71de?kJ&kDTboarxphe!xD@gL1ai2e! ztRRI%#8)c3@RJJ7;QlO)bf=#^gOWKL>}O(@{g1m3C7DNyM?g#M(g7H=cqm4K{V2~* z!0w(Bl5PnOM3l<_rK(4ZzE|)Y6!-xQnLd#>@qOwZEj|u7)k#q z07{}W6V#ugk9i0*PC12}A6(MilT2tLNq@B1v1K}LhO{^qG-h|?`S6EhH#PlusPhrC z$1o8CSW-fNziDo5a~r%q4aZXO{TFK=CO|qua<&%ca|yB8CTj9lHo;}6C-|-yhPN%t zWkVocGk4tL+MBwOtC2d23yoIHV}m?ha=2$Z_#{PA7t zajY#)v#zt1CdLdmSqaek-;h*a?-5!SbYIj>Q3Bb#Y!tzSe)7Vm{Ug zvY45*JKnmREJ}YCm1j1g*PE=(%V@;cYDIGLEK1iJ8s1Q@mRX+LNDY6Pxrln3imBV6 z9*{?+tphAdiT8uR@7l4BSg?o^S}z~qk#z$^NNzw=2>9qRrRq^P39tf# z;-2OX%ajN|}- zAMfgYixuMI7t4d+woQncy&Yp=!s=UgtnmIsb_p?~*uqc-uSV+jUHKu{fkj%2=t0!a zXVf;7(n$Ezzz9DmGVc2otcCyz*SH`G{u9)na)-{GT#WAnsNen-sQ*wp%l-|Jf3;8k zygX^1QU&v?zz;%5n{Rc+C4w~0?`i;}l3y~G@6wtpYo*tvEp45YO(gpb_BTilqhJ4@ zSFK0B?5-;du&ie+w|ZWrIbLM8fAjHvf!iWf!R*-GJ!^b$35*adOTTZU)o__c>#SO| zcb_^cQ)pgHL|L3kT1!c^a_lBqQNVfDUu<5~T)Q)#Ua(9VRyk|~`x?Jea)VNuO#N#< zDW0B6`K1pMLogYdBkvgOW5?-AYa?Z)3|ovL68}R+)S}htd>r+e67;h;aOC@;ODT$N z%Zwjms_7VC`bTAxHqL(pE5T;gsV~NJEO*Tqn1Bty#Tma~B5`=qhQX9d71N*TWmPi= z5L@b_7{;*+V&ImO?3fH+~^Mob6+!1YYA9XB4~u` z#Z!N5|qqp$EH3pJi*(G7Q4;y%)uWrhPFt}evqzIXzG6v&qY z6ErFWKrx^kAzcVX+j~?`E#e><@fFu}zoRM+FiVk7FnA(a4%*=&`}$Ar1ojx9vD4YT zF#qg?S>qAyvI}39#h~`$H@`rcJt)oW?_o)k-uQeiO=1CYIyaeGh2^UM`!7{mKhcml z;uzNrx0G(rFvwhVb2^qNC8XoHGnjSLjoi>v$Ee$;En|Cz)2VHhx@L;Hu z?y>BX!OKw3>wNUhEy$sn=lC0hn%+Z%OMH(YceDIuax@*QlV40~3wz=E4%?e> zl4%MKF7qylN!iQ)+EnLNe0mT!OIUoHs=!><2Rx0Yw4Sip4mVA8U=K zYTu30Gh+j6V$- zqlZF85k(B14U}Q2q2E}5$`u2M!cuuTj1`jv)0dfq(`eUb4n9<%lZ48cE{aD-8S8;m z_EuZQ0Qwqn1-n_27q4pS!pmzG)|KLtw>e?P~j(KdWSSHWJ!uFxgs>{T%!zx`}0GORf`d%+AJ3R{=tGIG9|#@zSA_lp^~wE> z`jXV#^%58DbK+E<`;QY4K*f6`AdDCcNC~kShW8n`dc-PXBRT58@V~Fi&h%Qi)_);b z-J&K7K}H^m4kKu)%~B(bEiPP9SQ7(5PJh zwlVRr@iQZh{lN3(O}FD2muRJD(pt3m(HQcQ5; zcU!H_^Wwpl_rb=-p@`5lG(J8>CLAe1H7tv;V3$7e!d!to@2r6?2SNncXKB$ue-Ps7 z2A+LvCho3nF{V6ukl7U$pJ7NaZ)xr8)dCEf3%F*omzO9t2JRYmtV>dWEJHR!uZR?J zl(}?HkJ2F;5!tRt(7qg&96aFBiK0rT+kw}Vevce`F zSH8GtHch6!F4h~A7>GC|rbogU&7ka2x2(v9lLfv^J8UQwoDslhrGH$JF~7u2J2yRT zpIgt|KBfGkm$RH!xl%Gqwz5+w&?a5N+TaDpSt?x8xS*OLb7Gd~Wj%XjVtMA0wVy|jP zfondRc)*txqCCh%=Q(FcWj_ET1(8Z10VnAiuXLyc3?W`&E&_2RObkSy|L`=CK!wWq z4nq_|k8zFc1q0QPTs7iXq+4Pho6-zSwC}|<&JVauuTZJf5;=AXK?bu?4Z0)e*TLSO z4M>D;xW&xbpS?%q@_8^)`~t8`Jo^Uyt`NC2q{O+3XOT3hd|FgXj8&Z0sue5moCQiw zDwo{lN>H5wy?82SB~DHfq_}>z@$ASBdV3QJ0zCMvoZ@*&*`8TWnNT+oH;~1jzqC&| zIXzbh->BVNEPS6nAZ6N49Xdi$^jW7uiI4X~6y<`~469Z_^Z}RGWrB;AolcN3yCVfN zBA5Ygpl@K$A2l>S8yC0w=q}j?F?sVP|7e@zK$CI`amDJJPDKr(wsDk}Jol^g2zN)#?Ehiy zoq{Y)qpjUkrEON)woz%@wryLLwr$(CZQHggakBf5*b%4C?vDTB+^w}PzZmcO<~!#z z$KYH&Dr`7d!FxE2#el)`!Y@Wo{DM)g>CRQie|*$n)1;$eno%jf4rj!90L~yRO;C}q z@GhLcR)zi40@3H%4c9viSsIH@$%vgO6e!j>QP%qeljn$4fI5L26l}%^iX~EL&{x-a z#-F4bPyB^a%v;2ZkmVDm2soWo<3ooSzcX_>U1+J5)9owWV+kd}!(ZH;K-IzL6GSB` z@gS5hwYNklDjNAYbXTur9Wy--6&A$D{i^ZCN!lskGtI;cQ{V$ARAhSva|JaN;MEJCFn795G}R^a1smq-9QKtkX6N?_MNH0v-uwC` z;%V>qsZwF}7%myOaCAmGS20*;P03JorfB2U8Qo^>VBTC7ccUH`pA2Fq>^Z?l)cd2n z6yhD-)?5p}K7P2q{qimasmdKcHehW{CyrIk)KxqSDf%`plrR#4CXFk7dtirpVv|}4 z2PbuB6;fxCs$A=OX!(8a8*Msb;we%dEt8Qbo-xL9p3Chce0;p(K8kZ{M1O>CmnZ5G zqz$XXjn1f(beEq>uDcg{aTs8R;Jr)L{;2*N9V_%5oX6YlECj ztlOtp$jh9r&9;|9C6rb5ouR4Lqmy1uk>X?8Tcq+&`TSbr`NSCD!s>{j2VI7Jp|mzq zpo`_cozfjta#vwFi(70Aexs4=9mj-LA_ceyoI(9s%FkBy{+`pe$bc@lTznDaNwOsN;x1JJ-+WX3&=YSHRbroZ7rJ~(ij#yEdsN;$1=MRH@+ zSE~~AYi?N5ylx7>w^!y1k!-87Y zL2<$Ej+sKBh-7q!OU1KfwH|ho$)%hQw4J(nwPo}`MbPWaR+%t2D5gAHE@B~exz(sD z^nI2n7n%3ME7g^v?ShIfO=}Uc0guIpn#BiutLZzRcaESQHvf~Lqc_4b6<)V_BLK== zr>lUTfe7Dmaz$l+OJL*fWXL$kn(vowGHu(iJI&N1NdHjPfowKHy-JwNF3qCRhLV)Y?s2LDl$hEtggR0ScU#by|pawKP?rXOsR}yi;%!Dr8u^DjugC{ zCwK-0r#=;*bRpx&%mS0UlLBMMFZ1>mz-nQQ$`Sl{P1i0PMLP2smYbw6u+^ILsQd&Bu=1j*N zv7DMk#ENCT4h-V4$FIu61{q4^w)Yg&Cyh}>TVZv>ymVk#%@{Q1=lX@`{S)OW-dYUKK5ns&bZ?*qj_(fh3>b&ocsr`xa_^=9h zKR2~i{otHRfEr2T@wN`tzgf8;g?(@=d^B?+jDky-&*bwNO2iHMzvz z=c2c5)Ce2QB(bm;)V>^Q8x_j$*tq0QsfOjXPsP!$Hp$2&pTf!y5ia3>deGf?W=Kx$ z&`tO`bTG><6Dgbjhe4%}x+n6UfG!|Fvg#BwUqt;^U2cw^nvvhAgos)3`oSSdd(grG zRwu!$b@lQ=IycGooc>)AOw?OpA}oBm=Q-2$lJRCVNv{um%ZPpk$!7ZaGv4~FYDY5uyyvOJD zMk_$~84l}1gA*DJ6idQte;2uIe?W1vlmY`t*!d60tQ-Z%ti0k=BWr|`qvBIHW-!Hj zG}$9V*pegK*}uO*J=CQEm%UOxr1@_TR`XHHTa=toR9b2x&9)qRmCd!>Q5=3n+???` zCqgo;s+OdEoJx{ki?oOfT1}=!D!)&te0IuUT!Iu2Y=a^AsL*XSXc(Lujf4&6X#TS?XIJIgoB`rG-@awXu%T&NhuIxu@Zjsx89Y~) zS5{NDb81pD;Z#?K_rBsDVlhruSv7PpW1vyC%qeW978JavMd7H!!FfAB`x{rqv`iDV z)pvW3-+H<ouT=>dffJ(pK|Y7fC`X-e_{>JD7## zW4j5j<#nst^H}!q)0W2tMeA0j`l@DgSUABjNvpG^IOBq5R7lX_{mC@Vp*pos0=5DT zAyla?PZa@G)K~!e$vsWtfenfUSK?@nu}0dsINJB*vxg8|JEp76fC16A+bug|#|b6N zuytwu+q;M+_1-^x{GeLOni~JmTLYowra!ufKlUMPRmqjy;LiA4)EH2`KTqV}AI0LS zVrZ1~vAp=TL=KYr(3IRpfxGU$zHuQi@SpuHr5Nx400Q{`g%ACU3*Yx{rlYZqz19ED z4r$3s+0667d(F2v$!EmK=j3`qgahXk(Lf?9mCEw}f}b6b%Rp^RHaD;-S&y`G+ZRX4 z`wBub+3_9l!|jpb2d59_Cw`){Ihsso&Ho-GkE;N{*~Q0XWIU*BuL$hoj*-y7UqNX-KNtFx)YmpG3-g<`8WxxPB<4$!C*h1L-g6;E z9wr`wJ)f`Xn621^_yfpEuzI2vK;kx%(7W}Q7B@TX{sl4qm`#qy*tA6UJ z)SkYC18C#M{A>xF}m_mrW?B%q^&{<6TytcWKXSGW} zlPEi21cf?Aj9#Kv@;-_RF$DSrpL-$o(#}bM5t_TVW-byd$(k^uZeA0S44_bQNRqK= zAHEHJ$ZFd$w1`beFTMRI0tz>#o8aiHF`X(~zvB@BiZi+l>RK1`S`V3LcTB(0Sy^jR z1Y(&zN$;I6DD449nUS@-_khYEcAq`L`)|`?{2~^$mT$~}?Yjx}?^GGf|K1|~Yi0Lu zR|P>M%Wqo4-tF&2-v2$tu2R`b<(u^L4h8|nM-HtPDzKnP0}s{~?u(Gs)zBUo>X6vB!~Y zB^@7Lw^>eQZ#3$B?`&!MYsqR0sUCDZ3970pewCrwQe6fZxU_5G_oueTDOTvF1%SZ` zp?`ygsk9xR6q;k}NaX`EGhx$YCViDfLkk<_(J@u4?2a-xVDM7EY zH25R5W!A3ikrH5tS?)wl^%{Q&iA(03=?#;B2p1t%nUT4JHU15wd2CSgJE(_wro88PLMgJuJ`2af2f; z<#9{u!-i?Aj&Ka%SrMc%W!4v2l$czRb>JbA1U93uEmsz4_0QgU_P^@|ucoCFu7($t zm(Ot}BZrT}su0i5gg+GCBrsVxkPm0t^*bA4hLRFRwrMIWz__OC*)-0$dMtd8UPUm{ zSSpO!5UR_%ou3x^|5&ISfo~--horr@_09!o$3l>4!j>bb+ zuQyymd+hzL%o4H12G)Dn2fcpcTE7-w4b+W?M zQG>5%sO9tO$*#a%rVfr9Vh0O`k*9B(5OpE?D}BZ?UH>fetsEg^_{Xk$@NW8~i7I9) zCap-kbD;TY#}u3d(j8*5xv({PTe-akN0Zbk`dyiD^%>Y+ zO2HkFl9e@?&>X|)j4%gf)dZWPJvvEwMu<5UbC+6x>h)T(raoq2P8ek$rCVkCE`Lf9 zn^kTT2F+0QNA&@M=1@iGD~eoPn$R`UY&uH1Q{qGUk(B_eQ6tc>?Wxma^sA~xRR_HP z3F=Qo&W|kLx98wK)4w;D9fnd2mxQxFc?^RFovGeMqSogFiPGSOsFO_CJa zG*Rb#igBn+l-HfQ+Myq(`R+`e$*h7saKl2dMq{<)10@icU~+>_yRG zEg22M`L&1@0$pg52CcVIp~wAmMQH)Uk0*_^dl76RXy~7b7Z2pz?dh53K|}G7X~G!< zp5f^@_(Xe(rpy$u-BF6H?h8gQ*Y;ALU6>bUY%Sib+D`O56hfr z{@T}!lRMru7^s^ijJCaCg<}bW62jJ zM#%XYL(+E?|%5YO`Ku5>12S?PdWW1{^|F2037|~6`d3txA}1Te5wxN z$`SZ!VoCr@Ko~av(o>A_WESPx_QWepCqW_N&8NYn+J_!lrI-C!vum&vz%A5{R^^Oa z5~+?*@OGsX!FyxvMZb9=L+Y7DCYJJo+S|ydwGk$Mtu475*If~i0SAsSxchw2=G9(85c8_M3-6{sxbeDl4sjg`dBjwN{T7xasn#7HJlU)la#nl;%IIxW?mtrdAbvG8x6WS+j zlAJ1CNA93y8tWR@TgnafS}5B`e1W8vx*=P5EhWyEwUo38HnAd6NOyy-V?)VIKMAY|eh&u< z(vLBY6w!sdO?}LSKl8BMJp9}?=8n^3itVp|*(>rp_PqJz2BJn)9SZwRj7&hzBL!I= zxX5;QOvartr0|U$yrSgZ_*D6^Zs6$Lj+Zel5k@m3LyW?`Hw3l<7Y2O9!oEBcwW3A% zQc;?t5W=|{--OO0im($EiIy#Fy~Cb^p;p1ebaB@CuoD}@R|m;^09p9IgV0vp-qB?3 zJTkLbpR*MIEXDe(aQsdYHqQL65W4=eLiiW%T;9mo@-GU}##+?K@;lo0|BFK@|8YSY zM)?GlP*+>k)d2LL2SEctrnRrj*#|oAm)7F6R36*m+F5=f4oV7RHUE&< z^pMyPRAlv5aE)n>ManJaF6}eI{*mr}=3RdW1t0w4`V@7w(Hecd)ynwwy6u4rz!vxn z5|&I8>DWETWR@~NH_BX?KH;h05q~;`OubH~Ru!LS=Md*9vo?1_j8+WIYa}h^utq!m zB6ZrK_ouFN^jtfBBH1ckzkcq%H9Mjz3K&O*H}!53SWBu}7#}3fET{fLwXn5H(`1(A zs9>3$;J%3|an#!kt+07}MwU?4XDfx7!>XU$5mqLv*f;pbi(rdkSS{YT(v z>^>ccv!y(nyfe1JT#`r&6M0NavJW!WfiBe^wn$b!9(?z_h2Mx=I94Y%qd7Sy79Md3tFAol9f+X}L(C)#GuF>Uh^s|@+gkb@5mGZc? zQsYaGGfEClkh)P$zs-SL3O?toghFywm++ACJ|#rLnm^WvG28qk@Hpr627Y!!Bj^RjH%)F#NR6KgTqy$2p$Hj7J|q+Tt|O&eSi`S>){Cc(4R8 zJAtCD$jkh)xKGCAqs_#(n^kih+1#WHpF!RXTv366)++Rp59usyRqS=^Zx`vzZrBa= zBMu6BfVm>Ez;1sZd>kqa(@B#%6#r;ai{j&GHCoXi3T>-HkIcoIu4hfiT&$@VGE)zx zjuG4HeBr5*TH^?xCf6`%=F<{V?1$nii%*Kja#B)n4lZn~oZg3`k1+6W)I?yjNGx*i z;CB<|Al3=VrNajMGoA&bBw!6cW|!)-M9taCGp*oe63)RRni@EW?e5l}@H=Ay%cwme z1tQ`NVoATx>7q4IhXz%vn#ciSTVEN8Tl%|&uc^NhZ;kw_;qKK`Ae|9R4w~-LiIGoa z>*`R0;^%>LuSAY>Opg=rRHPEX;mHp^R2y-AL$9`DBi%^5xeIvsME~pQ!(`Yq0U6*{$Ey}B9BAYWt>C1=R2y% z+xgi_7p5Wi;tLlW^PP zI7xpm6);8C(IWLuCYBs<#E^3~SsWNv5r$=-xT+fA1yWj8rO&a~q!lvR^hawrpKqR+ zxN5Y%I{;?lWjZ=2Z|${{wV;AIz9U|f>3SDdbpg}A-C#l9;WYhhkJ>IxXAIs(s)qT< z|30R_xPh78f8nJyWA`^{D|_A15I2z2stZzO@!s3oc#T@TQ0hR^CK{<_jm+dR*?ZMn zepBK$JfY{bh)Rb(!=BJS{Z2SOWg9PFx=-$}GzX6{)VHy2b7WDNy^lF?Y*7#XSp*QG zTG<9`G*|+;a~0@I@Qkb1Z^T_n0*XSgOqL4OAofkAto(eh{NSej6h<6=Z|;wn5Mi7U28cqCmTZ5kc zKoDKn>-AkifE03JR20HBk|SRWng>Kt%}ahG)<=lrupocD#&Ugx zoGKsy6S$=<>`%L6!!fgoXt?tM^hmySpA>WkjHca>oB<(h!Oj{HhBe2ed=+d|iTsUxrtyzcn%6?f|laV~@mdoVdluue-(MF=VT* zmm_}zr2%`O?!cLGQ7sCi+1vD0#&buQMd@{r0_7A>F>^8F%^yn>{pZcqaV zt%g6VK}E(`1+d%tsVIDSEKXOP$15L5YS8E@9p4%GU<%+SA&Z^5)I>ox{52;G9l&6U zqoKP>Myj}+{Nt7cT04B-@ zgAS|x;PgivYTatn>aX?0fOOK%2Yr6}Tiu5+p9lLFH3VwX;-yJr&hHq)vI6X*k&;dAa5A zyC@`j9-bzZk5!l3w&@a((A7~s7oLyn4tr^@82SJ9_AC9uqtk;71rmZJT9$EB_QVhx z2g*08sT5X)a0Z8rmM^G~OW-?`lwY~ru`V(H6(sr7RdyFT8U%Iz_+>giTZCa9sMgVV zy^oBBl+KqP3PKY-(61a7RL|@@Ehx9jNegf4JXyu{M0z(Z2&<(Oiu9{hF?nm?62wwc zy(Lsni+A$(;yQ^=O3%vb@AhP^sg62ZFc&8|_4uM65!ThYm7v`*Fls*JP&{51)ZmIM zYKpN`pOQk6i|PwICPp>zC&$7Y-&E9Aetw91+Po}pFL>NSEvz#HkeWJNF4&Kw%!+sy zdr$A)M3$j-(MEbZe~r1Cx^{1K^^@JE3ybr*iijGqr}H z+Hz^#rr{I|u^K>jV`Ka+evQH|qf`@iK;gJFI;O?~vAZMAdwbBxV0)?uKfr`v+q!U3d z<26|Lr7da7v;78Tn|~^dsb~dhw@A-p-}q6-i^scL2rbRA>u{QW7C!}L^l64Fwe+)lQte_|lf}l&-4feOs334SOqm)aPr~BIv zC<_%;&F;QC_|aioq zx{YVeE*rBd?%m+#Mjh>alG&K0Uf01Rc9+mXrxGq{CWZ13qbgM8bH!j1F;0Uoq<-$D z?3xpLkT)>V?zuJI@`ow}pYxjg*z4=PspDu*6^t^k!snuW%_8qb_#Hyu_Mz8Bt8<7% z={*QmO`0!*LX(2;Km@b%U$_MN3A4fJYhs%|{QYdJV3R-IzSq&zzMt>E-}lM?_a5;- zZ-D=JvW@Cco*IWvyrgY&opC54wfk%Y&UtL~wZyAaz>+Z#_;$9odu;eq`QrT8YF$x6 zhNGhPKV`|NF$#^SEhN^6kwq1H@?nNRY$X+dJODIAo=2LZn({3#mnuD~Hv{DT|L|@n zzAOH8O!whE^^SI!a_MsTJoY?pziZ}s8Db}Bi<+i;+;W&sLUB=Y6wLcGDQF^8La?TU zP!USv;cjp%N|GeG@Ib^V6;V9Vf+3ckauHQvk+*5==+jnBs)cYCHZX5oL(oVdvbu;C z9dO~BDjt9fJZ_P^pk3cUf}>T}v1c8SVup`eaxO8z5R&Y&^f*KqGO4(UT2E;$Y&5Dd z;aZ(KH#&6C%59G)j}}ezv}kqKf-}#tno3da>m{d1`T;4%>13~sZx$l`Lq!yG){Fy5 zSoqL@nf z!l0x@wPIs!!ozZIIf{N^yq^5eWL~=`PzZ5;4?1$;ZeUb zAw{YqaE3(bBkg&#a2H4r3%yJ%{guAR8*QaWXIARmLYlICBguN@SCVsOCA}GD-QN#S z1ZgSeWi*v5fr~lv+*+i4Ds+=64FZ|`k{nAGkqaj?I);fJ%XTChU#|2 zJfpPc5LSqeR;a#HPQ8R0DPy#!T$xP_TA9;L?M0^e^3CB3ICN)%K7h9DcFmy%uMzn36#b=ZXKxiJJN`1@v>f?4}H8SgKK3TQ~35Iq@@ z+E=l~0O2qg8y{_}QnR&HWwB2+Z;Xl!nr2-h#%0t~5Qv%%#s67J>xH3xP zZ1T3KtE64)oSkqa<+PD59C*#9GlhsBN0WHT%fmT%Un@9Z2Gq`Wob`GDPylqS1rbAC zy(`CeHt8DB7ZbA2%C+aWMi2w*hFw<-rRNEMkutF@5=Myb2DCzC(-Z;YnPxiHw|8m8nIASI>x{W#&|e0lX}cFM=#=eM3m`02#$4+d>{E%~U;> z^o(AmfqZGDuKY#gfNvHLPO;wNUA|}js_qUHOGx7buqlw?Gka>737x#f#_33*u~nkT z;GSEUKD|P)?6b&xe{2!S$y!e%M6Gl50>ueV%O(G~C&YS!8Khe40HJHQwlH+ABu8CJ z2<8|yaY7CzjWOZ9!w3c+st0ua=DtXCuR3#tMgQ6F`>Wc&lrr_~H=bwJv_UZ!|J_fZ zZh>yfrgv^Z6y4{xL^7%q-<;XCqiYS&cVPHM%!d%!AA(Z!j8*#kOJDsfvit~`K@?1N z5~7Chw}AmJK&{d~9NJd(3XwoJMz4T2mAgf}`MhYyA3tP0>=-gX=Y)<=oB*l`OGf*3H?owWnvT~>mtm8f zWe=aO2#GNK2IAJ6;SIe8sABo6=4YNjz%a2+8N>+Mm*!Qo#Pe*FGKQ#!K6Qf9aGdEUmDRn&$nh= z1Iny_x>%}sP?L^BF@a9plEomWCMZ=(f{AtiD=G8Be<@-tO#@nZQPWKf;An~{hb7MX z{9G2)Se+@6T;@s_ZW?(qtU;+PkS1Ml7G2E5ng^NLqfm6QRZ!#gD1CbRc1JdIxja{O4Fp zYZNF{OOjoIIRvyM4NZON(B!yl>x`HeC7pU^EuwdR`uQt|-8ST{Pu@INLn+isiMh3~ z@i9E>$Oa4>*temKnGvv(3d^xjUu1{)h+Om8NRV=^hFdBH$MFjD23eHQ=bcoVrIc}6 zoY(IuJMSN^#!+&WwRs}P8W|fEVdb^#?3_=#HTy8q*0HU2jc)M+VN;dTTSSce=B>=& z+?h5`cc`gkKa1fl(S92X?kJPmq!ZOh5r`k-NPmtH`B8&&Wx8;3oe(zFTJvm zUdNVli7D+W9(T$+rGTZ&`3WN;#;C|drW|#2UGJ1YJu7OOL6_z(V)SXn(c(l97t`MC z2Fj$ziC}qx4ihOHLp<8C;%r5W$L_D>(I!0+$6;)L3f}4J`}IPo;+nyWydEju&Fmfx z_#JqkV3w(Wnczo{3a~=&H*|MJH=xCtug(!WNa}h*T6Rl>!3rGONL2! z+cFqNU_dh2ixUUeW){52uXjGQXpX6#5O;3`OvG8;dk>75 zGcW0>=n#_X3Ul*|WSkbjJ8K#3+$AjJJ}_`^79;3|3QryTr_y!1^=~4MePeTZh$Ju# z_FoFBx!1?9P&A*|yi{9YRFJRXcg6*(>Lr7Zz_G5`pdpkT+(JiiMKI~|R z1|m}G$HNDY{OVKKVi9P=-TH_O;9R{rcDMVUh-ks1*E;5jIAs)^0g0#P0oedQ9RRoD zA{@i;I}|8wEg<8v_q@egOV-a3vXXC|f0~ScM06kdYjsU6&=X@BEvJsT3VFAHCuAWk zL*vD7!bh6uTuQ1m--!~`YjFj@TS_|b(c_?{pL|BfZdD=}svevssrFf3#=9u2BDgpZ z=oKYM+keoQGS6e2A1Yy1E!z&_c`me*=zGI z$9Ht>K982ir|ZZNDA{0F%IAvQ+2rjJLky&r$L)qPXhCIOxJO$^cvhj^$i=AOyP zBU1qR*}Ojiy4p5zEt*HTu#o0?cK_gk1Aj>2tj{6nBeeH}uzC?BI__zB_>!5;HR%fKm@VpH!tN_2lFu!e=P|6VspSf~^_*tLGqb7Ji_kYgfmGA_ zNfnsmGP6hljBys6Iv2`ySIip@ zzBgfu<-f~7R~F|r|vGPuPQT-sdHQ13!3{WErH z0en}&5|#44qsc4}(Sfx>e6O(8PoR~QV8-gQ$Bs~pRUcHN1E~VePK5<0m>);FC zc>umUc>w>e>jzzT!5Nkwu(h9W(ARJg8gP|NmmO;Hkdx@3Zll5Dwu##vcBjRBqOl1N z2)z;(cH9?Tg?hCXFmi(myuO0}Z#FflHi%ljwoIw060g?ZbN6yX1*rz3-1 zH=uq@ei6WWn__rf8q#%hLrn0dfgD|n9beM`?UBu6@ycoRwxk&v2#@@p#1Vn$oya9DRLMH|ZzzXyBALi}D z68d6NeV}c9>V`r65UKj8@6G!fYy2{)IXP~9q6H17IatGmMrBmP=}f`kUN@cQIl+B^ ztF?B7^Td- z&^92`Ea++-!j)yKZwI3yqk$|DVIOLJabgH_Tk47OLL<=cUov-&WE%b0%xo#vK)^7r#? zhY%V*KY+_9M>9-j6TcuWtzeMdQ$?kk?OWS&w_2t1u(9FT<74_LnZt$7r&ACB&R@ET z?=P)37MP0-`rQeH*(Ck?dX_+nfiE$5sfLo>hf%fLD)Og@aznq~ieucNA8XoHtw$M( zae`M&TTxFF!P-k8Zyu)tV{Z&cmJq#(8QN}fd|`%Rpf|EN*_C{ro&rWQ=%`V$T3+BB zVK1%eGZq(Ys6$!i2?`t{tN4E7*{n%CC%BBzwaQdolm&IORoUIBrgI=p zT;_roXYrQwlW#>COS|;4vC)PCYwx_Dl3R&1=VpY{D9e2DMLMH3jP^9n9rnUce|TlT?&<@*HfOYqG2np^{{AEn>;pOpaCE zVnG#4J+iD3r;=q6GQUx~(K)|Sxp8fF&B>o@tgT6pC8WiJ3cwm{EmuK?o|Jk6t4#YR zNSBKOXH<@png`8r;+~iK$WR7?CLS{QvR6(XE{n0rl?@1>UVL-z2=4vLV5cXTJB_rR zIyd880p9bi9~B+YDrIklTk-2m|FGGcS=T&@Th{f0^s01Z+r0GqPeHI(nhkuCE#k4j z-i=O3swp>kS=Y2{9%12FmVsv;R*D|s8;=-Xp0O^@^rUxHX9nxyc5xDwrsa5jZaPb-tw^R%L@>M>7H#zR7>Dy z_aDqAFUUtPtG%}@_wj&q2bL@vb6Fsxl5m}pSI4FA?2RF2?*v_xIqiPa&>*qz73X#> zcJQVEuvdqxK1>+$_#}>Z3SPUke`A2Xfkp8F2mk>5ME}*|`4^-^;U7JnAcb}L?@%$V z5PboOvR|>`N;J1iNlCs!d|^3z0TamRW`VxvmrUD?4+yb6<$kShr`v?+kg|h%mVi(rVgL^>W6P#HRfmjW!EKYO3heO{Rdfk z8m+-vNP(Pv$Qvk*s>jyS)lgpBk62Z0HT_a5hDs)%ajpC5B(t!A`*FO0ucM`-sizs` zGKY&Y+`7;oL^-cXyEsP{>hlL7eY4_-1khtYd3VxAE48fh+ejT{`WkIN+d#6v|I4ZEx!W*NL>d z`90h54B!Rmp>f5^BJqaFR}eYCnD|?P?6}3re@AcNs(WW;;P=cQF9rp(UuL_~P=q?R z*|`QvOL4`n*dGzOmQYB;C*$4%Rdq@1!-`MPjH3o*sS@3 z9}qzmiOxB<+kf?Ti&(;MB)|K*$NxDc_!n_1{zIHziW&~{%J84CY)O~kwh9-Brg)+9 z*z3RJf=SFIPl*%s^8=Y+$))e@2{MU*)b36Y(@qnPKVv_ACqx6yOx{KWzT`|eGOuc- z-1tgOc&^Q-ubR;=XS2WFpTK;DF6bV#J62TR#MTdw7Wr_pMhAiV3%&`$BM?-N;T|m|ThcAK5|njN~;X6g1Gag0MZldBu(p`ckigJul6K zwP6Zz;L1MRCIU6uTy;KFX7?w;=Y+LotT=s=XduVnxg;wHn>fy{ou%1=hg@-o6bW4O z0^O_?nCK#fDyD5KxujciRLGV{A+;U1)MLirQ9ldhwJ2-%DvZ}ITY*mMwhot_*F1a= zE74<4XqB&R6+kI144S+!TBBv1o$`mUWt0lK2&}(d35fK_R+S6h=`BZEeF*QjWTI^- zUHNWHuU+fuQ{2maNq#akP!t!jTVc$ZE(bT1|JdkH%g_p&H+XH?TE?;uUowK*rq}dV z=yh0ML(BEvKGxE^A*9WtTqtU_8(*s%ba?&zEPslDZfkgA7QpZR!Ra$4mo%`eyPMvN@vZ5p0eH%I)Er&Djii00lBdwYB>X2B$bm;^uPzQB1ecf z2NxwXwjk1R*M7?F%7cgP`TWm5QV)I;c&7JP+q=yy!xEJ_jK2H1Vw8yU4uKat*Nv^H23Wm(ihPGq%1 zF}^h3FVXC1k1F`0D63%7z{CsJ(J3p$dC?(+K`Q(>n0@3U#FRd+VeK8nrs2Y^z}>}} z>OkV8JyATVm3N(Ty;QnY1iv`3ir`4)8sX5aJ7I`gsM7cPrn}eqJT4%ln5qyYhSZ(( zKInOvr@2sQF#?zFKad|dP_*E1*N_g~Y0w(_oS9gBxOn%$kFll>s&u!1QvsmUhbMa9 z6C8s7oRD$;?^B$=!F~Z7d!zpeQFQo!$0q(WsVh=m>)RI!nHv}iSk%I5@H@29QXgnU z1f>y%g#=V5X{DsnO5YVT$!`v}-OvP0Aj0b|`DM>Rhv_z#x94j|2jQCE!s4LU(B&$# z^*F=h>f-a|@dLVtBgi_3x3hZzs$kA0h^E!Ahz;zfZCK+cfr##VN-qN6<1R-d3Uz8gX3%ZALW(h>`m?zcP zs4LmmHgiVEhQhXMT*V<)>{oasOIkc(JwniD{rDX@lbNS@`l*Z!)bcYtTH?#Oe$S6f zq`C(C3|`7ac%{B`WkOcWyQ9TIFh@I}Lu0eDTh9VZ+QQ9ykLX`^NCj^Ylaqu$FEc_Q zrgH#!|1B_ICbQb>Z-IUMr@;OtIP(8Q!2M6=o&%ATjiH{Uik_LHu#LU!|NJg*;3t2bT+`%9%_J(YfJs@Y=uKPb%B+2 znsUD;BX#vYCk-5q3@S$!H8@-#WeZ}%%3hgnW8k9lW)uS})`pV)Bs5D@YGlKaUbkhkXY#XKft#q{ZXUACz-jcZRBRm*Vl9arpP%3B*km zLZN;ZgqP@0GG2ES$=N4N6fl5X-T^Y%eelujQoikt<`PFbFHZriY&@<|H8%V<=@ z$$}3Y&fXPdf^r}cNdvbWVO4hVA1G&`o!QZ zM!x+y10{wt#tm$%B6?fh_lo%q4oq0SP*$gBKwk-|y#1PZ(UZ&tJH+f5`eS>EEHQr{ z;D$laW%BJ&3#CK%7u)?Lry}H^_xbyB6^%m+6m0wu>E1W6WqUl0a(+-oJ`fHOPX1l766v$-IB3l*xGwJD) z#%M$Fw+jo4K@S6xo?JXgIwJ$~NYLD+BuyC>7Q$``yD1@Mux4b<6>8L>L(Em_hp>U@ zYqVws&lm!DbF656G#ARVQQXjfI{HW=L1ceEYWU4poR# zNl5J*#X1TJsYg6%nSgg|$@KCBM?tdVK4)Be9j-g-8z|+MgwMjm?sQ6D4F7@N)QCdC zHk2Lj!(o)t59+Pqt!u>eS{7i7fK$ZoLkOGW%2uTYm#~-U4KX}>N&IcTJ&~%ROr>qx zh*D<7ErAPU_`8~TzUrVX$!JY50STE2CwoduVpyTH^fhS1l7*9*yT1o~MTBkfcYLVq z=tmw|sQg}nUcR%L_00dn+FN$Txh`F}3GVJ1+}(l`+}(mV8r*|Ju*M;{yK8WFclXAE zyAud{dS$)m%Uw}v+?t5vtB4TNTY(udS95y77fLo_4w(+@pbx+^ z`6v!)xrqL?{g^qm@v9bAx{dMSCQ#DX+w9}%dKc7^>uPGPvnWdg-%X(hJ2;-vb94?m zbmO>{^*U1J;HYw}t-%aMRg$O)ohmj))35|U(G4|ntnz66xW!ISW>9a{G8J6y<-ot? zf-bW_u!I-De5d0ut(*< zr<{`x&{*d?Z??VR0){F{3S}m}Ld(v&{%(+|kF9}-BHNu7tR2&6`J~5(c7?w(yTtB- z-K3JM$Q)j4KEAx>;NEjL?Bz|!T~Djxp`cyc?iMO&uc9fU4AHJ_DlHNBdgi&*X*Z}m z5RQPmIU5m2pgE&=At7^bgY34~BM7X5TBlDYJkQvr7GwQHN?M=kT=*nFL47VFA3jp|V_Vm_Z8p!x=qxd#x7oN}y85Ls)@UB0wPJVv z-TP&wL$Aoj?zu0>HQp}%{SG`N3l5I8K&6giclt-7up#9qndi`7Ik;uWw<`Y5yN!q) zSpw3Ng#!MeG*9R^ro^L)Q2eiwhI$ZWlshS3KJZF>q>R&_c_oO8$%V@PApL%tRlRzL zC5V}W{ShJ_IiDY^D{8kLR=Anu1v&LK`HNpbc|wo6&|JJvbj!1JH87pU@#`hD-QG>= zVK>Jm?#F~FC80iJrC12&*jAOmOjM*_ao5M*$oB_JONJ5`BFZXn{VAt26hGkQ&(Tv9 zy_HUK^xk0qsw!5LRe`eLiee4nzqO&L|4WYg*GejQ&4m3w!gR2zt~Gee=rx)!T_KXY zp|TFpTRQ}ZTs2_f_V`K+?Nq7bYqON=+U z;@mlwk^1s-aKQ3z$|0Fmh;J42h~)w(VI}kD=)3 zOsl7hk|^L19~;rAmYb;)ab4**?2^aThoW(wG8H`eIQY09-xyDrdFTvBz6L%hW6Umm zMtP+jQ98QQG;m;-D(tBvA>#f)J`ThfR>)<5PuewJDP7>;t0a?H^9dUl{(cg-JP*7e zmgTqy4VWg#&^*Jw%D+IFoIc7%BQPzEQ!8DVB%9N_ziNZAD#4V#6t}2R`rZ~4Quziz z7=U43QtlBT`!Yd^zFT?-n_~XlDM_a4nXO*2^>cTWitd)tTP=!?(1F?fMM;E&V=hG&`rp$efCK zt&JbPVmGijT{+r8RC@e_jE+bjfeeN-&(VY&;@@>L5>Ozgs-;~#vm}z;S1T=GjpG^Wtq-h0qNdI!u(zj7h}AV{eNy5b zO*CGSF9N<<i>3ht zQn}fVXQo6aEq>i~0;A&8u(2ZrNu_~Qy_GjFL?5A!uNaztZFygr^g8hvKLGHW^cU4+Qxo6vhexNPAoN zqrpp;}Cli23Y6}^!6rO%4o`(vakyKz;)T%In`Da z7=5Y5s35%G$EcUdc*5VmY=iHm<7aOqJt%-OGO`Xb4mOILUhbZrl-`{zTQoO!a&rrf z4kh`VyK{M{HJ)6@*)*l$A}<|t>KL@Hl<}(D^H-VtMoBGB%5GF5ep;z;B_1G?1~PLYN+N7P_p;8~zG+VaQ_?eE9nd7@(1RlqlAixTaS zt2WO`Db3YaI>|0fXsj(sOkXR@SR!wc^MTg97>i)3q z87`X%Y@{)g={GuL;V8JKT40pQWFRk?_E0PbPIl(u23B#Qi{;+OwT7=g$#U7#_IMML z1H~-jb2m8=>a`?k8Qq5Hl1KZN`&T}CGH?h|7s8EA1I zABZ<#&T?eS-ZGAjaEXgR!Yzlu{mg724Y12B*HXn>+dgiXnv~v_CeZ#tYmh$xf?!k(t}2MzEMjTCn5rNJB~K zO~h+%?A71k?l$lCw>dDgPaXhvUj?#t9DcXOATM=CC)nj zMCtF`IjJ~z@bfk+t!6`wR&wh)J6$QTG64=~@<)zdCDa7+)Cpu0NF=!1DhKT~j``aX z(LuciW+L#^SRFL(l(Xffjkqlsnhc)voZB-w0BBuzML1-tSTq^;pNZAJLN^Axa>HzD ze14F7G^UIJjDYpGa*rDEfccMIzhPLyhiy`_c~1w}*+YJ7XeUm4J1)s+H`6GZW(U=F zKfA>0&}r`W1un3I=Pm%U#aZ23l6K^!k!IABo1c9!WhLzAxT^5ns(e%h3fp!Zg&);2 zhlrvQ^F?XZWoZ|Abs=@?a*HYk@j&HlAC$HdLYoM5y=g_1#m}2T)BwkEOXoK8&$2Pp zxtwTeT#%oetDdo#rUp9PzYW5ggilE8noYh`d7t*%{n`kI6w4MWgWoDqK_4evCK=<^BgAz2^^o0jz2LDwflvP^S(($CQxq7BMQAHMd_w9(1yALF zJxzq+EQB~0Ldh6Cv!cG16pOJRkB1iJJf4j?cbownnEhCcXbhJzN98DojGATI)@CMf zwmk*sV=J-6 zcevy%bBW&hX*J=6ySl1CQ0oS|MW>XmacUEBkkI>C$Jq2*?>r z7kX+rY6>RVPE33D|9dk&zky6%HN9LSH5g#tf56d$8(=KYx`9r55W*!+W z{F2lR*!;QlbKxI`RFVeMM&Y3(l~sG*=#^k}J@})~;x7>~F*>*HnG5{Ta+Cv!s~VsI z0VEr5k`1fi24oc(&jHNTldq_w))yjV{WHt8ibIUfhq>J_#k?>Q_Aeu?_Jk5uQYC2o z>;VwyIAV^|M`$swXKewE4f!Rm9+?!{r`NO@<5^HwvDqp*sXaRswBvdG?8?Mq^%QHQ z=`*J!1BM);-dKKAM98d;u;XqIkA~$xQ|L!naARG;>Jd4+pC^0c&BPNkM1AAp6ieeu-(e zn)C+-h$-sq9zy(fK_GJfrku$_{ZW}Ly>GPzM1HxF#pMj=8g~GDt95I*Yu-+FwW|it zl?RMrbE4IC1|VO6$J}!>!q@`=6uT2VgqWSo5Kbq=8H6N7e-mF#CrA4=Cm=5`FOIGv zb0BT|!(>rH(uVIF&t?bjLmJ6TP(L}Ylb)c1@IXTHx#6cSXzj^2!b#PKYP`*lCI**( zwxcjZ?}XdI)sWV|t%k(@Gs{tXQv?s_UzyYE(=}iN@@S3mTce@^AU}zS0}=SB1JcGX zrwZFl607uAqo5+&ZLn!ZvDJC*LtLBoiuThbYfa&Co|nbW7FgFDH;3RVmzGn{#kNi>0os2mxRu}`P-Ky z!bSzFr{0^9ER@>mYDrqmukhFb68NsH)N|+15xWw=SaF)YT`%M&2mSz7 zAigL(9qOl;JVFWrPe+Z7NUK9@$NRmN1~_K&(p*C)K%`}J^!pJrPNc?F>iH&wdvH|bQkTuSrJG@Roj z0;K*3=YpWG&@uS)$DhVj2j%vsK4vUkLdngJsHMpk4@5Xa*9+ulrV&g{G_5``hGPp@ z3{y|S`%ISgJFhkFIa`B%NY;dMA+y~M7j+uLflMm^9U30~C{DN4c=cRE=mwMfoh;sE zZ6BT=%TAV#=t4@CRL%73qv`7l-|JC(1|OQ|6#nhk z&vp~ModC{-CjRRoi2tGR6aP=(RdnSD!R5bVt+{JdTEAR_!Ag>Gz9SQzy1KWDcn_f! z;u*-4gRMMXW_bm>V4if=Pvr~t<231(()A|+Or6IfNasm!@R1TT^K%m4xA&Ltor5Ot z?yg3)x~O{*OHW?QNV%USgl(GmVliaq7ZWwxm{Vg4<9el0xPwcB6z~mF>dl@PfXb50 zk5{9@W)vFXX36Z_8B^k}mL5khZQ=0A<*!W!Xn<%!sM6@Tax1|@T1Tp#t^8oA^_vqW z+|Qyv_4L9;;C*n27AMV8nh(hmUh9TR7xRh=5R+MNToiD9pjNk;zzV>*Z7xweLF4vM z?p$vf4`;;!*La74fe>W;_E#TdNu2P^iHg&vNmFf^zof+qomh45vH@{P1R_B;n*8oE z4&1-d;UQ_@--bI6GghC_uiJFS+|}Ss3dn9rq~lNP6}G?4IT^vI(=O9JnA8nBypfp~ z<3+i$Z6yk`Jd0l8PzW1oq36@SEVKiZPD4h8RoZ*{-J16Z<#osaX|||`B!MU^GWh1K zCJau~0MLagE6A)v>W{u-pHIQIDu5SeD7$n6YI{lPMZvHkr<6Zt(bp`Ls8Cc;s)It98L0n^+m6g=Z z4CjN5)Zedvoat&r@Uk*aD>}hY2#n$o=v_`-^mDBUaF1f!zG{^!dZoFdL4 zJhFe}JnDA07R-&*yWU>t8Z{`x8jCiyS)R)2Xs>u)XNR3N_-nR3oMyI;#>^ z-_{;{)#dj|j5^6#J|!u!RxevJbY} z*=ixsZqxVR3uv_EdP|jLnt_b3T-RuGg3^PIKO?|4HTOnGfVcyB-GiQCHmLxQuDz%x zx=3I{KI&%hWb_L7SH({&IO88KUvl4MHXG9#REj%GIYl0S`84XxCNHvATNyXP`%2&3 zUq6{o;Dk@deUBq-ywAa$-OF9ObS+gkjIiz3z}q_xw~6_x)XLID0VLZ|}3g+JJaNCBon z`n@ZC_yf0*q9hwfY|a%T+YD4cqj7DF{W>8-dk3@68HVw$a4IeMiV?U$I0#bQfyMk4 z*LacXb>323{POz*g!*o(S`jZRv!PKqJQ_(c;V7IK{k9(nm)FBO&kj#9hbOK-;9gN5 zr|DS3VoPyYzSUm@$?(-vRkwj``>bo+pp0uylD=_mO2paO`sOGeh}@XAJ;xbZ-3$3V zA2ecFcY@j=pi$$OLcF>6RK}Pqav8lR{iu^h@s{IU5l|3R9u(~Ng@H@*Ydw9gxOS&r zT@Ze+_jz04atlFUkm%VAEbh`4hIDO1$CzstW|2XVx35geJasI`(Md}BCv-$+fo7B< zhrp1*QnF?s1xaZQDehjy=@$1V`B56VLuP<$oPXIklY8@l5&S)Toxnpk5%A)vCQe_p zrSaY`%VP?%!qkogBfRYyuyRIdqTXI!*f5H*Z;&b?#my=8M1Lez!S$lKvg>M!`Pvfx zoE7;^fCceeEQ7a4iUoMIsY|;Xs%9_z8a{xy_8e)0uC*qdfl!VnJa+dBmoaMxWwXnq zRKKhHnzz3>_nQ@UUqAVvH5ciH5svk5?E{{_!UfG)mSK9ZWdKphWX+NbiCo0pmFr>_}e*Zq@%)O(W?(cG{5^t-Iu(-)v>=n<3 z`&$T*JM*d*ny)y0YjdIBEs(4mR&FbT*sE~954qxEH%p8IVgUx(O+#Btd>rQiwaPx? zm6NPCEzM!N&{&S?fX_3hLr#YGHo8%&pqatWd2%jh&00QLZL<z z<~UrKde_2hN`n)w0d@P(_sznP-mOOL33HzPLFqp5+*-T>8QwsSf0~TzQIg;(yyB>4 zztl~%dvxzq6|P0Z5PAttKmQAQ3%u&uNB0M8#Lenk=#@MJhnunuRdcNx_}xfb)~MiYv2Y~^dAfI%DN?~HgV5OFbolG?bp2}= z>~f%d?I)c=!ETbWRmY5~+0k(7Gg;wm=P5x$p@X%jgYwO{chx}`_?|2VHcW2?+^#z! z%S^5kT&q@}xH9af>RmQnPK}o=;p5tRFxldJ#$&4tg;y?0wSA;X+|%_%hz2UQPBKdVG5qRv72( z1+5xGzXoFF=jHXAbgN7nIVmt!I=KbP9M*=4Er%Z>bK{@18s6G~@eg`~g6fueZGNbm zVror9$M^k~Ggb*!$cEyjz9TtVuDZ3YPz1$Cbww1QivHgMNmp>LX_HG-(_Vs1lhVB~ zeG*C!>0dRPkO2z{F=Z5bz=0+?98kr~pzR58_;v0J+68>p=yE@f7O1KL;FIJfwdhS(=yl zxt93Z(sl_I@Q`=8$FPQ>(ygL6D$%X-<~4Zd*AP~&ps59;HHDKEC5nfFM!$sOQ{fwH z#)@Jks>3nGqtxUKlgW;1he`y8X!G@ePr>1cL63>ucd1^-J{ev|t-n)aar_Y*vop=y z9q9Q@_vC#M55yWX4a9hY6y$hP{QGb-x^J3_(AwHEu(XML?;`eU-pQE>>C)1}o2kpt z$Hk2nV1LF3?raaPv?j~sCbs+oQ%(q|bVyaSY;ezdh+JGagk^ZoS9-&ZGNJnxiL z%;8W`%g3@$`P}Y>lKt(vce^*fFzzev*slX2Rv^6WmPSz|`G&=aC8V`@=bGp`$w%MT%^@#5ztHuKboqM;z! zco;{Bdd*Qlx*79!^bB!TZsa9rgw^S@rFA)ujr?8w5~u4=Js4E6gYl_uF_^yiR;GqV zWoZQ8pwB=ViTHY!veKfZ?HrQJ;c}=lvh+lpI~8}FeT>F14-D;GwmePSAzlZ$Y-s{MMcNrh$mCi)|7%XJdTEmi(%Y@ zR@yjy6PlExJeLHZ)8QuMFU%M^ka1j8H{;}@YT0c6yLIa0@jnXqYCZ5D2u^1b|Lybh zpT;J^s``J`M}lIApsEO_M2G-#=90pCtV&6UL0rmM?F416qa7E1Til|$iAhFyw(D$Z z5lm9=-Ja~-z$?3#tsWSfl}xWG-g|5F&X~1wij$0+gUrWNx3g^TK3r;+GKhBc$ zSPt)eMxsbdoLIiV_ll80F9i%UFPZ&dXcr^Ct8beDJLJR>R=ue-QqakKr4&`Tf>PI7 z(j*mTw6?E2_LcW%V^sE+E%0{Mv(xYrStlzuB7VfGK+3xPRpXCc;`wIe3hWi(>#PZNMc*mFV`V_AFq-Q?g zy-wcs9$|IMzbR2Er*cAgzvH(sgy}hD(Q#Fpb%wkRvRf&LhyTho{>sQc2KYj*r zp?EV@%cAJqh#i9xOd7!^b`fDcp6ZWaZWc(}!&0hJ4N=y(iNW}H^>a4;k<-b2$i~UT zX%uDwzvOFXw0WgEU80YsQUoR1@n$%>f@5e|Q8F2_$ozo(QLE6@!&!Fits+*15AYGi zf#1DuNui&jKg)V&6Qy@k`c}dQF4{!qvwj(P{c~*72c78j9GuAz{9Ba%Q-c}&moFH& z#{$GjVvb;HfL4dnE64dlS454$YCs>R5Kf>R4=%MW+gSPAR#K_RBwuMTruze>P+w(8 zBJIlu5qo4d#=SP5Hh%nHrL9ymh?bd2Y~$zPwZ@NAc5&Xk(OubMfG6I$JBX?w2=^3l zsV&{p@Zlizq?HF_qec

>R0iK5u^zf+pr<6=c;)THJ%D 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≫g|&eW7PjUh7H>I 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

%Z7*I&)+rv3G4cbOpPUeSpLNGj^{58{XIoRFF8 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 + diff --git a/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/FlutterEmbedUnityAndroidPlugin.kt b/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/FlutterEmbedUnityAndroidPlugin.kt new file mode 100644 index 0000000..ce87978 --- /dev/null +++ b/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/FlutterEmbedUnityAndroidPlugin.kt @@ -0,0 +1,129 @@ +package com.learntoflutter.flutter_embed_unity_android + +import com.learntoflutter.flutter_embed_unity_android.constants.FlutterEmbedConstants.Companion.logTag +import com.learntoflutter.flutter_embed_unity_android.constants.FlutterEmbedConstants.Companion.uniqueIdentifier +import com.learntoflutter.flutter_embed_unity_android.messaging.SendToFlutter +import com.learntoflutter.flutter_embed_unity_android.messaging.SendToUnity +import com.learntoflutter.flutter_embed_unity_android.platformView.UnityViewFactory +import com.learntoflutter.flutter_embed_unity_android.unity.ResumeUnityOnActivityResume +import com.learntoflutter.flutter_embed_unity_android.unity.UnityPlayerSingleton +import io.flutter.embedding.engine.plugins.FlutterPlugin +import io.flutter.embedding.engine.plugins.activity.ActivityAware +import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding +import io.flutter.plugin.common.MethodChannel +import io.flutter.Log +import io.flutter.embedding.engine.plugins.lifecycle.HiddenLifecycleReference + +/** + * This is the entry point for the plugin. The Flutter engine will call onAttachedToEngine first. + * + * The plugin implements ActivityAware so that it can respond to Android activity-related events. + * See https://docs.flutter.dev/release/breaking-changes/plugin-api-migration#uiactivity-plugin + * and https://api.flutter.dev/javadoc/io/flutter/embedding/engine/plugins/activity/ActivityAware.html + * */ +class FlutterEmbedUnityAndroidPlugin : FlutterPlugin, ActivityAware { + // The MethodChannel that will the communication between Flutter and this plugin: + private lateinit var channel: MethodChannel + // Messages from Flutter to this plugin will be sent to Unity via this: + private val methodCallHandler = SendToUnity() + // This lifecycle observer works around an issue with Unity freezing sometimes when + // the app is brought back into foreground + private val resumeUnityOnActivityResume = ResumeUnityOnActivityResume() + // This is just so we can unregister the resumeUnityOnActivityResume lifecycle observer: + private var activityPluginBinding: ActivityPluginBinding? = null + + override fun onAttachedToEngine(flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) { + Log.d(logTag, "onAttachedToEngine") + // Register for messages from Flutter + channel = MethodChannel(flutterPluginBinding.binaryMessenger, uniqueIdentifier) + channel.setMethodCallHandler(methodCallHandler) + // Register the method channel with SendToFlutter static class (which is called by Unity) + // so messages from Unity to this plugin can be forwarded on to Flutter + SendToFlutter.methodChannel = channel + + // Register a view factory + // On the Flutter side, when we create a PlatformView with our unique identifier: + // AndroidView( + // viewType: Constants.uniqueViewIdentifier, + // ) + // the UnityViewFactory will be invoked to create a UnityPlatformView: + flutterPluginBinding + .platformViewRegistry + .registerViewFactory( + uniqueIdentifier, + UnityViewFactory() + ) + } + + override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) { + Log.d(logTag, "onDetachedFromEngine") + channel.setMethodCallHandler(null) + } + + // ActivityAware + override fun onAttachedToActivity(binding: ActivityPluginBinding) { + Log.d(logTag, "onAttachedToActivity") + // UnityPlayerSingleton needs the activity which will be received in onAttachedToActivity + // so that the UnityPlayer can be created + UnityPlayerSingleton.flutterActivity = binding.activity + + // See comments on ResumeActivityOnActivityResume for explanation of why this is needed + (binding.lifecycle as HiddenLifecycleReference) + .lifecycle + .addObserver(resumeUnityOnActivityResume) + // So we can remove the observer later on detach + activityPluginBinding = binding + } + + // ActivityAware + override fun onDetachedFromActivityForConfigChanges() { + Log.w( + logTag, "onDetachedFromActivityForConfigChanges - this means the Flutter activity " + + "for your app was destroyed to process a configuration change. This scenario is not supported " + + "and may lead to unexpected behaviour or crashes. You may be able to prevent configuration " + + "changes causing the activity to be destroyed by adding values to the android:configChanges " + + "attribute for your main activity in your app's AndroidManifest.xml. For example, if this " + + "happened on orientation change, add orientation|keyboardHidden|screenSize|screenLayout to " + + "android:configChanges. See " + + "https://developer.android.com/guide/topics/resources/runtime-changes#restrict-activity " + + "for more information" + ) + // This will be called if the Activity is destroyed / recreated due to a 'configuration change'. + // Not sure if this can be handled at all - UnityPlayer is designed to only run in it's own + // activity, on a separate process, and not to be reused + // See https://docs.unity3d.com/Manual/UnityasaLibrary-Android.html + // TODO(Is there any way to handle FlutterActivity onDestroy()?) + + UnityPlayerSingleton.flutterActivity = null + // Remove the lifecycle observer + (activityPluginBinding?.lifecycle as? HiddenLifecycleReference) + ?.lifecycle + ?.removeObserver(resumeUnityOnActivityResume) + } + + // ActivityAware + override fun onReattachedToActivityForConfigChanges(binding: ActivityPluginBinding) { + Log.d(logTag, "onReattachedToActivityForConfigChanges") + UnityPlayerSingleton.flutterActivity = binding.activity + + // See comments on ResumeActivityOnActivityResume for explanation of why this is needed + (binding.lifecycle as HiddenLifecycleReference) + .lifecycle + .addObserver(resumeUnityOnActivityResume) + // So we can remove the observer later on detach + activityPluginBinding = binding + } + + // ActivityAware + override fun onDetachedFromActivity() { + Log.w(logTag, "onDetachedFromActivity - this means the Flutter activity " + + "for your app was destroyed. This scenario is not supported") + // TODO(Is there any way to handle FlutterActivity onDestroy()?) + UnityPlayerSingleton.flutterActivity = null + + // Remove the lifecycle observer + (activityPluginBinding?.lifecycle as? HiddenLifecycleReference) + ?.lifecycle + ?.removeObserver(resumeUnityOnActivityResume) + } +} diff --git a/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/constants/FlutterEmbedConstants.kt b/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/constants/FlutterEmbedConstants.kt new file mode 100644 index 0000000..5a277da --- /dev/null +++ b/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/constants/FlutterEmbedConstants.kt @@ -0,0 +1,15 @@ +package com.learntoflutter.flutter_embed_unity_android.constants + +class FlutterEmbedConstants { + companion object { + const val logTag = "FlutterEmbedLog" + // A unique identifier used by the PlatformViewFactory to identify the Unity Player view, + // and as the unique name of the method channel used for communication between Flutter and native + // Should be the same value in flutter_embed_unity/flutter_embed_unity_platform_interface/lib/flutter_embed_constants.dart + const val uniqueIdentifier = "com.learntoflutter/flutter_embed_unity" + const val methodNameSendToUnity = "sendToUnity" + const val methodNameSendToFlutter = "sendToFlutter" + const val methodNamePauseUnity = "pauseUnity" + const val methodNameResumeUnity = "resumeUnity" + } +} \ No newline at end of file diff --git a/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/messaging/SendToFlutter.java b/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/messaging/SendToFlutter.java new file mode 100644 index 0000000..50cfd63 --- /dev/null +++ b/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/messaging/SendToFlutter.java @@ -0,0 +1,41 @@ +package com.learntoflutter.flutter_embed_unity_android.messaging; + +import static com.learntoflutter.flutter_embed_unity_android.constants.FlutterEmbedConstants.logTag; +import static com.learntoflutter.flutter_embed_unity_android.constants.FlutterEmbedConstants.methodNameSendToFlutter; + +import android.os.Handler; +import android.os.Looper; + +import androidx.annotation.Keep; + +import io.flutter.Log; +import io.flutter.plugin.common.MethodChannel; + +/** + * DO NOT change the name of this class, it's package location or function names: they are + * referenced in C# Unity scripts (/Assets/FlutterEmbed/SendToFlutter/SendToFlutter.cs) + * using reflection, so changing names or location will break people's projects. This also + * means this class must be Java, not Kotlin, because Kotlin companion object methods do not compile + * to Java static methods. + */ + +// IMPORTANT: Do not remove @Keep annotations, they tell the minifier not to remove or rename +// these elements during compilation so that refection from Unity C# does not break on release build +@Keep +public class SendToFlutter { + public static MethodChannel methodChannel = null; + + // IMPORTANT: Do not remove @Keep annotations, they tell the minifier not to remove or rename + // these elements during compilation so that refection from Unity C# does not break on release build + @Keep + public static void sendToFlutter(String data) { + new Handler(Looper.getMainLooper()).post(() -> { + if(methodChannel != null) { + methodChannel.invokeMethod(methodNameSendToFlutter, data); + } + else { + Log.e(logTag, "Couldn't send message from Android to Flutter: method channel not registered"); + } + }); + } +} diff --git a/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/messaging/SendToUnity.kt b/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/messaging/SendToUnity.kt new file mode 100644 index 0000000..432c1ff --- /dev/null +++ b/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/messaging/SendToUnity.kt @@ -0,0 +1,33 @@ +package com.learntoflutter.flutter_embed_unity_android.messaging + +import com.learntoflutter.flutter_embed_unity_android.constants.FlutterEmbedConstants.Companion.methodNamePauseUnity +import com.learntoflutter.flutter_embed_unity_android.constants.FlutterEmbedConstants.Companion.methodNameResumeUnity +import com.learntoflutter.flutter_embed_unity_android.constants.FlutterEmbedConstants.Companion.methodNameSendToUnity +import com.learntoflutter.flutter_embed_unity_android.unity.UnityPlayerSingleton +import com.unity3d.player.UnityPlayer +import io.flutter.plugin.common.MethodCall +import io.flutter.plugin.common.MethodChannel + +class SendToUnity: MethodChannel.MethodCallHandler { + + override fun onMethodCall(call: MethodCall, result: MethodChannel.Result) { + when (call.method) { + methodNameSendToUnity -> { + val gameObjectMethodNameData = (call.arguments as List<*>).filterIsInstance() + UnityPlayer.UnitySendMessage( + gameObjectMethodNameData[0], // Unity game object name + gameObjectMethodNameData[1], // Game object method name + gameObjectMethodNameData[2]) // Data + } + methodNamePauseUnity -> { + UnityPlayerSingleton.getInstance()?.pause() + } + methodNameResumeUnity -> { + UnityPlayerSingleton.getInstance()?.resume() + } + else -> { + result.notImplemented() + } + } + } +} \ No newline at end of file diff --git a/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/platformView/IUnityViewStackable.kt b/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/platformView/IUnityViewStackable.kt new file mode 100644 index 0000000..235b448 --- /dev/null +++ b/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/platformView/IUnityViewStackable.kt @@ -0,0 +1,9 @@ +package com.learntoflutter.flutter_embed_unity_android.platformView + +import com.learntoflutter.flutter_embed_unity_android.unity.UnityPlayerSingleton + +interface IUnityViewStackable { + fun attachUnity(unityPlayerSingleton: UnityPlayerSingleton) + fun detachUnity() + var onDispose: (() -> Unit)? +} \ No newline at end of file diff --git a/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/platformView/UnityView.kt b/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/platformView/UnityView.kt new file mode 100644 index 0000000..93377fe --- /dev/null +++ b/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/platformView/UnityView.kt @@ -0,0 +1,78 @@ +package com.learntoflutter.flutter_embed_unity_android.platformView + +import android.content.Context +import android.graphics.Color +import android.view.View +import android.widget.FrameLayout +import com.learntoflutter.flutter_embed_unity_android.constants.FlutterEmbedConstants.Companion.logTag +import com.learntoflutter.flutter_embed_unity_android.unity.UnityPlayerSingleton +import io.flutter.Log +import io.flutter.plugin.platform.PlatformView + + +class UnityView(viewFactoryContext: Context) : PlatformView, IUnityViewStackable { + + // UnityPlayerCustom extends UnityPlayer, which is itself a View. So in theory we could + // just use UnityPlayerCustom as the view returned from this PlatformView. However there + // is a problem: + // + // - The view returned by PlatformView must be the same context which is passed to the + // PlatformViewFactory onCreate method, otherwise we get this warning: + // "Unexpected platform view context for view ID 0; some functionality may not work correctly. + // When constructing a platform view in the factory, ensure that the view returned from + // PlatformViewFactory#create returns the provided context from getContext()" + // - The unityEngineSingleton is created using the activity returned from the flutter + // binding. This is not the same context, so adding the unityEngineSingleton directly + // results in the warning above + // + // The solution used here is to use an intermediate View (a FrameLayout) which sits between + // the PlatformView and UnityPlayerCustom. Then we can construct the FrameLayout using the + // context from the view factory, and add the UnityPlayer to that + private val baseView: FrameLayout = FrameLayout(viewFactoryContext) + + override var onDispose: (() -> Unit)? = null + + override fun attachUnity(unityPlayerSingleton: UnityPlayerSingleton) { + baseView.addView(unityPlayerSingleton) + Log.i(logTag, "Attached Unity to view") + } + + override fun detachUnity() { + if(baseView.childCount > 0) { + baseView.removeViewAt(0) + Log.i(logTag, "Detached Unity from view") + } + else { + // This might happen (but probably not desirable) if a view lower down + // on the stack is being disposed + Log.w(logTag, "Detached called on view, but couldn't find Unity") + } + } + + + // PlatformView + override fun getView(): View { + // The view returned by PlatformView must be created from the same context + // which is passed to the PlatformViewFactory onCreate method + return baseView + } + + // PlatformView + override fun onFlutterViewAttached(flutterView: View) { + super.onFlutterViewAttached(flutterView) + Log.d(logTag, "UnityPlatformView onFlutterViewAttached") + } + + // PlatformView + override fun onFlutterViewDetached() { + Log.d(logTag, "UnityPlayerCustom onFlutterViewDetached") + UnityPlayerSingleton.getInstance()?.pause() + super.onFlutterViewDetached() + } + + // PlatformView + override fun dispose() { + Log.d(logTag, "UnityPlatformView dispose") + onDispose?.invoke() + } +} \ No newline at end of file diff --git a/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/platformView/UnityViewFactory.kt b/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/platformView/UnityViewFactory.kt new file mode 100644 index 0000000..55ae370 --- /dev/null +++ b/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/platformView/UnityViewFactory.kt @@ -0,0 +1,67 @@ +package com.learntoflutter.flutter_embed_unity_android.platformView + +import android.content.Context +import android.graphics.Color +import android.view.View +import android.view.ViewGroup +import android.widget.RelativeLayout +import android.widget.TextView +import com.learntoflutter.flutter_embed_unity_android.constants.FlutterEmbedConstants.Companion.logTag +import com.learntoflutter.flutter_embed_unity_android.unity.UnityPlayerSingleton +import io.flutter.BuildConfig +import io.flutter.Log +import io.flutter.plugin.platform.PlatformView +import io.flutter.plugin.platform.PlatformViewFactory + + +class UnityViewFactory : PlatformViewFactory(null) { + + + private val unityViewStack = UnityViewStack() + + override fun create(context: Context, viewId: Int, args: Any?): PlatformView { + Log.d(this.toString(), "UnityViewFactory creating view $viewId") + + try { + val view = UnityView(context) + unityViewStack.pushView(view) + return view + } + catch (e: NoClassDefFoundError) { + val errorMessage = "Unity library not found. Your exported Unity " + + "project is not correctly linked to your Android app. Make sure " + + "you have followed the required setup steps in the " + + "flutter_embed_unity README, in particular the modifications to " + + "your project's settings.gradle, properites.gradle, and your " + + "app module's build.gradle." + Log.e(logTag, errorMessage) + return createErrorView(context, errorMessage) + } + catch(e: Throwable) { + val errorMessage = e.message ?: e.toString() + Log.e(logTag, errorMessage) + return createErrorView(context, errorMessage) + } + } + + private fun createErrorView(context: Context, errorMessage: String) : PlatformView { + return object : PlatformView { + override fun getView(): View { + val layout = RelativeLayout(context) + layout.setBackgroundColor(Color.YELLOW) + if(BuildConfig.DEBUG) { + val textView = TextView(context) + textView.text = errorMessage + textView.setTextColor(Color.BLACK) + val params: RelativeLayout.LayoutParams = + RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT) + params.addRule(RelativeLayout.CENTER_IN_PARENT) + textView.layoutParams = params + layout.addView(textView) + } + return layout + } + override fun dispose() {} + } + } +} diff --git a/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/platformView/UnityViewStack.kt b/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/platformView/UnityViewStack.kt new file mode 100644 index 0000000..0127258 --- /dev/null +++ b/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/platformView/UnityViewStack.kt @@ -0,0 +1,102 @@ +package com.learntoflutter.flutter_embed_unity_android.platformView + +import android.view.WindowManager +import com.learntoflutter.flutter_embed_unity_android.constants.FlutterEmbedConstants.Companion.logTag +import com.learntoflutter.flutter_embed_unity_android.unity.UnityPlayerSingleton +import io.flutter.Log +import io.flutter.util.ViewUtils + +/** + * This class is responsible for making sure that Unity is only ever attached to the + * topmost view in the stack. Unity cannot be attached to more than one view, so there + * should only ever be one EmbedUnity widget on a Flutter screen - however we still + * need to account for the fact that when pushing a new Flutter route / screen onto + * the Navigator stack, both screens are still alive and so we can end up with more + * than one PlatformView at the same time (but only the top one will be visible) + */ +class UnityViewStack { + // This could possibly be implemented as a Queue / Stack collection, but it may + // be possible that a view which isn't the topmost one gets disposed (eg during + // a Navigator.of(contect).pushAndRemoveUntil ?) so safest just to use a list + private val viewStack = ArrayList() + + fun pushView(view: IUnityViewStackable) { + // Unity can only be attached to one view at a time. Therefore, check + // if there are any other active views, and detatch Unity from them first + for(existingView in viewStack) { + existingView.detachUnity() + } + + // Then attach Unity to the new view + val unityPlayerSingleton = UnityPlayerSingleton.getOrCreateInstance() + if(unityPlayerSingleton != null) { + view.attachUnity(unityPlayerSingleton) + + // It's important to call windowFocusChanged, otherwise unity will not start + // (not sure why - UnityPlayer is undocumented) + unityPlayerSingleton.windowFocusChanged(unityPlayerSingleton.requestFocus()) + // I don't know why, but when Unity is detached from an existing view and + // added to a new view, we need to pause AND resume instead of just resume: + unityPlayerSingleton.pause() + unityPlayerSingleton.resume() + + // Unity on Android always forces hiding the status bar. + // See https://forum.unity.com/threads/status-bar-always-hidden-on-android.362779 + // See https://github.com/Over17/UnityShowAndroidStatusBar + // This is a workaround to show the status bar: + // TODO: FLAG_FULLSCREEN is deprecated, what to replace it with? + // unityEngineSingleton.windowInsetsController?.show(WindowInsets.Type.statusBars()) doesn't seem to work... + ViewUtils.getActivity(unityPlayerSingleton.context)?.window?.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN) + + Log.i(logTag, "Attached Unity to new view") + } + else { + Log.e(logTag, "Unity hasn't been attached to the view because UnityPlayer " + + "couldn't be created") + } + + // Register for onDispose event so we can pop the stack when this view is disposed + view.onDispose = { + popView(view) + } + + // Add view to the stack + viewStack.add(view) + } + + private fun popView(view: IUnityViewStackable) { + // Detatch Unity from the view + view.detachUnity() + + // Remove from the stack + viewStack.remove(view) + + if(viewStack.isNotEmpty()) { + // If there are any remaining views in the stack, attach Unity to the last view to be + // added to the stack + val unityPlayerSingleton = UnityPlayerSingleton.getInstance() + if(unityPlayerSingleton != null) { + viewStack.last().attachUnity(unityPlayerSingleton) + Log.i(logTag, "Reattached Unity to existing view") + // I don't know why, but when Unity is reattached to an existing view + // we need to pause AND resume (even though Unity was never paused?): +// unityPlayerSingleton.windowFocusChanged(unityPlayerSingleton.requestFocus()) + unityPlayerSingleton.pause() + unityPlayerSingleton.resume() + } + else { + Log.e(logTag, "Unity hasn't been reattached to the last view in the " + + "stack because UnityPlayer was null") + } + } + else { + // No more Unity views, so pause + Log.i(logTag, "No more EmbedUnity views in stack, pausing Unity") + UnityPlayerSingleton.getInstance()?.pause() + // DO NOT call unityPlayerCustom.destroy(). UnityPlayer will also kill the process it is + // running in, because it was designed to be run within it's own activity launched in it's + // own process. We can't make FlutterActivity launch in it's own process, because it's the + // main (and usually the only) activity. + } + } +} diff --git a/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/unity/CopyMotionEvent.kt b/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/unity/CopyMotionEvent.kt new file mode 100644 index 0000000..d492794 --- /dev/null +++ b/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/unity/CopyMotionEvent.kt @@ -0,0 +1,56 @@ +// source https://gist.github.com/sebschaef/b803da53217c88e8c691aeed08602193 + +package com.learntoflutter.flutter_embed_unity_android.unity + +import android.view.MotionEvent + +/* + Copies a MotionEvent. Use the named parameters to modify immutable properties. + Don't forget to recycle the original event if it is not used anymore. +*/ +fun MotionEvent.copy( + downTime: Long = getDownTime(), + eventTime: Long = getEventTime(), + action: Int = getAction(), + pointerCount: Int = getPointerCount(), + pointerProperties: Array? = + (0 until getPointerCount()) + .map { index -> + MotionEvent.PointerProperties().also { pointerProperties -> + getPointerProperties(index, pointerProperties) + } + } + .toTypedArray(), + pointerCoords: Array? = + (0 until getPointerCount()) + .map { index -> + MotionEvent.PointerCoords().also { pointerCoords -> + getPointerCoords(index, pointerCoords) + } + } + .toTypedArray(), + metaState: Int = getMetaState(), + buttonState: Int = getButtonState(), + xPrecision: Float = getXPrecision(), + yPrecision: Float = getYPrecision(), + deviceId: Int = getDeviceId(), + edgeFlags: Int = getEdgeFlags(), + source: Int = getSource(), + flags: Int = getFlags() +): MotionEvent = + MotionEvent.obtain( + downTime, + eventTime, + action, + pointerCount, + pointerProperties, + pointerCoords, + metaState, + buttonState, + xPrecision, + yPrecision, + deviceId, + edgeFlags, + source, + flags + ) \ No newline at end of file diff --git a/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/unity/FakeUnityPlayerActivity.java b/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/unity/FakeUnityPlayerActivity.java new file mode 100644 index 0000000..0554e30 --- /dev/null +++ b/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/unity/FakeUnityPlayerActivity.java @@ -0,0 +1,26 @@ +package com.learntoflutter.flutter_embed_unity_android.unity; + +import io.flutter.embedding.android.FlutterActivity; + +/** + * A convenience Activity which implements the IFakeUnityPlayerActivity + * interface for you. If your MainActivity cannot extend this class + * (for example, because your MainActivity is already extending a different + * class), your MainActivity should implement IFakeUnityPlayerActivity + * and MUST store the provided object as a public field called mUnityPlayer. + * See comments on IFakeUnityPlayer for more details. + */ +public class FakeUnityPlayerActivity extends FlutterActivity implements IFakeUnityPlayerActivity { + + // don't change the name of this variable; referenced from native code + // See com.unity3d.player.UnityPlayerActivity.java + public Object mUnityPlayer; + + // This is called at Runtime by the flutter_embed_unity plugin. + // It will pass an instance of com.unity3d.player.UnityPlayer + // as the object. + @Override + public void setmUnityPlayer(Object mUnityPlayer) { + this.mUnityPlayer = mUnityPlayer; + } +} \ No newline at end of file diff --git a/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/unity/IFakeUnityPlayerActivity.java b/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/unity/IFakeUnityPlayerActivity.java new file mode 100644 index 0000000..73f4fe6 --- /dev/null +++ b/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/unity/IFakeUnityPlayerActivity.java @@ -0,0 +1,22 @@ +package com.learntoflutter.flutter_embed_unity_android.unity; + +/** + * Unity code assumes that UnityPlayer is only ever run inside + * UnityPlayerActivity.java (you can find the source for this + * class in unityLibrary/src/main/java/com/unity3d/player), + * Unfortunately, native Unity code therefore assumes it can + * find a property called mUnityPlayer in the Activity which + * UnityPlayer runs inside. If it doesn't find this, it will + * crash (usually when attempting to launch XR features). To + * work around this issue, we need to add a property named + * mUnityPlayer in the Flutter main activity. At runtime, the + * plugin will check if your MainActivity implements this + * interface: if it does, it will pass an instance of + * UnityPlayer to be stored in mUnityPlayer. If your Unity + * export uses XR, your app's Flutter activity MUST implement + * this interface and MUST store the given object in a member + * variable called mUnityPlayer. + */ +public interface IFakeUnityPlayerActivity { + void setmUnityPlayer(Object mUnityPlayer); +} diff --git a/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/unity/ResumeUnityOnActivityResume.kt b/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/unity/ResumeUnityOnActivityResume.kt new file mode 100644 index 0000000..b282d3b --- /dev/null +++ b/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/unity/ResumeUnityOnActivityResume.kt @@ -0,0 +1,24 @@ +package com.learntoflutter.flutter_embed_unity_android.unity + +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.LifecycleEventObserver +import androidx.lifecycle.LifecycleOwner +import com.learntoflutter.flutter_embed_unity_android.constants.FlutterEmbedConstants.Companion.logTag +import io.flutter.Log + + +// Sometimes (not always) when the Activity is resumed, Unity appears to be frozen. +// There must be something internal in UnityPlayer which does this? +// So, add a lifecycle observer so we can resume Unity. +class ResumeUnityOnActivityResume : LifecycleEventObserver { + override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) { + //Log.d(logTag, "Detected lifecycle change $event") + + if (event == Lifecycle.Event.ON_RESUME) { + Log.d(logTag, "Activity resumed, resuming Unity") + // For some reason, we need to pause first, and then resume. Not sure why. + UnityPlayerSingleton.getInstance()?.pause() + UnityPlayerSingleton.getInstance()?.resume() + } + } +} diff --git a/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/unity/UnityPlayerSingleton.kt b/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/unity/UnityPlayerSingleton.kt new file mode 100644 index 0000000..1a0a6da --- /dev/null +++ b/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/unity/UnityPlayerSingleton.kt @@ -0,0 +1,146 @@ +package com.learntoflutter.flutter_embed_unity_android.unity + +import android.annotation.SuppressLint +import android.app.Activity +import android.view.InputDevice +import android.view.MotionEvent +import android.view.View +import com.learntoflutter.flutter_embed_unity_android.constants.FlutterEmbedConstants.Companion.logTag +import com.unity3d.player.UnityPlayer +import io.flutter.Log + + +@SuppressLint("ViewConstructor") +class UnityPlayerSingleton private constructor (activity: Activity) : UnityPlayer(activity) { + companion object { + // We must use a singleton UnityPlayer, because it was never designed to be + // reused in multiple views. Calling unityPlayer.destroy() will kill the + // whole process the FlutterActivity runs in. The workaround is to only + // create UnityPlayer once, and keep it alive when the view is disposed + // so it can be reattach onto the next view. I think it's okay to suppress + // warning about static field leak because the UnityPlayer must be kept + // alive while the app is running + @SuppressLint("StaticFieldLeak") + private var singleton: UnityPlayerSingleton? = null + + // The UnityPlayer requires a reference to the activity it is running in + // when creating it. For Flutter, this means the main Flutter activity. + // This should be set by the plugin onAttachedToActivity() + @SuppressLint("StaticFieldLeak") + var flutterActivity: Activity? = null + + fun getOrCreateInstance() : UnityPlayerSingleton? { + singleton.let{ singleton -> + if(singleton != null) { + return singleton + } + else { + flutterActivity.let { flutterActivity -> + if(flutterActivity != null) { + // UnityPlayerSingleton expects to be passed a context which is an Activity. + // UnityPlayer will crash during resume() if it isn't (NullPointerException: Attempt + // to invoke virtual method + // 'android.content.ContentResolver android.content.Context.getContentResolver()' + // on a null object reference) + val player = UnityPlayerSingleton(flutterActivity) + + // This is to work around issue when using Unity AR features + // See comments on IUnityPlayerActivity for explanation + if(flutterActivity is IFakeUnityPlayerActivity) { + flutterActivity.setmUnityPlayer(player) + } + else { + // This is optional: if the user isn't using AR or anything else + // which triggers Unity to access mUnityPlayer in the Activity, + // this workaround isn't needed, so just continue if not + // IFakeUnityPlayerActivity + } + + this.singleton = player + return player + } + else { + Log.e(logTag, "Error creating UnityPlatformView: an activity is not available. " + + "Make sure that a UnityPlatformView is only requested after the plugin has " + + "attached to the activity (see FlutterEmbedUnityAndroidPlugin.onAttachedToActivity)") + return null + } + } + } + } + } + + // should only be called after getOrCreateInstance! + fun getInstance(): UnityPlayerSingleton? { + return singleton + } + } + + // This is required for Unity to receive touch events + @SuppressLint("ClickableViewAccessibility") + override fun onTouchEvent(motionEvent: MotionEvent): Boolean { + motionEvent.source = InputDevice.SOURCE_TOUCHSCREEN +// Log.i(logTag, "onTouchEvent") + + // true for Flutter Virtual Display, false for Hybrid composition. + if (motionEvent.deviceId == 0) { + /* + Flutter creates a touchscreen motion event with deviceId 0. (https://github.com/flutter/flutter/blob/34b454f42dd6f8721dfe43fc7de5d215705b5e52/packages/flutter/lib/src/services/platform_views.dart#L639) + Unity's new Input System package does not detect these touches, copy the motion event to change the immutable deviceId. + */ + val modifiedEvent = motionEvent.copy(deviceId = -1) + motionEvent.recycle() + return super.onTouchEvent(modifiedEvent) + } else { + return super.onTouchEvent(motionEvent) + } + } + + override fun onWindowVisibilityChanged(visibility: Int) { + Log.d(logTag, "UnityPlayerSingleton onWindowVisibilityChanged $visibility") + + if(visibility == View.VISIBLE) { + // For some unknown reason, if window visibility changes quickly from View.VISIBLE + // to View.GONE and back to View.VISIBLE, Unity UI appears to freeze. + // This happens, for example, on orientation change, flutter hot reload, and + // occasionally on widget rebuild if there is a significant change to the widget + // tree (you can usually see this as a brief flicker of the widget). + // The underlying UnityPlayer is still active and still responds to messages even + // though it appears frozen, so it is purely a UI thing. Presumably a bug in Unity. + // However using UnityPlayer to render in a View like this is not supported so + // unlikely to be fixed by Unity + // (see https://docs.unity3d.com/Manual/UnityasaLibrary-Android.html) + // As a workaround, pause and resume the player unfreezes the UI + Log.d(logTag, "UnityPlayerSingleton became visible, so pausing and resuming Unity") + pause() + resume() + } + + super.onWindowVisibilityChanged(visibility) + } + + // Overriding kill() was an experiment to try to resolve app closing / crashing when + // player.destroy() is called. It didn't work. The problem is that calling player.destroy() also + // kills the process it is running in (the entire app, or just the activity if the activity + // uses a separate process as specified by android:process in AndroidManifest.xml, see + // https://developer.android.com/guide/topics/manifest/activity-element#proc) + // So, the idea was to override the kill() function to do nothing. This works, however + // the next time UnityPlayer is created, you then get an exception: + // + // JNI DETECTED ERROR IN APPLICATION: JNI NewGlobalRef called with pending exception + // java.lang.RuntimeException: PlayAssetDeliveryUnityWrapper.init() should be called only once. + // Use getInstance() instead. + // F/android_exampl(31048): java_vm_ext.cc:577] at com.unity3d.player.PlayAssetDeliveryUnityWrapper + // com.unity3d.player.PlayAssetDeliveryUnityWrapper.init(android.content.Context) + // + // See also: https://forum.unity.com/threads/unityplayer-on-android-using-single-process.847555/ + // https://stackoverflow.com/questions/23467994/errors-managing-the-unityplayer-lifecycle-in-a-native-android-application + // https://stackoverflow.com/questions/36718387/how-to-keep-android-app-running-and-quit-unity-activity + // https://forum.unity.com/threads/how-to-restart-unity-player-android.567790/ + // + // So, abandoned this hack in favour of using a singleton UnityPlayer which is never destroyed + +// override fun kill() { +// Process.killProcess(Process.myPid()) +// } +} diff --git a/flutter_embed_unity_6000_android/android/src/test/kotlin/com/learntoflutter/flutter_embed_unity_test/FlutterEmbedUnityPluginTest.kt b/flutter_embed_unity_6000_android/android/src/test/kotlin/com/learntoflutter/flutter_embed_unity_test/FlutterEmbedUnityPluginTest.kt new file mode 100644 index 0000000..3e336c1 --- /dev/null +++ b/flutter_embed_unity_6000_android/android/src/test/kotlin/com/learntoflutter/flutter_embed_unity_test/FlutterEmbedUnityPluginTest.kt @@ -0,0 +1,27 @@ +package com.learntoflutter.flutter_embed_unity_android + +import io.flutter.plugin.common.MethodCall +import io.flutter.plugin.common.MethodChannel +import kotlin.test.Test +import org.mockito.Mockito + +/* + * This demonstrates a simple unit test of the Kotlin portion of this plugin's implementation. + * + * Once you have built the plugin's example app, you can run these tests from the command + * line by running `./gradlew testDebugUnitTest` in the `example/android/` directory, or + * you can run them directly from IDEs that support JUnit such as Android Studio. + */ + +internal class FlutterEmbedUnityPluginTest { + @Test + fun onMethodCall_getPlatformVersion_returnsExpectedValue() { + val plugin = FlutterEmbedUnityPlugin() + + val call = MethodCall("getPlatformVersion", null) + val mockResult: MethodChannel.Result = Mockito.mock(MethodChannel.Result::class.java) + plugin.onMethodCall(call, mockResult) + + Mockito.verify(mockResult).success("Android " + android.os.Build.VERSION.RELEASE) + } +} diff --git a/flutter_embed_unity_6000_android/example/.gitignore b/flutter_embed_unity_6000_android/example/.gitignore new file mode 100644 index 0000000..24476c5 --- /dev/null +++ b/flutter_embed_unity_6000_android/example/.gitignore @@ -0,0 +1,44 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +/build/ + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/flutter_embed_unity_6000_android/example/README.md b/flutter_embed_unity_6000_android/example/README.md new file mode 100644 index 0000000..fe6f011 --- /dev/null +++ b/flutter_embed_unity_6000_android/example/README.md @@ -0,0 +1,13 @@ +# flutter_embed_unity_android_example + +Demonstrates how to use the flutter_embed_unity_6000_android package + +## Getting Started + +- Checkout this repository +- Create a folder called `unityLibrary` at: + - `flutter_embed_unity/flutter_embed_unity_6000_android/example/android/unityLibrary` +- Install Unity 6000 +- Open [the example Unity project](https://github.com/jamesncl/flutter_embed_unity/tree/main/example_unity_2022_3_project) +- In Unity, go to `Flutter Embed -> Export project to Flutter app (Android)`, and choose the export folder you created earlier +- Now run the example Flutter project `flutter_embed_unity/flutter_embed_unity_6000_android/example` diff --git a/flutter_embed_unity_6000_android/example/analysis_options.yaml b/flutter_embed_unity_6000_android/example/analysis_options.yaml new file mode 100644 index 0000000..61b6c4d --- /dev/null +++ b/flutter_embed_unity_6000_android/example/analysis_options.yaml @@ -0,0 +1,29 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at + # https://dart-lang.github.io/linter/lints/index.html. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/flutter_embed_unity_6000_android/example/android/.gitignore b/flutter_embed_unity_6000_android/example/android/.gitignore new file mode 100644 index 0000000..6f56801 --- /dev/null +++ b/flutter_embed_unity_6000_android/example/android/.gitignore @@ -0,0 +1,13 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java + +# Remember to never publicly share your keystore. +# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app +key.properties +**/*.keystore +**/*.jks diff --git a/flutter_embed_unity_6000_android/example/android/app/build.gradle b/flutter_embed_unity_6000_android/example/android/app/build.gradle new file mode 100644 index 0000000..1a3714f --- /dev/null +++ b/flutter_embed_unity_6000_android/example/android/app/build.gradle @@ -0,0 +1,70 @@ +def localProperties = new Properties() +def localPropertiesFile = rootProject.file('local.properties') +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader('UTF-8') { reader -> + localProperties.load(reader) + } +} + +def flutterRoot = localProperties.getProperty('flutter.sdk') +if (flutterRoot == null) { + throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") +} + +def flutterVersionCode = localProperties.getProperty('flutter.versionCode') +if (flutterVersionCode == null) { + flutterVersionCode = '1' +} + +def flutterVersionName = localProperties.getProperty('flutter.versionName') +if (flutterVersionName == null) { + flutterVersionName = '1.0' +} + +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" + +android { + namespace "com.learntoflutter.flutter_embed_unity_android_example" + compileSdkVersion 34 + ndkVersion flutter.ndkVersion + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId "com.learntoflutter.flutter_embed_unity_android_example" + // You can update the following values to match your application needs. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. + minSdkVersion 22 + targetSdkVersion 34 + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + } + + buildTypes { + debug { + // Turn on minification to test the plugin will still work + // when R8 / minification is enabled in release mode: + // minifyEnabled true + // shrinkResources true + } + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig signingConfigs.debug + } + } +} + +flutter { + source '../..' +} + +dependencies { + implementation project(':unityLibrary') +} \ No newline at end of file diff --git a/flutter_embed_unity_6000_android/example/android/app/src/debug/AndroidManifest.xml b/flutter_embed_unity_6000_android/example/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000..399f698 --- /dev/null +++ b/flutter_embed_unity_6000_android/example/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/flutter_embed_unity_6000_android/example/android/app/src/main/AndroidManifest.xml b/flutter_embed_unity_6000_android/example/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..05b2bc5 --- /dev/null +++ b/flutter_embed_unity_6000_android/example/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + diff --git a/flutter_embed_unity_6000_android/example/android/app/src/main/java/com/jamesncl/dev/flutter_embed_unity_android_example/MainActivity.java b/flutter_embed_unity_6000_android/example/android/app/src/main/java/com/jamesncl/dev/flutter_embed_unity_android_example/MainActivity.java new file mode 100644 index 0000000..8e9156e --- /dev/null +++ b/flutter_embed_unity_6000_android/example/android/app/src/main/java/com/jamesncl/dev/flutter_embed_unity_android_example/MainActivity.java @@ -0,0 +1,7 @@ +package com.learntoflutter.flutter_embed_unity_android_example; + +import com.learntoflutter.flutter_embed_unity_android.unity.FakeUnityPlayerActivity; + +public class MainActivity extends FakeUnityPlayerActivity { + +} diff --git a/flutter_embed_unity_6000_android/example/android/app/src/main/res/drawable-v21/launch_background.xml b/flutter_embed_unity_6000_android/example/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 0000000..f74085f --- /dev/null +++ b/flutter_embed_unity_6000_android/example/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/flutter_embed_unity_6000_android/example/android/app/src/main/res/drawable/launch_background.xml b/flutter_embed_unity_6000_android/example/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000..304732f --- /dev/null +++ b/flutter_embed_unity_6000_android/example/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/flutter_embed_unity_6000_android/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/flutter_embed_unity_6000_android/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ literal 0 HcmV?d00001 diff --git a/flutter_embed_unity_6000_android/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/flutter_embed_unity_6000_android/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..17987b79bb8a35cc66c3c1fd44f5a5526c1b78be GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@Uy!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ literal 0 HcmV?d00001 diff --git a/flutter_embed_unity_6000_android/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/flutter_embed_unity_6000_android/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f1c8d34e7a88e3f88bea192c3a370d44689c3c GIT binary patch literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof literal 0 HcmV?d00001 diff --git a/flutter_embed_unity_6000_android/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/flutter_embed_unity_6000_android/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6372eebdb28e45604e46eeda8dd24651419bc0 GIT binary patch literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` literal 0 HcmV?d00001 diff --git a/flutter_embed_unity_6000_android/example/android/app/src/main/res/values-night/styles.xml b/flutter_embed_unity_6000_android/example/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 0000000..06952be --- /dev/null +++ b/flutter_embed_unity_6000_android/example/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/flutter_embed_unity_6000_android/example/android/app/src/main/res/values/styles.xml b/flutter_embed_unity_6000_android/example/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..cb1ef88 --- /dev/null +++ b/flutter_embed_unity_6000_android/example/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/flutter_embed_unity_6000_android/example/android/app/src/profile/AndroidManifest.xml b/flutter_embed_unity_6000_android/example/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 0000000..399f698 --- /dev/null +++ b/flutter_embed_unity_6000_android/example/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/flutter_embed_unity_6000_android/example/android/build.gradle b/flutter_embed_unity_6000_android/example/android/build.gradle new file mode 100644 index 0000000..59654ae --- /dev/null +++ b/flutter_embed_unity_6000_android/example/android/build.gradle @@ -0,0 +1,34 @@ +buildscript { + ext.kotlin_version = '1.8.20' + repositories { + google() + mavenCentral() + } + + dependencies { + classpath 'com.android.tools.build:gradle:7.1.2' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +allprojects { + repositories { + google() + mavenCentral() + flatDir { + dirs "${project(':unityLibrary').projectDir}/libs" + } + } +} + +rootProject.buildDir = '../build' +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(':app') +} + +tasks.register("clean", Delete) { + delete rootProject.buildDir +} diff --git a/flutter_embed_unity_6000_android/example/android/gradle.properties b/flutter_embed_unity_6000_android/example/android/gradle.properties new file mode 100644 index 0000000..0c60bdf --- /dev/null +++ b/flutter_embed_unity_6000_android/example/android/gradle.properties @@ -0,0 +1,7 @@ +org.gradle.jvmargs=-Xmx1536M +android.useAndroidX=true +android.enableJetifier=true +android.defaults.buildfeatures.buildconfig=true +android.nonTransitiveRClass=false +android.nonFinalResIds=false +unityStreamingAssets= \ No newline at end of file diff --git a/flutter_embed_unity_6000_android/example/android/gradle/wrapper/gradle-wrapper.properties b/flutter_embed_unity_6000_android/example/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..966aa8e --- /dev/null +++ b/flutter_embed_unity_6000_android/example/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-all.zip diff --git a/flutter_embed_unity_6000_android/example/android/settings.gradle b/flutter_embed_unity_6000_android/example/android/settings.gradle new file mode 100644 index 0000000..06c0396 --- /dev/null +++ b/flutter_embed_unity_6000_android/example/android/settings.gradle @@ -0,0 +1,14 @@ +include ':app' +include ':unityLibrary' +// This additional project is required to build with Unity XR: +include ':unityLibrary:xrmanifest.androidlib' + +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() + +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } + +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/flutter_embed_unity_6000_android/example/integration_test/plugin_integration_test.dart b/flutter_embed_unity_6000_android/example/integration_test/plugin_integration_test.dart new file mode 100644 index 0000000..4bf019d --- /dev/null +++ b/flutter_embed_unity_6000_android/example/integration_test/plugin_integration_test.dart @@ -0,0 +1,24 @@ +// // This is a basic Flutter integration test. +// // +// // Since integration tests run in a full Flutter application, they can interact +// // with the host side of a plugin implementation, unlike Dart unit tests. +// // +// // For more information about Flutter integration tests, please see +// // https://docs.flutter.dev/cookbook/testing/integration/introduction +// +// +// import 'package:flutter_test/flutter_test.dart'; +// import 'package:flutter_embed_unity_android/flutter_embed_unity_android_platform_interface.dart'; +// import 'package:integration_test/integration_test.dart'; +// +// void main() { +// IntegrationTestWidgetsFlutterBinding.ensureInitialized(); +// +// testWidgets('getPlatformVersion test', (WidgetTester tester) async { +// final FlutterEmbedUnityAndroid plugin = FlutterEmbedUnityAndroid(); +// final bool canLaunch = await plugin.canLaunch('test'); +// // The version string depends on the host platform running the test, so +// // just assert that some non-empty string is returned. +// expect(canLaunch, true); +// }); +// } diff --git a/flutter_embed_unity_6000_android/example/lib/main.dart b/flutter_embed_unity_6000_android/example/lib/main.dart new file mode 100644 index 0000000..4e96d96 --- /dev/null +++ b/flutter_embed_unity_6000_android/example/lib/main.dart @@ -0,0 +1,268 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_embed_unity/flutter_embed_unity.dart'; +import 'package:intl/intl.dart'; + +void main() { + runApp(const ExampleApp()); +} + +class ExampleApp extends StatefulWidget { + const ExampleApp({super.key}); + + @override + State createState() => _ExampleAppState(); +} + +class _ExampleAppState extends State { + + // When converting between strings and numbers in a message protocol + // always use a fixed locale, to prevent unexpected parsing errors when + // the user's locale is different to the locale used by the developer + // (eg the decimal separator might be different) + static final _fixedLocaleNumberFormatter = NumberFormat.decimalPatternDigits( + locale: 'en_gb', + decimalDigits: 2, + ); + + bool? _isUnityArSupportedOnDevice; + bool _isArSceneActive = false; + double _rotationSpeed = 30; + int _numberOfTaps = 0; + + @override + Widget build(BuildContext context) { + return MaterialApp( + home: Scaffold( + appBar: AppBar( + title: const Text('Plugin example app'), + ), + body: SafeArea( + child: Builder( + builder: (context) { + final theme = Theme.of(context); + final bool? isUnityArSupportedOnDevice = _isUnityArSupportedOnDevice; + final String arStatusMessage; + + if(isUnityArSupportedOnDevice == null) { + arStatusMessage = "checking..."; + } + else if(isUnityArSupportedOnDevice) { + arStatusMessage = "supported"; + } + else { + arStatusMessage = "not supported on this device"; + } + + return Column( + children: [ + Expanded( + child: EmbedUnity( + onMessageFromUnity: (String data) { + // A message has been received from a Unity script + if(data == "touch"){ + setState(() { + _numberOfTaps += 1; + }); + } + else if(data == "scene_loaded") { + _sendRotationSpeedToUnity(_rotationSpeed); + } + else if(data == "ar:true") { + setState(() { + _isUnityArSupportedOnDevice = true; + }); + } + else if(data == "ar:false") { + setState(() { + _isUnityArSupportedOnDevice = false; + }); + } + }, + ), + ), + Padding( + padding: const EdgeInsets.all(16), + child: Text( + "Flutter logo has been touched $_numberOfTaps times", + textAlign: TextAlign.center, + style: theme.textTheme.titleMedium, + ), + ), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 16), + child: Row( + children: [ + Text("Activate AR ($arStatusMessage)"), + Switch( + value: _isArSceneActive, + onChanged: isUnityArSupportedOnDevice != null && isUnityArSupportedOnDevice ? (value) { + sendToUnity( + "SceneSwitcher", + "SwitchToScene", + _isArSceneActive ? "FlutterEmbedExampleScene" : "FlutterEmbedExampleSceneAR", + ); + setState(() { + _isArSceneActive = value; + }); + } : null, + ), + ], + ), + ), + Row( + children: [ + const Padding( + padding: EdgeInsets.only(left: 16), + child: Text( + "Speed", + ), + ), + Expanded( + child: Slider( + min: -200, + max: 200, + value: _rotationSpeed, + onChanged: (value) { + setState(() { + _rotationSpeed = value; + }); + _sendRotationSpeedToUnity(value); + }, + ), + ), + ], + ), + Row( + children: [ + Expanded( + child: Padding( + padding: const EdgeInsets.all(8.0), + child: ElevatedButton( + onPressed: () { + pauseUnity(); + }, + child: const Text("Pause"), + ), + ), + ), + Expanded( + child: Padding( + padding: const EdgeInsets.all(8.0), + child: ElevatedButton( + onPressed: () { + resumeUnity(); + }, + child: const Text("Resume"), + ), + ), + ), + Expanded( + child: Padding( + padding: const EdgeInsets.all(8.0), + child: ElevatedButton( + onPressed: () { + Navigator.push( + context, + MaterialPageRoute(builder: (context) => const Route2()), + ); + }, + child: const Text("Open route 2", textAlign: TextAlign.center), + ), + ), + ), + ], + ) + ], + ); + }, + ), + ), + ), + ); + } + + void _sendRotationSpeedToUnity(double rotationSpeed) { + sendToUnity( + "FlutterLogo", + "SetRotationSpeed", + _fixedLocaleNumberFormatter.format(rotationSpeed), + ); + } +} + + +class Route2 extends StatelessWidget { + + const Route2(); + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: const Text('Route 2'), + ), + body: SafeArea( + child: Builder( + builder: (context) => + Column( + children: [ + const Padding( + padding: EdgeInsets.all(16), + child: Text( + "Unity can only be shown in 1 widget at a time. Therefore if a second route " + "with a FlutterEmbed is pushed onto the stack, Unity is 'detached' from " + "the first route, and attached to the second. When the second route is " + "popped from the stack, Unity is reattached to the first route.", + ), + ), + const Expanded( + child: EmbedUnity(), + ), + Padding( + padding: const EdgeInsets.all(8.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + const BackButton(), + ElevatedButton( + onPressed: () { + showDialog(context: context, builder: (_) => const Route3()); + }, + child: const Text("Open route 3", textAlign: TextAlign.center), + ), + ], + ), + ) + ], + ) + ), + ) + ); + } +} + + +class Route3 extends StatelessWidget { + + const Route3(); + + @override + Widget build(BuildContext context) { + return const AlertDialog( + content: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + "Route 3", + textAlign: TextAlign.center, + ), + SizedBox( + height: 100, + width: 80, + child: EmbedUnity(), + ), + ], + ), + ); + } +} \ No newline at end of file diff --git a/flutter_embed_unity_6000_android/example/pubspec.lock b/flutter_embed_unity_6000_android/example/pubspec.lock new file mode 100644 index 0000000..0894a0b --- /dev/null +++ b/flutter_embed_unity_6000_android/example/pubspec.lock @@ -0,0 +1,299 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + async: + dependency: transitive + description: + name: async + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + url: "https://pub.dev" + source: hosted + version: "2.11.0" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + characters: + dependency: transitive + description: + name: characters + sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" + url: "https://pub.dev" + source: hosted + version: "1.3.0" + clock: + dependency: transitive + description: + name: clock + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" + source: hosted + version: "1.1.1" + collection: + dependency: transitive + description: + name: collection + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a + url: "https://pub.dev" + source: hosted + version: "1.18.0" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" + source: hosted + version: "1.3.1" + file: + dependency: transitive + description: + name: file + sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" + url: "https://pub.dev" + source: hosted + version: "6.1.4" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_driver: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + flutter_embed_unity: + dependency: "direct main" + description: + name: flutter_embed_unity + sha256: bdecb15e70d0bced020fadf173fd96f3afc2779fb7a9bae6add03c78d27b2273 + url: "https://pub.dev" + source: hosted + version: "1.1.1" + flutter_embed_unity_2022_3_android: + dependency: transitive + description: + name: flutter_embed_unity_2022_3_android + sha256: d550403ac5bd730bf2e816f707b6e94070afe0dab03ae836bcedac9ad05dc6f9 + url: "https://pub.dev" + source: hosted + version: "1.1.0" + flutter_embed_unity_2022_3_ios: + dependency: transitive + description: + name: flutter_embed_unity_2022_3_ios + sha256: "1829acc64ff3014272de96fe7cceb17411f50b78e9be32dca5d93ac9433211c3" + url: "https://pub.dev" + source: hosted + version: "1.0.1" + flutter_embed_unity_6000_android: + dependency: "direct main" + description: + path: ".." + relative: true + source: path + version: "0.0.1" + flutter_embed_unity_platform_interface: + dependency: transitive + description: + name: flutter_embed_unity_platform_interface + sha256: "4fd2dcc09ec8f35f35ea914d89e404354216a56f8415d719b7c9edb058ca6868" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04 + url: "https://pub.dev" + source: hosted + version: "2.0.3" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + fuchsia_remote_debug_protocol: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + integration_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + intl: + dependency: "direct main" + description: + name: intl + sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + url: "https://pub.dev" + source: hosted + version: "0.18.1" + lints: + dependency: transitive + description: + name: lints + sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + matcher: + dependency: transitive + description: + name: matcher + sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + url: "https://pub.dev" + source: hosted + version: "0.12.16" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + url: "https://pub.dev" + source: hosted + version: "0.5.0" + meta: + dependency: transitive + description: + name: meta + sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + url: "https://pub.dev" + source: hosted + version: "1.10.0" + path: + dependency: transitive + description: + name: path + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + url: "https://pub.dev" + source: hosted + version: "1.8.3" + platform: + dependency: transitive + description: + name: platform + sha256: ae68c7bfcd7383af3629daafb32fb4e8681c7154428da4febcff06200585f102 + url: "https://pub.dev" + source: hosted + version: "3.1.2" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: da3fdfeccc4d4ff2da8f8c556704c08f912542c5fb3cf2233ed75372384a034d + url: "https://pub.dev" + source: hosted + version: "2.1.6" + process: + dependency: transitive + description: + name: process + sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" + url: "https://pub.dev" + source: hosted + version: "4.2.4" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_span: + dependency: transitive + description: + name: source_span + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + url: "https://pub.dev" + source: hosted + version: "1.10.0" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" + url: "https://pub.dev" + source: hosted + version: "1.11.1" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 + url: "https://pub.dev" + source: hosted + version: "2.1.2" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + sync_http: + dependency: transitive + description: + name: sync_http + sha256: "7f0cd72eca000d2e026bcd6f990b81d0ca06022ef4e32fb257b30d3d1014a961" + url: "https://pub.dev" + source: hosted + version: "0.3.1" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" + source: hosted + version: "1.2.1" + test_api: + dependency: transitive + description: + name: test_api + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + url: "https://pub.dev" + source: hosted + version: "0.6.1" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: c538be99af830f478718b51630ec1b6bee5e74e52c8a802d328d9e71d35d2583 + url: "https://pub.dev" + source: hosted + version: "11.10.0" + web: + dependency: transitive + description: + name: web + sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + url: "https://pub.dev" + source: hosted + version: "0.3.0" + webdriver: + dependency: transitive + description: + name: webdriver + sha256: "3c923e918918feeb90c4c9fdf1fe39220fa4c0e8e2c0fffaded174498ef86c49" + url: "https://pub.dev" + source: hosted + version: "3.0.2" +sdks: + dart: ">=3.2.0-194.0.dev <4.0.0" + flutter: ">=3.3.0" diff --git a/flutter_embed_unity_6000_android/example/pubspec.yaml b/flutter_embed_unity_6000_android/example/pubspec.yaml new file mode 100644 index 0000000..986efb4 --- /dev/null +++ b/flutter_embed_unity_6000_android/example/pubspec.yaml @@ -0,0 +1,30 @@ +name: flutter_embed_unity_android_example +description: Demonstrates how to use the flutter_embed_unity_android plugin. +publish_to: 'none' # Remove this line if you wish to publish to pub.dev + +environment: + sdk: '>=3.0.6 <4.0.0' + flutter: ">=3.3.0" + +dependencies: + flutter: + sdk: flutter + + flutter_embed_unity_6000_android: + path: ../ + flutter_embed_unity: ^1.1.0 + + intl: any + + +dev_dependencies: + integration_test: + sdk: flutter + flutter_test: + sdk: flutter + + flutter_lints: ^2.0.3 + + +flutter: + uses-material-design: true diff --git a/flutter_embed_unity_6000_android/example/test/widget_test.dart b/flutter_embed_unity_6000_android/example/test/widget_test.dart new file mode 100644 index 0000000..90bc5d5 --- /dev/null +++ b/flutter_embed_unity_6000_android/example/test/widget_test.dart @@ -0,0 +1,27 @@ +// // This is a basic Flutter widget test. +// // +// // To perform an interaction with a widget in your test, use the WidgetTester +// // utility in the flutter_test package. For example, you can send tap and scroll +// // gestures. You can also use WidgetTester to find child widgets in the widget +// // tree, read text, and verify that the values of widget properties are correct. +// +// import 'package:flutter/material.dart'; +// import 'package:flutter_test/flutter_test.dart'; +// +// import 'package:flutter_embed_unity_android_example/main.dart'; +// +// void main() { +// testWidgets('Verify Platform version', (WidgetTester tester) async { +// // Build our app and trigger a frame. +// await tester.pumpWidget(const ExampleApp()); +// +// // Verify that platform version is retrieved. +// expect( +// find.byWidgetPredicate( +// (Widget widget) => widget is Text && +// widget.data!.startsWith('Running on:'), +// ), +// findsOneWidget, +// ); +// }); +// } diff --git a/flutter_embed_unity_6000_android/lib/flutter_embed_unity_6000_android.dart b/flutter_embed_unity_6000_android/lib/flutter_embed_unity_6000_android.dart new file mode 100644 index 0000000..0407a05 --- /dev/null +++ b/flutter_embed_unity_6000_android/lib/flutter_embed_unity_6000_android.dart @@ -0,0 +1,4 @@ + +// Nothing is needed here. This platform plugin uses the Flutter Method Channel +// mechanism from the public-facing package, so the only thing that needs +// implementing is the native side diff --git a/flutter_embed_unity_6000_android/pubspec.yaml b/flutter_embed_unity_6000_android/pubspec.yaml new file mode 100644 index 0000000..1832bbb --- /dev/null +++ b/flutter_embed_unity_6000_android/pubspec.yaml @@ -0,0 +1,32 @@ +name: flutter_embed_unity_6000_android +description: Android implementation for Unity 6000.0 of the flutter_embed_unity plugin. +version: 0.0.1 +homepage: https://learntoflutter.com +repository: https://github.com/learntoflutter/flutter_embed_unity/tree/main/flutter_embed_unity_6000_android +issue_tracker: https://github.com/learntoflutter/flutter_embed_unity/issues +documentation: https://github.com/learntoflutter/flutter_embed_unity/wiki +funding: + - https://www.buymeacoffee.com/pPDtNs6A6T +topics: + - unity + +environment: + sdk: '>=3.0.6 <4.0.0' + flutter: ">=3.3.0" + +dependencies: + flutter: + sdk: flutter + flutter_embed_unity_platform_interface: ^1.0.0 + +dev_dependencies: + flutter_test: + sdk: flutter + +flutter: + plugin: + implements: flutter_embed_unity + platforms: + android: + package: com.learntoflutter.flutter_embed_unity_android + pluginClass: FlutterEmbedUnityAndroidPlugin \ No newline at end of file From 561ccf4e53a260d4e78e6f9b9572ea9b4b4b3c4d Mon Sep 17 00:00:00 2001 From: timbotimbo Date: Tue, 2 Jul 2024 00:18:59 +0200 Subject: [PATCH 2/9] (Development) Change pubspec dependencies to relative paths to avoid importing the 2022_3_android package. --- flutter_embed_unity/pubspec.yaml | 4 +++- .../example/pubspec.lock | 15 +++------------ .../example/pubspec.yaml | 3 ++- 3 files changed, 8 insertions(+), 14 deletions(-) diff --git a/flutter_embed_unity/pubspec.yaml b/flutter_embed_unity/pubspec.yaml index 57f545b..f919c92 100644 --- a/flutter_embed_unity/pubspec.yaml +++ b/flutter_embed_unity/pubspec.yaml @@ -18,7 +18,9 @@ dependencies: flutter: sdk: flutter flutter_embed_unity_platform_interface: ^1.0.0 - flutter_embed_unity_2022_3_android: ^1.1.0 + # flutter_embed_unity_2022_3_android: ^1.1.0 + flutter_embed_unity_6000_android: + path: ../flutter_embed_unity_6000_android flutter_embed_unity_2022_3_ios: ^1.0.1 dev_dependencies: diff --git a/flutter_embed_unity_6000_android/example/pubspec.lock b/flutter_embed_unity_6000_android/example/pubspec.lock index 0894a0b..94590a2 100644 --- a/flutter_embed_unity_6000_android/example/pubspec.lock +++ b/flutter_embed_unity_6000_android/example/pubspec.lock @@ -70,19 +70,10 @@ packages: flutter_embed_unity: dependency: "direct main" description: - name: flutter_embed_unity - sha256: bdecb15e70d0bced020fadf173fd96f3afc2779fb7a9bae6add03c78d27b2273 - url: "https://pub.dev" - source: hosted + path: "../../flutter_embed_unity" + relative: true + source: path version: "1.1.1" - flutter_embed_unity_2022_3_android: - dependency: transitive - description: - name: flutter_embed_unity_2022_3_android - sha256: d550403ac5bd730bf2e816f707b6e94070afe0dab03ae836bcedac9ad05dc6f9 - url: "https://pub.dev" - source: hosted - version: "1.1.0" flutter_embed_unity_2022_3_ios: dependency: transitive description: diff --git a/flutter_embed_unity_6000_android/example/pubspec.yaml b/flutter_embed_unity_6000_android/example/pubspec.yaml index 986efb4..04769ec 100644 --- a/flutter_embed_unity_6000_android/example/pubspec.yaml +++ b/flutter_embed_unity_6000_android/example/pubspec.yaml @@ -12,7 +12,8 @@ dependencies: flutter_embed_unity_6000_android: path: ../ - flutter_embed_unity: ^1.1.0 + flutter_embed_unity: + path: ../../flutter_embed_unity intl: any From 6a1dfff8ecf530f3a3ce64385f7f70b14f0fc839 Mon Sep 17 00:00:00 2001 From: timbotimbo Date: Tue, 2 Jul 2024 00:20:10 +0200 Subject: [PATCH 3/9] Replace unity classes .jar. --- .../android/build.gradle | 2 +- .../android/libs/unity-classes_6000_0_8.jar | Bin 0 -> 188808 bytes .../android/libs/unity_classes_2022.3.LTS.jar | Bin 133834 -> 0 bytes 3 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 flutter_embed_unity_6000_android/android/libs/unity-classes_6000_0_8.jar delete mode 100644 flutter_embed_unity_6000_android/android/libs/unity_classes_2022.3.LTS.jar diff --git a/flutter_embed_unity_6000_android/android/build.gradle b/flutter_embed_unity_6000_android/android/build.gradle index 0d061a7..af70a91 100644 --- a/flutter_embed_unity_6000_android/android/build.gradle +++ b/flutter_embed_unity_6000_android/android/build.gradle @@ -59,7 +59,7 @@ android { // to compile the plugin (because for example we extend com.unity3d.player.UnityPlayer) // The .jar file is taken from the currently supported Unity Editor files: for Unity 2022.3 // LTS on Windows this can be found at: - // \2022.3.7f1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Development\Classes + // \6000.0.8f1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Development\Classes // Use compileOnly because we only need this to compile the plugin during development - at // runtime this dependency will be provided by the user's exported Unity project compileOnly fileTree(dir: 'libs', include: ['*.jar']) diff --git a/flutter_embed_unity_6000_android/android/libs/unity-classes_6000_0_8.jar b/flutter_embed_unity_6000_android/android/libs/unity-classes_6000_0_8.jar new file mode 100644 index 0000000000000000000000000000000000000000..10a7af981c75765742baa997b04eae28903e327e GIT binary patch literal 188808 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 h;lF=_nSa1UTvj{}0ghsH^}0 literal 0 HcmV?d00001 diff --git a/flutter_embed_unity_6000_android/android/libs/unity_classes_2022.3.LTS.jar b/flutter_embed_unity_6000_android/android/libs/unity_classes_2022.3.LTS.jar deleted file mode 100644 index bd5b3492fea9e0e0ef7c80f14069a17e7df295f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133834 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

>R0iK5u^zf+pr<6=c;)THJ%D zSt>%I(#dQ4i!gS#nB1;iZi2_8gPhS64?*fVh=)?EZ}4Oz_A)Y92DmMJ`#~lAp0b7s zxOd{LGt4$_3DBV+ah?io-hu4|3~Pd{FNnvx0Y(`G3bXkn{7W=zW+|Tg@h=&JL;`r!6|$tOd&LG#)16nWG{L{uYYaD8e1ys!zmllyj;KHXpvAQv$AP_4xoK z0oj1Z#OZyr66BW*#s*n9YJ^}HjBko*Q39Bh5^I$9!S($8aNp3Zu~L9ZODxKr-Lg$L$Q*>GjNZL3H*CM(pT!#qE9WJkj#R^sZ{K@z+Kmn} zmhDiV8va#YS;$4g?1BN>`LE^G|Bwos|Dy!|e`Aqc@<7rm1U*ER24X#y8YVoRAsQrn z$IxkWN~`mRKo6NW1E2yW8#xVtSph&sgaI}1;C+^_u~K~pu|Xj$18 zmA=(&YrN>A4NEpdb%c$WNTP<<%c$zkXw3o7f9$$?gq9SFSu!v)k?K449ZMzpqBY;h zJH%xJGQ*|Sgm_oS7{;cuxEtzb8-=3-*v8cYHS?YyD$W{3N2bK*`Q#_uQVnj9cJX9~ zo)elVwK^6-=QR$-kbOvdej6R)bQ_7i-+EZRoE0FUf$&V*Oq%j;DM^1EXs&rF&ULfSh+10DW@KThXK2wu)7di5P2^zdN@x0b2 zAt}HeHnL@)%0nIj-?GkaE+xYMVtDseVh!~$O>z^C*dCg%C_A2}Y_~_bG(iz!TBc6L zG_)WR?AR6iHRd}nUqnRahgQmCWERZvJ?isw_F>3IMlq6e+1@6eV(Gltf(rv~p^{HkC~tSh4~& zWR=4baI-W(iT=A5V@Ij9?WDbxW0QF^g`qTu(2v?(pbl~sPDYq!7kzzWqDzB8EH?w#R$l_ z5T(w{FD?QLZ#L;}LpI{L`u8orwm?|kfC%hHdbfrH_wUCI>Q?;vuIKkRhtaoIs zz73lR;xK%yp}Um7g%q2hrIrUURPX=o!}jGLP<{IIu)*NyjFLm^eiHA8 zuBoqwwu1Py11)d!&O}`1g8}d?K{ILH+yVp+OQaj^9@I4{?w5z)G^yu7;S-9iQ5?_3 z#Q1%u$IZmkAFAYN;W?vY44JyzeieA-Jcrk9H)~i-ItKPhuE(ngUfzU!l5iAO&x+Hz zs-||`sHD3W;X!SvQ%%g$bXIJB#{F#TNdjQPw%T{jS5ILP&>6ON>)iDY6@!z%4lthk zAthBPTk~^-0vl&DWp7MTKtCe)$#Y%@Ne}{4E8jR29x0>@J!nQ#Icn55AKz9Yw_DnL zC(~vmkLKlt-0k@Fb?5s0v@uGE5~`oTHl|U|dE`ns4HjD`wMhGXa3K+G4!GZ`y^)@*04pDLT$T$_|7*}f++YoN8}MhW`YYfmMyGK{8{cCdR6&gvg81& zLZdOZyIZqAYb_ya$!Th5mHDX?K})c-VHP5A$~(EV-AGNM;oByfU#`ooz%;rpXgmEQ zO}r%Kw=4`-0qA4*QE72prYK!BTGljxChCj!SBnGNs;HSO?!jx@$l^+FY9~X-Hz;$s zk12dppJ_q>pT~WBmZgxUqq4yLYSqX=H*VjYO`AQ%*uv~;Au>mpk!+Wg@QjsHu@OVY zdcqq$l=$i1mBT{n#)aVE$^7lZA>-oHzx^$1JU@!^fZxgff6JuhKbX}2OV29ElOAKM zr*Il#X)U~6pU7#OCL5Hb>1_#(tKM&v`(gMihh>tTd2*&gF4j|aka!QQpNL8>jssTbr-LQ?cV1w@jJ=)EnPCLSP{;Q&3X~uaHmDc*G53JK2Dd~~_)vNy zrhtW*>38+PArKUQ9!zrE@bQqZGYLe#`c{03;++j1Y0Y|P^XTxm@v|6m*0+H$Hs#TB zN0HMY_Xe~o6*+D*8SuG;X~tsc4DS(Gsmr4ghtW09wXl^xj7za2dq!G5!Glh4pSTltMQrh`u2e9KC;`V^o|3_o4`QzRD=_4 zzB4~5Hf)qk(Iv>O73l3FyDU9t%|w-CzERAu&V0;N37LVk$3l}0(?_1bU`drnO+*&tk}kKZNhtUcniA{{PJYx!>l0`#wyRfV7l8a&UA>@-&IfLCRPmBYajk}DqY{H4@S%E!4DC)# zge5kwT4K{SGLTSJm65UWi6IKmPBD+0^3{6C4;Ymwy|Atp5So z-yvuzYTbp76XJ-j?(I-asG&=ZGkv86eBH_rWBx=~z>Lid; zGty#|_9qsPSMP$E(nu#EvR-pM+|ImYitQVKn!+T7TQk)}5Hbo}?SV%jigsMRsAgzC zNeIO$%5P*Sz()n-)p0uLqMznotTscWN=U+LLL;l!zg%2OkE{)Oh*H{Q6!JxzS~;8D z9Jb(4pEdseP9<8lAP8dD`NhBLsB0$V-8@$wJpJgSPh0fP7X&Ixbvbi@giSN8h z1LNwFw<}K2z;B*vT}7;3{SCn%s#r+QM|6#H?Z-=untXfcfJcHu*w%tMN;2d)Aa$#_ z?lK70FXW@E%EYhL_r;1I8%{JFI`A;IU~=cTQDsW%nG6lb;0_Wf7|(SqRf}!!3rD>y z0b7`G=IHZ#ns zNS3Z2X&8NaCh+_E&P0bgFw9RT=UKX;E989w{zRd|&mQXi;3zcnZ=;aSKLPpETS~4v zQ`Mpi)ovhX7D$Lul~$nq;{6_zFcB|IVav9azk#rbBR!K&Mr=zsHkA6$(#2q#gik?y zMvLLWq+ooiVVB=C)Fs4N(Czm2+~ntF?3u86$7Vvw4hM?J@ec~%f9p(?e;CyPM`=NI zT!asRP{mM^=Ih7mpLR;L3_QIy2c&g8>fx5f>~(8XVT=2V`!{F6s79TiEvV#-SKs!P zY3%01(@QZZQn`c=eh$@i<;l{@o1Y~+L{z(Tlm}ttrj5*-o=@NE=@yGEHD>lx>r=rS zytp@D8WEU5oN=^9nn?CTY;1b}k`uks=)JP;mG!~!5U_wrv~+LA-9kCv-|*?Z?q6(o z#z7sW%^RJC%2hTzLnE>D%~$iFUFYXLCWsw)v&YE+I^hdtT@v3vn8AJ0wN5>w160-r zrSkBp4pKjk!5%$QQ$N7Ywl)p&y%Lj5K@`y^>d|&56&~OZGVY7Gj~YaIKsP2flHW+xywGTwI8^5pm<~K;dpuvy2UyOaCoOa3g#_{kM7T)1T$sMOL{(J%jVA zY%eKtfkew)TX(>i?yYF1i!s%;cJZCKRNR$3JzeCkscwqra?;PzBkDoW7kIPXyyQwl z4qg4il&{nreRoKlNlD3?TF2CScJ8=+A9@jSF54_K?g?TyRq|*!-b~QXZ(myaMZ>nT zLOFgi#F9LbMk|`8=r${rY^Zv%(lBZVrM5lkl%Pq<>-ufPP?W-c0JJvx(>1Wq(j0@U` z$<6B*$j-nH;k0i2LGt{{k!|#l(@P`aF|_0IXaRe$Gyf4g7`<-j&51hYleZR_fyk;$ z7ZJLjpH+rS*jZzrTo*$l#?IDi) zJ}b-1bED(_FH@j*0>M43A9*bog%64Ch~X_yPFfch%3JsDV57$%hvFMLEf9Nsej-#s z`J6gx)Oq&usR9g-PV~>|RTf?zq3Z}+nP-5#TIx#OtE0!G@k3l@l~qTiG~IYOhp>{g znOp7?+%U|-IGtDAvW7!fwen;=-vxKY?3(pR@Y*uP0MK-iY~y-)6Uwq1juHrTz~ALu zYSJ9?Q#HXn5cvDyQF0xcTm08XeVh|MbBt#etYJuyJEqN!4UaH=4;&%a2S{=Q zZ?SS-_cJ^U&H`q6RelsETJJa3?_WMZBYR*$ZmME zFA5PU1&R{L%(k1(Hi4)xgV3F^J^E{Mm_Av#(>x<#ed|ekh-7X)Qp2$y*XPHL-bbLT zSq#6(F$9|db!DLxu9>(S8{sjO5|#?~{>Ox_={ouUn6Wq*nQj+a?5cL;S{gI7Jn~ zZ){H%Uc%XfjA==2{uwM_5l9DYV~2I!s*6OV6?CFOBuz-#QtT24eqQ@fFRwxphBq^M zHfk~M`{@;HhAe;h<>!1Dx+Bh*MT+3i8Vy!nNrw;c>1@zVUXxazPwI%1xnkN2>6E5{ z!r!Vu!3ZN?Eke*TrC0V;;^~j+_+!j^ArqKFm4BPJ*#8HKiK^Cro+T4RxiNa|ehUdb zWw~6`zq*W=b4Ed16qG6REarUtg@|*h<`zu_;F*U!T0ZIX`&ZhX^-4)0+CiDG2a~Db zN&CHdr_URB<{<{2dBjA2)!g*3WkxCZ)xo9Y(vGc^Vj!$6fDl=A8_5EXS{Sz`+j{Dx zi>^F zRf+d@Bsm*4DIPKi;#!OMb@R zj>D;`!>cTu7b7`PQM5kzyGI0a-l6=fMp^SsG`(#|MZ9kaXcMcu#{Dx9HDLH zK+q8ZSjv{tUu=55P?fTnwq`aWg1}88T`I{}OqltHt$fs1Siew~!8&N9FktJ*X~xAk z&jH`T(+?KI_l#R~VmDh`1Ka!!<9C7pjd?1KA7$`=Tb@+`bVq>t=ml;;bj?^`%QN=U zrQl8)UF1?`jTSlyQCFO)l!YWqj7laVnR}U7#fhT*gE-Y}h4PC)Bc%9U5$n&uw(P1e z3h@_+QeJyK2gDv__}^jxX}Z`$-1IsiH2Zp{A+#h=m}Q58>c;n~>L5%J)V}@!7)UtQ zNZDlmb6yS$9K7clz0-yOwBB`-F_;|IYDOl-)8~O(B(aOyPwt5Ts@13r;W6zdCWMKF z+Kt!6iCtq50t_o&0BIl6&P+rqx*mK!t`@$e&57RN3SW~|o>SZ+M?hfmZ zNvWNF>u>C*$w^=U;F|2zZUWLp zTL~LoEbCw9y}u!&c-jLCI5J%hbKI>q2~MdGOCkF*PGMAnDDQmeuI56+I*+Yx;(@eE>WaW|we;U=tR4U3ClLI9 zakZ(EQC~}!fra!#v_`oq&Y!?4Caxf&5Jl;oVOQ(|;L~;c%GN*Z$Npa7dF!vm$%}*% zLpVjJ1EI+kuc?XCDZ@>_ckYoe0C)FggI7vE_Eoha22JsKOhj^7m_F?>Mn!q&?=IL& zYK4jQ;XR%86D2?L1k+I~w2x$L7XqY{!P2;vMR|}`>E1=lw2q#R_ieRheqqvs01El| z%{Nva$FI}JKrtp%b%IW}Ban*T+g7f0$@!=czLn+IUY<;SY%`KcbgQ?rvo*YxnbAP0 z6#lm25O%;~nT^`uzJAs((}G6hyQ@@Ur-MdNqOw)RCJ4cS3MpIDyqw=OAj~-4dHF zFow6c-x3M+#!h}~hZ@ShWe`;Y&Hz7umW!!UBT3oAjy!XD`P8PYBHIOi=SSj%0X6qd zc42>bbAV{WF%;yf2ec%D4VRvI{p1XnInIjKxxKyc$3fEJH$0Ipv5Z&A`$O4 zI(3Xg;QFoB8Xp;sW4e7dJXJ;pKLxT7^Va#7qPIUcAM=R^=7zy>a^T;lflmK`1T3=^ z!SkI|7_|yU2xZ5%=rJYFPf3;Tet@P*L*inLyBt|tb<@r5V0Jqj{!3;XO6~hs(;(75 zq(23(eRuXgOXyx;%FFHV&J_GPB9fxwFK!`sVtk@lgboFkL(g)9@6>^`NuLwSB;$bn z%|$5%WUnj9Md-J5AK5*O+b60bkt;ntcQRHcc2X?GW`Xw{(|WpwUe6_ffV-l5M-0)N zK^WhvJezr>mrsmR1ut#`*JsTJi#W0n=eb0(!bxQZT}MQ!-#<4qvfjY1k0r)srZ8$l zMBrNMl)y0x#K_m=W;)t`O8;E6iNYC+LAyYD%HIqjB_bWY+^TIaXS8kEe_{b4clQ>H zctj_!r92o3i5ndSKVDNhx#CIh@#dEF+wbVi20S=U$6nS(E0M)M=0teep*>aEzxa}> zEEheS5p$IEt&&bAq@Hw!?PNjs;Fb*1*FTzLy(cdU)Xbo~u@Ay@Frbt0Oz*>EhnQng zM=PdQ?a&{6w4`PIohJW_oeRG!hn=SfF6abjoy{q%IKnz|W5yuk6pZ6`*5$5l|e^5K4C`3yx?QTs|@gnir z+2_5 zYou6@(xk||gDq8&NLw)%mean>KxP<y z@A+QG`oub&P@#B9cjhysxHgu5bG@bGtn9YG3Qfk)lg5MPuCOzSRnVn0vW889V5IQZ zXl+~)JItcjytcxIGLz*%DedN#;t zusJcAyEW5+ZGMJ{RLXMAsws0r$VJPc8GP=Qzy1}qbMUj1egV|`U;tO(ho;@26s+4= z_j?sWve)Z_L(TUJj@DwWvKgdB2`MYf0poa=wvyM_VOHPoZ;T--4aL zKRLjF7a|G#$*unFCwKWrnE3m0*CGzWT|&63tw%YHkp~@Yk2u62%a?li63cvaD{P%2z9_lt~YEp>1b=Q3`k(%tvl>abY`MD20%2&zZRK74a!^I^TJ ztl-4vM|Ms8S+9C)Bux#v(tB^aNKPcosl-djozi?r{63F1Amqw$vk{Axj%TwxJZS?fT>J z6^ZXi!3c)1^55q5uKxh>|1>EKa><42-DM@Ah*r9*%rKbnT+}ewVU>8wagW^VnX|#` zE8t@Bui@`2M7B)XpEjn9P>Gu^_|n|Rk@GdLecudT=dQQsN91lub^O+$AyE0nI8GC4 zkjpsNoL#!v9LjUm$<;8j=>RIxCwE$bp2VC!6fNvFic?7Jr%^p?XQi-O{HiR8Mw6-h z>MS_yJPt20FYSqFc>F={KZ+=y=0bPn5irlFb`knE(Ho>%8Wxzz#B95LOMIg{0axcneo z%$f!Tw1(5LtqZxs3f6YE-rZO){Xe9=V~lNW+bp`;_G;UP1Nh) zIA3pp(>9eAT493!ES!l8LO;qeofFar=f2mVy=$Y4=-9J9;2*7_T5z;shq%&{iSL|( z--$y+Me0m|Q4D(BC4&>vyOO97c#iXr(cEb9+!Ns8SZ8o32S8`viezryv0u0;#XJ!Z zzHX~#9wI*B!{N_vl0eO^05nwFoW`r~0rfyOmMVBWl|9N$3L*08RRMQ?64gud-Pf{o zb$D{R7a+c&$N-eeHxG?{vxeC={RIu_1m8*82| zbyEFqe&XVp6gj6l&Ltz|k{CGf8p$LssTo;tSr)p`MJ=+VgDYWGx^H6PGpd)%Y+x`( zb$u*kW8`#rnoy-&&iy^k6xc%m1soK1AE1p^ppGMlVwp4!r`*BhEQe}(Ia&+dz|`LR z-iuSZ(aY}l^nGEh7l~zRzXMJsb#pWuX+;f`?sR>42L>Pm0ymtcB3h^ zi{T^u2hGn66WJ}*lL6;wJU$}hLzINor3P>3gIxtK;;?JIg>dHNo*&ZHCNj68y0Fm@ zB)vLvE-Y&D3iMDOvF?Pk?)7}&$TJP&BABtHQN2*w*Mwy%34_;4^XN<~`Y5g9e#5h& z{{986KGR^rtN*c@ETjj<^}7c{6xlU!6={Q`Zv)~(u_l_>yB(Uzmg7npM^m%sQ)2$} zKQy^JT7)0_nKlpq+iBC~-!xH}mHAIMuVe~MM5S_tKS4!_m09~>y4Xx=>W~nk958dK z&HQB|jim`IXFKuF9_$5#Ct)W2We4o#r}O-}3T=Cgi1T@>)#RGn<>>3<^B;|pDZ@)~ zu?J@M1Z;Cm;6-{y(I#Vg(It%M@L}%$=vvP?WFOE!RaTI9&BcqZniwS}xg+D4b_u0P z-F@78)YhLWD}metFTkXG{+DZK(S^wT2N%##jTA_Q7{{)7y~QgHFM{7A56>0J*I8}w zZ^5rvxYk2^H{H%tEJ)4;x=Fd0m@8q0yJ*Uv!(hn-2lEkz6P}nvF}Yx+(vRLAD(Iiy zxq0V!Hc0H{I&L#jemq0d%LstycWt~Z#7d-jl4X4Lqcp+eW9Z5`ql0ntA;|ldbYYBT z7)^efCu=mao|(8_=`(^*qW+44VT|z2md=9u7*G^DjgV+g=+)l!5ePw1967k(tr3S* zKcq5N;)QJAs%5gJl_@nyvbL`ygMmY9h;Y*tOKH+iB2IMT5+Z(zTq##55k~5zYsQ^( zy|n$-`cQ=)N=_s&ZPg^tMYE?ZymSv=xD2hib`oE-$n8_ff;5wuUm(Fx9XsCt0;qE& z{GFCp?Q8M7GND;);`gd%;ifjGUKfYJEv9uQzBV)z9Ze{0=*UPi<#8&m!6_69g_ZsK zDZ&K(Rdzlb_t2Wki4a+|Jf|e0YJ&+~<6XqlZw$vd22gS?Cii_JIXb5x^sFpH@20=e3~h~Mfr`QVUV9jj6k zXOo*XF058$kG#m{Ah>ToTFSXq)zb`E&7Z!MH1__DjP-NgUt4-%Go3ALYacjFN{&-S z=$0Vzl&Ua!1@lpjV|xP&9O4NevTF5pRD(@*jU|(_t&^NAE9T@@Zp>n=*J+hME&Pvc zjdQeoURGY0mm-rQ=Z`z0AVRMAfO^(@6*@M-T9t2qgNKFR+~B+4j&g)V5*~2R-K3G0 z!|~Vf+BCc(G$OpcuE<7Gt~a}_XuXM{MXmUenCwyTWMg=~24=TeGyz}Hjc9h9OPXrBZzdM{H zCaI?TL<)*i>hSqXeoNF~GOycI@;|Ai3t!g;q;mNh#*<9Uvl4F0FPOa`di{jmU zERN&aMd9Ry3b9NUhe=d7DJ|Y0?|8lm*qc}B5|UOaCn0g3&r(2|qh6KR+$-ixn&nM1wyfZ-p^B(bDH)G*&K=rbo^VTRyPqK0xj~wE%1s_m6GW@Wr4K{jR*=; zg?*$~2t`CUo_|XPOdv2lqGYznc-E*!$@FX1_|w&PxS*P+-)8VEJKVLV#lDQ6b^_0( z!gL_`U?@i~mYp97>y;#jS6W^&FgB$iGr%tVXkWqN2+0V_arR5YFv<6I+HguBj%LZNg8VhxQzm)G~`mhk*L1xsTcaZ%;A8An1V3(^A&PxJ+J>`>Pm*!WOH2MGO)K z*twI-+c*G|79$#?1c=!zjco=bCK14Ezof2l)Q9cn8 zMmu9bA&qjY%jq>QTF1C1ipoN2GO4^$4b&3n+V?I~m-V-EYbf zkJs3Z=PT~#jepM0ET6l$KF0`S5M~d%#(^KVoY#{Nn`u@M&Ni^4ov2l7a~zKS&pD?rBSsRu zY$!3;FR2k`MiO*VQ{tpoDi%hSfo|;2iy%#2!ltTBk%@$nOOcJF95m6eaWsWWNqBP#VeyogU_1-6FNWrj!ifY8nFdbG1?@lDkx?5Z9HL*W1|QA~QCg!()znnm@sZadNE zv=W-wf$u?OE=K4*4g9Fj5DyNX;F;Kgx{UP5k^o0&_=8qCA_)AMSi#%46xY#X3U!ez zJUq-<`)`08f>ZyjtSqr5=g=-Kwp252jMMlE%k$rpURcUQZ%jn+&qQ+B*Ce|_cOv#zJ?iQ(fG0nBMv&RcDCe)Ie+zy=@&hqdpiaZ83L|-L? zlUm^W-*y258|Znsw18>ZATvEz_@Z?FiJj&<1{h53gvnJh)l;N^HgImwQQP-ZeQ>Y9 z=|4Q)VV>yaymz?4i1-3?xVVrc@?{`=?V0~;Bg*HLywqrYYHDL{w$aeonO|A!t!M$n zQe&!cgUmc&KfbgS-SpJXUpk1836>@geR$2LY&bef5Wo=!)J-4zF{(0&zBIs2+b%pUHm5>=` z%XU-@=fBlP{g~0j6fIaSs!leGE*n^1;3X#Kw7K*ojje&fYO^+H4GQJVWLdht#Q~eu zij&o))IstS^iHY}9Q~DEC1gqq{#t_PGwog>o=9w~?(DQTs$PxaNpWrlh%#cEf$yV8 z;Li-xs$ronD@lfE5lYAV#@c%+Bh-fH0@!AyAggF^Ap5YIUx`$s;~ZsfgHQ4 zJJPKUYAGdLNR5u0zpQeahecGsyv?8umqK2%^?%7u1lg6BD$%%+;wWqesD{##cvq7fP&f>V2~Nh?|y8 zAjCLO6AjKbGK@*C=7WV`d;d2GrRw-^0}eWbuo>ZXBso5j^P_WC#F0X~&$UUaZZG(9 zx7Rnr^(Y~yg-0jhz4g7>t}I(;AL^-P8>*aDd+b&Q^yx;V#n+lhpv(9x^PI{s@bl7% zwL$o$JV^L?4-WPI($3ofYs+d?w(<(fdzeHpM6#m?$4J~yNcCj6d9^(wm(uk3O1o*G zuzH2t=Y{%?OG!Uo1K}Aff$6?1Jr9G&iU{leD{Rq^beNa&H-ggNj$jUb_kF4vmJr(; zsGyj&F2zrl0qPO$4Sz^CPtWInn6p2iaZkwx!E*D<-YLcj>g3Sg%@c)m3F#aalf!1_Bz!O}=2p)r zekh&I%s(i5r(ex1L(>jQg>)H^!5hJPWqbF?9PEM6~rHqUxS2MPH6eT_HtS z)ru+Q+3+k+BLakE<+i)!Ey8xLdZ~w#2Yg+?V(F>i$4W=5lF&2=C$)fMqQy!Zqud}- zru=wGt_PcG63`sdr0DS;h13q%mq6zjJfpI(f~kpUaOelAnnh3!P=s{JZ0qXRdK@zc zBhG$_>=)IJ@2_}VSV8==0_=~pOqt$9N>Bc~|I1HXdCas~b zg4pyQ4uS0Bp#gvroe#KYSR+Zh`Ipk~B=gy7|Hd_LBUH!B&Qt3t&xFOeYvpXK3tKj- zcSW9dj1bIr5^mchUUvfJ3QiU7SVCAIa0WdRYqcMBa>EV`%1xpYT3$bh z9~pV`rr{|VaW}lml}!yHqL?DytMg(*rJ#*)6!L;rDA`yo`AwMNyXvxD2sb%*HMMxG zs3Sw=0{PvtR`g-r5hx=R-9j+V6n98^kdnY!48E0^YnxUZX#X#C@fu+%nQ<$FOY$RL zQ`ECv1!IT(=*W$Yr8baaw{!<=f7rT}c~J`Rs5Iv19t>S?Pd9s3Bpu=ML!knd{j41r z1|cNUz~!;fYUZA_6guE~T7GMi_;@Jm`kwV0F*K(~bS+K3#kAgN2$);BE2dm%v%yi* zCF=FS*{buP@x`p+U{Tb>YsPMst`flU2lg$* z765CwM{S0x63YNVbW3(73^i=65Uyd^my-9YWz#@0Nafo#%LCdu4Ua)Y|6V<;S3=hy z<~w+xDcF5s7v_X@Otti{3_=`7mpj3q=(EO-VXcHc_bk)J`)CR& z$w?-)^*YEp^@CiuPT-QP8^){@>PQl7d*~|E-iom?K$A5(p6m6npLjLJ)PGlyPPxFi zPv6+l&f51pxE7v!Q^NMuBtK?y4IKZXz7DG%Oi3-Aq4FXt(aXzOgk^Ik76Dv+QB9l# z+T{~_oBgQi_Wn9Fxy~YX*ACjCQw=9L)Pp9!aH}Rs1tG#O@cO##x!sCdu62sEeC&aQ zGPP6gX6AO8j*a($r!%V?cB0T-Oz+VO|3>kdv>Ud^r@D1f^>&uuLm&T^b#C~=*A5I< zMU`pYRq7ni3%0FeM4%V{qYc7FmN2_0Iblz;gix#oFo^_z+1f5Q+Z*8Iigk5@adnOQ z-P;jwT>7~eX>pR#_6vCxT`#VaAV%!3B#b8_c|qVcVN!c7BZULUlRi!+xmTTUF7?aI z4x|OUcCna=HAjEZV}}+g@tb~zz6N0$*7SrX0ej;IU9={Pj@3P{K;4t!UUKs75&l1nO|3LkZtxW0*42A8AEHn#FGZ{db!Kv zBpOu-n0Qa(FM5}^PjZ0erz6JNWlnX%GiM!w2b(?nQMF<6R>29d=qr0NRWLHl4gQ49 zb(I#e>z)T+^KyP}t6Mmy5RAoCZq$Yp9#3}KU&3R21|R2#AWk>d0$l@<4F+if$>Q`{;s|>Soxp$`T^CG|IgxI06m1Mk z^XP+LD4;Rg^r)qkG5;)U#D9Yk)=JL|TF3rDU`~qbj7vYNE-zQEQS-UOgZvwhr7_s*}pGdm|eJc7G?!GUl0N8RczO~#*b7yi=L^~X+s^ZPO0g1HHr>>K>Q zWt=X%IH;3gxqsUb4Ja+H?G!zSw=@rlxncd9KHx{QC`;%#vFWNHMu+&*3A0$Iulm`XkopQFXOuX z()Mk&1{>d4Msi-IKJoW#)pE^2SiWd(MKm6rZgJ~qGiB;RMI≫g|&eW7PjUh7H>I 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

%Z7*I&)+rv3G4cbOpPUeSpLNGj^{58{XIoRFF8 zFzr(bFweqic0X}0fWH)>#p~!;I@wl-^VAm$5n38RJlh?I7Kl18x=|mEr#%i*X@}+q z3Lm$qGc+=euIb)+apnco38RB4Hp=N^aA(EhRJXXgV z41Xy0hMr93BKhgVAaPwQE%n)P17gL*CBf>s)TtCT11EkQ;W>ExD<9Kig^gOb+&Z~`@I27ymDA{&!}G1qsL3#9p7z^ zu&oT~v{(eBv$64gpO>o_?}yFT_bIxrugm^$fG4FQ1S@aS_}x`|{d^&90&8|OICB%) ztc8|1mdL2|6pVTs7;QVvXuH5Q+|`ijsI{PU+*9nsRvH5W%d_}HJAow$YvrG;D|5Yr zlg=4wi>}M7t&urLr=KWmrC)A6!<>fS=Wg03hXT>3D2q+ZxCh1DwT?tdH?ufNnZ*Pm zyLctgd_(2wr*vag<*(>w(8eE<^3kZTlOo7}9@CAG|J}o(0gr@FBHI3}dxw z=?^k9wT3tnS*NVz%4#vuXw+Em?3b9jc(uLaWKZ$hTt`&r2cY%k2ErNjjGW%^tpC75 zi;6b`$b>qCNXUEYCZf3i(syTPK$m5L7X!++i*?FzZo~)y7Iubn@Gl2p(Ho#4YQUwA z2!5#m)(%szX)8GjSqk;wg}g=CJ3tq9LZ|?treWjDM{s0O;QL_TzbEtK-p zv6IvpYeHD=CSAtK$99Nu<~D`4lbA;+=mYBj%MB^bUwKh>jIrX!Dz?_&JIEXS#mhSg5^Fj6QO-IH(PgKNZd=b^EU|n$a_2O zq_ym^KZ7W^jhYyEb?D~>6gw`2mRx``Tj*mM1*5@X2^Ps3#201a>8WbxN-ve_EPbEC zX3{xy*1khKcj_&_;r;XGKI>bL=*;*je1ye4Fc7hkreBL6(?mhy zU2>~zd^Q9A?z9Wy9KEG0RSFOtiaa$S-bzUw65#Za$m}mbL zzdHK@#9S1aG!tE@S2`pYo9Zh`Q-iocA_{s&K#pMW2>ouF>R(@$Q8J@X$6RIRU$YkV z!lJXIl*qM9NzqN2Iol$ zo^+m&o^)RIYu{BC(Y1nN{wCd7VwRq;Aw|jR9U%VnhL_46`I|N4gNz#&LPl17Nyr)@ zXP{Jjk_of^^8JL-OJoXv+1X(jEevKn&rCaW3iw3)BYWk3i9VD+wtee?NOi9FVGhBf z`@L6iv|_^g*ZX-E{Bis_^1l{yP6wh1)Wd zt`u*X_Mfb20TF=KU=F2pE(Mll7XK|uCObDmGlIrVzA3Y?Xv5v+`uo|pg$MA|Z>~E0 zp7k9Z)j4IL_4>uv2>mHJDaJ(&CckngC(iE9j`yKQCsz34=kE;>^e4#(_Tz9hDPM=% zHOOY7&%+0E<28N0vbOxz9t@>K6L?C^q(o==-HF*OUcZ}vl$+r*#@kS@E7HgD*#bbR z%HCnjED@xD7wnv5@mgfkl3*WMmeL9sa}&VGB{f8KdqUAk^BX#w8^Iuw!D`or@c+>u zbLAsv{a8HDmjosg3uelViRVe1=uV3f|7_O?J6DsaA70cvuLSU@=}gYKhv)g8gG4Cs zwJC;>Ms%#}pE_}JJmJywvrZI2`XA~z8y~rRgP^G++tg^7a*N^>#hYClHXceOq!iU$G-Ua+d240 z6o@h}%F7egbFlXnkV!e@r#*)~>q!!F9+|==AD+hq&8JnFsmTUTHlew@zvNo^E!bM$Z0? zbyCv|{Z5a*X_Tn3iX_~j`-hexIpJ(UD^7Gygude_DIgti^B|aD^g@%Ium10FBKQs8 zu~PRv#@6`%>_`5DpgnUUN~oIlQ4bg=M1tr^Z@a|;op7~iV_h4P*g3e7&a$hEi%Dx|#LSet)h44eGc%G}(=>3C*& zU$cY26Hi*auIS|OmQVgD1<1w7>3{m9Vu^_-Z9d8m5BlM?z%N~1=nW%{VMei(=N6mj zD_+vleD8bI7fx%NTC;W2p5<}J?=_o3BwD><7okj16(XdnfLxwq=ACs_?#egRW8Q}% zrfE$ebZX8Rb*HtZwY2gf3Mrk-|td(QwFB`Mh42W|NKYtpIaVy%s7C?v}JbL#m5HrT^eom?B3CH#{dypOz&&M%wrvUtA% z1A63_S2b{a%S>8Y2(+X!jj|CtNhhf%T{i*A~)01OV63u{%2mPAT9GdEZh8?gEwm7 zaHjDwcjHlzv7>jX*~%u4tGn#u?0}IO1LXm!;Tum{d>nYL$^?q8e(}sM6@ymy0Qsps z1xU0XTRt2E#7R3RVi%Ot0PFAXaw;Jkm@iXIyB zdejci6QaK*x&gZm@J^hb&=3DdNsX$VUT`E;yPCWK<$vK#!8$?1)#!yl@?$1A1|W|NPZ z*67=+RBU&$3+&rK&EPJ<)NIYt2Q<}#8SI<_w{YsD`bUY!BRL<(z7!D3`?n20x^QHU?NFt^WP7@>*?#P*1CSOnHd zLYXs72}!7@8Iu(hxs~hLC5BK0_tW+k!;As*%|GOM*ESl~de&>B zxQmSpj)!zE)64Oytu5cL$wQDrH+N2sI~}!S4Mh6;@%gzI6melD7-8-iT<&urnB(c$ z_Ww~ak|H+aE+GWE7$w0r#;)(R(vYHC=783zPB?p_f{c}T;fV_iiw;e88(A~tdBMAZ z&*J)oxhXhoT8KaQuaA+bvG zDt}HnY`vrv5cG6((Dd)`X7A%~TyYA^F=UVnkOP8tJqzyhHF~JJWo{aYt%@M*)|{Gsq8g=Ig%X$|bYs;8@!V_Z z(ycq?bVPGkgnY(TGQPi@mTd^-aFifH(gTJ0K)`3B$Um71L;~P;aXByR$t;;m+G@P- zP->@=+4A;A*S0&FQ3-5+)uh~c$f#jl{i8Q{5;`nQ;v87C8#}`GJ4O}v!O$4PF~gl) zfV=lPZt*2%eexTZ1a)CA?mu@wVllL#R4p0*PDoIA}=16jDe< zCK>~Z5VT{fsC2fu#I^&Fs_*Jy<*Hf=d=uhe>Ur%DjU~%%379Gt2zy@5MW!q_qq(+` zs^V2M)pMM@bR27Hc+Zi_oCPg-iDP@NaVTZCrOS4)VBB zOWSkn3|e6!j=ABu{ed5gG?J@PBsn9IXp)zJErQYb#@+Xa^Vih3_Tq0w$6fG#|C!7K zf+;E=eg^24&usGlSp{VCuVa&;VyX091?VFyz?yF^<2Sq5h(c6AfRw0-o})?t9u^ob zA)HrnqW?flO}*me`i;@THwgC)%4;yEB#(*HkdJ-u>e`fj*E10&ABiG4<-G04-S(*C zGV9~@mFkzPK0|yaw?w2DuFm0VD*5ToOm!mS1Bk`4!zg*3rQE=3V-{kkksiVooI$M_ zbxt*~@i2ZVnU9ofr;k zW63WgiL-^#q@gs^1MZ1zGy=4>cN#lKtaB{9w3of)BR!cXrEFF(%y-21GR%|O2q$Hf zAhWj{o(pjyU_Z4X7b70$44}d`NWTYQrO0Wx6CK1fz?TWz-YxPUeFoJjr4NBegc=ZSn1=2AA0m$-kfmeTWDtzLNAugQi@>R0giI_%II(t;& zFySm#8zK#Q;C3i0pX?!Q{zUSN15=J)!E1a8V2Jvc%`1e}Jcx!p3hZN#0k!k;q&5O4ssDA@%8b>6>3 zBx(XfJ;0>~lv@I!GfNugNo&rm+>)_q;jo|*a3Dfo|D*Nu*DsRlvYJnx9}_-j9&M0wioNoOs3N@h1Lq_YE91*MED;%LrNY#%cr~n0qEDt=D>oS#q^! z;A#qw;+t+po!~v*7+70b*&?B|UMH0`gs3qEM$0>3e&cCtR_a;qxe<#%mATueOeU!I z-)9w#?J3la9_1BlJ&1#?=Dcu>0=ki8qQh2AA?y^g=?mX>R%o}w>)1fDxg*-pMS*h_<#Da zCRa1oET4VYz5k^TYx}QTC^Ft#ZcZL;Fl+2r)XgrAZSJqUU-3PvdP+!036a9FBB&D5 zk7HV^W2z?}NsWC-L|YPheP+8**FsoRxB3t!dVp{7-R17GZt)EhrDMMXZ6)E6LDUac zx}1&bhn;URFTM3{B9C4p<7|um>`v4S4XC&B`z>dbJJ_5W!GKS`bp#UtT{C3~$hm~O zx~>Og&>*V2@|X_#iMcv6hQu)M$adL39m+1G>|tBli^?iAO1>${B|NF`_9JkIT@V~%p*c}!*}~K@y9|M?N-U@{B4NleIsxpl)nOL`>kq;2w__-`m`$(` z#@ZO=584imRQsgKq!{ibsBGFX9UMXD7)Qw;b9oFifJIJ^(OXR>RBcxfe+>ApUy_;qa znB&TTN}Ic11ahuIA=#0OKP_A@xt?Y19^mGG6ZpN8G6@74Kq_rbi_KRj0-yYXbs5xy z?LkwSdqgtrYEt9cJ%@C{k<59bs93wo=bRX{d*MGVb~$>9>ak07hc7a>?G0L@8fG|I zPnRQHJG*EF{odD*-u_b=_fxab=6(iV#{VT>wfpy$R~B$w6GnS)tf3KOuQ0b?omSLh zkteIkV}>!W7BY`jw5X0lNrDuj`|f^GoIp|&E5rogxj|&_DPfzuK1qm0OCYVs_tDPsNz*V`^C4)Bp%k>hG737l_g>q{ zxoAn~TtW_%+JXK7&3Jj6ZEyj5=0krBCE75S!5-%_jq~X))HTiE9ef36{){aOynT55!G?SJcYGqlvlo^nAM3DXEhck= z;U(A5v2OE-r-sB$Y?@u*e;i?AOHE5_C_?eWiVR32Bv+K zUP00&r8Tb4ayXJO2o*p?!h+X##>vPof!(gg&X7*W5*5!s6EfutG9W_XgSH;3=U&1V zr&yo13gvxp<)N_Ph}gR$cS_F*`M4IJO((1+TDEkM1T(Lww3EM@ED8D8|mQ=+O%7`MMRRvPu zCeh>4we5`XA`(H|Gp>|ubv z4}R3X?@Ylo{`6y2jKaZFVP;EMduZq}5O&d&97h2Go>}ED8*nyp48j8;b1?lM zOg#NIuV1Q9>W9dw2Y)x(=Hz00!=4U@Uy;VXQ`}b+&dx-u{rF#0n8Fi_Xgbm4f3^)|FC-{X z*p246`Kpl`p({Ll@B5h>LqRw4ZNwRTmYDtj%aOJJ*O3j1-LRbJM;n-Gww#Nsh+M3E zyJou6w{DX;gQcy2Rz$+XfKx@oyOOCe&ClrC82UW}lN$8)9U?t=uL1In{z=Z{CrPFXQ^G^HN}5}xrO>eij)ky>hm zk;ePz`y3k4#Vu@kEB6Vu4Jilt{u(_)R@J}Z)Bi|w8dn-U^7edF0u`HyAO&KCpX|v1 zwaHN{;9>|Cu$x~ZDMBb#5M5rN${nGW&|BjJNh5ppw&YnO>ft}VmGCF7o*Z?6I-4>& z-?4AX7$nx-l09Q4IP~|rOI+#@uwlc{Qaefytb;-^V?yZAF*Fv2;}Dga{YoHDlNE{^ zMxU5%T9Ui1C1Q0>B=lPrUgVHUO6YZs#lBc4xlBN6t*f|c^_+)f!tMAp8y3%LpP3n5bUEu-mpA{c+9GdxuoE`poQU5U%l0LYt_!7(`jYzW;*eZ_f3q6O$L2!K$U^gx!XU!GS^ZD~ zJ&4zN{Sq2C1GtGRj)&tZ#t&yNZ>Zgn>_QzIoy%UkO}#$xIw`jHZM{p)+GUHlYT&XH zW6GAs676)_6!H1H9r9Q&I;+1+6;!;+2(?I-n!BFL%9*v2jATxzPRR(fCXC_Eu#Asx zUsu2k#b?3Fb~ps6bQ@1A%_O#Noy`CNh`AKhYHqHJF-yg#$8Wk7PR9Ug`h3|BrnSOd z8tXKI&OLeir1+CLz6Zr^uFZ|VBexBqUjU>?Lr4KNhHcsni8`Go(^5$(x)|$kYb&V}lneznLy( z(#R4QiI*blR=ShSOY_x2>qO88*Fy)EJQV$#uO0hChvy~FQRdtFO_{CNJ2P^{JS+YE zx|`u#>37(Nr&p*5J@ zaBeR0ujq9@YZ)S=B(SH3O|7L{nd_E@JYb6iL>ez_Bf}`{zm^TDyf}j3>czU;XS`8IbI7Y}Qd{|30ofu?<&) zd*&C$__b^n`bXSHCCayla5tQxM`{@=jE08=*gQt|%yZ~_k%^R~@f;)A`>?Usg8bgr z>=xkJh65rsW%*2Ktl$G(vFh<3aJ3U<@-7)Pc`><^M6~0zEjNslKDIm;?yc6tp>Lx} z)oq_7g|=jOM*&Y{OfVwN<7`_h@584s_Zc;)#!Y|jVRpRzEgvo&%j06z{z>{1-ubJ& zPBQkmKu!--p==CzhIO*M`mkzRZBwVetuC*_UaY!JOW6EK zpp{rUcf^ERWoLAiC5_?mmDC!lIv!xqG~iLbc?t#tR?$b0M@2i}6`Yjayya@X*juIN zVTjHGIj$g_j@W9b-STNSSST!m;utoMB_;?8`}>F1*A)ozlaBnvfhN}-s~lZfnv&Hk z!VM0Ex%<-MxtysdCd!=C1+91A281{@r8`bsa-~E16hOCmP~uT0?>9DMGxZs>$DvLPrd>RgHZVpm7)t%q%by2EGhtuy8NR z)SO!)c^#-YEMo7*DFSF?6q*Fl(2!l5LQJuySZhixQOyOYDWsck<{hTQ*hY|%(mwRS ze#Jjf@@!h%ih|$CxD;@Dd0+y84K=@!Gg}aDT3Y8ajioZGsbPA?`>B0$%$IvWku%6* zi0J9TVGbg6Dxy~TsC?@;Dn4Q=zW&%32#GO)6CE$ z&m-rfPLwlNI8VvabBA)r7;fm^;O867aGJJ8TcqbSyZb<noWY@{SLMBND&4l(3;?`-{|O9lRA=3>iaxK?wzYO>@tV z@e-+V^;bz76Tw)iY4mbwv5Hg@=GbOf>Qqij-zStTN{g&YOpA*@nRoQZ#g#zs$s|r0 zCsgsUJikHl;9K_HC-_RY1dGucZeom;irP?=I3>|c823vF+)ctd_#(VyVMC2zMx&uY zE#Fu&SUbRJsK_a)VZrR3?=Q?g{%_DC0=g>T3P(S!1tMkVl{76!q)FbST+E)O#H8gO zE=@b~*fe*=K2IqTQ4uv(%*Rg{$uAlT2q1U53QDPTTCwM)+q}h8 z7)bs?5Y+oJ6)Vx*iV0kC{`<__sG_FaBJBLccdO~?9BMqQh0HNJsn0)y3p_NUc{0Xv zk-ZSK*@{0k6=ky(b0)aq_uehie~V<|!Xo-!q9L|-G9&Z995N__7i)9X#B zpqi+Y0^ol7-cg7vXR9C$br!AQo?-bExLysAf9Gt=T+mU+`l)WGdGbm_f=JpeRg7^R zXH9Y-69LtDdDN3jkx_Q+yLj13x6NoRRvn?R>JHPC>@nDSfs3Rd z+HI5{PoXxKi;p7}KcO(>bprqEJQqPoi;2+r^k?Jm|q}B>rq02uPpBb)$Z1pL^tov?h^^TGJ%b4WL z#`zQ>nKcG7YzIn4Q7$A{QAD}J5GPKI4eQ+lfz>p54RtCgtL0Q_E2Hht^`4Wv9$&8a zcov%g9WGf^bgUFS_eN8hnMk=6kYfy{IwASYR)VAJ*ro@ADU{- zBNte&o^t64>%MkXvf!E zF(19M!jL`w)at3|v5uFzk$4x-Y^2+ER@fDrLW3@)UZ}2S?!;Wfs>Ezj;J?0T9K7XK zy9bf$n!xD6lHM|R_r}yEZO;&sOn5sq#W9b(;!0n)-(tM(lk7mXrRG+}@s&8Ec)ly5 zy=hF0c78m$Dn}+4_@TXtr~KVWGQ3DY1vS4ReDJQ0u}TX@0AA=uGG_^ceNRp1;b&ZV zVMB?1S{F$L1;5F?=qs)~UypdxpWsy)vq2xhDi%e>qNbj%Q{A>OTiNCYN~}bxUN~PD zSEPHBW0vGWR=;bZo^-iIJ+}MknvQRdJ|Lo)`epXz-npvS+&HR0&F%?A&H?Y5JbERp z1z$W|%Sh5zTi=OkwliNeZuyc*^cwoeVxyQs?5$oBA!mXxYKdZ^$#+t(p{m0QVP4uzDk!D%5e?m zFYMssaCY@%BE?O@oj!`I)4&;gzSgwHMCYaEO8hipM~ zxOX-cD20F{U~844bA9ofAtW=5_E6sp_$;=7F1E%+(-%%qn(S3_EG>ye(e!9w{0^yV z{Eq3@dpB*F5EJ;;s!}Qw<};^5rnZS>3WQGvI|#0*1jX5kF28W>dM|M>IM$QFAmm;@ zGdn4X^dTQWPeHJFZ{L&qs*o3AQys}O+6Rutg#(?cw%f;Qx2emAM6vKyFabpTusj6v zHJS#$3i(@UDs&CuB6JP?647Es8y-tp8zM{jav#=bMm?7zut13Eqi#aAB$?6}SB-3L ze&p~>stYzNa(36&{jxAUMsY~+d%_p}z@#;q5X(TP<$>|5J-j?cIwXG+y0lW4LmCI3{xD(?gbOgxON16{jbdUhe6DRz-%RLV2Xbt;UIDEac%cku|a zha5>8gFw-<8a^>L9+4&&dmN_Xl8!~R6&2eT`E$qW66z(nMUY#mn z)RW`p9odGweG%#Rma^Mp<&42G+#zLE&fJS`I`(y+A3|%7_KR#8#NlHM1YWVv7@l`i z;M}+h?jg$^sv|+7vAD2Q8O#y>G~!+%qyBK@snW9b@i-S=6|=N{db&OS$@iHG=1vJ!>mCg?6h!93Bf^o93Loc{;QmP%w;~e`z>;ibfqY zGWi;L&1$69do3UD@`X0<=?-|+J!LU+)eHr(Ye&56Y(&y>^d)n zM>H^Pc5TTl>>E?Gd){b?@8_dk+TuBW;jRdKXTEp)bR_U?v#%CfG1)`_?bty&c40Xy^1|*_+7>=*@lD8AKh2%YS7}%~x0Eo03cdEgpjJa- zBZ`O&U-@(h%aao(5)rzN@Ov9CI}k{RGmKDuL)TM8sjN}oqxCE6!-Jb^KdYad-x+XQ zB|b%()l1>*H`Th#fIpAnwhYWqwuLQtS4o{b7Y0q7|Ff1X*_d10)2eJTY9KzS9+?En zw5;Z?fPcm_PK}CpPv1&K6^qpZod(P%B++)%U{lg$k75P z1|7Re)BWUxS~jgl!Po5t`A}Gu0uLPbr?we>2*fsShy^j{k!SCmSIb(UbRZFlsW)Nm zLUlMiCJ9FUVeN`=8r{I7zvCFh$IFgsb}cO`~~M( zP8NlTM3FtG%PcXx4JLNyW$C%Roo4GoZkt=yN156xMn^xh%3xAE#w zUodns>f`7aIJ=AM&B5qTCCDn>srOuC!3F}W@tP^Xce584%1!0|kNp%HQFVhOOEeG*q`-4x!NV$); zv2cWATAmK6F%`S7F$H_TBzbL=Ir?1ZIV|hZM_ATlye|=^!4R?Xi~`;$V{4Nn;;+<- zCB8{etgO7(MamiG6;3t{t{zmdLiT!$NF7bit^l2(FT>0 z?Y+{G^n3N?7^%%kQYn4u$S$y5@bf826o=;7Rb~FxeOGa_Y9@x}=g72nPx-;16^01| z-R$L5)<`{A6=1_O`baSG#7uFdpvhilMSUtjv`?S(ibmw=WJ_p8#%2FH@J;-f5Pc14 z8c(2SgP)XK_S#J<$??{r8F_O^0(;5%6@H?gO(0tTOCyA+lULiO)3>xAU!RT=M-+?k znX9M8m)gY+0Da(TFdH>4tzKtEHI&d=Q=Dc-HPqh&-q!9gmeuHhxnUsgMUhThm&;9M zd=oWH(Y%lLm2NUI1|9#$W$EBx>di;V2ZdN!_3{K1U~9Spt}n#68Rw)Nb)fVvs;%JnS{OtR|*0$$D*#O|Ie0_%3w0dghL z;nI=b{WfPeR=!3v*ukjmc%MsIX>ke>j++V$?@=@nSIExv&z%a0?kZBr9ERG`ox0x| zQW7z0HYIsHF6G3B#HNR3-0kJ<7?C1)q1csP35+dsU6c-XOLYk9!=JXU==pLH#I6zsqmcxI!5b$#Mn<>N^R1-r`{^?;Da^P<2l!vD zJz1ppl|eW{UGT?9uTv?wkP!buk9>yH`(_8y)SHLfC~RIK+Bo7^rC%vG2wj^=jphoC6O#=HtnCX< zNadnwi4;Vp3UUdUR(C8ZwCzQd=y)W5EGW!jt;hd4^=iL9KCb09c7e;mU|3%1LdBbxMEyXDW1|ok5)I=a@?}^|4-6 z=q&%5Ip$|22tMGgDigQNr;{rGHbAku~lC&ey(LU3oWBqfI&2*OwhRW$KdN) zxp-g9Sx%eC#TgHA`*tkGrt^cCB(m_5Oqq$e=OfKxJ6|Zy=wT-nzw4)GfdXzuYiBo=$vIAEAv=2OOt`|I zcZPg!D0YvcGzI&zuCM;uy6Fw1<0e?32(Hns*QmV+`UeW=cvZ#BQplG}m&y?9br`vy zT42#~(DhfIJU#Uh$_!kvs#FZ2)>cx5$E(Dc%fx705rFKI(3_#OQTFCFCV?3gO0VL| zD~a0~Z`9|Gn0D*f!?|53)M?tW*+nZB9a2lznW)DNbWRP{tm`e$O6aMp)~XYwOnH45 z@l)}8o9eHBvVzS{`X5hVJb8l8@*muIIXt)~`TsdkR}pD7U3^O4>(NI6+1jj+$Puq8 z{Hk6HgyQu3K^@60uOuh-|2XvkYr*7({8^z9!!;z!nq!}4r)rblSGrH-Cpf;H zv2SNL7fD#P)`nvFN+LQ8SG{lS=|__E@mo`P*jjVu*lG0&!sdfl5(<>X%B*Z}E2y)aL)>yL`t7 z?Y5Ndk$%dLXO*F_Lkcf-cH9RjH;Oh+F z?4(cYBq#lJAR<~CkO$4dY2?=Z%3wEPH`CQW^VtxBz_Ne5fbe%3uh(3JH`FegdL%6_D;VbhdBCPnUPK5>Wk86kN z;hSrV>8laySgv`}K8O6s;WNn%-^SyA`co8%tIQj??nC-duKS!G^yf!;_21d;?jWl* zt>*$y%ireycwc&7r#WwQx*5&B-&Xug<(`^<3BqrDO`B=zZcdb?YaJJ@6R zf&#=JE2Nc7r<#Kt_C{WJceapA1i|pDtE(3qP$hlmg1YBb{&|;QqVppB_1o7<87g|) z~)v|}AL}QuVPs=I}6G?kW+nl;(UN^}Xao4IiovCU5 zz<8?vM$V_u81q1`Nd-6g_RZ9IQ1C0km3J~O<7*QcH(Bnl98@}<3Z6W*bdT$3$dk>y z>2fV2><7O7KAD~HvmW|_U|udP8LykWZcJ=<9L2xHDoC+OcMOy0joXew>zBD?2QT++ z%`A~1Ax08s8~Vj(0r%NT41s6MtWpQ;irTclWU4r7(FGyRN6SkIJ7rIc^fq(L1N?~^ zW?vj~FV{+0C7rb790g{Y^_`I!F#{NuEpcFz zM3JLBB#Hc%Lva3^IO(Vxe=4#_{C3LG%{Jbi7bd0XoC?J0Qc*iqu-c!GH}-68xEhWz z69pLDzh+9>@??8-r9R<>n2w(=i*fD6`Kf}OKmZ{uEF>JKMQQXld9!CMa=kYT1J+)2 z?Vp!CM}?OT$bff=|0hqIod5E$S!q-`G|hZ8|Grn~pX@|MzWG?@zYPQrgz*^>q0S>A zMhfFdS_;~W1rrjhSU-KUkfhH=BrNSEiZsbkal1K`r4-PYA82an0_QfpdZ%8BOe0b? zSJ(DgY7?_qFKcgDnasvIk#nc-z;x#^ZP!i5S{qc%%sSEgdtqe+grnmaOEsCD>Mw7X zp;ys=dwxYQX?d`>jh*{U7aUd%(+%5%zyU|A!td$&3a=cq$N}`;IGbQ!Ve{ z=EirpVxXraz)#PLs7%L)pQ4nUs@+! zz7nr;Q7bII610Kcn@mDK?>C!}*~I277sZ{g0Pp#0EQ0$0JbH5I8eY)hV;a7oGs7!Q z8COSzW)%Mm?jFy*8?dG;@{&lT6XZHk0YbYFM;WeS_ZgjeU#A6`X=jQg0V<`Zf=sis zLtmHND*Rg&5!#PU5VDUausVlc@%dv1{wkqRK%6GwJH^bN?TbQ8`1L{k^XCW*5`$aZ z8R-$xkyq14Dsw?gXfa{-YH2?L7KtWWjELBaWO_!w!i_|wX>aNBiLtk9XgX~E^9f7l z!mYY8;HIUR+oa;6#13JEJRo(+fXy9W{~H<(&^=K)jw6y z(1D-rd0m`AF`=PC8mE%WF&#JnYl9>@%IIHepeN6Z&t>*zI;B|kso6e5JUH}43MLpf zM#8t@s487D>0S|OhB{xOlMWvXHQ(sM6Y2yW@MMFjsN#zpK1&LwocBy)@UsUDj!bdi z&l@d}@=H|+s663=GI*|Zc}%(5m!PXtZS|?DgFdx8vF$7`JRx(c{fwM^WkuFL;kW>8 zqGz+d(M#sDn9*7;GO9usx$yx@raN{YSoMMIUN2? zt!u8PBEbdGabX`hcq~zOO|68GQIYuro>^S5K}N_)9~9c!RWq18lRCPpFHdjy!7ez~ zRIkV{YEYS>2EU-wCekkC^U^9AL9~UyKPl+L6SMdOCBM61=etlnyXX{{A7cihJ>58) z`Qb+rd3;3X!6~-O<(@+?!MXVnV!l^4+QB4C${GB`KsqLd#Dug^Oxfrve61dE7Mc?- z7VN0VR>(Epj~X9*h9-EnT(8!`Kp9Y4B924h*Wuo^unsQ$eU&|p^sQ1dPP|L9Y(8Si z{+PIP{NVr-p}%c30ZvteXC)7-66G^dp+F2nn+?aYl_q%-cKKmu)96J%TQ=!c_!$fx)zmZ)(Oz`zpSp zww_}_a|SU7M9anVnZHTuP&Wz2s;YV;>^>+4azVjnY!zO1u(uiK~A^wiGW|GYOA zHG`=tY0Qm(AXIucequf?YP5l{;N%&lG({7%pb(ye@DOi?1tOQY<-xT}-5>-qZ9o0@ zQ-0;3_qxX8I1SeR4GbY1yx3Yg20hKBrE(J!t&$gEq?Oh zk|whCDv!MAcn^j0_PKcNF&OV!Xv7vH!l*U4e^~YlCBrwp=_@sX3mP^aS$$+b^B)dcM&*QfGsC|dE?dZh_M9eT`307B zt2=gsb>=$c75=LATj6HEv&rEZB=Ovtmq#YZmT4D+7p|Nk?B#?DVZMg87jP`0ArrAf zW7jMxY;7Uh1TRszJ!@>&NU`GIGCQCykW|OV#gS|v<|?C+2K~eh_X^_K4++5a9B3%5 zOpDyZ7ydC0@a0TN)^e`k8Q(_XSUvRj&3@>(8Wb+{Gw$n zsOek&PJ%nuJoM@Qb9CFfK$Tz@CgIu3uHY+|(ELWo^igN{14C$=Q9c@5u%;G9^fuM3 zj_rKnyVqlkNfW{4DDO*<>XX_JzOsw`K>gt@O2bREPKdcp(gUN0$x9}VyRU)tU%9^| zqh?~_fbUWX;QoVso9lyVK1|W__X`TIQf%zd%oAE4SoGY`u&09j!Pd_hK4kh6^sGSH zZPTjfR!Pl*jddd)Yeyyw)NUaj;a>~$e5`4K{4928dFVQ5uay?_~^A0{nb9At}h_Q=Pggz0Z zVzUp=-HgT6+@mzF`Y_T$Z@Y07)=U=4(MOBW%qr9T(m}x)jxc^gQzoGeh6sp$1!Zog zI1X(ZGR#Y(N1H6Iir_OTwCT+E5Ul@4kkpVgO$g%nOH}8R;2T4KU67iaf6f zS7SLENkEW4q)^z-A}T8Po!rf4%=qvePOTBgr4MSs$mFb8kjRu`vL2}#{~51xA)OOL zC_g2wB{F|}<6AQA!W&+H!dj?A-A^K|DecbJ{sfUFfTL0%i3;|IDIHedHreBR`QCGEZamN2Zo%Qj8&DN|zT@`gcp(w zH3L!4>;L3aZMO%*!Bf!`C~1Pm6JaS%(;ZGt8UAT3Ojn`210onsEDRFfUuMJc2KHII zBomXR5Yeyp^j4_gsBc>;zoN85FF)o|<0kcw0@X$jo9z#i`F?rbg46p>!gtKiuTRsN zg=4F?4Hi+1lYfF4x2X=v>+l@=95XAeg>(QbVIzZ7*V>fxnIM#=tZKiY;Astalb&w%{$SXT zB>1ELXoy_^-DJe#o#r;Q)rvBPZ|%S^K2pxo^Jib&=g&NrA+h`Evmt04gtZHkn?gqD z73cJ~9QIS=0D*fOE;{rJo;I<-bu(dpf?Bg=Z z6j4*DDi9IQq!kdavrz>uku)t$$Sz2l1{88agF5uhp|-e%*tlNf&vu0^V%+*KyuE!1 zIa%=oBV2_ZrD*96PnfAO%bjUTTWEXenMs!&3`&e0Q9z{Iaj5|WYAlClt3_Yep^G@& zH`Dh`X8iC&N4M;iVWlELsj{c}S{aDqGrPtDt+8R*h1guzsEoB>s}h z4r^)9Q7w-mX_Jy;JCA{${DHVc4i$QLyjM$fB6z&lQVlC3_C$F>TQh@37Kz@YN0QJO zy8We5nZ?{&h(<-M{Y;#!|nvBrQ%w6tPSWZ|_ZVt>uvRJFfo1b^6xm6j& znP2G4a8+2T7RL86t5-B(4cV^_AGI#GM<9+D`v#2Ck!7Gc)h}q23jLTX*d9YA+ZFCg zEsw|Pn?P3D(x8v;*O)HuUzZ-Dor)_X${U_v;88DA?4M>VafC3GXB$^eOTVCU8E7mUlxD=U1%&Gt*J=dqf>k6x%)Ka)=(9;iJI!&oL@?SdNgYd(CRzTP|yT zeJ}0MLur|Tjo7#23#(b8SCehfgBSZQ{3mP>$1LAwax*S?G#mXp3lvNo*lJ8&S6@cg`lP}pvKIW1$Wy2e z`Pn>6ciG3#S1ji3&waZ4MNjqK8 zGF9W%GvIlfkSAM}+*DfKFXD(s|FYhwG6rt~kEe?|)|1v&^Ul3>6wcCJyRbjlg4|-b zPZ$ZBQ@_<5;XcFf3_MzQH$b`08jh)>PxIFC^?HXdPUj`$#y!*^AikZ+!{F_cF0LMz zs4!l_(Pq)JjaTfLlD@p@a|#ze-2mBEr7xAhYkXKbuqi;#&*|HWRCQi#S%=p!o}TD7 ze8gAJ|6RN1{N@Y%NO7@O`!#{W9^R{cF)u4Lyp^d+TAAeWQ%3F<&q3`x2;5c157(L4 z@yL>xQD8XTmL<;57hl_*K{};i#6k|)N1k3fdtehrXU!$kpwVh+w9-00;~Bx;%AOOf zi?_p17cBz=o6^S?O*f)Pz8*Cy)0ffRVRgbc(UWz@7MnI9jHdxV5qv6qSvy~OKrkF z-D63c4#vAnHPvr4_eDikWH`r`$M~l<+LiT|mA$?1fC@`vR|N z{yOB&mdFJ+N+~A|X}68D)-B{*Ojf!xSHQDR{M!QCQCS+>u}oft58Md4$4$Z@z7ts{ zzV)jGQ=Fj}Za?(cbi+-uf(9bK$&C(f;;!{C zr54=%J2~_#oEIfaKbX)U3h`6(d{=!(nn}I-n|LZZjPaebQAm zxV+Iv@_H$V7X^iy0>DU4o=cPGPDJ{b3dVRHd-D{Ju)C=29{L7;xOw)g{fu%&qsg!4 znfx!5cr_Y){XS;#Ad?g8sgE>s0?m>8+lIM|b?g_4}b0w>G;_Dv$yL?|I5sh=9px3A82cJxq+oC| zU7f5U45i|FH$lLh{Sd*|_p)+YLoV;zXq8kh9lqW*Up8NA?MD3a`hnX5GpGM)p_#|_ z#>mZo_q2^N_s5tU$Na~MeZN9oyP@)u1BeD8oDc&c^9( z`j@%u)hg4%iKcBcpD>FvgGZrFsL~E``osg7mO7ckU&-DCmSTeB}#!_>!YP4>ok>tM+o==j$`pAibrN=1d?)Yf;{1w(NX&!Bq{Bc~Q$ryKCKB02Fi6t2XEUO_Jy z$SPBcbtLMPr5~tRPDYM*4xdyY7Tp3lFm8>N_B!x-Zdm6>T|e&nJ8O27ul21o25U~y zM9{s#gy9W!RwVYJx{imXc~k9kiE&{Fyp*4L9r@{)9o8kCV8w0jSWzST6NJa>sDWw! zTs_9A+I|}wTw-h2Hd`|#nOItlF=3_7yw@9x1*-Cbi(d#kUY(Li2-zq{cv)o6O=2uaM_#I2~JId~v8<<9=Ix1-2F~TjE&LM5r40Sy)y9i4e_VUa$Q77rt z(b;@_n#4jYs6U-EVmtXPs@K@4V=ZQePZuwudk9*GaM!I()!WS53gR#0sT`*^-qIYP zjJdkeV^+t&-Q2R5X~h|eBHAaULCObt!CdnWOA9!q@{Lg~4{`l;eH+)nrw}yOC=8su z9-e>AX1>S_8}`ajLev#Dkv8vnULq)AmO4XJH8~>JmC5yRrS_SS3rVo!w$eTfw_8xvxt7=^ zHCfgW)qX}I_Mx(N2%)z-s4=AG-;BErO>JYTMbZUEuv}EAUbH)g^6+QALDneNj~&EH zcxw#%UMwrsoSsOCR#zTOl8ZmmTK}#Iv1fB6cY{wsV&E%&^!W3tF>5mjN@<-j*t|3` zS&u6Jshrz4p1*>hqijrh-inRYr5`K&psUSC$Jf1q2}cWA{Z2`3b9Fi$K|W6_yzVZ{$UEdW-W6a> zx+BKVq}v*9FedX4DoBqdybsufbAb-c3fAV*LJwbC7rRgwXuaEovxLEoi(7d zuBD;9fjOO^iM5@fwXvP9jftV1pst05p02(*$VQCN)6N_N(kTCu768Hrh{grIM6+`K=-iTlT`v_E&cChDLCue*tiOr z+S^#@x=QI<=^7i_fi&ahWN#HI(6Dfz=kE(MK>c3}17$^fpYB*9z>!0dpFCl{*RsnO z|65@ojL3FK)jk5WD--Cj-?{7l_49l6U!okXOdVXA4CsDa3m8cJAb{`f*ZJQA{zeP* z4AnhgKJnwg-h8lP5x04}p%1j{=230Nohc_GSR>ssV%ku4nzP-#p)= zKoOARuc8$zs|x7w6kyW2-)LBY$B`g(M8ot1YXcPfohS7^5b@2UKv57t?231LxIm+= zfj{zljV2U(9Qe;H&o3_sOzZqM50m{r^!hv#A;dNSo%ffMrinj_e*;2a;mH=v8USVh zI4bcyeLqV+4iu49aL{#dv?pc&fp+<-FzyHFN&(>SquXUbph2z4E^tdmj)2Cvz*2dC zvCo$KpV6Rn)^MCH1oQ>}YgVyUeiSSQ0@%Ir!Q|k#a{-2Ueb2rYs*eNt?d=U6WPwHf z|1L^G*3MQI*187&W%d8J;)4(?2?w391&GA~#J;&Fc0}#p6Dwt{XKG<6r0bw7Xl-R= zYGRT8JI~iIzfD)Cj4ma!xIO8@jf8L*<6m=dIB@V(fLe`!{*Z@Fi;0WSA zkkIH+pacjYm8U52FaUh<7jV`5QJ^FUpc0kp2Q**|rU9$_eGS3w9tBE)0JgBk&GG=S zG(gMy!HB8D<3L9X2U8VOD+6n11xFhjYrBVE96xjj{;mX*R=^?tUPho@9+e;sLgn2H zXQ2fE2nBc;$-M!D<@z`f7@kgslE6FxGIA)Nf!#s@%pnYzgZds@(d}`zp@XxvojEWM zSQ+XAVgOeLp}xziAF>h9g$lqNeSd)Tc>cR0q^%u|bsa#41hl4PZ(akU_yAFi_ga(m z?tdo=M4P@5c8Ng)f*}5KOF`d91<8N_Cc$ora{<5(07!pN^Ax|wfp(_AjPcJrENQK8 zE@^7-U}y!hyYbp<3owDLkRZXs;lvyGs2EugdK2Was@4L2$qwj#Kg9Wz@Ho&y*TKlz z&hp%WM~150Xx@!Cfk26iZ<9vH~L+#`u8RN z{ki5e<56L9AdEA%U3?)6_2dcS^M`ZIa@M0jc|#+M-=oUf>W!fV5cY#~__!&*k~e_5 zp@7@mpUq+l|2+wyHlB+Z!mqXfqZ9yA?n~e)`S&E~gRoNR^Z1`P!1SgHNVzW|pzPn1 z@USxc!x_2tLtcz8uyGb31_ID~gKM??-;w~L1$nF?N0NYjHvgIpI@=!QD}Vqdby%_p z0}@7Ixsjm-w%+&YoDx+CbMrMc33p#M{^92X4}EA_R^DG6=#DvHw|U=(vWNaH@gNMUCrGVR02s6pXd>x7gG!D6 z5Bz_kNMc41a9Tg`qu=L?L4Uy&CPBhM9q-hRQy5tR;2EG}?rZKi4H6FOAOXPdq;h;`v zp6eta^#kx90Q|mT1UEs#bwL`2B39P83&0=!rMuNOXgmnRKw!y?oC9!vz+>*~9t{M| zzmI7joG|{eVsdIZyGLEm^3etZQIZUn;Si?fq; zR{$LBFS9WJ011CsqWa;){@IOPfDJIox4+;)KS9DDRxo}DuVylQ-T=5uKPu-soZAA|)7e^|TZA$-<; zmH4-x3;zXwivSY-uq44>aFtJ$zfXz_{#xov5JAEpCVzhj&&KT->jpIM_{-+yC?Mev z(^Nl%x6A4;Oak!Hzu@C&AmN~{j&!v+p2h)iv%lalFG0dV#jK&2wnWqbxa6-6y#-D~ zK`eBj&Y9jCe|k;{z(xOp`(cBGKYTv^(B>x_<4C=LS=RqD3p^f3_`|o%58>RN{e!Y%J* zwUjawfUEumcP0f1fB1mlq2?Bn6s_dI-Ce%*!wVQka!_y(%d?*V2l?;s2`&M>?{6-z z)E-4Eg8({suUuLHK<2-IoSKgURX_lva2MEs?ZOiz0DAxS@lxwi;9HPEW}0~su?Mg* zc>`=r?l+oL=W!$m9m|Zof>nS4(E&j315XVf1%kR4`=0WB{&#wb7U1uGqmxY^2hxE; z8WdI*e*`+^39yFT*YTs-qexJvOD)j+244Y~FK~BvALwrRC=gTxeQj`q`TGp7_Al27 zv3nENNu>SNWLJkrfuJH~UKnm=7hq@d1Ni#oev_4*9|eMnjtkqsnD&7t zvjNU?ABgYuC=gUc{AY#w`#{Zij{-qO!GD$xz7LE5?t~v%20=x>f0lT?4-^f36bLHX z{j)^sec(~}qd-s*?w_S0?*qXi9|eMnYX2;ncOR%0^C%EhB>QLmtNXwxARc<8Q$R(p ze^wW|4}6*YC=gV{`e*Hv`#{*VM}eTC)IUpW+y^!R>+T~>1{In9S>WM5uq^vgAgE~c z&s0eFfo{2v0zpNff94pv56oeTePH6(M}eRs%|COR+y|NhJLg9_1ypqT zXZDHvz`piJfuJJFKi@gu2ikQ$3Ir8J{`pe$K2Q}n(tD)Ipd!aVAJ5$fnhZS(1Qjj* z`8MJAo4bGg@ Date: Tue, 2 Jul 2024 00:20:54 +0200 Subject: [PATCH 4/9] Update gradle files to match new Gradle, Kotlin and Java versions used by Unity. --- .../android/build.gradle | 14 +++++++------- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../example/android/app/build.gradle | 12 ++++++++---- .../example/android/build.gradle | 4 ++-- .../gradle/wrapper/gradle-wrapper.properties | 2 +- 5 files changed, 19 insertions(+), 15 deletions(-) diff --git a/flutter_embed_unity_6000_android/android/build.gradle b/flutter_embed_unity_6000_android/android/build.gradle index af70a91..fe15b63 100644 --- a/flutter_embed_unity_6000_android/android/build.gradle +++ b/flutter_embed_unity_6000_android/android/build.gradle @@ -2,14 +2,14 @@ group 'com.learntoflutter.flutter_embed_unity' version '1.0-SNAPSHOT' buildscript { - ext.kotlin_version = '1.8.20' + ext.kotlin_version = '1.9.10' repositories { google() mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:8.0.2' + classpath 'com.android.tools.build:gradle:8.3.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } @@ -27,15 +27,15 @@ apply plugin: 'org.jetbrains.kotlin.android' android { namespace 'com.learntoflutter.flutter_embed_unity_android' - compileSdkVersion 33 + compileSdkVersion 34 compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 } - kotlinOptions { - jvmTarget = '1.8' + kotlin { + jvmToolchain(17) } sourceSets { diff --git a/flutter_embed_unity_6000_android/android/gradle/wrapper/gradle-wrapper.properties b/flutter_embed_unity_6000_android/android/gradle/wrapper/gradle-wrapper.properties index da1db5f..e411586 100644 --- a/flutter_embed_unity_6000_android/android/gradle/wrapper/gradle-wrapper.properties +++ b/flutter_embed_unity_6000_android/android/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/flutter_embed_unity_6000_android/example/android/app/build.gradle b/flutter_embed_unity_6000_android/example/android/app/build.gradle index 1a3714f..f6a4ccf 100644 --- a/flutter_embed_unity_6000_android/example/android/app/build.gradle +++ b/flutter_embed_unity_6000_android/example/android/app/build.gradle @@ -28,11 +28,15 @@ apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { namespace "com.learntoflutter.flutter_embed_unity_android_example" compileSdkVersion 34 - ndkVersion flutter.ndkVersion + // ndkVersion flutter.ndkVersion compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 + } + + kotlin { + jvmToolchain(17) } defaultConfig { @@ -40,7 +44,7 @@ android { applicationId "com.learntoflutter.flutter_embed_unity_android_example" // You can update the following values to match your application needs. // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. - minSdkVersion 22 + minSdkVersion 23 targetSdkVersion 34 versionCode flutterVersionCode.toInteger() versionName flutterVersionName diff --git a/flutter_embed_unity_6000_android/example/android/build.gradle b/flutter_embed_unity_6000_android/example/android/build.gradle index 59654ae..dc10b57 100644 --- a/flutter_embed_unity_6000_android/example/android/build.gradle +++ b/flutter_embed_unity_6000_android/example/android/build.gradle @@ -1,12 +1,12 @@ buildscript { - ext.kotlin_version = '1.8.20' + ext.kotlin_version = '1.9.10' repositories { google() mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.1.2' + classpath 'com.android.tools.build:gradle:8.3.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/flutter_embed_unity_6000_android/example/android/gradle/wrapper/gradle-wrapper.properties b/flutter_embed_unity_6000_android/example/android/gradle/wrapper/gradle-wrapper.properties index 966aa8e..4d6272d 100644 --- a/flutter_embed_unity_6000_android/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/flutter_embed_unity_6000_android/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip From cd323826ac7d9fc16131b6ea4fb10b8dba3ef145 Mon Sep 17 00:00:00 2001 From: timbotimbo Date: Tue, 2 Jul 2024 00:21:24 +0200 Subject: [PATCH 5/9] Replace UnityPlayer with UnityPlayerForActivityOrService. Handle UnityPlayer no longer extending a FrameLayout. --- .../CopyMotionEvent.kt | 2 +- .../platformView/CustomFrameLayout.kt | 62 +++++++++++++++++++ .../platformView/UnityView.kt | 4 +- .../platformView/UnityViewStack.kt | 4 +- .../unity/UnityPlayerSingleton.kt | 47 +------------- 5 files changed, 69 insertions(+), 50 deletions(-) rename flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/{unity => platformView}/CopyMotionEvent.kt (96%) create mode 100644 flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/platformView/CustomFrameLayout.kt diff --git a/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/unity/CopyMotionEvent.kt b/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/platformView/CopyMotionEvent.kt similarity index 96% rename from flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/unity/CopyMotionEvent.kt rename to flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/platformView/CopyMotionEvent.kt index d492794..d1b89b9 100644 --- a/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/unity/CopyMotionEvent.kt +++ b/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/platformView/CopyMotionEvent.kt @@ -1,6 +1,6 @@ // source https://gist.github.com/sebschaef/b803da53217c88e8c691aeed08602193 -package com.learntoflutter.flutter_embed_unity_android.unity +package com.learntoflutter.flutter_embed_unity_android.platformView import android.view.MotionEvent diff --git a/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/platformView/CustomFrameLayout.kt b/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/platformView/CustomFrameLayout.kt new file mode 100644 index 0000000..e24688c --- /dev/null +++ b/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/platformView/CustomFrameLayout.kt @@ -0,0 +1,62 @@ +package com.learntoflutter.flutter_embed_unity_android.platformView + +import android.view.InputDevice +import android.view.MotionEvent +import android.content.Context +import android.widget.FrameLayout +import io.flutter.Log +import android.view.View +import com.learntoflutter.flutter_embed_unity_android.constants.FlutterEmbedConstants.Companion.logTag +import com.learntoflutter.flutter_embed_unity_android.unity.UnityPlayerSingleton + + +public class CustomFrameLayout : FrameLayout { + + constructor(context: Context) : super(context) + + // TODO: Is this still functional if not on UnityPLayer's own FrameLayout? + override fun onWindowVisibilityChanged(visibility: Int) { + Log.d(logTag, "CustomFrameLayout onWindowVisibilityChanged $visibility") + + if(visibility == View.VISIBLE) { + // For some unknown reason, if window visibility changes quickly from View.VISIBLE + // to View.GONE and back to View.VISIBLE, Unity UI appears to freeze. + // This happens, for example, on orientation change, flutter hot reload, and + // occasionally on widget rebuild if there is a significant change to the widget + // tree (you can usually see this as a brief flicker of the widget). + // The underlying UnityPlayer is still active and still responds to messages even + // though it appears frozen, so it is purely a UI thing. Presumably a bug in Unity. + // However using UnityPlayer to render in a View like this is not supported so + // unlikely to be fixed by Unity + // (see https://docs.unity3d.com/Manual/UnityasaLibrary-Android.html) + // As a workaround, pause and resume the player unfreezes the UI + Log.d(logTag, "UnityPlayerSingleton became visible, so pausing and resuming Unity") + + UnityPlayerSingleton.getInstance()?.pause(); + UnityPlayerSingleton.getInstance()?.resume(); + // pause() + // resume() + } + + super.onWindowVisibilityChanged(visibility) + } + + // This is required for Unity's New Input System to receive touch events + override fun dispatchTouchEvent(motionEvent: MotionEvent): Boolean { + motionEvent.source = InputDevice.SOURCE_TOUCHSCREEN + + // true for Flutter Virtual Display, false for Hybrid composition. + if (motionEvent.deviceId == 0) { + /* + Flutter creates a touchscreen motion event with deviceId 0. (https://github.com/flutter/flutter/blob/34b454f42dd6f8721dfe43fc7de5d215705b5e52/packages/flutter/lib/src/services/platform_views.dart#L639) + Unity's new Input System package does not detect these touches, copy the motion event to change the immutable deviceId. + */ + val modifiedEvent = motionEvent.copy(deviceId = -1) + motionEvent.recycle() + return super.onTouchEvent(modifiedEvent) + } else { + return super.onTouchEvent(motionEvent) + } + } + +} \ No newline at end of file diff --git a/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/platformView/UnityView.kt b/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/platformView/UnityView.kt index 93377fe..95e1f45 100644 --- a/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/platformView/UnityView.kt +++ b/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/platformView/UnityView.kt @@ -28,12 +28,12 @@ class UnityView(viewFactoryContext: Context) : PlatformView, IUnityViewStackable // The solution used here is to use an intermediate View (a FrameLayout) which sits between // the PlatformView and UnityPlayerCustom. Then we can construct the FrameLayout using the // context from the view factory, and add the UnityPlayer to that - private val baseView: FrameLayout = FrameLayout(viewFactoryContext) + private val baseView: CustomFrameLayout = CustomFrameLayout(viewFactoryContext) override var onDispose: (() -> Unit)? = null override fun attachUnity(unityPlayerSingleton: UnityPlayerSingleton) { - baseView.addView(unityPlayerSingleton) + baseView.addView(unityPlayerSingleton.getFrameLayout()) Log.i(logTag, "Attached Unity to view") } diff --git a/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/platformView/UnityViewStack.kt b/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/platformView/UnityViewStack.kt index 0127258..65a0fb3 100644 --- a/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/platformView/UnityViewStack.kt +++ b/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/platformView/UnityViewStack.kt @@ -34,7 +34,7 @@ class UnityViewStack { // It's important to call windowFocusChanged, otherwise unity will not start // (not sure why - UnityPlayer is undocumented) - unityPlayerSingleton.windowFocusChanged(unityPlayerSingleton.requestFocus()) + unityPlayerSingleton.windowFocusChanged(unityPlayerSingleton.getFrameLayout().requestFocus()) // I don't know why, but when Unity is detached from an existing view and // added to a new view, we need to pause AND resume instead of just resume: unityPlayerSingleton.pause() @@ -80,7 +80,7 @@ class UnityViewStack { Log.i(logTag, "Reattached Unity to existing view") // I don't know why, but when Unity is reattached to an existing view // we need to pause AND resume (even though Unity was never paused?): -// unityPlayerSingleton.windowFocusChanged(unityPlayerSingleton.requestFocus()) +// unityPlayerSingleton.windowFocusChanged(unityPlayerSingleton.getFrameLayout().requestFocus()) unityPlayerSingleton.pause() unityPlayerSingleton.resume() } diff --git a/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/unity/UnityPlayerSingleton.kt b/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/unity/UnityPlayerSingleton.kt index 1a0a6da..aa52fbc 100644 --- a/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/unity/UnityPlayerSingleton.kt +++ b/flutter_embed_unity_6000_android/android/src/main/kotlin/com/learntoflutter/flutter_embed_unity_android/unity/UnityPlayerSingleton.kt @@ -6,12 +6,12 @@ import android.view.InputDevice import android.view.MotionEvent import android.view.View import com.learntoflutter.flutter_embed_unity_android.constants.FlutterEmbedConstants.Companion.logTag -import com.unity3d.player.UnityPlayer +import com.unity3d.player.UnityPlayerForActivityOrService import io.flutter.Log @SuppressLint("ViewConstructor") -class UnityPlayerSingleton private constructor (activity: Activity) : UnityPlayer(activity) { +class UnityPlayerSingleton private constructor (activity: Activity) : UnityPlayerForActivityOrService(activity) { companion object { // We must use a singleton UnityPlayer, because it was never designed to be // reused in multiple views. Calling unityPlayer.destroy() will kill the @@ -76,49 +76,6 @@ class UnityPlayerSingleton private constructor (activity: Activity) : UnityPlaye } } - // This is required for Unity to receive touch events - @SuppressLint("ClickableViewAccessibility") - override fun onTouchEvent(motionEvent: MotionEvent): Boolean { - motionEvent.source = InputDevice.SOURCE_TOUCHSCREEN -// Log.i(logTag, "onTouchEvent") - - // true for Flutter Virtual Display, false for Hybrid composition. - if (motionEvent.deviceId == 0) { - /* - Flutter creates a touchscreen motion event with deviceId 0. (https://github.com/flutter/flutter/blob/34b454f42dd6f8721dfe43fc7de5d215705b5e52/packages/flutter/lib/src/services/platform_views.dart#L639) - Unity's new Input System package does not detect these touches, copy the motion event to change the immutable deviceId. - */ - val modifiedEvent = motionEvent.copy(deviceId = -1) - motionEvent.recycle() - return super.onTouchEvent(modifiedEvent) - } else { - return super.onTouchEvent(motionEvent) - } - } - - override fun onWindowVisibilityChanged(visibility: Int) { - Log.d(logTag, "UnityPlayerSingleton onWindowVisibilityChanged $visibility") - - if(visibility == View.VISIBLE) { - // For some unknown reason, if window visibility changes quickly from View.VISIBLE - // to View.GONE and back to View.VISIBLE, Unity UI appears to freeze. - // This happens, for example, on orientation change, flutter hot reload, and - // occasionally on widget rebuild if there is a significant change to the widget - // tree (you can usually see this as a brief flicker of the widget). - // The underlying UnityPlayer is still active and still responds to messages even - // though it appears frozen, so it is purely a UI thing. Presumably a bug in Unity. - // However using UnityPlayer to render in a View like this is not supported so - // unlikely to be fixed by Unity - // (see https://docs.unity3d.com/Manual/UnityasaLibrary-Android.html) - // As a workaround, pause and resume the player unfreezes the UI - Log.d(logTag, "UnityPlayerSingleton became visible, so pausing and resuming Unity") - pause() - resume() - } - - super.onWindowVisibilityChanged(visibility) - } - // Overriding kill() was an experiment to try to resolve app closing / crashing when // player.destroy() is called. It didn't work. The problem is that calling player.destroy() also // kills the process it is running in (the entire app, or just the activity if the activity From 16dd55e14589f531574aecd4ab603ffbac0f84f6 Mon Sep 17 00:00:00 2001 From: timbotimbo Date: Mon, 1 Jul 2024 23:11:06 +0200 Subject: [PATCH 6/9] Add Unity project imported in 6000.0.8. --- example_unity_6000_0_project/.gitignore | 72 ++ .../Assets/DefaultVolumeProfile.asset | 15 + .../Assets/DefaultVolumeProfile.asset.meta | 8 + .../Assets/Example.meta | 8 + .../Assets/Example/Materials.meta | 8 + .../Example/Materials/ArPlaneMaterial.mat | 139 +++ .../Materials/ArPlaneMaterial.mat.meta | 8 + .../Example/Materials/FlutterBlueMaterial.mat | 135 +++ .../Materials/FlutterBlueMaterial.mat.meta | 8 + .../Materials/FlutterDarkBlueMaterial.mat | 135 +++ .../FlutterDarkBlueMaterial.mat.meta | 8 + .../Materials/FlutterLightBlueMaterial.mat | 135 +++ .../FlutterLightBlueMaterial.mat.meta | 8 + .../Assets/Example/Models.meta | 8 + .../Assets/Example/Models/flutter_logo.fbx | Bin 0 -> 32240 bytes .../Example/Models/flutter_logo.fbx.meta | 109 ++ .../Assets/Example/Prefabs.meta | 8 + .../Example/Prefabs/AR Default Plane.prefab | 243 +++++ .../Prefabs/AR Default Plane.prefab.meta | 7 + .../Assets/Example/Prefabs/FlutterLogo.prefab | 347 +++++++ .../Example/Prefabs/FlutterLogo.prefab.meta | 7 + .../Example/Prefabs/SceneSwitcher.prefab | 46 + .../Example/Prefabs/SceneSwitcher.prefab.meta | 7 + .../Assets/Example/Scenes.meta | 8 + .../Scenes/FlutterEmbedExampleScene.unity | 666 ++++++++++++ .../FlutterEmbedExampleScene.unity.meta | 7 + .../Scenes/FlutterEmbedExampleSceneAR.unity | 887 ++++++++++++++++ .../FlutterEmbedExampleSceneAR.unity.meta | 7 + .../Assets/Example/Scripts.meta | 8 + .../Example/Scripts/ARCheckAvailability.cs | 40 + .../Scripts/ARCheckAvailability.cs.meta | 11 + .../Assets/Example/Scripts/ARLogoPinner.cs | 39 + .../Example/Scripts/ARLogoPinner.cs.meta | 11 + .../Scripts/ReceiveFromFlutterRotation.cs | 23 + .../ReceiveFromFlutterRotation.cs.meta | 11 + .../Assets/Example/Scripts/SceneSwitcher.cs | 12 + .../Example/Scripts/SceneSwitcher.cs.meta | 11 + .../Scripts/SendToFlutterSceneLoaded.cs | 21 + .../Scripts/SendToFlutterSceneLoaded.cs.meta | 11 + .../Example/Scripts/SendToFlutterTouched.cs | 31 + .../Scripts/SendToFlutterTouched.cs.meta | 11 + .../Assets/FlutterEmbed.meta | 8 + .../Assets/FlutterEmbed/Editor.meta | 8 + .../Editor/ProjectExportChecker.cs | 203 ++++ .../Editor/ProjectExportChecker.cs.meta | 11 + .../Editor/ProjectExportHelpers.cs | 32 + .../Editor/ProjectExportHelpers.cs.meta | 11 + .../FlutterEmbed/Editor/ProjectExporter.cs | 27 + .../Editor/ProjectExporter.cs.meta | 11 + .../Editor/ProjectExporterAndroid.cs | 117 +++ .../Editor/ProjectExporterAndroid.cs.meta | 11 + .../FlutterEmbed/Editor/ProjectExporterIos.cs | 56 ++ .../Editor/ProjectExporterIos.cs.meta | 11 + .../Editor/ProjectExporterMenuItem.cs | 30 + .../Editor/ProjectExporterMenuItem.cs.meta | 11 + .../Assets/FlutterEmbed/SendToFlutter.meta | 8 + .../SendToFlutter/SendToFlutter.cs | 33 + .../SendToFlutter/SendToFlutter.cs.meta | 11 + .../Assets/Readme.asset | 34 + .../Assets/Readme.asset.meta | 8 + .../Assets/Settings.meta | 8 + .../Assets/Settings/SampleSceneProfile.asset | 123 +++ .../Settings/SampleSceneProfile.asset.meta | 8 + .../Settings/URP-Balanced-Renderer.asset | 112 +++ .../Settings/URP-Balanced-Renderer.asset.meta | 8 + .../Assets/Settings/URP-Balanced.asset | 136 +++ .../Assets/Settings/URP-Balanced.asset.meta | 8 + .../Settings/URP-HighFidelity-Renderer.asset | 105 ++ .../URP-HighFidelity-Renderer.asset.meta | 8 + .../Assets/Settings/URP-HighFidelity.asset | 136 +++ .../Settings/URP-HighFidelity.asset.meta | 8 + .../Settings/URP-Performant-Renderer.asset | 76 ++ .../URP-Performant-Renderer.asset.meta | 8 + .../Assets/Settings/URP-Performant.asset | 136 +++ .../Assets/Settings/URP-Performant.asset.meta | 8 + ...niversalRenderPipelineGlobalSettings.asset | 342 +++++++ ...salRenderPipelineGlobalSettings.asset.meta | 8 + example_unity_6000_0_project/Assets/XR.meta | 8 + .../Assets/XR/Loaders.meta | 8 + .../Assets/XR/Loaders/ARCoreLoader.asset | 14 + .../Assets/XR/Loaders/ARCoreLoader.asset.meta | 8 + .../Assets/XR/Loaders/ARKitLoader.asset | 14 + .../Assets/XR/Loaders/ARKitLoader.asset.meta | 8 + .../Assets/XR/Loaders/SimulationLoader.asset | 14 + .../XR/Loaders/SimulationLoader.asset.meta | 8 + .../Assets/XR/Resources.meta | 8 + .../XRSimulationRuntimeSettings.asset | 60 ++ .../XRSimulationRuntimeSettings.asset.meta | 8 + .../Assets/XR/Settings.meta | 8 + .../Assets/XR/Settings/ARCoreSettings.asset | 17 + .../XR/Settings/ARCoreSettings.asset.meta | 8 + .../Assets/XR/Settings/ARKitSettings.asset | 16 + .../XR/Settings/ARKitSettings.asset.meta | 8 + .../XR/Settings/XRSimulationSettings.asset | 14 + .../Settings/XRSimulationSettings.asset.meta | 8 + .../Assets/XR/UserSimulationSettings.meta | 8 + .../XR/UserSimulationSettings/Resources.meta | 8 + .../Resources/XRSimulationPreferences.asset | 29 + .../XRSimulationPreferences.asset.meta | 8 + .../SimulationEnvironmentAssetsManager.asset | 17 + ...ulationEnvironmentAssetsManager.asset.meta | 8 + .../XR/XRGeneralSettingsPerBuildTarget.asset | 111 ++ ...XRGeneralSettingsPerBuildTarget.asset.meta | 8 + .../Packages/manifest.json | 48 + .../Packages/packages-lock.json | 529 ++++++++++ .../ProjectSettings/AudioManager.asset | 19 + .../BurstAotSettings_Android.json | 17 + .../BurstAotSettings_StandaloneWindows.json | 16 + .../ProjectSettings/BurstAotSettings_iOS.json | 16 + .../ProjectSettings/ClusterInputManager.asset | 6 + .../CommonBurstAotSettings.json | 6 + .../ProjectSettings/DynamicsManager.asset | 36 + .../ProjectSettings/EditorBuildSettings.asset | 22 + .../ProjectSettings/EditorSettings.asset | 35 + .../ProjectSettings/GraphicsSettings.asset | 70 ++ .../ProjectSettings/InputManager.asset | 487 +++++++++ .../ProjectSettings/MemorySettings.asset | 35 + .../ProjectSettings/MultiplayerManager.asset | 7 + .../ProjectSettings/NavMeshAreas.asset | 91 ++ .../PackageManagerSettings.asset | 43 + .../ProjectSettings/Physics2DSettings.asset | 56 ++ .../ProjectSettings/PresetManager.asset | 7 + .../ProjectSettings/ProjectSettings.asset | 949 ++++++++++++++++++ .../ProjectSettings/ProjectVersion.txt | 2 + .../ProjectSettings/QualitySettings.asset | 136 +++ .../SceneTemplateSettings.json | 167 +++ .../ProjectSettings/ShaderGraphSettings.asset | 18 + .../ProjectSettings/TagManager.asset | 52 + .../ProjectSettings/TimeManager.asset | 9 + .../ProjectSettings/URPProjectSettings.asset | 15 + .../UnityConnectSettings.asset | 36 + .../ProjectSettings/VFXManager.asset | 12 + .../VersionControlSettings.asset | 8 + .../ProjectSettings/XRPackageSettings.asset | 5 + .../ProjectSettings/XRSettings.asset | 10 + example_unity_6000_0_project/README.md | 5 + 136 files changed, 8567 insertions(+) create mode 100644 example_unity_6000_0_project/.gitignore create mode 100644 example_unity_6000_0_project/Assets/DefaultVolumeProfile.asset create mode 100644 example_unity_6000_0_project/Assets/DefaultVolumeProfile.asset.meta create mode 100644 example_unity_6000_0_project/Assets/Example.meta create mode 100644 example_unity_6000_0_project/Assets/Example/Materials.meta create mode 100644 example_unity_6000_0_project/Assets/Example/Materials/ArPlaneMaterial.mat create mode 100644 example_unity_6000_0_project/Assets/Example/Materials/ArPlaneMaterial.mat.meta create mode 100644 example_unity_6000_0_project/Assets/Example/Materials/FlutterBlueMaterial.mat create mode 100644 example_unity_6000_0_project/Assets/Example/Materials/FlutterBlueMaterial.mat.meta create mode 100644 example_unity_6000_0_project/Assets/Example/Materials/FlutterDarkBlueMaterial.mat create mode 100644 example_unity_6000_0_project/Assets/Example/Materials/FlutterDarkBlueMaterial.mat.meta create mode 100644 example_unity_6000_0_project/Assets/Example/Materials/FlutterLightBlueMaterial.mat create mode 100644 example_unity_6000_0_project/Assets/Example/Materials/FlutterLightBlueMaterial.mat.meta create mode 100644 example_unity_6000_0_project/Assets/Example/Models.meta create mode 100644 example_unity_6000_0_project/Assets/Example/Models/flutter_logo.fbx create mode 100644 example_unity_6000_0_project/Assets/Example/Models/flutter_logo.fbx.meta create mode 100644 example_unity_6000_0_project/Assets/Example/Prefabs.meta create mode 100644 example_unity_6000_0_project/Assets/Example/Prefabs/AR Default Plane.prefab create mode 100644 example_unity_6000_0_project/Assets/Example/Prefabs/AR Default Plane.prefab.meta create mode 100644 example_unity_6000_0_project/Assets/Example/Prefabs/FlutterLogo.prefab create mode 100644 example_unity_6000_0_project/Assets/Example/Prefabs/FlutterLogo.prefab.meta create mode 100644 example_unity_6000_0_project/Assets/Example/Prefabs/SceneSwitcher.prefab create mode 100644 example_unity_6000_0_project/Assets/Example/Prefabs/SceneSwitcher.prefab.meta create mode 100644 example_unity_6000_0_project/Assets/Example/Scenes.meta create mode 100644 example_unity_6000_0_project/Assets/Example/Scenes/FlutterEmbedExampleScene.unity create mode 100644 example_unity_6000_0_project/Assets/Example/Scenes/FlutterEmbedExampleScene.unity.meta create mode 100644 example_unity_6000_0_project/Assets/Example/Scenes/FlutterEmbedExampleSceneAR.unity create mode 100644 example_unity_6000_0_project/Assets/Example/Scenes/FlutterEmbedExampleSceneAR.unity.meta create mode 100644 example_unity_6000_0_project/Assets/Example/Scripts.meta create mode 100644 example_unity_6000_0_project/Assets/Example/Scripts/ARCheckAvailability.cs create mode 100644 example_unity_6000_0_project/Assets/Example/Scripts/ARCheckAvailability.cs.meta create mode 100644 example_unity_6000_0_project/Assets/Example/Scripts/ARLogoPinner.cs create mode 100644 example_unity_6000_0_project/Assets/Example/Scripts/ARLogoPinner.cs.meta create mode 100644 example_unity_6000_0_project/Assets/Example/Scripts/ReceiveFromFlutterRotation.cs create mode 100644 example_unity_6000_0_project/Assets/Example/Scripts/ReceiveFromFlutterRotation.cs.meta create mode 100644 example_unity_6000_0_project/Assets/Example/Scripts/SceneSwitcher.cs create mode 100644 example_unity_6000_0_project/Assets/Example/Scripts/SceneSwitcher.cs.meta create mode 100644 example_unity_6000_0_project/Assets/Example/Scripts/SendToFlutterSceneLoaded.cs create mode 100644 example_unity_6000_0_project/Assets/Example/Scripts/SendToFlutterSceneLoaded.cs.meta create mode 100644 example_unity_6000_0_project/Assets/Example/Scripts/SendToFlutterTouched.cs create mode 100644 example_unity_6000_0_project/Assets/Example/Scripts/SendToFlutterTouched.cs.meta create mode 100644 example_unity_6000_0_project/Assets/FlutterEmbed.meta create mode 100644 example_unity_6000_0_project/Assets/FlutterEmbed/Editor.meta create mode 100644 example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExportChecker.cs create mode 100644 example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExportChecker.cs.meta create mode 100644 example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExportHelpers.cs create mode 100644 example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExportHelpers.cs.meta create mode 100644 example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExporter.cs create mode 100644 example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExporter.cs.meta create mode 100644 example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExporterAndroid.cs create mode 100644 example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExporterAndroid.cs.meta create mode 100644 example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExporterIos.cs create mode 100644 example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExporterIos.cs.meta create mode 100644 example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExporterMenuItem.cs create mode 100644 example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExporterMenuItem.cs.meta create mode 100644 example_unity_6000_0_project/Assets/FlutterEmbed/SendToFlutter.meta create mode 100644 example_unity_6000_0_project/Assets/FlutterEmbed/SendToFlutter/SendToFlutter.cs create mode 100644 example_unity_6000_0_project/Assets/FlutterEmbed/SendToFlutter/SendToFlutter.cs.meta create mode 100644 example_unity_6000_0_project/Assets/Readme.asset create mode 100644 example_unity_6000_0_project/Assets/Readme.asset.meta create mode 100644 example_unity_6000_0_project/Assets/Settings.meta create mode 100644 example_unity_6000_0_project/Assets/Settings/SampleSceneProfile.asset create mode 100644 example_unity_6000_0_project/Assets/Settings/SampleSceneProfile.asset.meta create mode 100644 example_unity_6000_0_project/Assets/Settings/URP-Balanced-Renderer.asset create mode 100644 example_unity_6000_0_project/Assets/Settings/URP-Balanced-Renderer.asset.meta create mode 100644 example_unity_6000_0_project/Assets/Settings/URP-Balanced.asset create mode 100644 example_unity_6000_0_project/Assets/Settings/URP-Balanced.asset.meta create mode 100644 example_unity_6000_0_project/Assets/Settings/URP-HighFidelity-Renderer.asset create mode 100644 example_unity_6000_0_project/Assets/Settings/URP-HighFidelity-Renderer.asset.meta create mode 100644 example_unity_6000_0_project/Assets/Settings/URP-HighFidelity.asset create mode 100644 example_unity_6000_0_project/Assets/Settings/URP-HighFidelity.asset.meta create mode 100644 example_unity_6000_0_project/Assets/Settings/URP-Performant-Renderer.asset create mode 100644 example_unity_6000_0_project/Assets/Settings/URP-Performant-Renderer.asset.meta create mode 100644 example_unity_6000_0_project/Assets/Settings/URP-Performant.asset create mode 100644 example_unity_6000_0_project/Assets/Settings/URP-Performant.asset.meta create mode 100644 example_unity_6000_0_project/Assets/UniversalRenderPipelineGlobalSettings.asset create mode 100644 example_unity_6000_0_project/Assets/UniversalRenderPipelineGlobalSettings.asset.meta create mode 100644 example_unity_6000_0_project/Assets/XR.meta create mode 100644 example_unity_6000_0_project/Assets/XR/Loaders.meta create mode 100644 example_unity_6000_0_project/Assets/XR/Loaders/ARCoreLoader.asset create mode 100644 example_unity_6000_0_project/Assets/XR/Loaders/ARCoreLoader.asset.meta create mode 100644 example_unity_6000_0_project/Assets/XR/Loaders/ARKitLoader.asset create mode 100644 example_unity_6000_0_project/Assets/XR/Loaders/ARKitLoader.asset.meta create mode 100644 example_unity_6000_0_project/Assets/XR/Loaders/SimulationLoader.asset create mode 100644 example_unity_6000_0_project/Assets/XR/Loaders/SimulationLoader.asset.meta create mode 100644 example_unity_6000_0_project/Assets/XR/Resources.meta create mode 100644 example_unity_6000_0_project/Assets/XR/Resources/XRSimulationRuntimeSettings.asset create mode 100644 example_unity_6000_0_project/Assets/XR/Resources/XRSimulationRuntimeSettings.asset.meta create mode 100644 example_unity_6000_0_project/Assets/XR/Settings.meta create mode 100644 example_unity_6000_0_project/Assets/XR/Settings/ARCoreSettings.asset create mode 100644 example_unity_6000_0_project/Assets/XR/Settings/ARCoreSettings.asset.meta create mode 100644 example_unity_6000_0_project/Assets/XR/Settings/ARKitSettings.asset create mode 100644 example_unity_6000_0_project/Assets/XR/Settings/ARKitSettings.asset.meta create mode 100644 example_unity_6000_0_project/Assets/XR/Settings/XRSimulationSettings.asset create mode 100644 example_unity_6000_0_project/Assets/XR/Settings/XRSimulationSettings.asset.meta create mode 100644 example_unity_6000_0_project/Assets/XR/UserSimulationSettings.meta create mode 100644 example_unity_6000_0_project/Assets/XR/UserSimulationSettings/Resources.meta create mode 100644 example_unity_6000_0_project/Assets/XR/UserSimulationSettings/Resources/XRSimulationPreferences.asset create mode 100644 example_unity_6000_0_project/Assets/XR/UserSimulationSettings/Resources/XRSimulationPreferences.asset.meta create mode 100644 example_unity_6000_0_project/Assets/XR/UserSimulationSettings/SimulationEnvironmentAssetsManager.asset create mode 100644 example_unity_6000_0_project/Assets/XR/UserSimulationSettings/SimulationEnvironmentAssetsManager.asset.meta create mode 100644 example_unity_6000_0_project/Assets/XR/XRGeneralSettingsPerBuildTarget.asset create mode 100644 example_unity_6000_0_project/Assets/XR/XRGeneralSettingsPerBuildTarget.asset.meta create mode 100644 example_unity_6000_0_project/Packages/manifest.json create mode 100644 example_unity_6000_0_project/Packages/packages-lock.json create mode 100644 example_unity_6000_0_project/ProjectSettings/AudioManager.asset create mode 100644 example_unity_6000_0_project/ProjectSettings/BurstAotSettings_Android.json create mode 100644 example_unity_6000_0_project/ProjectSettings/BurstAotSettings_StandaloneWindows.json create mode 100644 example_unity_6000_0_project/ProjectSettings/BurstAotSettings_iOS.json create mode 100644 example_unity_6000_0_project/ProjectSettings/ClusterInputManager.asset create mode 100644 example_unity_6000_0_project/ProjectSettings/CommonBurstAotSettings.json create mode 100644 example_unity_6000_0_project/ProjectSettings/DynamicsManager.asset create mode 100644 example_unity_6000_0_project/ProjectSettings/EditorBuildSettings.asset create mode 100644 example_unity_6000_0_project/ProjectSettings/EditorSettings.asset create mode 100644 example_unity_6000_0_project/ProjectSettings/GraphicsSettings.asset create mode 100644 example_unity_6000_0_project/ProjectSettings/InputManager.asset create mode 100644 example_unity_6000_0_project/ProjectSettings/MemorySettings.asset create mode 100644 example_unity_6000_0_project/ProjectSettings/MultiplayerManager.asset create mode 100644 example_unity_6000_0_project/ProjectSettings/NavMeshAreas.asset create mode 100644 example_unity_6000_0_project/ProjectSettings/PackageManagerSettings.asset create mode 100644 example_unity_6000_0_project/ProjectSettings/Physics2DSettings.asset create mode 100644 example_unity_6000_0_project/ProjectSettings/PresetManager.asset create mode 100644 example_unity_6000_0_project/ProjectSettings/ProjectSettings.asset create mode 100644 example_unity_6000_0_project/ProjectSettings/ProjectVersion.txt create mode 100644 example_unity_6000_0_project/ProjectSettings/QualitySettings.asset create mode 100644 example_unity_6000_0_project/ProjectSettings/SceneTemplateSettings.json create mode 100644 example_unity_6000_0_project/ProjectSettings/ShaderGraphSettings.asset create mode 100644 example_unity_6000_0_project/ProjectSettings/TagManager.asset create mode 100644 example_unity_6000_0_project/ProjectSettings/TimeManager.asset create mode 100644 example_unity_6000_0_project/ProjectSettings/URPProjectSettings.asset create mode 100644 example_unity_6000_0_project/ProjectSettings/UnityConnectSettings.asset create mode 100644 example_unity_6000_0_project/ProjectSettings/VFXManager.asset create mode 100644 example_unity_6000_0_project/ProjectSettings/VersionControlSettings.asset create mode 100644 example_unity_6000_0_project/ProjectSettings/XRPackageSettings.asset create mode 100644 example_unity_6000_0_project/ProjectSettings/XRSettings.asset create mode 100644 example_unity_6000_0_project/README.md diff --git a/example_unity_6000_0_project/.gitignore b/example_unity_6000_0_project/.gitignore new file mode 100644 index 0000000..58cbc82 --- /dev/null +++ b/example_unity_6000_0_project/.gitignore @@ -0,0 +1,72 @@ +# This .gitignore file should be placed at the root of your Unity project directory +# +# Get latest from https://github.com/github/gitignore/blob/main/Unity.gitignore +# +/[Ll]ibrary/ +/[Tt]emp/ +/[Oo]bj/ +/[Bb]uild/ +/[Bb]uilds/ +/[Ll]ogs/ +/[Uu]ser[Ss]ettings/ + +# MemoryCaptures can get excessive in size. +# They also could contain extremely sensitive data +/[Mm]emoryCaptures/ + +# Recordings can get excessive in size +/[Rr]ecordings/ + +# Uncomment this line if you wish to ignore the asset store tools plugin +# /[Aa]ssets/AssetStoreTools* + +# Autogenerated Jetbrains Rider plugin +/[Aa]ssets/Plugins/Editor/JetBrains* + +# Visual Studio cache directory +.vs/ + +# Gradle cache directory +.gradle/ + +# Autogenerated VS/MD/Consulo solution and project files +ExportedObj/ +.consulo/ +*.csproj +*.unityproj +*.sln +*.suo +*.tmp +*.user +*.userprefs +*.pidb +*.booproj +*.svd +*.pdb +*.mdb +*.opendb +*.VC.db + +# Unity3D generated meta files +*.pidb.meta +*.pdb.meta +*.mdb.meta + +# Unity3D generated file on crash reports +sysinfo.txt + +# Builds +*.apk +*.aab +*.unitypackage +*.app + +# Crashlytics generated file +crashlytics-build.properties + +# Packed Addressables +/[Aa]ssets/[Aa]ddressable[Aa]ssets[Dd]ata/*/*.bin* + +# Temporary auto-generated Android Assets +/[Aa]ssets/[Ss]treamingAssets/aa.meta +/[Aa]ssets/[Ss]treamingAssets/aa/* diff --git a/example_unity_6000_0_project/Assets/DefaultVolumeProfile.asset b/example_unity_6000_0_project/Assets/DefaultVolumeProfile.asset new file mode 100644 index 0000000..36c3781 --- /dev/null +++ b/example_unity_6000_0_project/Assets/DefaultVolumeProfile.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d7fd9488000d3734a9e00ee676215985, type: 3} + m_Name: DefaultVolumeProfile + m_EditorClassIdentifier: + components: [] diff --git a/example_unity_6000_0_project/Assets/DefaultVolumeProfile.asset.meta b/example_unity_6000_0_project/Assets/DefaultVolumeProfile.asset.meta new file mode 100644 index 0000000..11eb7a5 --- /dev/null +++ b/example_unity_6000_0_project/Assets/DefaultVolumeProfile.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3e9ad90b4ae08f843b46ecf6ee5ae65c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/Example.meta b/example_unity_6000_0_project/Assets/Example.meta new file mode 100644 index 0000000..2d53412 --- /dev/null +++ b/example_unity_6000_0_project/Assets/Example.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3de44fcb338bb6249a4db35e6e46ec26 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/Example/Materials.meta b/example_unity_6000_0_project/Assets/Example/Materials.meta new file mode 100644 index 0000000..1a71826 --- /dev/null +++ b/example_unity_6000_0_project/Assets/Example/Materials.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a52cc450e6c595246b8e2a06bcb2afef +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/Example/Materials/ArPlaneMaterial.mat b/example_unity_6000_0_project/Assets/Example/Materials/ArPlaneMaterial.mat new file mode 100644 index 0000000..2274d31 --- /dev/null +++ b/example_unity_6000_0_project/Assets/Example/Materials/ArPlaneMaterial.mat @@ -0,0 +1,139 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ArPlaneMaterial + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: + - _ALPHAPREMULTIPLY_ON + - _SURFACE_TYPE_TRANSPARENT + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 3000 + stringTagMap: + RenderType: Transparent + disabledShaderPasses: + - DepthOnly + - SHADOWCASTER + - MOTIONVECTORS + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 10 + - _DstBlendAlpha: 10 + - _EnvironmentReflections: 1 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossyReflections: 0 + - _Metallic: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.005 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 1 + - _WorkflowMode: 1 + - _ZWrite: 0 + m_Colors: + - _BaseColor: {r: 1, g: 0.9449338, b: 0, a: 0.47058824} + - _Color: {r: 1, g: 0.9449338, b: 0, a: 0.47058824} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 +--- !u!114 &1756718029480707733 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 9 diff --git a/example_unity_6000_0_project/Assets/Example/Materials/ArPlaneMaterial.mat.meta b/example_unity_6000_0_project/Assets/Example/Materials/ArPlaneMaterial.mat.meta new file mode 100644 index 0000000..05efaf6 --- /dev/null +++ b/example_unity_6000_0_project/Assets/Example/Materials/ArPlaneMaterial.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fb7195381453adf4290ce2bccbfcaa6c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/Example/Materials/FlutterBlueMaterial.mat b/example_unity_6000_0_project/Assets/Example/Materials/FlutterBlueMaterial.mat new file mode 100644 index 0000000..15fac18 --- /dev/null +++ b/example_unity_6000_0_project/Assets/Example/Materials/FlutterBlueMaterial.mat @@ -0,0 +1,135 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-5126043731411455235 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 9 +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: FlutterBlueMaterial + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: + - MOTIONVECTORS + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossyReflections: 0 + - _Metallic: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.005 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _WorkflowMode: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 0.37254903, g: 0.7882353, b: 0.972549, a: 1} + - _Color: {r: 0.372549, g: 0.7882353, b: 0.972549, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/example_unity_6000_0_project/Assets/Example/Materials/FlutterBlueMaterial.mat.meta b/example_unity_6000_0_project/Assets/Example/Materials/FlutterBlueMaterial.mat.meta new file mode 100644 index 0000000..f4f54a0 --- /dev/null +++ b/example_unity_6000_0_project/Assets/Example/Materials/FlutterBlueMaterial.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6927ad1380a658149b878d31607a3f74 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/Example/Materials/FlutterDarkBlueMaterial.mat b/example_unity_6000_0_project/Assets/Example/Materials/FlutterDarkBlueMaterial.mat new file mode 100644 index 0000000..48beae5 --- /dev/null +++ b/example_unity_6000_0_project/Assets/Example/Materials/FlutterDarkBlueMaterial.mat @@ -0,0 +1,135 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: FlutterDarkBlueMaterial + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: + - MOTIONVECTORS + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossyReflections: 0 + - _Metallic: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.005 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _WorkflowMode: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 0.02745098, g: 0.35686275, b: 0.6156863, a: 1} + - _Color: {r: 0.02745098, g: 0.35686272, b: 0.6156863, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 +--- !u!114 &6980787164001548945 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 9 diff --git a/example_unity_6000_0_project/Assets/Example/Materials/FlutterDarkBlueMaterial.mat.meta b/example_unity_6000_0_project/Assets/Example/Materials/FlutterDarkBlueMaterial.mat.meta new file mode 100644 index 0000000..46080fa --- /dev/null +++ b/example_unity_6000_0_project/Assets/Example/Materials/FlutterDarkBlueMaterial.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cc82d30904392a94e92b3bad70bf029f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/Example/Materials/FlutterLightBlueMaterial.mat b/example_unity_6000_0_project/Assets/Example/Materials/FlutterLightBlueMaterial.mat new file mode 100644 index 0000000..0517fd2 --- /dev/null +++ b/example_unity_6000_0_project/Assets/Example/Materials/FlutterLightBlueMaterial.mat @@ -0,0 +1,135 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: FlutterLightBlueMaterial + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: + - MOTIONVECTORS + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossyReflections: 0 + - _Metallic: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.005 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _WorkflowMode: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 0.35686275, g: 0.78431374, b: 0.972549, a: 1} + - _Color: {r: 0.35686272, g: 0.78431374, b: 0.972549, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 +--- !u!114 &8225062045183340367 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 9 diff --git a/example_unity_6000_0_project/Assets/Example/Materials/FlutterLightBlueMaterial.mat.meta b/example_unity_6000_0_project/Assets/Example/Materials/FlutterLightBlueMaterial.mat.meta new file mode 100644 index 0000000..be92faa --- /dev/null +++ b/example_unity_6000_0_project/Assets/Example/Materials/FlutterLightBlueMaterial.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8a90a968be9e8fa49949dd9442ef852d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/Example/Models.meta b/example_unity_6000_0_project/Assets/Example/Models.meta new file mode 100644 index 0000000..7a49ae5 --- /dev/null +++ b/example_unity_6000_0_project/Assets/Example/Models.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5c8c034ce436b924dadd286bc418e56f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/Example/Models/flutter_logo.fbx b/example_unity_6000_0_project/Assets/Example/Models/flutter_logo.fbx new file mode 100644 index 0000000000000000000000000000000000000000..5b914ffa89a3f9b1fda585a72e6cf14620481db1 GIT binary patch literal 32240 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 literal 0 HcmV?d00001 diff --git a/example_unity_6000_0_project/Assets/Example/Models/flutter_logo.fbx.meta b/example_unity_6000_0_project/Assets/Example/Models/flutter_logo.fbx.meta new file mode 100644 index 0000000..fdaa8ca --- /dev/null +++ b/example_unity_6000_0_project/Assets/Example/Models/flutter_logo.fbx.meta @@ -0,0 +1,109 @@ +fileFormatVersion: 2 +guid: 2f2dbcc0c367ef442b000a96f0ef0e32 +ModelImporter: + serializedVersion: 22200 + internalIDToNameTable: [] + externalObjects: {} + materials: + materialImportMode: 2 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + removeConstantScaleCurves: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importPhysicalCameras: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + nodeNameCollisionStrategy: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + optimizeBones: 1 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + strictVertexDataChecks: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 0 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + importBlendShapeDeformPercent: 1 + remapMaterialsIfMaterialImportModeIsNone: 0 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/Example/Prefabs.meta b/example_unity_6000_0_project/Assets/Example/Prefabs.meta new file mode 100644 index 0000000..2b19462 --- /dev/null +++ b/example_unity_6000_0_project/Assets/Example/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3184c5bf128bc054abfd2c5a53216f5d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/Example/Prefabs/AR Default Plane.prefab b/example_unity_6000_0_project/Assets/Example/Prefabs/AR Default Plane.prefab new file mode 100644 index 0000000..b07d020 --- /dev/null +++ b/example_unity_6000_0_project/Assets/Example/Prefabs/AR Default Plane.prefab @@ -0,0 +1,243 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &2553029767478451752 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4678560057900861793} + - component: {fileID: 8486827694134425628} + - component: {fileID: 3907180464993917001} + - component: {fileID: 5071330697571825710} + - component: {fileID: 87141031673764529} + - component: {fileID: 4577023721811499269} + - component: {fileID: 483641966243855547} + m_Layer: 0 + m_Name: AR Default Plane + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4678560057900861793 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2553029767478451752} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.27621377, y: 0.6720215, z: -0.19427466} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &8486827694134425628 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2553029767478451752} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f66da7470dce8f4d821d71dd2b1d4ac, type: 3} + m_Name: + m_EditorClassIdentifier: + m_DestroyOnRemoval: 1 + m_VertexChangedThreshold: 0.01 +--- !u!114 &3907180464993917001 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2553029767478451752} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3d180956a54db4646a1c6342921672ad, type: 3} + m_Name: + m_EditorClassIdentifier: + m_TrackingStateVisibilityThreshold: 1 + m_HideSubsumed: 1 +--- !u!64 &5071330697571825710 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2553029767478451752} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 5 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 0} +--- !u!33 &87141031673764529 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2553029767478451752} + m_Mesh: {fileID: 0} +--- !u!23 &4577023721811499269 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2553029767478451752} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: fb7195381453adf4290ce2bccbfcaa6c, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!120 &483641966243855547 +LineRenderer: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2553029767478451752} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 0 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10306, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Positions: + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 1} + m_Parameters: + serializedVersion: 3 + widthMultiplier: 1 + widthCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.005 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorGradient: + serializedVersion: 2 + key0: {r: 0, g: 0, b: 0, a: 1} + key1: {r: 0, g: 0, b: 0, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_ColorSpace: -1 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + numCornerVertices: 4 + numCapVertices: 4 + alignment: 0 + textureMode: 0 + textureScale: {x: 1, y: 1} + shadowBias: 0.5 + generateLightingData: 0 + m_MaskInteraction: 0 + m_UseWorldSpace: 0 + m_Loop: 1 + m_ApplyActiveColorSpace: 1 diff --git a/example_unity_6000_0_project/Assets/Example/Prefabs/AR Default Plane.prefab.meta b/example_unity_6000_0_project/Assets/Example/Prefabs/AR Default Plane.prefab.meta new file mode 100644 index 0000000..0c5cab9 --- /dev/null +++ b/example_unity_6000_0_project/Assets/Example/Prefabs/AR Default Plane.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 085ad6d55697d934180a21821ee8ec69 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/Example/Prefabs/FlutterLogo.prefab b/example_unity_6000_0_project/Assets/Example/Prefabs/FlutterLogo.prefab new file mode 100644 index 0000000..9f40b5d --- /dev/null +++ b/example_unity_6000_0_project/Assets/Example/Prefabs/FlutterLogo.prefab @@ -0,0 +1,347 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3065968244710325712 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6666068512039603321} + - component: {fileID: 163675836641885035} + - component: {fileID: 3179096514357416145} + - component: {fileID: 390260722482482730} + m_Layer: 0 + m_Name: FlutterLogo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6666068512039603321 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3065968244710325712} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6074400388820725609} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &163675836641885035 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3065968244710325712} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0a98ab02fef424f488977159bd6fa420, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &3179096514357416145 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3065968244710325712} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 915b1b9c07848394c9932bfc30eeda64, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &390260722482482730 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3065968244710325712} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 358915f3f06aba9418a6baec89c1f77a, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &6036551405372311682 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 6666068512039603321} + m_Modifications: + - target: {fileID: -9071624046216249438, guid: 2f2dbcc0c367ef442b000a96f0ef0e32, + type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: cc82d30904392a94e92b3bad70bf029f, type: 2} + - target: {fileID: -8679921383154817045, guid: 2f2dbcc0c367ef442b000a96f0ef0e32, + type: 3} + propertyPath: m_LocalScale.x + value: 12.698189 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 2f2dbcc0c367ef442b000a96f0ef0e32, + type: 3} + propertyPath: m_LocalScale.y + value: 12.698189 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 2f2dbcc0c367ef442b000a96f0ef0e32, + type: 3} + propertyPath: m_LocalScale.z + value: 12.698189 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 2f2dbcc0c367ef442b000a96f0ef0e32, + type: 3} + propertyPath: m_LocalPosition.x + value: -0.543 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 2f2dbcc0c367ef442b000a96f0ef0e32, + type: 3} + propertyPath: m_LocalPosition.y + value: 1.29 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 2f2dbcc0c367ef442b000a96f0ef0e32, + type: 3} + propertyPath: m_LocalPosition.z + value: -0.349 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 2f2dbcc0c367ef442b000a96f0ef0e32, + type: 3} + propertyPath: m_LocalRotation.w + value: 0.29869792 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 2f2dbcc0c367ef442b000a96f0ef0e32, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 2f2dbcc0c367ef442b000a96f0ef0e32, + type: 3} + propertyPath: m_LocalRotation.y + value: 0.9543477 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 2f2dbcc0c367ef442b000a96f0ef0e32, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 2f2dbcc0c367ef442b000a96f0ef0e32, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 2f2dbcc0c367ef442b000a96f0ef0e32, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 145.241 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 2f2dbcc0c367ef442b000a96f0ef0e32, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -6356483016896457778, guid: 2f2dbcc0c367ef442b000a96f0ef0e32, + type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: cc82d30904392a94e92b3bad70bf029f, type: 2} + - target: {fileID: -3855335175272487014, guid: 2f2dbcc0c367ef442b000a96f0ef0e32, + type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 6927ad1380a658149b878d31607a3f74, type: 2} + - target: {fileID: 919132149155446097, guid: 2f2dbcc0c367ef442b000a96f0ef0e32, + type: 3} + propertyPath: m_Name + value: flutter_logo + objectReference: {fileID: 0} + - target: {fileID: 1797760339730403953, guid: 2f2dbcc0c367ef442b000a96f0ef0e32, + type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 6927ad1380a658149b878d31607a3f74, type: 2} + - target: {fileID: 5437679451551056649, guid: 2f2dbcc0c367ef442b000a96f0ef0e32, + type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 8a90a968be9e8fa49949dd9442ef852d, type: 2} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: -3372522033569347474, guid: 2f2dbcc0c367ef442b000a96f0ef0e32, + type: 3} + insertIndex: -1 + addedObject: {fileID: 531441349722821820} + - targetCorrespondingSourceObject: {fileID: -1817752537321972114, guid: 2f2dbcc0c367ef442b000a96f0ef0e32, + type: 3} + insertIndex: -1 + addedObject: {fileID: 404577655061901830} + - targetCorrespondingSourceObject: {fileID: -6935687079284805244, guid: 2f2dbcc0c367ef442b000a96f0ef0e32, + type: 3} + insertIndex: -1 + addedObject: {fileID: 8655195986154025563} + - targetCorrespondingSourceObject: {fileID: 9175552907236278165, guid: 2f2dbcc0c367ef442b000a96f0ef0e32, + type: 3} + insertIndex: -1 + addedObject: {fileID: 1543377301618588663} + - targetCorrespondingSourceObject: {fileID: -4845419198383733991, guid: 2f2dbcc0c367ef442b000a96f0ef0e32, + type: 3} + insertIndex: -1 + addedObject: {fileID: 1205746869979710125} + m_SourcePrefab: {fileID: 100100000, guid: 2f2dbcc0c367ef442b000a96f0ef0e32, type: 3} +--- !u!1 &212872671085576428 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: -3372522033569347474, guid: 2f2dbcc0c367ef442b000a96f0ef0e32, + type: 3} + m_PrefabInstance: {fileID: 6036551405372311682} + m_PrefabAsset: {fileID: 0} +--- !u!64 &531441349722821820 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 212872671085576428} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 5 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 8604045607132181640, guid: 2f2dbcc0c367ef442b000a96f0ef0e32, type: 3} +--- !u!1 &3211136097417754391 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 9175552907236278165, guid: 2f2dbcc0c367ef442b000a96f0ef0e32, + type: 3} + m_PrefabInstance: {fileID: 6036551405372311682} + m_PrefabAsset: {fileID: 0} +--- !u!64 &1543377301618588663 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3211136097417754391} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 5 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 8130605235924166793, guid: 2f2dbcc0c367ef442b000a96f0ef0e32, type: 3} +--- !u!1 &3819096703160669932 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: -1817752537321972114, guid: 2f2dbcc0c367ef442b000a96f0ef0e32, + type: 3} + m_PrefabInstance: {fileID: 6036551405372311682} + m_PrefabAsset: {fileID: 0} +--- !u!64 &404577655061901830 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3819096703160669932} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 5 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 5358915128574053833, guid: 2f2dbcc0c367ef442b000a96f0ef0e32, type: 3} +--- !u!1 &5510539918258764038 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: -6935687079284805244, guid: 2f2dbcc0c367ef442b000a96f0ef0e32, + type: 3} + m_PrefabInstance: {fileID: 6036551405372311682} + m_PrefabAsset: {fileID: 0} +--- !u!64 &8655195986154025563 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5510539918258764038} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 5 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 6679289703562662588, guid: 2f2dbcc0c367ef442b000a96f0ef0e32, type: 3} +--- !u!4 &6074400388820725609 stripped +Transform: + m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 2f2dbcc0c367ef442b000a96f0ef0e32, + type: 3} + m_PrefabInstance: {fileID: 6036551405372311682} + m_PrefabAsset: {fileID: 0} +--- !u!1 &8000573735467797403 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: -4845419198383733991, guid: 2f2dbcc0c367ef442b000a96f0ef0e32, + type: 3} + m_PrefabInstance: {fileID: 6036551405372311682} + m_PrefabAsset: {fileID: 0} +--- !u!64 &1205746869979710125 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8000573735467797403} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 5 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: -8849623128070449534, guid: 2f2dbcc0c367ef442b000a96f0ef0e32, type: 3} diff --git a/example_unity_6000_0_project/Assets/Example/Prefabs/FlutterLogo.prefab.meta b/example_unity_6000_0_project/Assets/Example/Prefabs/FlutterLogo.prefab.meta new file mode 100644 index 0000000..d290339 --- /dev/null +++ b/example_unity_6000_0_project/Assets/Example/Prefabs/FlutterLogo.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 46db9d94d4ae7a34bbcd842645db20ad +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/Example/Prefabs/SceneSwitcher.prefab b/example_unity_6000_0_project/Assets/Example/Prefabs/SceneSwitcher.prefab new file mode 100644 index 0000000..4fbb6db --- /dev/null +++ b/example_unity_6000_0_project/Assets/Example/Prefabs/SceneSwitcher.prefab @@ -0,0 +1,46 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &2643319947954567027 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4797030649323203259} + - component: {fileID: -1367730357914954303} + m_Layer: 0 + m_Name: SceneSwitcher + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4797030649323203259 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2643319947954567027} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.27621377, y: 0.6720215, z: -0.19427466} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &-1367730357914954303 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2643319947954567027} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1478ccf15aa1bd14ab8c9b9f82e35835, type: 3} + m_Name: + m_EditorClassIdentifier: diff --git a/example_unity_6000_0_project/Assets/Example/Prefabs/SceneSwitcher.prefab.meta b/example_unity_6000_0_project/Assets/Example/Prefabs/SceneSwitcher.prefab.meta new file mode 100644 index 0000000..2feb81a --- /dev/null +++ b/example_unity_6000_0_project/Assets/Example/Prefabs/SceneSwitcher.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1dd3a10ef477c0a4c946a71272190a92 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/Example/Scenes.meta b/example_unity_6000_0_project/Assets/Example/Scenes.meta new file mode 100644 index 0000000..e27358b --- /dev/null +++ b/example_unity_6000_0_project/Assets/Example/Scenes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 50e6608302f98924491bb8e9ba5383bd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/Example/Scenes/FlutterEmbedExampleScene.unity b/example_unity_6000_0_project/Assets/Example/Scenes/FlutterEmbedExampleScene.unity new file mode 100644 index 0000000..41daadf --- /dev/null +++ b/example_unity_6000_0_project/Assets/Example/Scenes/FlutterEmbedExampleScene.unity @@ -0,0 +1,666 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.12731749, g: 0.13414757, b: 0.1210787, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &145618937 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 145618941} + - component: {fileID: 145618940} + - component: {fileID: 145618939} + - component: {fileID: 145618938} + m_Layer: 0 + m_Name: AR Session (for checking AR availability) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &145618938 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 145618937} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 96b150af282ad0a48a2796f44816682a, type: 3} + m_Name: + m_EditorClassIdentifier: + arSession: {fileID: 145618940} +--- !u!114 &145618939 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 145618937} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fa850fbd5b8aded44846f96e35f1a9f5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &145618940 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 145618937} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3859a92a05d4f5d418cb6ca605290e74, type: 3} + m_Name: + m_EditorClassIdentifier: + m_AttemptUpdate: 1 + m_MatchFrameRate: 1 + m_TrackingMode: 2 +--- !u!4 &145618941 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 145618937} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.27621377, y: 0.6720215, z: -0.19427466} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &196775531 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 2643319947954567027, guid: 1dd3a10ef477c0a4c946a71272190a92, + type: 3} + propertyPath: m_Name + value: SceneSwitcher + objectReference: {fileID: 0} + - target: {fileID: 4797030649323203259, guid: 1dd3a10ef477c0a4c946a71272190a92, + type: 3} + propertyPath: m_LocalPosition.x + value: -0.27621377 + objectReference: {fileID: 0} + - target: {fileID: 4797030649323203259, guid: 1dd3a10ef477c0a4c946a71272190a92, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.6720215 + objectReference: {fileID: 0} + - target: {fileID: 4797030649323203259, guid: 1dd3a10ef477c0a4c946a71272190a92, + type: 3} + propertyPath: m_LocalPosition.z + value: -0.19427466 + objectReference: {fileID: 0} + - target: {fileID: 4797030649323203259, guid: 1dd3a10ef477c0a4c946a71272190a92, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4797030649323203259, guid: 1dd3a10ef477c0a4c946a71272190a92, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4797030649323203259, guid: 1dd3a10ef477c0a4c946a71272190a92, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4797030649323203259, guid: 1dd3a10ef477c0a4c946a71272190a92, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4797030649323203259, guid: 1dd3a10ef477c0a4c946a71272190a92, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4797030649323203259, guid: 1dd3a10ef477c0a4c946a71272190a92, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4797030649323203259, guid: 1dd3a10ef477c0a4c946a71272190a92, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 1dd3a10ef477c0a4c946a71272190a92, type: 3} +--- !u!1 &330585543 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 330585546} + - component: {fileID: 330585545} + - component: {fileID: 330585544} + - component: {fileID: 330585547} + - component: {fileID: 330585548} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &330585544 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 330585543} + m_Enabled: 1 +--- !u!20 &330585545 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 330585543} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &330585546 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 330585543} + serializedVersion: 2 + m_LocalRotation: {x: 0.20062196, y: -0, z: -0, w: 0.9796688} + m_LocalPosition: {x: 0, y: 1.907, z: -1.95} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 23.147, y: 0, z: 0} +--- !u!114 &330585547 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 330585543} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_RenderShadows: 1 + m_RequiresDepthTextureOption: 2 + m_RequiresOpaqueTextureOption: 2 + m_CameraType: 0 + m_Cameras: [] + m_RendererIndex: -1 + m_VolumeLayerMask: + serializedVersion: 2 + m_Bits: 1 + m_VolumeTrigger: {fileID: 0} + m_VolumeFrameworkUpdateModeOption: 2 + m_RenderPostProcessing: 1 + m_Antialiasing: 0 + m_AntialiasingQuality: 2 + m_StopNaN: 0 + m_Dithering: 0 + m_ClearDepth: 1 + m_AllowXRRendering: 1 + m_AllowHDROutput: 1 + m_UseScreenCoordOverride: 0 + m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0} + m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} + m_RequiresDepthTexture: 0 + m_RequiresColorTexture: 0 + m_Version: 2 + m_TaaSettings: + quality: 3 + frameInfluence: 0.1 + jitterScale: 1 + mipBias: 0 + varianceClampScale: 0.9 + contrastAdaptiveSharpening: 0 +--- !u!114 &330585548 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 330585543} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 56666c5a40171f54783dd416a44f42bf, type: 3} + m_Name: + m_EditorClassIdentifier: + m_EventMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_MaxRayIntersections: 0 +--- !u!1 &819201746 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 819201749} + - component: {fileID: 819201748} + - component: {fileID: 819201747} + m_Layer: 0 + m_Name: Point Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &819201747 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 819201746} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Version: 3 + m_UsePipelineSettings: 1 + m_AdditionalLightsShadowResolutionTier: 2 + m_LightLayerMask: 1 + m_RenderingLayers: 1 + m_CustomShadowLayers: 0 + m_ShadowLayerMask: 1 + m_ShadowRenderingLayers: 1 + m_LightCookieSize: {x: 1, y: 1} + m_LightCookieOffset: {x: 0, y: 0} + m_SoftShadowQuality: 0 +--- !u!108 &819201748 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 819201746} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 2 + m_Shape: 0 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 0 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &819201749 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 819201746} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.0017579794, y: 0.91, z: -0.68} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &832575517 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 832575519} + - component: {fileID: 832575518} + m_Layer: 0 + m_Name: Global Volume + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &832575518 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 832575517} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 172515602e62fb746b5d573b38a5fe58, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IsGlobal: 1 + priority: 0 + blendDistance: 0 + weight: 1 + sharedProfile: {fileID: 11400000, guid: a6560a915ef98420e9faacc1c7438823, type: 2} +--- !u!4 &832575519 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 832575517} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &7484340895990840762 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3065968244710325712, guid: 46db9d94d4ae7a34bbcd842645db20ad, + type: 3} + propertyPath: m_Name + value: FlutterLogo + objectReference: {fileID: 0} + - target: {fileID: 6666068512039603321, guid: 46db9d94d4ae7a34bbcd842645db20ad, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6666068512039603321, guid: 46db9d94d4ae7a34bbcd842645db20ad, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.435 + objectReference: {fileID: 0} + - target: {fileID: 6666068512039603321, guid: 46db9d94d4ae7a34bbcd842645db20ad, + type: 3} + propertyPath: m_LocalPosition.z + value: -0.304 + objectReference: {fileID: 0} + - target: {fileID: 6666068512039603321, guid: 46db9d94d4ae7a34bbcd842645db20ad, + type: 3} + propertyPath: m_LocalRotation.w + value: 0.9961777 + objectReference: {fileID: 0} + - target: {fileID: 6666068512039603321, guid: 46db9d94d4ae7a34bbcd842645db20ad, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6666068512039603321, guid: 46db9d94d4ae7a34bbcd842645db20ad, + type: 3} + propertyPath: m_LocalRotation.y + value: -0.087350294 + objectReference: {fileID: 0} + - target: {fileID: 6666068512039603321, guid: 46db9d94d4ae7a34bbcd842645db20ad, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6666068512039603321, guid: 46db9d94d4ae7a34bbcd842645db20ad, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6666068512039603321, guid: 46db9d94d4ae7a34bbcd842645db20ad, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: -10.022 + objectReference: {fileID: 0} + - target: {fileID: 6666068512039603321, guid: 46db9d94d4ae7a34bbcd842645db20ad, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 46db9d94d4ae7a34bbcd842645db20ad, type: 3} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 330585546} + - {fileID: 832575519} + - {fileID: 819201749} + - {fileID: 7484340895990840762} + - {fileID: 196775531} + - {fileID: 145618941} diff --git a/example_unity_6000_0_project/Assets/Example/Scenes/FlutterEmbedExampleScene.unity.meta b/example_unity_6000_0_project/Assets/Example/Scenes/FlutterEmbedExampleScene.unity.meta new file mode 100644 index 0000000..9531828 --- /dev/null +++ b/example_unity_6000_0_project/Assets/Example/Scenes/FlutterEmbedExampleScene.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 99c9720ab356a0642a771bea13969a05 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/Example/Scenes/FlutterEmbedExampleSceneAR.unity b/example_unity_6000_0_project/Assets/Example/Scenes/FlutterEmbedExampleSceneAR.unity new file mode 100644 index 0000000..f7b2bfe --- /dev/null +++ b/example_unity_6000_0_project/Assets/Example/Scenes/FlutterEmbedExampleSceneAR.unity @@ -0,0 +1,887 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.18028378, g: 0.22571412, b: 0.30692285, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &228516971 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 228516972} + m_Layer: 0 + m_Name: Camera Offset + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &228516972 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 228516971} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 677467337} + m_Father: {fileID: 1215624106} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &677467336 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 677467337} + - component: {fileID: 677467343} + - component: {fileID: 677467342} + - component: {fileID: 677467341} + - component: {fileID: 677467340} + - component: {fileID: 677467339} + - component: {fileID: 677467338} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &677467337 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 677467336} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 228516972} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &677467338 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 677467336} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_RenderShadows: 1 + m_RequiresDepthTextureOption: 2 + m_RequiresOpaqueTextureOption: 2 + m_CameraType: 0 + m_Cameras: [] + m_RendererIndex: -1 + m_VolumeLayerMask: + serializedVersion: 2 + m_Bits: 1 + m_VolumeTrigger: {fileID: 0} + m_VolumeFrameworkUpdateModeOption: 2 + m_RenderPostProcessing: 0 + m_Antialiasing: 0 + m_AntialiasingQuality: 2 + m_StopNaN: 0 + m_Dithering: 0 + m_ClearDepth: 1 + m_AllowXRRendering: 1 + m_AllowHDROutput: 1 + m_UseScreenCoordOverride: 0 + m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0} + m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} + m_RequiresDepthTexture: 0 + m_RequiresColorTexture: 0 + m_Version: 2 + m_TaaSettings: + quality: 3 + frameInfluence: 0.1 + jitterScale: 1 + mipBias: 0 + varianceClampScale: 0.9 + contrastAdaptiveSharpening: 0 +--- !u!114 &677467339 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 677467336} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c2fadf230d1919748a9aa21d40f74619, type: 3} + m_Name: + m_EditorClassIdentifier: + m_TrackingType: 0 + m_UpdateType: 0 + m_IgnoreTrackingState: 0 + m_PositionInput: + m_UseReference: 0 + m_Action: + m_Name: Position + m_Type: 0 + m_ExpectedControlType: Vector3 + m_Id: 5053cde5-f644-494b-b387-a88ca7c4c58d + m_Processors: + m_Interactions: + m_SingletonActionBindings: + - m_Name: + m_Id: 6618d43d-0b9b-4303-9ecc-655808bbd558 + m_Path: /centerEyePosition + m_Interactions: + m_Processors: + m_Groups: + m_Action: Position + m_Flags: 0 + - m_Name: + m_Id: 706db743-83f3-4bb5-9ea1-8afa71916be2 + m_Path: /devicePosition + m_Interactions: + m_Processors: + m_Groups: + m_Action: Position + m_Flags: 0 + m_Flags: 0 + m_Reference: {fileID: 0} + m_RotationInput: + m_UseReference: 0 + m_Action: + m_Name: Rotation + m_Type: 0 + m_ExpectedControlType: Quaternion + m_Id: 40b86ad9-1f59-4fc4-b516-702bc58a5bf3 + m_Processors: + m_Interactions: + m_SingletonActionBindings: + - m_Name: + m_Id: e88d49e3-0953-4013-b6dc-b168824b40d3 + m_Path: /centerEyeRotation + m_Interactions: + m_Processors: + m_Groups: + m_Action: Rotation + m_Flags: 0 + - m_Name: + m_Id: 03e21bb1-4e9f-4499-b776-dbb55f4ee8f6 + m_Path: /deviceRotation + m_Interactions: + m_Processors: + m_Groups: + m_Action: Rotation + m_Flags: 0 + m_Flags: 0 + m_Reference: {fileID: 0} + m_TrackingStateInput: + m_UseReference: 0 + m_Action: + m_Name: Tracking State + m_Type: 0 + m_ExpectedControlType: Integer + m_Id: 6d5eac6c-ca08-4e8f-a330-7b3cc5ee978a + m_Processors: + m_Interactions: + m_SingletonActionBindings: [] + m_Flags: 0 + m_Reference: {fileID: 0} + m_PositionAction: + m_Name: + m_Type: 0 + m_ExpectedControlType: + m_Id: + m_Processors: + m_Interactions: + m_SingletonActionBindings: [] + m_Flags: 0 + m_RotationAction: + m_Name: + m_Type: 0 + m_ExpectedControlType: + m_Id: + m_Processors: + m_Interactions: + m_SingletonActionBindings: [] + m_Flags: 0 + m_HasMigratedActions: 1 +--- !u!114 &677467340 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 677467336} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 816b289ef451e094f9ae174fb4cf8db0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UseCustomMaterial: 0 + m_CustomMaterial: {fileID: 0} +--- !u!114 &677467341 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 677467336} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4966719baa26e4b0e8231a24d9bd491a, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FocusMode: -1 + m_LightEstimationMode: -1 + m_AutoFocus: 1 + m_LightEstimation: 0 + m_FacingDirection: 1 + m_RenderMode: 0 +--- !u!81 &677467342 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 677467336} + m_Enabled: 1 +--- !u!20 &677467343 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 677467336} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 20 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1 &740952427 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 740952429} + - component: {fileID: 740952428} + m_Layer: 0 + m_Name: AR Logo pinner + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &740952428 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 740952427} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 35d4f5085f62615478052ef5c57bbc1c, type: 3} + m_Name: + m_EditorClassIdentifier: + raycastManager: {fileID: 1215624103} + flutterLogo: {fileID: 1035040901} +--- !u!4 &740952429 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 740952427} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.27621377, y: 0.6720215, z: -0.19427466} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &1035040900 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3065968244710325712, guid: 46db9d94d4ae7a34bbcd842645db20ad, + type: 3} + propertyPath: m_Name + value: FlutterLogo + objectReference: {fileID: 0} + - target: {fileID: 6666068512039603321, guid: 46db9d94d4ae7a34bbcd842645db20ad, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6666068512039603321, guid: 46db9d94d4ae7a34bbcd842645db20ad, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.867 + objectReference: {fileID: 0} + - target: {fileID: 6666068512039603321, guid: 46db9d94d4ae7a34bbcd842645db20ad, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6666068512039603321, guid: 46db9d94d4ae7a34bbcd842645db20ad, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6666068512039603321, guid: 46db9d94d4ae7a34bbcd842645db20ad, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6666068512039603321, guid: 46db9d94d4ae7a34bbcd842645db20ad, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6666068512039603321, guid: 46db9d94d4ae7a34bbcd842645db20ad, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6666068512039603321, guid: 46db9d94d4ae7a34bbcd842645db20ad, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6666068512039603321, guid: 46db9d94d4ae7a34bbcd842645db20ad, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6666068512039603321, guid: 46db9d94d4ae7a34bbcd842645db20ad, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 46db9d94d4ae7a34bbcd842645db20ad, type: 3} +--- !u!1 &1035040901 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 3065968244710325712, guid: 46db9d94d4ae7a34bbcd842645db20ad, + type: 3} + m_PrefabInstance: {fileID: 1035040900} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1215624102 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1215624106} + - component: {fileID: 1215624105} + - component: {fileID: 1215624104} + - component: {fileID: 1215624103} + m_Layer: 0 + m_Name: XR Origin + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1215624103 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1215624102} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fa17d122634046b4a8e23048891fafc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_RaycastPrefab: {fileID: 0} +--- !u!114 &1215624104 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1215624102} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e1760703bbd54c04488a8d10600262ab, type: 3} + m_Name: + m_EditorClassIdentifier: + m_PlanePrefab: {fileID: 2553029767478451752, guid: 085ad6d55697d934180a21821ee8ec69, + type: 3} + m_DetectionMode: -1 +--- !u!114 &1215624105 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1215624102} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e0cb9aa70a22847b5925ee5f067c10a9, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Camera: {fileID: 677467343} + m_OriginBaseGameObject: {fileID: 1215624102} + m_CameraFloorOffsetObject: {fileID: 228516971} + m_RequestedTrackingOriginMode: 0 + m_CameraYOffset: 1.1176 +--- !u!4 &1215624106 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1215624102} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.27621377, y: 0.6720215, z: -0.19427466} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 228516972} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1425830398 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1425830401} + - component: {fileID: 1425830400} + - component: {fileID: 1425830399} + m_Layer: 0 + m_Name: AR Session + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1425830399 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1425830398} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fa850fbd5b8aded44846f96e35f1a9f5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &1425830400 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1425830398} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3859a92a05d4f5d418cb6ca605290e74, type: 3} + m_Name: + m_EditorClassIdentifier: + m_AttemptUpdate: 1 + m_MatchFrameRate: 1 + m_TrackingMode: 2 +--- !u!4 &1425830401 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1425830398} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.27621377, y: 0.6720215, z: -0.19427466} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2072791653 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2072791655} + - component: {fileID: 2072791654} + - component: {fileID: 2072791656} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &2072791654 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2072791653} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &2072791655 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2072791653} + serializedVersion: 2 + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!114 &2072791656 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2072791653} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Version: 3 + m_UsePipelineSettings: 1 + m_AdditionalLightsShadowResolutionTier: 2 + m_LightLayerMask: 1 + m_RenderingLayers: 1 + m_CustomShadowLayers: 0 + m_ShadowLayerMask: 1 + m_ShadowRenderingLayers: 1 + m_LightCookieSize: {x: 1, y: 1} + m_LightCookieOffset: {x: 0, y: 0} + m_SoftShadowQuality: 0 +--- !u!1001 &7210088622489746464 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 2643319947954567027, guid: 1dd3a10ef477c0a4c946a71272190a92, + type: 3} + propertyPath: m_Name + value: SceneSwitcher + objectReference: {fileID: 0} + - target: {fileID: 4797030649323203259, guid: 1dd3a10ef477c0a4c946a71272190a92, + type: 3} + propertyPath: m_LocalPosition.x + value: -0.27621377 + objectReference: {fileID: 0} + - target: {fileID: 4797030649323203259, guid: 1dd3a10ef477c0a4c946a71272190a92, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.6720215 + objectReference: {fileID: 0} + - target: {fileID: 4797030649323203259, guid: 1dd3a10ef477c0a4c946a71272190a92, + type: 3} + propertyPath: m_LocalPosition.z + value: -0.19427466 + objectReference: {fileID: 0} + - target: {fileID: 4797030649323203259, guid: 1dd3a10ef477c0a4c946a71272190a92, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4797030649323203259, guid: 1dd3a10ef477c0a4c946a71272190a92, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4797030649323203259, guid: 1dd3a10ef477c0a4c946a71272190a92, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4797030649323203259, guid: 1dd3a10ef477c0a4c946a71272190a92, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4797030649323203259, guid: 1dd3a10ef477c0a4c946a71272190a92, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4797030649323203259, guid: 1dd3a10ef477c0a4c946a71272190a92, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4797030649323203259, guid: 1dd3a10ef477c0a4c946a71272190a92, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 1dd3a10ef477c0a4c946a71272190a92, type: 3} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 2072791655} + - {fileID: 1035040900} + - {fileID: 7210088622489746464} + - {fileID: 1425830401} + - {fileID: 1215624106} + - {fileID: 740952429} diff --git a/example_unity_6000_0_project/Assets/Example/Scenes/FlutterEmbedExampleSceneAR.unity.meta b/example_unity_6000_0_project/Assets/Example/Scenes/FlutterEmbedExampleSceneAR.unity.meta new file mode 100644 index 0000000..1fd9d7b --- /dev/null +++ b/example_unity_6000_0_project/Assets/Example/Scenes/FlutterEmbedExampleSceneAR.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c39b9dfab960f5f48bef5c5cb5ecc4b6 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/Example/Scripts.meta b/example_unity_6000_0_project/Assets/Example/Scripts.meta new file mode 100644 index 0000000..7128733 --- /dev/null +++ b/example_unity_6000_0_project/Assets/Example/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3c0cb5e9879f8b644a11c5fc2a7f55e5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/Example/Scripts/ARCheckAvailability.cs b/example_unity_6000_0_project/Assets/Example/Scripts/ARCheckAvailability.cs new file mode 100644 index 0000000..7250502 --- /dev/null +++ b/example_unity_6000_0_project/Assets/Example/Scripts/ARCheckAvailability.cs @@ -0,0 +1,40 @@ +using System.Collections; +using UnityEngine; +using UnityEngine.XR.ARFoundation; + +namespace Assets.Scripts +{ + public class ARCheckAvailability : MonoBehaviour + { + [SerializeField] ARSession arSession; + + void Start() + { + StartCoroutine(CheckAvailabilityCoroutine()); + } + + IEnumerator CheckAvailabilityCoroutine() { + + Debug.Log("ARCheckAvailability: check"); + + if ((ARSession.state == ARSessionState.None) || + (ARSession.state == ARSessionState.CheckingAvailability) || + (ARSession.state == ARSessionState.Installing)) + { + Debug.Log("ARCheckAvailability: checking..."); + yield return ARSession.CheckAvailability(); + } + + if (ARSession.state == ARSessionState.Unsupported) + { + Debug.Log("ARCheckAvailability: unsupported"); + SendToFlutter.Send("ar:false"); + } + else + { + Debug.Log("ARCheckAvailability: available"); + SendToFlutter.Send("ar:true"); + } + } + } +} \ No newline at end of file diff --git a/example_unity_6000_0_project/Assets/Example/Scripts/ARCheckAvailability.cs.meta b/example_unity_6000_0_project/Assets/Example/Scripts/ARCheckAvailability.cs.meta new file mode 100644 index 0000000..31cc057 --- /dev/null +++ b/example_unity_6000_0_project/Assets/Example/Scripts/ARCheckAvailability.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 96b150af282ad0a48a2796f44816682a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/Example/Scripts/ARLogoPinner.cs b/example_unity_6000_0_project/Assets/Example/Scripts/ARLogoPinner.cs new file mode 100644 index 0000000..d25c37e --- /dev/null +++ b/example_unity_6000_0_project/Assets/Example/Scripts/ARLogoPinner.cs @@ -0,0 +1,39 @@ +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.XR.ARFoundation; + +public class ARLogoPinner : MonoBehaviour +{ + private static readonly float cursorRaycastX = 0.5f; + private static readonly float cursorRaycastY = 0.2f; + private static readonly float noSurfaceMannequinPositionX = 0.5f; + private static readonly float noSurfaceMannequinPositionY = 0.5f; + private static readonly float noSurfaceMannequinDistanceFromCamera = 3f; + + public ARRaycastManager raycastManager; + public GameObject flutterLogo; + private bool haveFoundSurface = false; + + // Update is called once per frame + void Update() + { + Vector2 screenPosition = Camera.main.ViewportToScreenPoint(new Vector2(cursorRaycastX, cursorRaycastY)); + List hits = new List(); + raycastManager.Raycast(screenPosition, hits, UnityEngine.XR.ARSubsystems.TrackableType.PlaneWithinPolygon); + + if (hits.Count > 0) + { + // Surface was detected, so use that as the logo position + flutterLogo.transform.position = hits[0].pose.position; + float scaleRelativeToDistance = hits[0].distance / 8; + flutterLogo.transform.localScale = new Vector3(scaleRelativeToDistance, scaleRelativeToDistance, scaleRelativeToDistance); + haveFoundSurface = true; + } + else if (!haveFoundSurface) + { + // No surface detected, so use a point straight infront of the camera + flutterLogo.transform.position = Camera.main.ViewportToWorldPoint(new Vector3(noSurfaceMannequinPositionX, noSurfaceMannequinPositionY, noSurfaceMannequinDistanceFromCamera)); + flutterLogo.transform.localScale = Vector3.one; + } + } +} \ No newline at end of file diff --git a/example_unity_6000_0_project/Assets/Example/Scripts/ARLogoPinner.cs.meta b/example_unity_6000_0_project/Assets/Example/Scripts/ARLogoPinner.cs.meta new file mode 100644 index 0000000..882ece5 --- /dev/null +++ b/example_unity_6000_0_project/Assets/Example/Scripts/ARLogoPinner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 35d4f5085f62615478052ef5c57bbc1c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/Example/Scripts/ReceiveFromFlutterRotation.cs b/example_unity_6000_0_project/Assets/Example/Scripts/ReceiveFromFlutterRotation.cs new file mode 100644 index 0000000..e6203a6 --- /dev/null +++ b/example_unity_6000_0_project/Assets/Example/Scripts/ReceiveFromFlutterRotation.cs @@ -0,0 +1,23 @@ +using System.Globalization; +using UnityEngine; + +public class ReceiveFromFlutterRotation : MonoBehaviour +{ + float _rotationSpeed = 20f; + + void Update() + { + transform.Rotate(0, _rotationSpeed * Time.deltaTime, 0); + } + + public void SetRotationSpeed(string data) + { + _rotationSpeed = float.Parse( + data, + // When converting between strings and numbers in a message protocol + // always use a fixed locale, to prevent unexpected parsing errors when + // the user's locale is different to the locale used by the developer + // (eg the decimal separator might be different) + CultureInfo.InvariantCulture); + } +} diff --git a/example_unity_6000_0_project/Assets/Example/Scripts/ReceiveFromFlutterRotation.cs.meta b/example_unity_6000_0_project/Assets/Example/Scripts/ReceiveFromFlutterRotation.cs.meta new file mode 100644 index 0000000..e1857ae --- /dev/null +++ b/example_unity_6000_0_project/Assets/Example/Scripts/ReceiveFromFlutterRotation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0a98ab02fef424f488977159bd6fa420 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/Example/Scripts/SceneSwitcher.cs b/example_unity_6000_0_project/Assets/Example/Scripts/SceneSwitcher.cs new file mode 100644 index 0000000..03455a6 --- /dev/null +++ b/example_unity_6000_0_project/Assets/Example/Scripts/SceneSwitcher.cs @@ -0,0 +1,12 @@ +using UnityEngine; +using UnityEngine.SceneManagement; + +public class SceneSwitcher : MonoBehaviour +{ + void SwitchToScene(string sceneName) + { + if(!sceneName.Equals(SceneManager.GetActiveScene().name)) { + SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Single); + } + } +} diff --git a/example_unity_6000_0_project/Assets/Example/Scripts/SceneSwitcher.cs.meta b/example_unity_6000_0_project/Assets/Example/Scripts/SceneSwitcher.cs.meta new file mode 100644 index 0000000..3ce95ce --- /dev/null +++ b/example_unity_6000_0_project/Assets/Example/Scripts/SceneSwitcher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1478ccf15aa1bd14ab8c9b9f82e35835 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/Example/Scripts/SendToFlutterSceneLoaded.cs b/example_unity_6000_0_project/Assets/Example/Scripts/SendToFlutterSceneLoaded.cs new file mode 100644 index 0000000..5cb6842 --- /dev/null +++ b/example_unity_6000_0_project/Assets/Example/Scripts/SendToFlutterSceneLoaded.cs @@ -0,0 +1,21 @@ +using UnityEngine; +using UnityEngine.SceneManagement; + +public class SendToFlutterSceneLoaded : MonoBehaviour +{ + void OnEnable() + { + SceneManager.sceneLoaded += OnSceneLoaded; + } + + void OnSceneLoaded(Scene scene, LoadSceneMode mode) + { + SendToFlutter.Send("scene_loaded"); + } + + // called when the game is terminated + void OnDisable() + { + SceneManager.sceneLoaded -= OnSceneLoaded; + } +} diff --git a/example_unity_6000_0_project/Assets/Example/Scripts/SendToFlutterSceneLoaded.cs.meta b/example_unity_6000_0_project/Assets/Example/Scripts/SendToFlutterSceneLoaded.cs.meta new file mode 100644 index 0000000..d2c58ab --- /dev/null +++ b/example_unity_6000_0_project/Assets/Example/Scripts/SendToFlutterSceneLoaded.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 358915f3f06aba9418a6baec89c1f77a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/Example/Scripts/SendToFlutterTouched.cs b/example_unity_6000_0_project/Assets/Example/Scripts/SendToFlutterTouched.cs new file mode 100644 index 0000000..b1e169e --- /dev/null +++ b/example_unity_6000_0_project/Assets/Example/Scripts/SendToFlutterTouched.cs @@ -0,0 +1,31 @@ +using UnityEngine; +using UnityEngine.InputSystem; +using UnityEngine.InputSystem.EnhancedTouch; + +public class SendToFlutterTouched : MonoBehaviour +{ + void Awake() { + // Required for input polling in new input system + EnhancedTouchSupport.Enable(); + } + + void OnDestroy() + { + EnhancedTouchSupport.Disable(); + } + + void Update() + { + if (UnityEngine.InputSystem.EnhancedTouch.Touch.activeTouches.Count > 0 + && UnityEngine.InputSystem.EnhancedTouch.Touch.activeTouches[0].began) + { + Ray ray = Camera.main.ScreenPointToRay(UnityEngine.InputSystem.EnhancedTouch.Touch.activeTouches[0].screenPosition); + RaycastHit hit; + if (Physics.Raycast(ray, out hit)) + { + Debug.Log("Flutter logo touched"); + SendToFlutter.Send("touch"); + } + } + } +} diff --git a/example_unity_6000_0_project/Assets/Example/Scripts/SendToFlutterTouched.cs.meta b/example_unity_6000_0_project/Assets/Example/Scripts/SendToFlutterTouched.cs.meta new file mode 100644 index 0000000..cfc98d3 --- /dev/null +++ b/example_unity_6000_0_project/Assets/Example/Scripts/SendToFlutterTouched.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 915b1b9c07848394c9932bfc30eeda64 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/FlutterEmbed.meta b/example_unity_6000_0_project/Assets/FlutterEmbed.meta new file mode 100644 index 0000000..cda6af9 --- /dev/null +++ b/example_unity_6000_0_project/Assets/FlutterEmbed.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c3808c7df1112b14ab651f293f4ea1b0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/FlutterEmbed/Editor.meta b/example_unity_6000_0_project/Assets/FlutterEmbed/Editor.meta new file mode 100644 index 0000000..a48bd4d --- /dev/null +++ b/example_unity_6000_0_project/Assets/FlutterEmbed/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3c0b9e4196d3bd4489c177a2fd5a7ab6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExportChecker.cs b/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExportChecker.cs new file mode 100644 index 0000000..1967dbe --- /dev/null +++ b/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExportChecker.cs @@ -0,0 +1,203 @@ +using System; +using System.Collections.Generic; +using System.IO; +using UnityEditor; +using UnityEditor.Build; + +internal class ProjectExportCheckerResult +{ + internal bool IsSuccessful { get; set; } + internal BuildPlayerOptions BuildPlayerOptions { get; set; } + internal List PrecheckWarnings { get; set; } = new List(); + + internal static ProjectExportCheckerResult Success(BuildPlayerOptions buildPlayerOptions, List precheckWarnings) + { + return new ProjectExportCheckerResult + { + IsSuccessful = true, + BuildPlayerOptions = buildPlayerOptions, + PrecheckWarnings = precheckWarnings + }; + } + + internal static ProjectExportCheckerResult Failure() + { + return new ProjectExportCheckerResult { IsSuccessful = false }; + } +} + +internal class ProjectExportChecker +{ + internal ProjectExportCheckerResult PreCheckAndroid() + { + if (EditorUserBuildSettings.activeBuildTarget != BuildTarget.Android) + { + ProjectExportHelpers.ShowErrorMessage("Can't export until you change the build target to Android: see File -> Build settings -> Platform, then Switch Target"); + return ProjectExportCheckerResult.Failure(); + } + + // Because Debug.Log does not work until after the build, collect any log messages to show at the end: + List precheckWarnings = new(); + + // Carry out checks common to Android and iOS. May add precheckWarnings to the list (hence using ref) + bool passedCommonChecks = PreCheckCommon(ref precheckWarnings, NamedBuildTarget.Android, BuildTargetGroup.Android); + + if (passedCommonChecks) + { + if (!EditorUserBuildSettings.exportAsGoogleAndroidProject) + { + ProjectExportHelpers.ShowErrorMessage("Can't export until you tick 'Export project': see File -> Build settings"); + return ProjectExportCheckerResult.Failure(); + } + + AndroidArchitecture architectures = PlayerSettings.Android.targetArchitectures; + if (!architectures.HasFlag(AndroidArchitecture.ARMv7) || !architectures.HasFlag(AndroidArchitecture.ARM64)) + { + ProjectExportHelpers.ShowErrorMessage("You must include ARMv7 and ARM64 as target architectures " + + "(see File -> Build settings -> Player Settings -> Other Settings -> Target architectures)"); + return ProjectExportCheckerResult.Failure(); + } + + return PrepareExportDirectory("android", "unityLibrary", precheckWarnings); + } + else + { + return ProjectExportCheckerResult.Failure(); + } + } + + internal ProjectExportCheckerResult PreCheckIos() + { + if (EditorUserBuildSettings.activeBuildTarget != BuildTarget.iOS) + { + ProjectExportHelpers.ShowErrorMessage("Can't export until you change the build target to iOS: see File -> Build settings -> Platform, then Switch Target"); + return ProjectExportCheckerResult.Failure(); + } + + // Because Debug.Log does not work until after the build, collect any log messages to show at the end: + List precheckWarnings = new(); + + // Carry out checks common to Android and iOS. May add precheckWarnings to the list (hence using ref) + bool passedCommonChecks = PreCheckCommon(ref precheckWarnings, NamedBuildTarget.iOS, BuildTargetGroup.iOS); + + if (passedCommonChecks) + { + if(EditorUserBuildSettings.iOSXcodeBuildConfig == XcodeBuildConfig.Debug) { + precheckWarnings.Add("iOS XCode build configuration is set to 'debug'. This should be set to 'release' for release builds"); + } + + return PrepareExportDirectory("ios", "unityLibrary", precheckWarnings); + } + else + { + return ProjectExportCheckerResult.Failure(); + } + } + + private bool PreCheckCommon(ref List precheckWarnings, NamedBuildTarget namedBuildTarget, BuildTargetGroup buildTargetGroup) + { +#if !UNITY_2022_3 + ShowErrorMessage("This plugin only supports Unity 2022.3 LTS (Long Term Support)."); + return ProjectExportCheckerResult.Failure(); +#endif + + if (PlayerSettings.GetScriptingBackend(EditorUserBuildSettings.selectedBuildTargetGroup) != ScriptingImplementation.IL2CPP) + { + ProjectExportHelpers.ShowErrorMessage("You must set IL2CPP as the scripting backend " + + "(see File -> Build settings -> Player Settings -> Other Settings -> Scripting backend)"); + return false; + } + + if (EditorUserBuildSettings.allowDebugging) + { + precheckWarnings.Add("'Allow debugging' is set to 'true'. This should be disabled for release builds" + + "(see File -> Build settings -> Player settings -> untick 'Development build' and 'Script debugging')"); + } + + Il2CppCodeGeneration il2CppCodeGeneration = PlayerSettings.GetIl2CppCodeGeneration(namedBuildTarget); + if (il2CppCodeGeneration == Il2CppCodeGeneration.OptimizeSize) + { + precheckWarnings.Add($"'IL2CPP code generation' is set to 'Faster (smaller) builds'. This can improve build time (useful for development) " + + "but should be set to 'Faster runtime' when building your release version " + + "(see File -> Build settings -> Player Settings -> Other Settings -> IL2CPP code generation)"); + } + + Il2CppCompilerConfiguration il2CppCompilerConfiguration = PlayerSettings.GetIl2CppCompilerConfiguration(buildTargetGroup); + if (il2CppCompilerConfiguration == Il2CppCompilerConfiguration.Debug) + { + precheckWarnings.Add($"'C++ compiler configuration' is set to 'Debug'. This can be useful for debugging during development " + + "but should be set to 'Release' when building your release version " + + "(see File -> Build settings -> Player Settings -> Other Settings -> C++ compiler configuration)"); + } + + return true; + } + + private ProjectExportCheckerResult PrepareExportDirectory(String subfolderName, String folderName, List precheckWarnings) + { + bool confirmOpenFolderSelection = EditorUtility.DisplayDialog( + "Select export directory", + "In the next window, select the export directory. This should be " + + $"'/{subfolderName}/{folderName}'", + "Select folder", + "Cancel"); + + if (!confirmOpenFolderSelection) + { + return ProjectExportCheckerResult.Failure(); + } + else + { + // Get the current BuildPlayerOptions (this also opens a directory window to select the export path) + BuildPlayerOptions buildPlayerOptions = BuildPlayerWindow.DefaultBuildMethods.GetBuildPlayerOptions(new BuildPlayerOptions()); + DirectoryInfo selectedDirectory = new DirectoryInfo(buildPlayerOptions.locationPathName); + + if (selectedDirectory.Name.Equals(subfolderName)) + { + bool createUnityLibrarySubfolder = EditorUtility.DisplayDialog( + "Create subfolder?", + $"It looks like you selected the '{subfolderName}' folder instead of '{subfolderName}/{folderName}'. " + + $"Use '{subfolderName}/{folderName}' instead?", + "Yes", + "Cancel"); + + if (createUnityLibrarySubfolder) + { + buildPlayerOptions.locationPathName = Path.Combine(buildPlayerOptions.locationPathName, folderName); + selectedDirectory = new DirectoryInfo(buildPlayerOptions.locationPathName); + Directory.CreateDirectory(buildPlayerOptions.locationPathName); + } + else + { + return ProjectExportCheckerResult.Failure(); + } + } + + if (!selectedDirectory.Name.Equals(folderName) || selectedDirectory.Parent == null || selectedDirectory.Parent.Name != subfolderName) + { + ProjectExportHelpers.ShowErrorMessage($"Expected a folder named {folderName} inside '{subfolderName}' folder. " + + $"Check the plugin documentation: you need to select '/{subfolderName}/{folderName}'. " + + "Aborting export"); + return ProjectExportCheckerResult.Failure(); + } + else + { + if (Directory.GetFileSystemEntries(buildPlayerOptions.locationPathName).Length != 0) + { + bool confirmDeleteOldExport = EditorUtility.DisplayDialog( + "Confirm overwrite", + $"Overwrite existing directory? (this will delete all files in {buildPlayerOptions.locationPathName})", + "Overwrite", + "Cancel"); + + if (confirmDeleteOldExport) + { + Directory.Delete(selectedDirectory.FullName, true); + } + } + + return ProjectExportCheckerResult.Success(buildPlayerOptions, precheckWarnings); + } + } + } +} diff --git a/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExportChecker.cs.meta b/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExportChecker.cs.meta new file mode 100644 index 0000000..28d97db --- /dev/null +++ b/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExportChecker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 831df08cc17da004bbc8d33ed78f8529 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExportHelpers.cs b/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExportHelpers.cs new file mode 100644 index 0000000..99bec09 --- /dev/null +++ b/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExportHelpers.cs @@ -0,0 +1,32 @@ +using System.IO; +using UnityEditor; + +internal class ProjectExportHelpers +{ + static internal void ShowErrorMessage(string errorMessage) + { + EditorUtility.DisplayDialog( + "Export incomplete", + errorMessage, + "Okay"); + } + + static internal void MoveContentsOfDirectory(DirectoryInfo from, DirectoryInfo to) + { + Directory.CreateDirectory(to.FullName); + + // Copy each file into the new directory. + foreach (FileInfo fi in from.GetFiles()) + { + fi.MoveTo(Path.Combine(to.FullName, fi.Name)); + } + + // Copy each subdirectory using recursion. + foreach (DirectoryInfo diSourceSubDir in from.GetDirectories()) + { + DirectoryInfo nextTargetSubDir = + to.CreateSubdirectory(diSourceSubDir.Name); + MoveContentsOfDirectory(diSourceSubDir, nextTargetSubDir); + } + } +} \ No newline at end of file diff --git a/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExportHelpers.cs.meta b/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExportHelpers.cs.meta new file mode 100644 index 0000000..1c8b6e9 --- /dev/null +++ b/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExportHelpers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 388c19ded9745674daedc50639e74eb6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExporter.cs b/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExporter.cs new file mode 100644 index 0000000..207cc9c --- /dev/null +++ b/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExporter.cs @@ -0,0 +1,27 @@ +using System.Collections.Generic; +using UnityEditor; +using UnityEditor.Build.Reporting; +using UnityEngine; + +internal abstract class ProjectExporter { + internal void Export(BuildPlayerOptions buildPlayerOptions, List precheckWarnings) + { + // This executes the build: + BuildReport report = BuildPipeline.BuildPlayer(buildPlayerOptions); + + if (report.summary.result != BuildResult.Succeeded) { + Debug.LogError("Building project for Flutter failed"); + } + else { + TransformExportedProject(buildPlayerOptions.locationPathName); + + // Debug.Log doesn't work until after BuildPipeline.BuildPlayer has executed + foreach(var log in precheckWarnings) { + Debug.LogWarning(log); + } + Debug.Log($"Building project for Flutter succeeded"); + } + } + + protected abstract void TransformExportedProject(string exportPath); +} \ No newline at end of file diff --git a/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExporter.cs.meta b/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExporter.cs.meta new file mode 100644 index 0000000..4ccec81 --- /dev/null +++ b/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExporter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fe8562f7848270d43a238f96e0ea87bb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExporterAndroid.cs b/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExporterAndroid.cs new file mode 100644 index 0000000..191b9ef --- /dev/null +++ b/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExporterAndroid.cs @@ -0,0 +1,117 @@ +using System.IO; +using System.Linq; +using System.Text.RegularExpressions; +using UnityEngine; + +internal class ProjectExporterAndroid : ProjectExporter +{ + protected override void TransformExportedProject(string exportPath) + { + Debug.Log("Transforming Unity export for Flutter integration..."); + + // The exported project has this structure: + // + // + // | + // |- + // |- + // |- + // |- build.gradle + // |- gradle.properties + // |- local.properties + // |- settings.gradle + // + // The structure is: + // A library part in the unityLibrary module that you can integrate into any other Gradle project. This contains the Unity runtime and Player data. + // A thin launcher part in the launcher module that contains the application name and its icons. This is a simple Android application that launches Unity. + // + // This needs to be transformed into a single module (the unityLibrary part). + // The launcher module is not needed, as the user's Flutter project's android part will be the 'launcher'. + // However, we do need the string.xml file from the launcher, as this contains some strings which Unity + // will expect to find (and will crash with android.content.res.Resources$NotFoundException if they don't exist) + // So, first, copy strings.xml + // from `\launcher\src\main\res\values\` + // to `\unityLibrary\src\main\res\values\` + + string stringsResourceFileFromPath = new string[] {exportPath, "launcher", "src", "main", "res", "values", "strings.xml"} + .Aggregate((a, b) => Path.Combine(a, b)); + string stringResourcesFileToPath = new string[] {exportPath, "unityLibrary", "src", "main", "res", "values", "strings.xml"} + .Aggregate((a, b) => Path.Combine(a, b)); + + FileInfo stringsResourceFile = new FileInfo(stringsResourceFileFromPath); + + if(!stringsResourceFile.Exists) { + ProjectExportHelpers.ShowErrorMessage($"Unexpected error: '{stringsResourceFile.FullName} not found"); + return; + } + + stringsResourceFile.MoveTo(stringResourcesFileToPath); + Debug.Log($"Moved {stringsResourceFileFromPath} to {stringResourcesFileToPath}"); + + // The launcher folder can now be deleted + DirectoryInfo launcherDirectory = new DirectoryInfo(Path.Combine(exportPath, "launcher")); + Directory.Delete(launcherDirectory.FullName, true); + Debug.Log($"Deleted {launcherDirectory.FullName}"); + + // The gradle folder can be deleted + DirectoryInfo gradleDirectory = new DirectoryInfo(Path.Combine(exportPath, "gradle")); + Directory.Delete(gradleDirectory.FullName, true); + Debug.Log($"Deleted {gradleDirectory.FullName}"); + + // The files at the root of exportPath can be deleted + DirectoryInfo exportDirectory = new DirectoryInfo(exportPath); + foreach (FileInfo file in exportDirectory.GetFiles()) { + file.Delete(); + Debug.Log($"Deleted {file.FullName}"); + } + + // Now move the contents of + // '/unityLibrary/unityLibrary' + // to '/unityLibrary' + // so that the unityLibrary module is 'promoted' to being the main and only module of the export + DirectoryInfo unityLibrarySubModuleDirectory = new DirectoryInfo(Path.Combine(exportPath, "unityLibrary")); + if(!unityLibrarySubModuleDirectory.Exists) { + ProjectExportHelpers.ShowErrorMessage($"Unexpected error: '{unityLibrarySubModuleDirectory.FullName} not found"); + return; + } + ProjectExportHelpers.MoveContentsOfDirectory(unityLibrarySubModuleDirectory, exportDirectory); + unityLibrarySubModuleDirectory.Delete(true); + Debug.Log($"Moved {unityLibrarySubModuleDirectory.FullName} to {exportDirectory.FullName}"); + + // The export includes an activity in the AndroidManifest.xml which is not going to be + // used (because we are using a Flutter PlatfromView instead). Remove it + FileInfo androidManifestFile = new FileInfo(Path.Combine(exportPath, "src", "main", "AndroidManifest.xml")); + if(!androidManifestFile.Exists) { + ProjectExportHelpers.ShowErrorMessage($"Unexpected error: '{androidManifestFile.FullName} not found"); + return; + } + string androidManifestContents = File.ReadAllText(androidManifestFile.FullName); + Regex regexActivityTag = new Regex(@"(\s|\S)+?", RegexOptions.Multiline); + androidManifestContents = regexActivityTag.Replace(androidManifestContents, ""); + File.WriteAllText(androidManifestFile.FullName, androidManifestContents); + Debug.Log($"Removed from {androidManifestFile.FullName}"); + + // Add the namespace 'com.unity3d.player' to unityLibrary\build.gradle + // for compatibility with Gradle 8 + FileInfo buildGradleFile = new FileInfo(Path.Combine(exportPath, "build.gradle")); + if(!buildGradleFile.Exists) { + ProjectExportHelpers.ShowErrorMessage($"Unexpected error: '{buildGradleFile.FullName} not found"); + return; + } + string buildGradleContents = File.ReadAllText(buildGradleFile.FullName); + Regex regexAndroidBlock = new Regex(Regex.Escape("android {")); + buildGradleContents = regexAndroidBlock.Replace(buildGradleContents, "android {\n\tnamespace 'com.unity3d.player'", 1); + File.WriteAllText(buildGradleFile.FullName, buildGradleContents); + Debug.Log($"Added namespace 'com.unity3d.player' to {buildGradleFile.FullName} for Gradle 8 compatibility"); + + DirectoryInfo burstDebugInformation = new DirectoryInfo(Path.Join(exportPath, "..", "unityLibrary_BurstDebugInformation_DoNotShip")); + if(burstDebugInformation.Exists) { + Directory.Delete(burstDebugInformation.FullName, true); + Debug.Log($"Deleted {burstDebugInformation.FullName}"); + } + + Debug.Log("Transforming Unity export for Flutter integration complete"); + } + + +} diff --git a/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExporterAndroid.cs.meta b/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExporterAndroid.cs.meta new file mode 100644 index 0000000..d411c7b --- /dev/null +++ b/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExporterAndroid.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 88e3899aa361f71429e041378c8a4356 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExporterIos.cs b/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExporterIos.cs new file mode 100644 index 0000000..da2542e --- /dev/null +++ b/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExporterIos.cs @@ -0,0 +1,56 @@ + +// Using UNITY_IOS preprocessor because 'using UnityEditor.iOS.Xcode' is only available with iOS build tools +#if UNITY_IOS + +using System.IO; +using UnityEditor; +using UnityEditor.iOS.Xcode; +using UnityEngine; + + +internal class ProjectExporterIos : ProjectExporter +{ + + protected override void TransformExportedProject(string exportPath) + { + Debug.Log("Transforming Unity export for Flutter integration..."); + + FileInfo pbxProjFileInfo = new FileInfo(Path.Combine(exportPath, "Unity-iPhone.xcodeproj", "project.pbxproj")); + + if(!pbxProjFileInfo.Exists) { + ProjectExportHelpers.ShowErrorMessage($"Error transforming iOS export: couldn't find {pbxProjFileInfo.FullName}"); + return; + } + + // We're using the GNU linker flag -U to force the FlutterEmbedUnityIosSendToFlutter symbol to be entered + // in the output file as an undefined symbol. This is incompatible with bitcode, with this error message + // during build: + // Error (Xcode): -U and -bitcode_bundle (Xcode setting ENABLE_BITCODE=YES) cannot be used together + // + // By default, the Unity project is build with bitcode enabled. Luckily, bitcode is now deprecated - + // From Apple’s release note of Xcode 14 (https://developer.apple.com/documentation/xcode-release-notes/xcode-14-release-notes): + // + // "Starting with Xcode 14, bitcode is no longer required for watchOS and tvOS applications, and the App Store no longer accepts + // bitcode submissions from Xcode 14. + // Xcode no longer builds bitcode by default and generates a warning message if a project explicitly enables bitcode: “Building + // with bitcode is deprecated. Please update your project and/or target settings to disable bitcode.” + // The capability to build with bitcode will be removed in a future Xcode release." + // + // So, disable bitcode for the Unity export project: + PBXProject pbxProject = new PBXProject(); + pbxProject.ReadFromFile(pbxProjFileInfo.FullName); + pbxProject.SetBuildProperty(pbxProject.ProjectGuid(), "ENABLE_BITCODE", "NO"); + pbxProject.WriteToFile(pbxProjFileInfo.FullName); + + // Delete the BurstDebugInformation folder + DirectoryInfo burstDebugInformation = new DirectoryInfo(Path.Join(exportPath, "..", "unityLibrary_BurstDebugInformation_DoNotShip")); + if(burstDebugInformation.Exists) { + Directory.Delete(burstDebugInformation.FullName, true); + Debug.Log($"Deleted {burstDebugInformation.FullName}"); + } + + Debug.Log("Transforming Unity export for Flutter integration complete"); + } +} + +#endif \ No newline at end of file diff --git a/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExporterIos.cs.meta b/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExporterIos.cs.meta new file mode 100644 index 0000000..d68c00c --- /dev/null +++ b/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExporterIos.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 146dfed0340f2414a9fbd4904e770c4f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExporterMenuItem.cs b/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExporterMenuItem.cs new file mode 100644 index 0000000..a1e9076 --- /dev/null +++ b/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExporterMenuItem.cs @@ -0,0 +1,30 @@ +using UnityEditor; + +public class ProjectExporterMenuItem : EditorWindow +{ + private static ProjectExportChecker projectExportChecker = new ProjectExportChecker(); + + [MenuItem("Flutter Embed/Export project to flutter app (Android)")] + static void ExportProjectAndroid() + { + ProjectExportCheckerResult result = projectExportChecker.PreCheckAndroid(); + +#if UNITY_ANDROID + if(result.IsSuccessful) { + new ProjectExporterAndroid().Export(result.BuildPlayerOptions, result.PrecheckWarnings); + } +#endif + } + + [MenuItem("Flutter Embed/Export project to flutter app (iOS)")] + static void ExportProjectIos() + { + // Using UNITY_IOS preprocessor because 'using UnityEditor.iOS.Xcode' is only available with iOS build tools + ProjectExportCheckerResult result = projectExportChecker.PreCheckIos(); +#if UNITY_IOS + if(result.IsSuccessful) { + new ProjectExporterIos().Export(result.BuildPlayerOptions, result.PrecheckWarnings); + } +#endif + } +} diff --git a/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExporterMenuItem.cs.meta b/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExporterMenuItem.cs.meta new file mode 100644 index 0000000..6cb7f55 --- /dev/null +++ b/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExporterMenuItem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fba280215ec82d843a36e4c6008b57f4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/FlutterEmbed/SendToFlutter.meta b/example_unity_6000_0_project/Assets/FlutterEmbed/SendToFlutter.meta new file mode 100644 index 0000000..44c515d --- /dev/null +++ b/example_unity_6000_0_project/Assets/FlutterEmbed/SendToFlutter.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c3f5938a01411664f80169ff2752a7ef +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/FlutterEmbed/SendToFlutter/SendToFlutter.cs b/example_unity_6000_0_project/Assets/FlutterEmbed/SendToFlutter/SendToFlutter.cs new file mode 100644 index 0000000..22c0036 --- /dev/null +++ b/example_unity_6000_0_project/Assets/FlutterEmbed/SendToFlutter/SendToFlutter.cs @@ -0,0 +1,33 @@ +using System; +using System.Runtime.InteropServices; +using UnityEngine; +using UnityEngine.SceneManagement; + +public class SendToFlutter +{ + public static void Send(string data) { + if (Application.platform == RuntimePlatform.Android) + { + // Use reflection to call the relevant static Kotlin method in the Android plugin + using (AndroidJavaClass sendToFlutterClass = new AndroidJavaClass("com.learntoflutter.flutter_embed_unity_android.messaging.SendToFlutter")) + { + sendToFlutterClass.CallStatic("sendToFlutter", data); + } + } + else + { +#if UNITY_IOS + // Call an obj-C function name + FlutterEmbedUnityIos_sendToFlutter(data); +#endif + } + } + +#if UNITY_IOS + // On iOS plugins are statically linked into the executable, + // so we have to use __Internal as the library name. + [DllImport("__Internal")] + // This function is defined in flutter_embed_unity_2022_3_ios/ios/Classes/SendToFlutter.swift + private static extern void FlutterEmbedUnityIos_sendToFlutter(string data); +#endif +} diff --git a/example_unity_6000_0_project/Assets/FlutterEmbed/SendToFlutter/SendToFlutter.cs.meta b/example_unity_6000_0_project/Assets/FlutterEmbed/SendToFlutter/SendToFlutter.cs.meta new file mode 100644 index 0000000..529ad75 --- /dev/null +++ b/example_unity_6000_0_project/Assets/FlutterEmbed/SendToFlutter/SendToFlutter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 76534d2a828ef4c4a89f657f52b12041 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/Readme.asset b/example_unity_6000_0_project/Assets/Readme.asset new file mode 100644 index 0000000..77c2f83 --- /dev/null +++ b/example_unity_6000_0_project/Assets/Readme.asset @@ -0,0 +1,34 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fcf7219bab7fe46a1ad266029b2fee19, type: 3} + m_Name: Readme + m_EditorClassIdentifier: + icon: {fileID: 2800000, guid: 727a75301c3d24613a3ebcec4a24c2c8, type: 3} + title: URP Empty Template + sections: + - heading: Welcome to the Universal Render Pipeline + text: This template includes the settings and assets you need to start creating with the Universal Render Pipeline. + linkText: + url: + - heading: URP Documentation + text: + linkText: Read more about URP + url: https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@latest + - heading: Forums + text: + linkText: Get answers and support + url: https://forum.unity.com/forums/universal-render-pipeline.383/ + - heading: Report bugs + text: + linkText: Submit a report + url: https://unity3d.com/unity/qa/bug-reporting + loadedLayout: 1 diff --git a/example_unity_6000_0_project/Assets/Readme.asset.meta b/example_unity_6000_0_project/Assets/Readme.asset.meta new file mode 100644 index 0000000..ab3ad45 --- /dev/null +++ b/example_unity_6000_0_project/Assets/Readme.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8105016687592461f977c054a80ce2f2 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/Settings.meta b/example_unity_6000_0_project/Assets/Settings.meta new file mode 100644 index 0000000..39b94dd --- /dev/null +++ b/example_unity_6000_0_project/Assets/Settings.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 709f11a7f3c4041caa4ef136ea32d874 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/Settings/SampleSceneProfile.asset b/example_unity_6000_0_project/Assets/Settings/SampleSceneProfile.asset new file mode 100644 index 0000000..37e401d --- /dev/null +++ b/example_unity_6000_0_project/Assets/Settings/SampleSceneProfile.asset @@ -0,0 +1,123 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-7893295128165547882 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0b2db86121404754db890f4c8dfe81b2, type: 3} + m_Name: Bloom + m_EditorClassIdentifier: + active: 1 + m_AdvancedMode: 0 + threshold: + m_OverrideState: 1 + m_Value: 1 + min: 0 + intensity: + m_OverrideState: 1 + m_Value: 1 + min: 0 + scatter: + m_OverrideState: 0 + m_Value: 0.7 + min: 0 + max: 1 + clamp: + m_OverrideState: 0 + m_Value: 65472 + min: 0 + tint: + m_OverrideState: 0 + m_Value: {r: 1, g: 1, b: 1, a: 1} + hdr: 0 + showAlpha: 0 + showEyeDropper: 1 + highQualityFiltering: + m_OverrideState: 0 + m_Value: 0 + skipIterations: + m_OverrideState: 0 + m_Value: 1 + min: 0 + max: 16 + dirtTexture: + m_OverrideState: 0 + m_Value: {fileID: 0} + dirtIntensity: + m_OverrideState: 0 + m_Value: 0 + min: 0 +--- !u!114 &-7011558710299706105 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 899c54efeace73346a0a16faa3afe726, type: 3} + m_Name: Vignette + m_EditorClassIdentifier: + active: 1 + m_AdvancedMode: 0 + color: + m_OverrideState: 0 + m_Value: {r: 0, g: 0, b: 0, a: 1} + hdr: 0 + showAlpha: 0 + showEyeDropper: 1 + center: + m_OverrideState: 0 + m_Value: {x: 0.5, y: 0.5} + intensity: + m_OverrideState: 1 + m_Value: 0.25 + min: 0 + max: 1 + smoothness: + m_OverrideState: 1 + m_Value: 0.4 + min: 0.01 + max: 1 + rounded: + m_OverrideState: 0 + m_Value: 0 +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d7fd9488000d3734a9e00ee676215985, type: 3} + m_Name: SampleSceneProfile + m_EditorClassIdentifier: + components: + - {fileID: 849379129802519247} + - {fileID: -7893295128165547882} + - {fileID: -7011558710299706105} +--- !u!114 &849379129802519247 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 97c23e3b12dc18c42a140437e53d3951, type: 3} + m_Name: Tonemapping + m_EditorClassIdentifier: + active: 1 + m_AdvancedMode: 0 + mode: + m_OverrideState: 1 + m_Value: 1 diff --git a/example_unity_6000_0_project/Assets/Settings/SampleSceneProfile.asset.meta b/example_unity_6000_0_project/Assets/Settings/SampleSceneProfile.asset.meta new file mode 100644 index 0000000..f8cce64 --- /dev/null +++ b/example_unity_6000_0_project/Assets/Settings/SampleSceneProfile.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a6560a915ef98420e9faacc1c7438823 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/Settings/URP-Balanced-Renderer.asset b/example_unity_6000_0_project/Assets/Settings/URP-Balanced-Renderer.asset new file mode 100644 index 0000000..d971be1 --- /dev/null +++ b/example_unity_6000_0_project/Assets/Settings/URP-Balanced-Renderer.asset @@ -0,0 +1,112 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-6244410763145040608 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0ae4d376c05df421b98c5b39b25b0d29, type: 3} + m_Name: ARBackgroundRendererFeature + m_EditorClassIdentifier: + m_Active: 1 +--- !u!114 &-1878332245247344467 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f62c9c65cf3354c93be831c8bc075510, type: 3} + m_Name: SSAO + m_EditorClassIdentifier: + m_Active: 1 + m_Settings: + AOMethod: 1 + Downsample: 1 + AfterOpaque: 0 + Source: 0 + NormalSamples: 0 + Intensity: 0.5 + DirectLightingStrength: 0.25 + Radius: 0.25 + Samples: 2 + BlurQuality: 0 + Falloff: 100 + SampleCount: -1 + m_BlueNoise256Textures: + - {fileID: 2800000, guid: 36f118343fc974119bee3d09e2111500, type: 3} + - {fileID: 2800000, guid: 4b7b083e6b6734e8bb2838b0b50a0bc8, type: 3} + - {fileID: 2800000, guid: c06cc21c692f94f5fb5206247191eeee, type: 3} + - {fileID: 2800000, guid: cb76dd40fa7654f9587f6a344f125c9a, type: 3} + - {fileID: 2800000, guid: e32226222ff144b24bf3a5a451de54bc, type: 3} + - {fileID: 2800000, guid: 3302065f671a8450b82c9ddf07426f3a, type: 3} + - {fileID: 2800000, guid: 56a77a3e8d64f47b6afe9e3c95cb57d5, type: 3} + m_Shader: {fileID: 4800000, guid: 0849e84e3d62649e8882e9d6f056a017, type: 3} +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: de640fe3d0db1804a85f9fc8f5cadab6, type: 3} + m_Name: URP-Balanced-Renderer + m_EditorClassIdentifier: + debugShaders: + debugReplacementPS: {fileID: 4800000, guid: cf852408f2e174538bcd9b7fda1c5ae7, + type: 3} + hdrDebugViewPS: {fileID: 4800000, guid: 573620ae32aec764abd4d728906d2587, type: 3} + m_RendererFeatures: + - {fileID: -1878332245247344467} + - {fileID: -6244410763145040608} + m_RendererFeatureMap: adc0de57c6d2eee5202d1dc77e6557a9 + m_UseNativeRenderPass: 0 + postProcessData: {fileID: 11400000, guid: 41439944d30ece34e96484bdb6645b55, type: 2} + xrSystemData: {fileID: 11400000, guid: 60e1133243b97e347b653163a8c01b64, type: 2} + shaders: + blitPS: {fileID: 4800000, guid: c17132b1f77d20942aa75f8429c0f8bc, type: 3} + copyDepthPS: {fileID: 4800000, guid: d6dae50ee9e1bfa4db75f19f99355220, type: 3} + screenSpaceShadowPS: {fileID: 0} + samplingPS: {fileID: 4800000, guid: 04c410c9937594faa893a11dceb85f7e, type: 3} + stencilDeferredPS: {fileID: 4800000, guid: e9155b26e1bc55942a41e518703fe304, type: 3} + fallbackErrorPS: {fileID: 4800000, guid: e6e9a19c3678ded42a3bc431ebef7dbd, type: 3} + fallbackLoadingPS: {fileID: 4800000, guid: 7f888aff2ac86494babad1c2c5daeee2, type: 3} + materialErrorPS: {fileID: 4800000, guid: 5fd9a8feb75a4b5894c241777f519d4e, type: 3} + coreBlitPS: {fileID: 4800000, guid: 93446b5c5339d4f00b85c159e1159b7c, type: 3} + coreBlitColorAndDepthPS: {fileID: 4800000, guid: d104b2fc1ca6445babb8e90b0758136b, + type: 3} + blitHDROverlay: {fileID: 4800000, guid: a89bee29cffa951418fc1e2da94d1959, type: 3} + cameraMotionVector: {fileID: 4800000, guid: c56b7e0d4c7cb484e959caeeedae9bbf, + type: 3} + objectMotionVector: {fileID: 4800000, guid: 7b3ede40266cd49a395def176e1bc486, + type: 3} + dataDrivenLensFlare: {fileID: 4800000, guid: 6cda457ac28612740adb23da5d39ea92, + type: 3} + m_AssetVersion: 2 + m_OpaqueLayerMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_TransparentLayerMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_DefaultStencilState: + overrideStencilState: 0 + stencilReference: 0 + stencilCompareFunction: 8 + passOperation: 2 + failOperation: 0 + zFailOperation: 0 + m_ShadowTransparentReceive: 1 + m_RenderingMode: 0 + m_DepthPrimingMode: 0 + m_CopyDepthMode: 0 + m_AccurateGbufferNormals: 0 + m_IntermediateTextureMode: 1 diff --git a/example_unity_6000_0_project/Assets/Settings/URP-Balanced-Renderer.asset.meta b/example_unity_6000_0_project/Assets/Settings/URP-Balanced-Renderer.asset.meta new file mode 100644 index 0000000..8fa7f17 --- /dev/null +++ b/example_unity_6000_0_project/Assets/Settings/URP-Balanced-Renderer.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e634585d5c4544dd297acaee93dc2beb +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/Settings/URP-Balanced.asset b/example_unity_6000_0_project/Assets/Settings/URP-Balanced.asset new file mode 100644 index 0000000..ecc8cb0 --- /dev/null +++ b/example_unity_6000_0_project/Assets/Settings/URP-Balanced.asset @@ -0,0 +1,136 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf2edee5c58d82540a51f03df9d42094, type: 3} + m_Name: URP-Balanced + m_EditorClassIdentifier: + k_AssetVersion: 12 + k_AssetPreviousVersion: 12 + m_RendererType: 1 + m_RendererData: {fileID: 0} + m_RendererDataList: + - {fileID: 11400000, guid: e634585d5c4544dd297acaee93dc2beb, type: 2} + m_DefaultRendererIndex: 0 + m_RequireDepthTexture: 0 + m_RequireOpaqueTexture: 0 + m_OpaqueDownsampling: 1 + m_SupportsTerrainHoles: 1 + m_SupportsHDR: 1 + m_HDRColorBufferPrecision: 0 + m_MSAA: 1 + m_RenderScale: 1 + m_UpscalingFilter: 0 + m_FsrOverrideSharpness: 0 + m_FsrSharpness: 0.92 + m_EnableLODCrossFade: 1 + m_LODCrossFadeDitheringType: 1 + m_ShEvalMode: 0 + m_LightProbeSystem: 0 + m_ProbeVolumeMemoryBudget: 1024 + m_ProbeVolumeBlendingMemoryBudget: 256 + m_SupportProbeVolumeGPUStreaming: 0 + m_SupportProbeVolumeDiskStreaming: 0 + m_SupportProbeVolumeScenarios: 0 + m_SupportProbeVolumeScenarioBlending: 0 + m_ProbeVolumeSHBands: 1 + m_MainLightRenderingMode: 1 + m_MainLightShadowsSupported: 1 + m_MainLightShadowmapResolution: 1024 + m_AdditionalLightsRenderingMode: 1 + m_AdditionalLightsPerObjectLimit: 2 + m_AdditionalLightShadowsSupported: 0 + m_AdditionalLightsShadowmapResolution: 512 + m_AdditionalLightsShadowResolutionTierLow: 128 + m_AdditionalLightsShadowResolutionTierMedium: 256 + m_AdditionalLightsShadowResolutionTierHigh: 512 + m_ReflectionProbeBlending: 0 + m_ReflectionProbeBoxProjection: 0 + m_ShadowDistance: 50 + m_ShadowCascadeCount: 1 + m_Cascade2Split: 0.25 + m_Cascade3Split: {x: 0.1, y: 0.3} + m_Cascade4Split: {x: 0.067, y: 0.2, z: 0.467} + m_CascadeBorder: 0.1 + m_ShadowDepthBias: 1 + m_ShadowNormalBias: 1 + m_AnyShadowsSupported: 1 + m_SoftShadowsSupported: 1 + m_ConservativeEnclosingSphere: 0 + m_NumIterationsEnclosingSphere: 64 + m_SoftShadowQuality: 2 + m_AdditionalLightsCookieResolution: 512 + m_AdditionalLightsCookieFormat: 1 + m_UseSRPBatcher: 1 + m_SupportsDynamicBatching: 0 + m_MixedLightingSupported: 1 + m_SupportsLightCookies: 1 + m_SupportsLightLayers: 0 + m_DebugLevel: 0 + m_StoreActionsOptimization: 0 + m_UseAdaptivePerformance: 1 + m_ColorGradingMode: 0 + m_ColorGradingLutSize: 32 + m_AllowPostProcessAlphaOutput: 0 + m_UseFastSRGBLinearConversion: 0 + m_SupportDataDrivenLensFlare: 1 + m_SupportScreenSpaceLensFlare: 1 + m_GPUResidentDrawerMode: 0 + m_SmallMeshScreenPercentage: 0 + m_GPUResidentDrawerEnableOcclusionCullingInCameras: 0 + m_ShadowType: 1 + m_LocalShadowsSupported: 0 + m_LocalShadowsAtlasResolution: 256 + m_MaxPixelLights: 0 + m_ShadowAtlasResolution: 256 + m_VolumeFrameworkUpdateMode: 0 + m_VolumeProfile: {fileID: 0} + apvScenesData: + obsoleteSceneBounds: + m_Keys: [] + m_Values: [] + obsoleteHasProbeVolumes: + m_Keys: [] + m_Values: + m_PrefilteringModeMainLightShadows: 3 + m_PrefilteringModeAdditionalLight: 4 + m_PrefilteringModeAdditionalLightShadows: 0 + m_PrefilterXRKeywords: 0 + m_PrefilteringModeForwardPlus: 0 + m_PrefilteringModeDeferredRendering: 0 + m_PrefilteringModeScreenSpaceOcclusion: 2 + m_PrefilterDebugKeywords: 1 + m_PrefilterWriteRenderingLayers: 1 + m_PrefilterHDROutput: 1 + m_PrefilterAlphaOutput: 1 + m_PrefilterSSAODepthNormals: 1 + m_PrefilterSSAOSourceDepthLow: 0 + m_PrefilterSSAOSourceDepthMedium: 1 + m_PrefilterSSAOSourceDepthHigh: 1 + m_PrefilterSSAOInterleaved: 0 + m_PrefilterSSAOBlueNoise: 1 + m_PrefilterSSAOSampleCountLow: 0 + m_PrefilterSSAOSampleCountMedium: 1 + m_PrefilterSSAOSampleCountHigh: 1 + m_PrefilterDBufferMRT1: 1 + m_PrefilterDBufferMRT2: 1 + m_PrefilterDBufferMRT3: 1 + m_PrefilterSoftShadowsQualityLow: 1 + m_PrefilterSoftShadowsQualityMedium: 0 + m_PrefilterSoftShadowsQualityHigh: 1 + m_PrefilterSoftShadows: 1 + m_PrefilterScreenCoord: 1 + m_PrefilterNativeRenderPass: 1 + m_PrefilterUseLegacyLightmaps: 0 + m_ShaderVariantLogLevel: 0 + m_ShadowCascades: 0 + m_Textures: + blueNoise64LTex: {fileID: 2800000, guid: e3d24661c1e055f45a7560c033dbb837, type: 3} + bayerMatrixTex: {fileID: 2800000, guid: f9ee4ed84c1d10c49aabb9b210b0fc44, type: 3} diff --git a/example_unity_6000_0_project/Assets/Settings/URP-Balanced.asset.meta b/example_unity_6000_0_project/Assets/Settings/URP-Balanced.asset.meta new file mode 100644 index 0000000..f524db0 --- /dev/null +++ b/example_unity_6000_0_project/Assets/Settings/URP-Balanced.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e1260c1148f6143b28bae5ace5e9c5d1 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/Settings/URP-HighFidelity-Renderer.asset b/example_unity_6000_0_project/Assets/Settings/URP-HighFidelity-Renderer.asset new file mode 100644 index 0000000..6391767 --- /dev/null +++ b/example_unity_6000_0_project/Assets/Settings/URP-HighFidelity-Renderer.asset @@ -0,0 +1,105 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-1878332245247344467 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f62c9c65cf3354c93be831c8bc075510, type: 3} + m_Name: SSAO + m_EditorClassIdentifier: + m_Active: 1 + m_Settings: + AOMethod: 1 + Downsample: 0 + AfterOpaque: 0 + Source: 1 + NormalSamples: 1 + Intensity: 0.5 + DirectLightingStrength: 0.25 + Radius: 0.25 + Samples: 0 + BlurQuality: 0 + Falloff: 100 + SampleCount: -1 + m_BlueNoise256Textures: + - {fileID: 2800000, guid: 36f118343fc974119bee3d09e2111500, type: 3} + - {fileID: 2800000, guid: 4b7b083e6b6734e8bb2838b0b50a0bc8, type: 3} + - {fileID: 2800000, guid: c06cc21c692f94f5fb5206247191eeee, type: 3} + - {fileID: 2800000, guid: cb76dd40fa7654f9587f6a344f125c9a, type: 3} + - {fileID: 2800000, guid: e32226222ff144b24bf3a5a451de54bc, type: 3} + - {fileID: 2800000, guid: 3302065f671a8450b82c9ddf07426f3a, type: 3} + - {fileID: 2800000, guid: 56a77a3e8d64f47b6afe9e3c95cb57d5, type: 3} + m_Shader: {fileID: 4800000, guid: 0849e84e3d62649e8882e9d6f056a017, type: 3} +--- !u!114 &-267364489217903508 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0ae4d376c05df421b98c5b39b25b0d29, type: 3} + m_Name: ARBackgroundRendererFeature + m_EditorClassIdentifier: + m_Active: 1 +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: de640fe3d0db1804a85f9fc8f5cadab6, type: 3} + m_Name: URP-HighFidelity-Renderer + m_EditorClassIdentifier: + debugShaders: + debugReplacementPS: {fileID: 4800000, guid: cf852408f2e174538bcd9b7fda1c5ae7, + type: 3} + hdrDebugViewPS: {fileID: 4800000, guid: 573620ae32aec764abd4d728906d2587, type: 3} + probeVolumeSamplingDebugComputeShader: {fileID: 7200000, guid: 53626a513ea68ce47b59dc1299fe3959, + type: 3} + probeVolumeResources: + probeVolumeDebugShader: {fileID: 0} + probeVolumeFragmentationDebugShader: {fileID: 0} + probeVolumeOffsetDebugShader: {fileID: 0} + probeVolumeSamplingDebugShader: {fileID: 0} + probeSamplingDebugMesh: {fileID: 0} + probeSamplingDebugTexture: {fileID: 0} + probeVolumeBlendStatesCS: {fileID: 0} + m_RendererFeatures: + - {fileID: -1878332245247344467} + - {fileID: -267364489217903508} + m_RendererFeatureMap: adc0de57c6d2eee56cf49ce269214afc + m_UseNativeRenderPass: 0 + xrSystemData: {fileID: 11400000, guid: 60e1133243b97e347b653163a8c01b64, type: 2} + postProcessData: {fileID: 11400000, guid: 41439944d30ece34e96484bdb6645b55, type: 2} + m_AssetVersion: 2 + m_OpaqueLayerMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_TransparentLayerMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_DefaultStencilState: + overrideStencilState: 0 + stencilReference: 0 + stencilCompareFunction: 8 + passOperation: 2 + failOperation: 0 + zFailOperation: 0 + m_ShadowTransparentReceive: 1 + m_RenderingMode: 0 + m_DepthPrimingMode: 0 + m_CopyDepthMode: 0 + m_DepthAttachmentFormat: 0 + m_DepthTextureFormat: 0 + m_AccurateGbufferNormals: 0 + m_IntermediateTextureMode: 1 diff --git a/example_unity_6000_0_project/Assets/Settings/URP-HighFidelity-Renderer.asset.meta b/example_unity_6000_0_project/Assets/Settings/URP-HighFidelity-Renderer.asset.meta new file mode 100644 index 0000000..bcdff02 --- /dev/null +++ b/example_unity_6000_0_project/Assets/Settings/URP-HighFidelity-Renderer.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c40be3174f62c4acf8c1216858c64956 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/Settings/URP-HighFidelity.asset b/example_unity_6000_0_project/Assets/Settings/URP-HighFidelity.asset new file mode 100644 index 0000000..898ec96 --- /dev/null +++ b/example_unity_6000_0_project/Assets/Settings/URP-HighFidelity.asset @@ -0,0 +1,136 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf2edee5c58d82540a51f03df9d42094, type: 3} + m_Name: URP-HighFidelity + m_EditorClassIdentifier: + k_AssetVersion: 12 + k_AssetPreviousVersion: 12 + m_RendererType: 1 + m_RendererData: {fileID: 0} + m_RendererDataList: + - {fileID: 11400000, guid: c40be3174f62c4acf8c1216858c64956, type: 2} + m_DefaultRendererIndex: 0 + m_RequireDepthTexture: 0 + m_RequireOpaqueTexture: 0 + m_OpaqueDownsampling: 1 + m_SupportsTerrainHoles: 1 + m_SupportsHDR: 1 + m_HDRColorBufferPrecision: 0 + m_MSAA: 4 + m_RenderScale: 1 + m_UpscalingFilter: 0 + m_FsrOverrideSharpness: 0 + m_FsrSharpness: 0.92 + m_EnableLODCrossFade: 1 + m_LODCrossFadeDitheringType: 1 + m_ShEvalMode: 0 + m_LightProbeSystem: 0 + m_ProbeVolumeMemoryBudget: 1024 + m_ProbeVolumeBlendingMemoryBudget: 256 + m_SupportProbeVolumeGPUStreaming: 0 + m_SupportProbeVolumeDiskStreaming: 0 + m_SupportProbeVolumeScenarios: 0 + m_SupportProbeVolumeScenarioBlending: 0 + m_ProbeVolumeSHBands: 1 + m_MainLightRenderingMode: 1 + m_MainLightShadowsSupported: 1 + m_MainLightShadowmapResolution: 4096 + m_AdditionalLightsRenderingMode: 1 + m_AdditionalLightsPerObjectLimit: 8 + m_AdditionalLightShadowsSupported: 1 + m_AdditionalLightsShadowmapResolution: 4096 + m_AdditionalLightsShadowResolutionTierLow: 128 + m_AdditionalLightsShadowResolutionTierMedium: 256 + m_AdditionalLightsShadowResolutionTierHigh: 512 + m_ReflectionProbeBlending: 1 + m_ReflectionProbeBoxProjection: 1 + m_ShadowDistance: 150 + m_ShadowCascadeCount: 4 + m_Cascade2Split: 0.25 + m_Cascade3Split: {x: 0.1, y: 0.3} + m_Cascade4Split: {x: 0.067, y: 0.2, z: 0.467} + m_CascadeBorder: 0.1 + m_ShadowDepthBias: 1 + m_ShadowNormalBias: 1 + m_AnyShadowsSupported: 1 + m_SoftShadowsSupported: 1 + m_ConservativeEnclosingSphere: 0 + m_NumIterationsEnclosingSphere: 64 + m_SoftShadowQuality: 2 + m_AdditionalLightsCookieResolution: 4096 + m_AdditionalLightsCookieFormat: 4 + m_UseSRPBatcher: 1 + m_SupportsDynamicBatching: 0 + m_MixedLightingSupported: 1 + m_SupportsLightCookies: 1 + m_SupportsLightLayers: 0 + m_DebugLevel: 0 + m_StoreActionsOptimization: 0 + m_UseAdaptivePerformance: 1 + m_ColorGradingMode: 0 + m_ColorGradingLutSize: 32 + m_AllowPostProcessAlphaOutput: 0 + m_UseFastSRGBLinearConversion: 0 + m_SupportDataDrivenLensFlare: 1 + m_SupportScreenSpaceLensFlare: 1 + m_GPUResidentDrawerMode: 0 + m_SmallMeshScreenPercentage: 0 + m_GPUResidentDrawerEnableOcclusionCullingInCameras: 0 + m_ShadowType: 1 + m_LocalShadowsSupported: 0 + m_LocalShadowsAtlasResolution: 256 + m_MaxPixelLights: 0 + m_ShadowAtlasResolution: 256 + m_VolumeFrameworkUpdateMode: 0 + m_VolumeProfile: {fileID: 0} + apvScenesData: + obsoleteSceneBounds: + m_Keys: [] + m_Values: [] + obsoleteHasProbeVolumes: + m_Keys: [] + m_Values: + m_PrefilteringModeMainLightShadows: 3 + m_PrefilteringModeAdditionalLight: 4 + m_PrefilteringModeAdditionalLightShadows: 2 + m_PrefilterXRKeywords: 0 + m_PrefilteringModeForwardPlus: 0 + m_PrefilteringModeDeferredRendering: 0 + m_PrefilteringModeScreenSpaceOcclusion: 2 + m_PrefilterDebugKeywords: 1 + m_PrefilterWriteRenderingLayers: 1 + m_PrefilterHDROutput: 1 + m_PrefilterAlphaOutput: 1 + m_PrefilterSSAODepthNormals: 0 + m_PrefilterSSAOSourceDepthLow: 1 + m_PrefilterSSAOSourceDepthMedium: 1 + m_PrefilterSSAOSourceDepthHigh: 1 + m_PrefilterSSAOInterleaved: 0 + m_PrefilterSSAOBlueNoise: 1 + m_PrefilterSSAOSampleCountLow: 1 + m_PrefilterSSAOSampleCountMedium: 1 + m_PrefilterSSAOSampleCountHigh: 0 + m_PrefilterDBufferMRT1: 1 + m_PrefilterDBufferMRT2: 1 + m_PrefilterDBufferMRT3: 1 + m_PrefilterSoftShadowsQualityLow: 1 + m_PrefilterSoftShadowsQualityMedium: 0 + m_PrefilterSoftShadowsQualityHigh: 1 + m_PrefilterSoftShadows: 1 + m_PrefilterScreenCoord: 1 + m_PrefilterNativeRenderPass: 1 + m_PrefilterUseLegacyLightmaps: 0 + m_ShaderVariantLogLevel: 0 + m_ShadowCascades: 1 + m_Textures: + blueNoise64LTex: {fileID: 2800000, guid: e3d24661c1e055f45a7560c033dbb837, type: 3} + bayerMatrixTex: {fileID: 2800000, guid: f9ee4ed84c1d10c49aabb9b210b0fc44, type: 3} diff --git a/example_unity_6000_0_project/Assets/Settings/URP-HighFidelity.asset.meta b/example_unity_6000_0_project/Assets/Settings/URP-HighFidelity.asset.meta new file mode 100644 index 0000000..7416e17 --- /dev/null +++ b/example_unity_6000_0_project/Assets/Settings/URP-HighFidelity.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7b7fd9122c28c4d15b667c7040e3b3fd +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/Settings/URP-Performant-Renderer.asset b/example_unity_6000_0_project/Assets/Settings/URP-Performant-Renderer.asset new file mode 100644 index 0000000..59623cb --- /dev/null +++ b/example_unity_6000_0_project/Assets/Settings/URP-Performant-Renderer.asset @@ -0,0 +1,76 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: de640fe3d0db1804a85f9fc8f5cadab6, type: 3} + m_Name: URP-Performant-Renderer + m_EditorClassIdentifier: + debugShaders: + debugReplacementPS: {fileID: 4800000, guid: cf852408f2e174538bcd9b7fda1c5ae7, + type: 3} + hdrDebugViewPS: {fileID: 4800000, guid: 573620ae32aec764abd4d728906d2587, type: 3} + m_RendererFeatures: + - {fileID: 4111074100381138314} + m_RendererFeatureMap: 8abd86e61c780d39 + m_UseNativeRenderPass: 0 + postProcessData: {fileID: 11400000, guid: 41439944d30ece34e96484bdb6645b55, type: 2} + xrSystemData: {fileID: 11400000, guid: 60e1133243b97e347b653163a8c01b64, type: 2} + shaders: + blitPS: {fileID: 4800000, guid: c17132b1f77d20942aa75f8429c0f8bc, type: 3} + copyDepthPS: {fileID: 4800000, guid: d6dae50ee9e1bfa4db75f19f99355220, type: 3} + screenSpaceShadowPS: {fileID: 0} + samplingPS: {fileID: 4800000, guid: 04c410c9937594faa893a11dceb85f7e, type: 3} + stencilDeferredPS: {fileID: 4800000, guid: e9155b26e1bc55942a41e518703fe304, type: 3} + fallbackErrorPS: {fileID: 4800000, guid: e6e9a19c3678ded42a3bc431ebef7dbd, type: 3} + fallbackLoadingPS: {fileID: 4800000, guid: 7f888aff2ac86494babad1c2c5daeee2, type: 3} + materialErrorPS: {fileID: 4800000, guid: 5fd9a8feb75a4b5894c241777f519d4e, type: 3} + coreBlitPS: {fileID: 4800000, guid: 93446b5c5339d4f00b85c159e1159b7c, type: 3} + coreBlitColorAndDepthPS: {fileID: 4800000, guid: d104b2fc1ca6445babb8e90b0758136b, + type: 3} + blitHDROverlay: {fileID: 4800000, guid: a89bee29cffa951418fc1e2da94d1959, type: 3} + cameraMotionVector: {fileID: 4800000, guid: c56b7e0d4c7cb484e959caeeedae9bbf, + type: 3} + objectMotionVector: {fileID: 4800000, guid: 7b3ede40266cd49a395def176e1bc486, + type: 3} + dataDrivenLensFlare: {fileID: 4800000, guid: 6cda457ac28612740adb23da5d39ea92, + type: 3} + m_AssetVersion: 2 + m_OpaqueLayerMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_TransparentLayerMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_DefaultStencilState: + overrideStencilState: 0 + stencilReference: 0 + stencilCompareFunction: 8 + passOperation: 2 + failOperation: 0 + zFailOperation: 0 + m_ShadowTransparentReceive: 1 + m_RenderingMode: 0 + m_DepthPrimingMode: 0 + m_CopyDepthMode: 0 + m_AccurateGbufferNormals: 0 + m_IntermediateTextureMode: 1 +--- !u!114 &4111074100381138314 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0ae4d376c05df421b98c5b39b25b0d29, type: 3} + m_Name: ARBackgroundRendererFeature + m_EditorClassIdentifier: + m_Active: 1 diff --git a/example_unity_6000_0_project/Assets/Settings/URP-Performant-Renderer.asset.meta b/example_unity_6000_0_project/Assets/Settings/URP-Performant-Renderer.asset.meta new file mode 100644 index 0000000..912ff60 --- /dev/null +++ b/example_unity_6000_0_project/Assets/Settings/URP-Performant-Renderer.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 707360a9c581a4bd7aa53bfeb1429f71 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/Settings/URP-Performant.asset b/example_unity_6000_0_project/Assets/Settings/URP-Performant.asset new file mode 100644 index 0000000..ca44166 --- /dev/null +++ b/example_unity_6000_0_project/Assets/Settings/URP-Performant.asset @@ -0,0 +1,136 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf2edee5c58d82540a51f03df9d42094, type: 3} + m_Name: URP-Performant + m_EditorClassIdentifier: + k_AssetVersion: 12 + k_AssetPreviousVersion: 12 + m_RendererType: 1 + m_RendererData: {fileID: 0} + m_RendererDataList: + - {fileID: 11400000, guid: 707360a9c581a4bd7aa53bfeb1429f71, type: 2} + m_DefaultRendererIndex: 0 + m_RequireDepthTexture: 0 + m_RequireOpaqueTexture: 0 + m_OpaqueDownsampling: 1 + m_SupportsTerrainHoles: 1 + m_SupportsHDR: 0 + m_HDRColorBufferPrecision: 0 + m_MSAA: 1 + m_RenderScale: 1 + m_UpscalingFilter: 0 + m_FsrOverrideSharpness: 0 + m_FsrSharpness: 0.92 + m_EnableLODCrossFade: 1 + m_LODCrossFadeDitheringType: 1 + m_ShEvalMode: 0 + m_LightProbeSystem: 0 + m_ProbeVolumeMemoryBudget: 1024 + m_ProbeVolumeBlendingMemoryBudget: 256 + m_SupportProbeVolumeGPUStreaming: 0 + m_SupportProbeVolumeDiskStreaming: 0 + m_SupportProbeVolumeScenarios: 0 + m_SupportProbeVolumeScenarioBlending: 0 + m_ProbeVolumeSHBands: 1 + m_MainLightRenderingMode: 1 + m_MainLightShadowsSupported: 0 + m_MainLightShadowmapResolution: 1024 + m_AdditionalLightsRenderingMode: 0 + m_AdditionalLightsPerObjectLimit: 4 + m_AdditionalLightShadowsSupported: 0 + m_AdditionalLightsShadowmapResolution: 512 + m_AdditionalLightsShadowResolutionTierLow: 128 + m_AdditionalLightsShadowResolutionTierMedium: 256 + m_AdditionalLightsShadowResolutionTierHigh: 512 + m_ReflectionProbeBlending: 0 + m_ReflectionProbeBoxProjection: 0 + m_ShadowDistance: 50 + m_ShadowCascadeCount: 1 + m_Cascade2Split: 0.25 + m_Cascade3Split: {x: 0.1, y: 0.3} + m_Cascade4Split: {x: 0.067, y: 0.2, z: 0.467} + m_CascadeBorder: 0.1 + m_ShadowDepthBias: 1 + m_ShadowNormalBias: 1 + m_AnyShadowsSupported: 1 + m_SoftShadowsSupported: 0 + m_ConservativeEnclosingSphere: 0 + m_NumIterationsEnclosingSphere: 64 + m_SoftShadowQuality: 2 + m_AdditionalLightsCookieResolution: 2048 + m_AdditionalLightsCookieFormat: 3 + m_UseSRPBatcher: 1 + m_SupportsDynamicBatching: 0 + m_MixedLightingSupported: 1 + m_SupportsLightCookies: 1 + m_SupportsLightLayers: 0 + m_DebugLevel: 0 + m_StoreActionsOptimization: 0 + m_UseAdaptivePerformance: 1 + m_ColorGradingMode: 0 + m_ColorGradingLutSize: 16 + m_AllowPostProcessAlphaOutput: 0 + m_UseFastSRGBLinearConversion: 0 + m_SupportDataDrivenLensFlare: 1 + m_SupportScreenSpaceLensFlare: 1 + m_GPUResidentDrawerMode: 0 + m_SmallMeshScreenPercentage: 0 + m_GPUResidentDrawerEnableOcclusionCullingInCameras: 0 + m_ShadowType: 1 + m_LocalShadowsSupported: 0 + m_LocalShadowsAtlasResolution: 256 + m_MaxPixelLights: 0 + m_ShadowAtlasResolution: 256 + m_VolumeFrameworkUpdateMode: 0 + m_VolumeProfile: {fileID: 0} + apvScenesData: + obsoleteSceneBounds: + m_Keys: [] + m_Values: [] + obsoleteHasProbeVolumes: + m_Keys: [] + m_Values: + m_PrefilteringModeMainLightShadows: 0 + m_PrefilteringModeAdditionalLight: 0 + m_PrefilteringModeAdditionalLightShadows: 0 + m_PrefilterXRKeywords: 0 + m_PrefilteringModeForwardPlus: 0 + m_PrefilteringModeDeferredRendering: 0 + m_PrefilteringModeScreenSpaceOcclusion: 0 + m_PrefilterDebugKeywords: 1 + m_PrefilterWriteRenderingLayers: 1 + m_PrefilterHDROutput: 1 + m_PrefilterAlphaOutput: 1 + m_PrefilterSSAODepthNormals: 1 + m_PrefilterSSAOSourceDepthLow: 1 + m_PrefilterSSAOSourceDepthMedium: 1 + m_PrefilterSSAOSourceDepthHigh: 1 + m_PrefilterSSAOInterleaved: 1 + m_PrefilterSSAOBlueNoise: 1 + m_PrefilterSSAOSampleCountLow: 1 + m_PrefilterSSAOSampleCountMedium: 1 + m_PrefilterSSAOSampleCountHigh: 1 + m_PrefilterDBufferMRT1: 1 + m_PrefilterDBufferMRT2: 1 + m_PrefilterDBufferMRT3: 1 + m_PrefilterSoftShadowsQualityLow: 1 + m_PrefilterSoftShadowsQualityMedium: 1 + m_PrefilterSoftShadowsQualityHigh: 1 + m_PrefilterSoftShadows: 0 + m_PrefilterScreenCoord: 1 + m_PrefilterNativeRenderPass: 1 + m_PrefilterUseLegacyLightmaps: 0 + m_ShaderVariantLogLevel: 0 + m_ShadowCascades: 0 + m_Textures: + blueNoise64LTex: {fileID: 2800000, guid: e3d24661c1e055f45a7560c033dbb837, type: 3} + bayerMatrixTex: {fileID: 2800000, guid: f9ee4ed84c1d10c49aabb9b210b0fc44, type: 3} diff --git a/example_unity_6000_0_project/Assets/Settings/URP-Performant.asset.meta b/example_unity_6000_0_project/Assets/Settings/URP-Performant.asset.meta new file mode 100644 index 0000000..264c9c5 --- /dev/null +++ b/example_unity_6000_0_project/Assets/Settings/URP-Performant.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d0e2fc18fe036412f8223b3b3d9ad574 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/UniversalRenderPipelineGlobalSettings.asset b/example_unity_6000_0_project/Assets/UniversalRenderPipelineGlobalSettings.asset new file mode 100644 index 0000000..cee1058 --- /dev/null +++ b/example_unity_6000_0_project/Assets/UniversalRenderPipelineGlobalSettings.asset @@ -0,0 +1,342 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2ec995e51a6e251468d2a3fd8a686257, type: 3} + m_Name: UniversalRenderPipelineGlobalSettings + m_EditorClassIdentifier: + m_ShaderStrippingSetting: + m_Version: 0 + m_ExportShaderVariants: 1 + m_ShaderVariantLogLevel: 0 + m_StripRuntimeDebugShaders: 1 + m_URPShaderStrippingSetting: + m_Version: 0 + m_StripUnusedPostProcessingVariants: 1 + m_StripUnusedVariants: 1 + m_StripScreenCoordOverrideVariants: 1 + m_ShaderVariantLogLevel: 0 + m_ExportShaderVariants: 1 + m_StripDebugVariants: 1 + m_StripUnusedPostProcessingVariants: 1 + m_StripUnusedVariants: 1 + m_StripScreenCoordOverrideVariants: 1 + supportRuntimeDebugDisplay: 0 + m_EnableRenderGraph: 0 + m_Settings: + m_SettingsList: + m_List: + - rid: 1650408776259862708 + - rid: 1650408776259862709 + - rid: 1650408776259862710 + - rid: 1650408776259862711 + - rid: 1650408776259862712 + - rid: 1650408776259862713 + - rid: 1650408776259862714 + - rid: 1650408776259862715 + - rid: 1650408776259862716 + - rid: 1650408776259862717 + - rid: 1650408776259862718 + - rid: 1650408776259862719 + - rid: 1650408776259862720 + - rid: 1650408776259862721 + - rid: 1650408776259862722 + - rid: 1650408776259862723 + - rid: 1650408776259862724 + - rid: 1650408776259862725 + - rid: 1650408776259862726 + - rid: 1650408776259862727 + - rid: 1650408776259862728 + m_RuntimeSettings: + m_List: + - rid: 1650408776259862709 + - rid: 1650408776259862711 + - rid: 1650408776259862712 + - rid: 1650408776259862714 + - rid: 1650408776259862716 + - rid: 1650408776259862717 + - rid: 1650408776259862718 + - rid: 1650408776259862722 + - rid: 1650408776259862725 + - rid: 1650408776259862726 + - rid: 1650408776259862728 + m_AssetVersion: 8 + m_ObsoleteDefaultVolumeProfile: {fileID: 0} + m_RenderingLayerNames: + - Light Layer default + - Light Layer 1 + - Light Layer 2 + - Light Layer 3 + - Light Layer 4 + - Light Layer 5 + - Light Layer 6 + - Light Layer 7 + m_ValidRenderingLayers: 255 + lightLayerName0: Light Layer default + lightLayerName1: Light Layer 1 + lightLayerName2: Light Layer 2 + lightLayerName3: Light Layer 3 + lightLayerName4: Light Layer 4 + lightLayerName5: Light Layer 5 + lightLayerName6: Light Layer 6 + lightLayerName7: Light Layer 7 + apvScenesData: + obsoleteSceneBounds: + m_Keys: [] + m_Values: [] + obsoleteHasProbeVolumes: + m_Keys: [] + m_Values: + references: + version: 2 + RefIds: + - rid: 1650408776259862708 + type: {class: UniversalRenderPipelineEditorMaterials, ns: UnityEngine.Rendering.Universal, + asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_DefaultMaterial: {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, + type: 2} + m_DefaultParticleMaterial: {fileID: 2100000, guid: e823cd5b5d27c0f4b8256e7c12ee3e6d, + type: 2} + m_DefaultLineMaterial: {fileID: 2100000, guid: e823cd5b5d27c0f4b8256e7c12ee3e6d, + type: 2} + m_DefaultTerrainMaterial: {fileID: 2100000, guid: 594ea882c5a793440b60ff72d896021e, + type: 2} + m_DefaultDecalMaterial: {fileID: 2100000, guid: 31d0dcc6f2dd4e4408d18036a2c93862, + type: 2} + - rid: 1650408776259862709 + type: {class: UniversalRendererResources, ns: UnityEngine.Rendering.Universal, + asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_Version: 0 + m_CopyDepthPS: {fileID: 4800000, guid: d6dae50ee9e1bfa4db75f19f99355220, type: 3} + m_CameraMotionVector: {fileID: 4800000, guid: c56b7e0d4c7cb484e959caeeedae9bbf, + type: 3} + m_StencilDeferredPS: {fileID: 4800000, guid: e9155b26e1bc55942a41e518703fe304, + type: 3} + m_DBufferClear: {fileID: 4800000, guid: f056d8bd2a1c7e44e9729144b4c70395, + type: 3} + - rid: 1650408776259862710 + type: {class: Renderer2DResources, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_Version: 0 + m_LightShader: {fileID: 4800000, guid: 3f6c848ca3d7bca4bbe846546ac701a1, type: 3} + m_ProjectedShadowShader: {fileID: 4800000, guid: ce09d4a80b88c5a4eb9768fab4f1ee00, + type: 3} + m_SpriteShadowShader: {fileID: 4800000, guid: 44fc62292b65ab04eabcf310e799ccf6, + type: 3} + m_SpriteUnshadowShader: {fileID: 4800000, guid: de02b375720b5c445afe83cd483bedf3, + type: 3} + m_GeometryShadowShader: {fileID: 4800000, guid: 19349a0f9a7ed4c48a27445bcf92e5e1, + type: 3} + m_GeometryUnshadowShader: {fileID: 4800000, guid: 77774d9009bb81447b048c907d4c6273, + type: 3} + m_FallOffLookup: {fileID: 2800000, guid: 5688ab254e4c0634f8d6c8e0792331ca, + type: 3} + m_CopyDepthPS: {fileID: 4800000, guid: d6dae50ee9e1bfa4db75f19f99355220, type: 3} + m_DefaultCustomMaterial: {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, + type: 2} + m_DefaultLitMaterial: {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, + type: 2} + m_DefaultUnlitMaterial: {fileID: 2100000, guid: 9dfc825aed78fcd4ba02077103263b40, + type: 2} + m_DefaultMaskMaterial: {fileID: 2100000, guid: 15d0c3709176029428a0da2f8cecf0b5, + type: 2} + - rid: 1650408776259862711 + type: {class: UniversalRenderPipelineDebugShaders, ns: UnityEngine.Rendering.Universal, + asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_DebugReplacementPS: {fileID: 4800000, guid: cf852408f2e174538bcd9b7fda1c5ae7, + type: 3} + m_HdrDebugViewPS: {fileID: 4800000, guid: 573620ae32aec764abd4d728906d2587, + type: 3} + m_ProbeVolumeSamplingDebugComputeShader: {fileID: 7200000, guid: 53626a513ea68ce47b59dc1299fe3959, + type: 3} + - rid: 1650408776259862712 + type: {class: UniversalRenderPipelineRuntimeXRResources, ns: UnityEngine.Rendering.Universal, + asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_xrOcclusionMeshPS: {fileID: 4800000, guid: 4431b1f1f743fbf4eb310a967890cbea, + type: 3} + m_xrMirrorViewPS: {fileID: 4800000, guid: d5a307c014552314b9f560906d708772, + type: 3} + - rid: 1650408776259862713 + type: {class: URPShaderStrippingSetting, ns: UnityEngine.Rendering.Universal, + asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_Version: 0 + m_StripUnusedPostProcessingVariants: 1 + m_StripUnusedVariants: 1 + m_StripScreenCoordOverrideVariants: 1 + - rid: 1650408776259862714 + type: {class: UniversalRenderPipelineRuntimeShaders, ns: UnityEngine.Rendering.Universal, + asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_Version: 0 + m_FallbackErrorShader: {fileID: 4800000, guid: e6e9a19c3678ded42a3bc431ebef7dbd, + type: 3} + m_BlitHDROverlay: {fileID: 4800000, guid: a89bee29cffa951418fc1e2da94d1959, + type: 3} + m_CoreBlitPS: {fileID: 4800000, guid: 93446b5c5339d4f00b85c159e1159b7c, type: 3} + m_CoreBlitColorAndDepthPS: {fileID: 4800000, guid: d104b2fc1ca6445babb8e90b0758136b, + type: 3} + m_SamplingPS: {fileID: 4800000, guid: 04c410c9937594faa893a11dceb85f7e, type: 3} + - rid: 1650408776259862715 + type: {class: UniversalRenderPipelineEditorShaders, ns: UnityEngine.Rendering.Universal, + asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_AutodeskInteractive: {fileID: 4800000, guid: 0e9d5a909a1f7e84882a534d0d11e49f, + type: 3} + m_AutodeskInteractiveTransparent: {fileID: 4800000, guid: 5c81372d981403744adbdda4433c9c11, + type: 3} + m_AutodeskInteractiveMasked: {fileID: 4800000, guid: 80aa867ac363ac043847b06ad71604cd, + type: 3} + m_TerrainDetailLit: {fileID: 4800000, guid: f6783ab646d374f94b199774402a5144, + type: 3} + m_TerrainDetailGrassBillboard: {fileID: 4800000, guid: 29868e73b638e48ca99a19ea58c48d90, + type: 3} + m_TerrainDetailGrass: {fileID: 4800000, guid: e507fdfead5ca47e8b9a768b51c291a1, + type: 3} + m_DefaultSpeedTree7Shader: {fileID: 4800000, guid: 0f4122b9a743b744abe2fb6a0a88868b, + type: 3} + m_DefaultSpeedTree8Shader: {fileID: -6465566751694194690, guid: 9920c1f1781549a46ba081a2a15a16ec, + type: 3} + m_DefaultSpeedTree9Shader: {fileID: -6465566751694194690, guid: cbd3e1cc4ae141c42a30e33b4d666a61, + type: 3} + - rid: 1650408776259862716 + type: {class: RenderGraphSettings, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_Version: 0 + m_EnableRenderCompatibilityMode: 1 + - rid: 1650408776259862717 + type: {class: UniversalRenderPipelineRuntimeTextures, ns: UnityEngine.Rendering.Universal, + asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_Version: 1 + m_BlueNoise64LTex: {fileID: 2800000, guid: e3d24661c1e055f45a7560c033dbb837, + type: 3} + m_BayerMatrixTex: {fileID: 2800000, guid: f9ee4ed84c1d10c49aabb9b210b0fc44, + type: 3} + m_DebugFontTex: {fileID: 2800000, guid: 26a413214480ef144b2915d6ff4d0beb, + type: 3} + - rid: 1650408776259862718 + type: {class: URPDefaultVolumeProfileSettings, ns: UnityEngine.Rendering.Universal, + asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_Version: 0 + m_VolumeProfile: {fileID: 11400000, guid: 3e9ad90b4ae08f843b46ecf6ee5ae65c, + type: 2} + - rid: 1650408776259862719 + type: {class: GPUResidentDrawerResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.GPUDriven.Runtime} + data: + m_Version: 0 + m_InstanceDataBufferCopyKernels: {fileID: 7200000, guid: f984aeb540ded8b4fbb8a2047ab5b2e2, + type: 3} + m_InstanceDataBufferUploadKernels: {fileID: 7200000, guid: 53864816eb00f2343b60e1a2c5a262ef, + type: 3} + m_TransformUpdaterKernels: {fileID: 7200000, guid: 2a567b9b2733f8d47a700c3c85bed75b, + type: 3} + m_WindDataUpdaterKernels: {fileID: 7200000, guid: fde76746e4fd0ed418c224f6b4084114, + type: 3} + m_OccluderDepthPyramidKernels: {fileID: 7200000, guid: 08b2b5fb307b0d249860612774a987da, + type: 3} + m_InstanceOcclusionCullingKernels: {fileID: 7200000, guid: f6d223acabc2f974795a5a7864b50e6c, + type: 3} + m_OcclusionCullingDebugKernels: {fileID: 7200000, guid: b23e766bcf50ca4438ef186b174557df, + type: 3} + m_DebugOcclusionTestPS: {fileID: 4800000, guid: d3f0849180c2d0944bc71060693df100, + type: 3} + m_DebugOccluderPS: {fileID: 4800000, guid: b3c92426a88625841ab15ca6a7917248, + type: 3} + - rid: 1650408776259862720 + type: {class: ProbeVolumeRuntimeResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_Version: 1 + probeVolumeBlendStatesCS: {fileID: 7200000, guid: a3f7b8c99de28a94684cb1daebeccf5d, + type: 3} + probeVolumeUploadDataCS: {fileID: 7200000, guid: 0951de5992461754fa73650732c4954c, + type: 3} + probeVolumeUploadDataL2CS: {fileID: 7200000, guid: 6196f34ed825db14b81fb3eb0ea8d931, + type: 3} + - rid: 1650408776259862721 + type: {class: ProbeVolumeDebugResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_Version: 1 + probeVolumeDebugShader: {fileID: 4800000, guid: 3b21275fd12d65f49babb5286f040f2d, + type: 3} + probeVolumeFragmentationDebugShader: {fileID: 4800000, guid: 3a80877c579b9144ebdcc6d923bca303, + type: 3} + probeVolumeSamplingDebugShader: {fileID: 4800000, guid: bf54e6528c79a224e96346799064c393, + type: 3} + probeVolumeOffsetDebugShader: {fileID: 4800000, guid: db8bd7436dc2c5f4c92655307d198381, + type: 3} + probeSamplingDebugMesh: {fileID: -3555484719484374845, guid: 20be25aac4e22ee49a7db76fb3df6de2, + type: 3} + numbersDisplayTex: {fileID: 2800000, guid: 73fe53b428c5b3440b7e87ee830b608a, + type: 3} + - rid: 1650408776259862722 + type: {class: RenderGraphUtilsResources, ns: UnityEngine.Rendering.RenderGraphModule.Util, + asm: Unity.RenderPipelines.Core.Runtime} + data: + m_Version: 0 + m_CoreCopyPS: {fileID: 4800000, guid: 12dc59547ea167a4ab435097dd0f9add, type: 3} + - rid: 1650408776259862723 + type: {class: ProbeVolumeGlobalSettings, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_Version: 1 + m_ProbeVolumeDisableStreamingAssets: 0 + - rid: 1650408776259862724 + type: {class: ProbeVolumeBakingResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_Version: 1 + dilationShader: {fileID: 7200000, guid: 6bb382f7de370af41b775f54182e491d, + type: 3} + subdivideSceneCS: {fileID: 7200000, guid: bb86f1f0af829fd45b2ebddda1245c22, + type: 3} + voxelizeSceneShader: {fileID: 4800000, guid: c8b6a681c7b4e2e4785ffab093907f9e, + type: 3} + traceVirtualOffsetCS: {fileID: 7200000, guid: 805f10d263aac4b4098c0279cd37a4f3, + type: 3} + traceVirtualOffsetRT: {fileID: 4807578003741378534, guid: b60511f4aa1443f4d8c0b18f4fec92f4, + type: 3} + skyOcclusionCS: {fileID: 7200000, guid: 798f52ec82fa04048a12826bbbbcf7b4, + type: 3} + skyOcclusionRT: {fileID: 4807578003741378534, guid: dfaf42b38dd001f49a72d8102b709f29, + type: 3} + renderingLayerCS: {fileID: 7200000, guid: a63c9cf933e3d8f41ae680a372784ebf, + type: 3} + renderingLayerRT: {fileID: 4807578003741378534, guid: c2be09c936362eb49a58f08aeb30627a, + type: 3} + - rid: 1650408776259862725 + type: {class: RenderGraphGlobalSettings, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_version: 0 + m_EnableCompilationCaching: 1 + m_EnableValidityChecks: 1 + - rid: 1650408776259862726 + type: {class: ShaderStrippingSetting, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_Version: 0 + m_ExportShaderVariants: 1 + m_ShaderVariantLogLevel: 0 + m_StripRuntimeDebugShaders: 1 + - rid: 1650408776259862727 + type: {class: IncludeAdditionalRPAssets, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_version: 0 + m_IncludeReferencedInScenes: 0 + m_IncludeAssetsByLabel: 0 + m_LabelToInclude: + - rid: 1650408776259862728 + type: {class: STP/RuntimeResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_setupCS: {fileID: 7200000, guid: 33be2e9a5506b2843bdb2bdff9cad5e1, type: 3} + m_preTaaCS: {fileID: 7200000, guid: a679dba8ec4d9ce45884a270b0e22dda, type: 3} + m_taaCS: {fileID: 7200000, guid: 3923900e2b41b5e47bc25bfdcbcdc9e6, type: 3} diff --git a/example_unity_6000_0_project/Assets/UniversalRenderPipelineGlobalSettings.asset.meta b/example_unity_6000_0_project/Assets/UniversalRenderPipelineGlobalSettings.asset.meta new file mode 100644 index 0000000..81b84f2 --- /dev/null +++ b/example_unity_6000_0_project/Assets/UniversalRenderPipelineGlobalSettings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 18dc0cd2c080841dea60987a38ce93fa +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/XR.meta b/example_unity_6000_0_project/Assets/XR.meta new file mode 100644 index 0000000..a61efbf --- /dev/null +++ b/example_unity_6000_0_project/Assets/XR.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bfb9196c96ebf9e4ab10cceb08bd1aea +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/XR/Loaders.meta b/example_unity_6000_0_project/Assets/XR/Loaders.meta new file mode 100644 index 0000000..24d5cce --- /dev/null +++ b/example_unity_6000_0_project/Assets/XR/Loaders.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ae5bc6e6d64e514478988441d24c5b52 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/XR/Loaders/ARCoreLoader.asset b/example_unity_6000_0_project/Assets/XR/Loaders/ARCoreLoader.asset new file mode 100644 index 0000000..f301129 --- /dev/null +++ b/example_unity_6000_0_project/Assets/XR/Loaders/ARCoreLoader.asset @@ -0,0 +1,14 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 06042c85f885b4d1886f3ca5a1074eca, type: 3} + m_Name: ARCoreLoader + m_EditorClassIdentifier: diff --git a/example_unity_6000_0_project/Assets/XR/Loaders/ARCoreLoader.asset.meta b/example_unity_6000_0_project/Assets/XR/Loaders/ARCoreLoader.asset.meta new file mode 100644 index 0000000..13eef72 --- /dev/null +++ b/example_unity_6000_0_project/Assets/XR/Loaders/ARCoreLoader.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 09b81a759ffba5545879e1d8114e907d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/XR/Loaders/ARKitLoader.asset b/example_unity_6000_0_project/Assets/XR/Loaders/ARKitLoader.asset new file mode 100644 index 0000000..ceb249c --- /dev/null +++ b/example_unity_6000_0_project/Assets/XR/Loaders/ARKitLoader.asset @@ -0,0 +1,14 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a18c4d6661b404073b154020b9e2d993, type: 3} + m_Name: ARKitLoader + m_EditorClassIdentifier: diff --git a/example_unity_6000_0_project/Assets/XR/Loaders/ARKitLoader.asset.meta b/example_unity_6000_0_project/Assets/XR/Loaders/ARKitLoader.asset.meta new file mode 100644 index 0000000..9498ee6 --- /dev/null +++ b/example_unity_6000_0_project/Assets/XR/Loaders/ARKitLoader.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e29e31b142fae0c41975239d1fed675f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/XR/Loaders/SimulationLoader.asset b/example_unity_6000_0_project/Assets/XR/Loaders/SimulationLoader.asset new file mode 100644 index 0000000..f560076 --- /dev/null +++ b/example_unity_6000_0_project/Assets/XR/Loaders/SimulationLoader.asset @@ -0,0 +1,14 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: df71837a07684b24082222c253aa156a, type: 3} + m_Name: SimulationLoader + m_EditorClassIdentifier: diff --git a/example_unity_6000_0_project/Assets/XR/Loaders/SimulationLoader.asset.meta b/example_unity_6000_0_project/Assets/XR/Loaders/SimulationLoader.asset.meta new file mode 100644 index 0000000..5343012 --- /dev/null +++ b/example_unity_6000_0_project/Assets/XR/Loaders/SimulationLoader.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a409f60f63fc5924186dc33732d36966 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/XR/Resources.meta b/example_unity_6000_0_project/Assets/XR/Resources.meta new file mode 100644 index 0000000..3c8bd21 --- /dev/null +++ b/example_unity_6000_0_project/Assets/XR/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b422d13156529354d93e7b8f007fd6b4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/XR/Resources/XRSimulationRuntimeSettings.asset b/example_unity_6000_0_project/Assets/XR/Resources/XRSimulationRuntimeSettings.asset new file mode 100644 index 0000000..e85064d --- /dev/null +++ b/example_unity_6000_0_project/Assets/XR/Resources/XRSimulationRuntimeSettings.asset @@ -0,0 +1,60 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e2b12afd4d27418a9cfb2823fe2b9ff3, type: 3} + m_Name: XRSimulationRuntimeSettings + m_EditorClassIdentifier: + m_EnvironmentLayer: 30 + m_EnvironmentScanParams: + m_MinimumRescanTime: 0.1 + m_DeltaCameraDistanceToRescan: 0.025 + m_DeltaCameraAngleToRescan: 4 + m_RaysPerCast: 10 + m_MaximumHitDistance: 12 + m_MinimumHitDistance: 0.05 + m_PlaneFindingParams: + m_MinimumPlaneUpdateTime: 0.13 + m_MinPointsPerSqMeter: 30 + m_MinSideLength: 0.11 + m_InLayerMergeDistance: 0.2 + m_CrossLayerMergeDistance: 0.05 + m_CheckEmptyArea: 0 + m_AllowedEmptyAreaCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_PointUpdateDropoutRate: 0.4 + m_NormalToleranceAngle: 15 + m_VoxelSize: 0.1 + m_TrackedImageDiscoveryParams: + m_TrackingUpdateInterval: 0.09 + m_UseXRay: 1 + m_FlipXRayDirection: 0 diff --git a/example_unity_6000_0_project/Assets/XR/Resources/XRSimulationRuntimeSettings.asset.meta b/example_unity_6000_0_project/Assets/XR/Resources/XRSimulationRuntimeSettings.asset.meta new file mode 100644 index 0000000..bc37ac7 --- /dev/null +++ b/example_unity_6000_0_project/Assets/XR/Resources/XRSimulationRuntimeSettings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1bb45b8eaf32e014881e9b3a3be8feac +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/XR/Settings.meta b/example_unity_6000_0_project/Assets/XR/Settings.meta new file mode 100644 index 0000000..329b3d5 --- /dev/null +++ b/example_unity_6000_0_project/Assets/XR/Settings.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5693edf729123c8409766227fca2c687 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/XR/Settings/ARCoreSettings.asset b/example_unity_6000_0_project/Assets/XR/Settings/ARCoreSettings.asset new file mode 100644 index 0000000..13eb6c1 --- /dev/null +++ b/example_unity_6000_0_project/Assets/XR/Settings/ARCoreSettings.asset @@ -0,0 +1,17 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9dae4501572e1418791be3e3bf1f7faa, type: 3} + m_Name: ARCoreSettings + m_EditorClassIdentifier: + m_Requirement: 1 + m_Depth: 1 + m_IgnoreGradleVersion: 0 diff --git a/example_unity_6000_0_project/Assets/XR/Settings/ARCoreSettings.asset.meta b/example_unity_6000_0_project/Assets/XR/Settings/ARCoreSettings.asset.meta new file mode 100644 index 0000000..9b881f2 --- /dev/null +++ b/example_unity_6000_0_project/Assets/XR/Settings/ARCoreSettings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 814ab6c01ebf3674a989665a56cc192f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/XR/Settings/ARKitSettings.asset b/example_unity_6000_0_project/Assets/XR/Settings/ARKitSettings.asset new file mode 100644 index 0000000..d9bfb4a --- /dev/null +++ b/example_unity_6000_0_project/Assets/XR/Settings/ARKitSettings.asset @@ -0,0 +1,16 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7a3c2811d41034e52a6d6c33ac73a207, type: 3} + m_Name: ARKitSettings + m_EditorClassIdentifier: + m_Requirement: 1 + m_FaceTracking: 0 diff --git a/example_unity_6000_0_project/Assets/XR/Settings/ARKitSettings.asset.meta b/example_unity_6000_0_project/Assets/XR/Settings/ARKitSettings.asset.meta new file mode 100644 index 0000000..3b484a3 --- /dev/null +++ b/example_unity_6000_0_project/Assets/XR/Settings/ARKitSettings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: af33930b30debe2468b7f1d0a834679f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/XR/Settings/XRSimulationSettings.asset b/example_unity_6000_0_project/Assets/XR/Settings/XRSimulationSettings.asset new file mode 100644 index 0000000..e876841 --- /dev/null +++ b/example_unity_6000_0_project/Assets/XR/Settings/XRSimulationSettings.asset @@ -0,0 +1,14 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e0688bbae6cedcd4a871944e38c19ec0, type: 3} + m_Name: XRSimulationSettings + m_EditorClassIdentifier: diff --git a/example_unity_6000_0_project/Assets/XR/Settings/XRSimulationSettings.asset.meta b/example_unity_6000_0_project/Assets/XR/Settings/XRSimulationSettings.asset.meta new file mode 100644 index 0000000..90f5269 --- /dev/null +++ b/example_unity_6000_0_project/Assets/XR/Settings/XRSimulationSettings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 949df4f5018867b40a4a9e6b8dcb054f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/XR/UserSimulationSettings.meta b/example_unity_6000_0_project/Assets/XR/UserSimulationSettings.meta new file mode 100644 index 0000000..37abce2 --- /dev/null +++ b/example_unity_6000_0_project/Assets/XR/UserSimulationSettings.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 84c662f186877a54e854d1b727b6a9c2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/XR/UserSimulationSettings/Resources.meta b/example_unity_6000_0_project/Assets/XR/UserSimulationSettings/Resources.meta new file mode 100644 index 0000000..742576c --- /dev/null +++ b/example_unity_6000_0_project/Assets/XR/UserSimulationSettings/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 958c223d33d27c746ae0de3fbc8ae514 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/XR/UserSimulationSettings/Resources/XRSimulationPreferences.asset b/example_unity_6000_0_project/Assets/XR/UserSimulationSettings/Resources/XRSimulationPreferences.asset new file mode 100644 index 0000000..b002708 --- /dev/null +++ b/example_unity_6000_0_project/Assets/XR/UserSimulationSettings/Resources/XRSimulationPreferences.asset @@ -0,0 +1,29 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b2f528b98f844ed8b6b2d5fdf90b40e6, type: 3} + m_Name: XRSimulationPreferences + m_EditorClassIdentifier: + m_HasInputActionUpgrade: 1 + m_EnvironmentPrefab: {fileID: 7576867131100388943, guid: c7b92c392902f4043a03a64032c02fe1, + type: 3} + m_FallbackEnvironmentPrefab: {fileID: 0} + m_UnlockInputActionReference: {fileID: -6503468053843192148, guid: 1dd796eaee8744b4aa41b3f8bf5df64f, + type: 3} + m_MoveInputActionReference: {fileID: -8435123576461090514, guid: 1dd796eaee8744b4aa41b3f8bf5df64f, + type: 3} + m_LookInputActionReference: {fileID: -2447619311606779944, guid: 1dd796eaee8744b4aa41b3f8bf5df64f, + type: 3} + m_SprintInputActionReference: {fileID: -5750007214975788477, guid: 1dd796eaee8744b4aa41b3f8bf5df64f, + type: 3} + m_LookSpeed: 1 + m_MoveSpeed: 1 + m_MoveSpeedModifier: 3 diff --git a/example_unity_6000_0_project/Assets/XR/UserSimulationSettings/Resources/XRSimulationPreferences.asset.meta b/example_unity_6000_0_project/Assets/XR/UserSimulationSettings/Resources/XRSimulationPreferences.asset.meta new file mode 100644 index 0000000..4e51555 --- /dev/null +++ b/example_unity_6000_0_project/Assets/XR/UserSimulationSettings/Resources/XRSimulationPreferences.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0366433b78d9309458579e179de9e4ca +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/XR/UserSimulationSettings/SimulationEnvironmentAssetsManager.asset b/example_unity_6000_0_project/Assets/XR/UserSimulationSettings/SimulationEnvironmentAssetsManager.asset new file mode 100644 index 0000000..1458a92 --- /dev/null +++ b/example_unity_6000_0_project/Assets/XR/UserSimulationSettings/SimulationEnvironmentAssetsManager.asset @@ -0,0 +1,17 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 378fb4eec0f59ac4c95c0d5b227aa85e, type: 3} + m_Name: SimulationEnvironmentAssetsManager + m_EditorClassIdentifier: + m_EnvironmentPrefabPaths: + - Packages/com.unity.xr.arfoundation/Assets/Prefabs/DefaultSimulationEnvironment.prefab + m_FallbackAtEndOfList: 0 diff --git a/example_unity_6000_0_project/Assets/XR/UserSimulationSettings/SimulationEnvironmentAssetsManager.asset.meta b/example_unity_6000_0_project/Assets/XR/UserSimulationSettings/SimulationEnvironmentAssetsManager.asset.meta new file mode 100644 index 0000000..1268236 --- /dev/null +++ b/example_unity_6000_0_project/Assets/XR/UserSimulationSettings/SimulationEnvironmentAssetsManager.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fb57c82079a3b744087bd104857d91b9 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Assets/XR/XRGeneralSettingsPerBuildTarget.asset b/example_unity_6000_0_project/Assets/XR/XRGeneralSettingsPerBuildTarget.asset new file mode 100644 index 0000000..c9ceff7 --- /dev/null +++ b/example_unity_6000_0_project/Assets/XR/XRGeneralSettingsPerBuildTarget.asset @@ -0,0 +1,111 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-8628359166475515469 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4c3631f5e58749a59194e0cf6baf6d5, type: 3} + m_Name: iPhone Providers + m_EditorClassIdentifier: + m_RequiresSettingsUpdate: 0 + m_AutomaticLoading: 0 + m_AutomaticRunning: 0 + m_Loaders: + - {fileID: 11400000, guid: e29e31b142fae0c41975239d1fed675f, type: 2} +--- !u!114 &-2340785663494227106 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d236b7d11115f2143951f1e14045df39, type: 3} + m_Name: iPhone Settings + m_EditorClassIdentifier: + m_LoaderManagerInstance: {fileID: -8628359166475515469} + m_InitManagerOnStart: 1 +--- !u!114 &-1989131375321214812 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d236b7d11115f2143951f1e14045df39, type: 3} + m_Name: Android Settings + m_EditorClassIdentifier: + m_LoaderManagerInstance: {fileID: -1474862251680273687} + m_InitManagerOnStart: 1 +--- !u!114 &-1474862251680273687 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4c3631f5e58749a59194e0cf6baf6d5, type: 3} + m_Name: Android Providers + m_EditorClassIdentifier: + m_RequiresSettingsUpdate: 0 + m_AutomaticLoading: 0 + m_AutomaticRunning: 0 + m_Loaders: + - {fileID: 11400000, guid: 09b81a759ffba5545879e1d8114e907d, type: 2} +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d2dc886499c26824283350fa532d087d, type: 3} + m_Name: XRGeneralSettingsPerBuildTarget + m_EditorClassIdentifier: + Keys: 070000000400000001000000 + Values: + - {fileID: -1989131375321214812} + - {fileID: -2340785663494227106} + - {fileID: 6856986676087574550} +--- !u!114 &6856986676087574550 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d236b7d11115f2143951f1e14045df39, type: 3} + m_Name: Standalone Settings + m_EditorClassIdentifier: + m_LoaderManagerInstance: {fileID: 6902881863243311110} + m_InitManagerOnStart: 1 +--- !u!114 &6902881863243311110 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4c3631f5e58749a59194e0cf6baf6d5, type: 3} + m_Name: Standalone Providers + m_EditorClassIdentifier: + m_RequiresSettingsUpdate: 0 + m_AutomaticLoading: 0 + m_AutomaticRunning: 0 + m_Loaders: [] diff --git a/example_unity_6000_0_project/Assets/XR/XRGeneralSettingsPerBuildTarget.asset.meta b/example_unity_6000_0_project/Assets/XR/XRGeneralSettingsPerBuildTarget.asset.meta new file mode 100644 index 0000000..c1d9c3a --- /dev/null +++ b/example_unity_6000_0_project/Assets/XR/XRGeneralSettingsPerBuildTarget.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 092a8980423e11b459eada1167b92f7a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/example_unity_6000_0_project/Packages/manifest.json b/example_unity_6000_0_project/Packages/manifest.json new file mode 100644 index 0000000..aa9a44d --- /dev/null +++ b/example_unity_6000_0_project/Packages/manifest.json @@ -0,0 +1,48 @@ +{ + "dependencies": { + "com.unity.collab-proxy": "2.3.1", + "com.unity.ide.rider": "3.0.28", + "com.unity.ide.visualstudio": "2.0.22", + "com.unity.render-pipelines.universal": "17.0.3", + "com.unity.test-framework": "1.4.4", + "com.unity.timeline": "1.8.7", + "com.unity.ugui": "2.0.0", + "com.unity.visualscripting": "1.9.4", + "com.unity.xr.arcore": "6.0.2", + "com.unity.xr.arfoundation": "6.0.2", + "com.unity.xr.arkit": "6.0.2", + "com.unity.xr.management": "4.4.1", + "com.unity.modules.accessibility": "1.0.0", + "com.unity.modules.ai": "1.0.0", + "com.unity.modules.androidjni": "1.0.0", + "com.unity.modules.animation": "1.0.0", + "com.unity.modules.assetbundle": "1.0.0", + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.cloth": "1.0.0", + "com.unity.modules.director": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.particlesystem": "1.0.0", + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.physics2d": "1.0.0", + "com.unity.modules.screencapture": "1.0.0", + "com.unity.modules.terrain": "1.0.0", + "com.unity.modules.terrainphysics": "1.0.0", + "com.unity.modules.tilemap": "1.0.0", + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.uielements": "1.0.0", + "com.unity.modules.umbra": "1.0.0", + "com.unity.modules.unityanalytics": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.unitywebrequestassetbundle": "1.0.0", + "com.unity.modules.unitywebrequestaudio": "1.0.0", + "com.unity.modules.unitywebrequesttexture": "1.0.0", + "com.unity.modules.unitywebrequestwww": "1.0.0", + "com.unity.modules.vehicles": "1.0.0", + "com.unity.modules.video": "1.0.0", + "com.unity.modules.vr": "1.0.0", + "com.unity.modules.wind": "1.0.0", + "com.unity.modules.xr": "1.0.0" + } +} diff --git a/example_unity_6000_0_project/Packages/packages-lock.json b/example_unity_6000_0_project/Packages/packages-lock.json new file mode 100644 index 0000000..06a130e --- /dev/null +++ b/example_unity_6000_0_project/Packages/packages-lock.json @@ -0,0 +1,529 @@ +{ + "dependencies": { + "com.unity.burst": { + "version": "1.8.16", + "depth": 2, + "source": "registry", + "dependencies": { + "com.unity.mathematics": "1.2.1", + "com.unity.modules.jsonserialize": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.collab-proxy": { + "version": "2.3.1", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.collections": { + "version": "2.4.1", + "depth": 2, + "source": "registry", + "dependencies": { + "com.unity.burst": "1.8.13", + "com.unity.nuget.mono-cecil": "1.11.4", + "com.unity.test-framework": "1.4.3", + "com.unity.test-framework.performance": "3.0.3" + }, + "url": "https://packages.unity.com" + }, + "com.unity.editorcoroutines": { + "version": "1.0.0", + "depth": 1, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.ext.nunit": { + "version": "2.0.5", + "depth": 1, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.ide.rider": { + "version": "3.0.28", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.ext.nunit": "1.0.6" + }, + "url": "https://packages.unity.com" + }, + "com.unity.ide.visualstudio": { + "version": "2.0.22", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.test-framework": "1.1.9" + }, + "url": "https://packages.unity.com" + }, + "com.unity.inputsystem": { + "version": "1.8.2", + "depth": 1, + "source": "registry", + "dependencies": { + "com.unity.modules.uielements": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.mathematics": { + "version": "1.3.2", + "depth": 2, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.nuget.mono-cecil": { + "version": "1.11.4", + "depth": 3, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.render-pipelines.core": { + "version": "17.0.3", + "depth": 1, + "source": "builtin", + "dependencies": { + "com.unity.burst": "1.8.14", + "com.unity.mathematics": "1.3.2", + "com.unity.ugui": "2.0.0", + "com.unity.collections": "2.4.1", + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.terrain": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.rendering.light-transport": "1.0.1" + } + }, + "com.unity.render-pipelines.universal": { + "version": "17.0.3", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.render-pipelines.core": "17.0.3", + "com.unity.shadergraph": "17.0.3", + "com.unity.render-pipelines.universal-config": "17.0.3" + } + }, + "com.unity.render-pipelines.universal-config": { + "version": "17.0.3", + "depth": 1, + "source": "builtin", + "dependencies": { + "com.unity.render-pipelines.core": "17.0.3" + } + }, + "com.unity.rendering.light-transport": { + "version": "1.0.1", + "depth": 2, + "source": "builtin", + "dependencies": { + "com.unity.collections": "2.2.0", + "com.unity.mathematics": "1.2.4", + "com.unity.modules.terrain": "1.0.0" + } + }, + "com.unity.searcher": { + "version": "4.9.2", + "depth": 2, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.shadergraph": { + "version": "17.0.3", + "depth": 1, + "source": "builtin", + "dependencies": { + "com.unity.render-pipelines.core": "17.0.3", + "com.unity.searcher": "4.9.2" + } + }, + "com.unity.test-framework": { + "version": "1.4.4", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.ext.nunit": "2.0.3", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.test-framework.performance": { + "version": "3.0.3", + "depth": 3, + "source": "registry", + "dependencies": { + "com.unity.test-framework": "1.1.31", + "com.unity.modules.jsonserialize": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.timeline": { + "version": "1.8.7", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.modules.director": "1.0.0", + "com.unity.modules.animation": "1.0.0", + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.particlesystem": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.ugui": { + "version": "2.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.imgui": "1.0.0" + } + }, + "com.unity.visualscripting": { + "version": "1.9.4", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.ugui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.xr.arcore": { + "version": "6.0.2", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.xr.arfoundation": "6.0.2", + "com.unity.xr.core-utils": "2.2.2", + "com.unity.xr.management": "4.4.0", + "com.unity.modules.androidjni": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.xr.arfoundation": { + "version": "6.0.2", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.editorcoroutines": "1.0.0", + "com.unity.inputsystem": "1.6.3", + "com.unity.xr.core-utils": "2.3.0", + "com.unity.xr.management": "4.4.0", + "com.unity.ugui": "2.0.0", + "com.unity.mathematics": "1.2.6", + "com.unity.modules.particlesystem": "1.0.0", + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.unityanalytics": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.xr.arkit": { + "version": "6.0.2", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.editorcoroutines": "1.0.0", + "com.unity.xr.arfoundation": "6.0.2", + "com.unity.xr.core-utils": "2.2.2", + "com.unity.xr.management": "4.4.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.xr.core-utils": { + "version": "2.3.0", + "depth": 1, + "source": "registry", + "dependencies": { + "com.unity.modules.xr": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.xr.legacyinputhelpers": { + "version": "2.1.10", + "depth": 1, + "source": "registry", + "dependencies": { + "com.unity.modules.vr": "1.0.0", + "com.unity.modules.xr": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.xr.management": { + "version": "4.4.1", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.modules.subsystems": "1.0.0", + "com.unity.modules.vr": "1.0.0", + "com.unity.modules.xr": "1.0.0", + "com.unity.xr.legacyinputhelpers": "2.1.7" + }, + "url": "https://packages.unity.com" + }, + "com.unity.modules.accessibility": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.ai": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.androidjni": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.animation": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.assetbundle": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.audio": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.cloth": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0" + } + }, + "com.unity.modules.director": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.animation": "1.0.0" + } + }, + "com.unity.modules.hierarchycore": { + "version": "1.0.0", + "depth": 1, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.imageconversion": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.imgui": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.jsonserialize": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.particlesystem": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.physics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.physics2d": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.screencapture": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.imageconversion": "1.0.0" + } + }, + "com.unity.modules.subsystems": { + "version": "1.0.0", + "depth": 1, + "source": "builtin", + "dependencies": { + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.modules.terrain": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.terrainphysics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.terrain": "1.0.0" + } + }, + "com.unity.modules.tilemap": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics2d": "1.0.0" + } + }, + "com.unity.modules.ui": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.uielements": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.hierarchycore": "1.0.0" + } + }, + "com.unity.modules.umbra": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.unityanalytics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.modules.unitywebrequest": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.unitywebrequestassetbundle": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.assetbundle": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0" + } + }, + "com.unity.modules.unitywebrequestaudio": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.audio": "1.0.0" + } + }, + "com.unity.modules.unitywebrequesttexture": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0" + } + }, + "com.unity.modules.unitywebrequestwww": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.unitywebrequestassetbundle": "1.0.0", + "com.unity.modules.unitywebrequestaudio": "1.0.0", + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.assetbundle": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0" + } + }, + "com.unity.modules.vehicles": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0" + } + }, + "com.unity.modules.video": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0" + } + }, + "com.unity.modules.vr": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.xr": "1.0.0" + } + }, + "com.unity.modules.wind": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.xr": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.subsystems": "1.0.0" + } + } + } +} diff --git a/example_unity_6000_0_project/ProjectSettings/AudioManager.asset b/example_unity_6000_0_project/ProjectSettings/AudioManager.asset new file mode 100644 index 0000000..27287fe --- /dev/null +++ b/example_unity_6000_0_project/ProjectSettings/AudioManager.asset @@ -0,0 +1,19 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!11 &1 +AudioManager: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Volume: 1 + Rolloff Scale: 1 + Doppler Factor: 1 + Default Speaker Mode: 2 + m_SampleRate: 0 + m_DSPBufferSize: 1024 + m_VirtualVoiceCount: 512 + m_RealVoiceCount: 32 + m_SpatializerPlugin: + m_AmbisonicDecoderPlugin: + m_DisableAudio: 0 + m_VirtualizeEffects: 1 + m_RequestedDSPBufferSize: 0 diff --git a/example_unity_6000_0_project/ProjectSettings/BurstAotSettings_Android.json b/example_unity_6000_0_project/ProjectSettings/BurstAotSettings_Android.json new file mode 100644 index 0000000..ce2d8aa --- /dev/null +++ b/example_unity_6000_0_project/ProjectSettings/BurstAotSettings_Android.json @@ -0,0 +1,17 @@ +{ + "MonoBehaviour": { + "Version": 4, + "EnableBurstCompilation": true, + "EnableOptimisations": true, + "EnableSafetyChecks": false, + "EnableDebugInAllBuilds": false, + "DebugDataKind": 1, + "EnableArmv9SecurityFeatures": false, + "CpuMinTargetX32": 0, + "CpuMaxTargetX32": 0, + "CpuMinTargetX64": 0, + "CpuMaxTargetX64": 0, + "CpuTargetsArm64": 512, + "OptimizeFor": 0 + } +} diff --git a/example_unity_6000_0_project/ProjectSettings/BurstAotSettings_StandaloneWindows.json b/example_unity_6000_0_project/ProjectSettings/BurstAotSettings_StandaloneWindows.json new file mode 100644 index 0000000..2144f6d --- /dev/null +++ b/example_unity_6000_0_project/ProjectSettings/BurstAotSettings_StandaloneWindows.json @@ -0,0 +1,16 @@ +{ + "MonoBehaviour": { + "Version": 3, + "EnableBurstCompilation": true, + "EnableOptimisations": true, + "EnableSafetyChecks": false, + "EnableDebugInAllBuilds": false, + "UsePlatformSDKLinker": false, + "CpuMinTargetX32": 0, + "CpuMaxTargetX32": 0, + "CpuMinTargetX64": 0, + "CpuMaxTargetX64": 0, + "CpuTargetsX32": 6, + "CpuTargetsX64": 72 + } +} diff --git a/example_unity_6000_0_project/ProjectSettings/BurstAotSettings_iOS.json b/example_unity_6000_0_project/ProjectSettings/BurstAotSettings_iOS.json new file mode 100644 index 0000000..eed54c3 --- /dev/null +++ b/example_unity_6000_0_project/ProjectSettings/BurstAotSettings_iOS.json @@ -0,0 +1,16 @@ +{ + "MonoBehaviour": { + "Version": 4, + "EnableBurstCompilation": true, + "EnableOptimisations": true, + "EnableSafetyChecks": false, + "EnableDebugInAllBuilds": false, + "DebugDataKind": 1, + "EnableArmv9SecurityFeatures": false, + "CpuMinTargetX32": 0, + "CpuMaxTargetX32": 0, + "CpuMinTargetX64": 0, + "CpuMaxTargetX64": 0, + "OptimizeFor": 0 + } +} diff --git a/example_unity_6000_0_project/ProjectSettings/ClusterInputManager.asset b/example_unity_6000_0_project/ProjectSettings/ClusterInputManager.asset new file mode 100644 index 0000000..e7886b2 --- /dev/null +++ b/example_unity_6000_0_project/ProjectSettings/ClusterInputManager.asset @@ -0,0 +1,6 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!236 &1 +ClusterInputManager: + m_ObjectHideFlags: 0 + m_Inputs: [] diff --git a/example_unity_6000_0_project/ProjectSettings/CommonBurstAotSettings.json b/example_unity_6000_0_project/ProjectSettings/CommonBurstAotSettings.json new file mode 100644 index 0000000..0293daf --- /dev/null +++ b/example_unity_6000_0_project/ProjectSettings/CommonBurstAotSettings.json @@ -0,0 +1,6 @@ +{ + "MonoBehaviour": { + "Version": 4, + "DisabledWarnings": "" + } +} diff --git a/example_unity_6000_0_project/ProjectSettings/DynamicsManager.asset b/example_unity_6000_0_project/ProjectSettings/DynamicsManager.asset new file mode 100644 index 0000000..1596c42 --- /dev/null +++ b/example_unity_6000_0_project/ProjectSettings/DynamicsManager.asset @@ -0,0 +1,36 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!55 &1 +PhysicsManager: + m_ObjectHideFlags: 0 + serializedVersion: 13 + m_Gravity: {x: 0, y: -9.81, z: 0} + m_DefaultMaterial: {fileID: 0} + m_BounceThreshold: 2 + m_SleepThreshold: 0.005 + m_DefaultContactOffset: 0.01 + m_DefaultSolverIterations: 6 + m_DefaultSolverVelocityIterations: 1 + m_QueriesHitBackfaces: 0 + m_QueriesHitTriggers: 1 + m_EnableAdaptiveForce: 0 + m_ClothInterCollisionDistance: 0.1 + m_ClothInterCollisionStiffness: 0.2 + m_ContactsGeneration: 1 + m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + m_AutoSimulation: 1 + m_AutoSyncTransforms: 0 + m_ReuseCollisionCallbacks: 0 + m_ClothInterCollisionSettingsToggle: 0 + m_ClothGravity: {x: 0, y: -9.81, z: 0} + m_ContactPairsMode: 0 + m_BroadphaseType: 0 + m_WorldBounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 250, y: 250, z: 250} + m_WorldSubdivisions: 8 + m_FrictionType: 0 + m_EnableEnhancedDeterminism: 0 + m_EnableUnifiedHeightmaps: 1 + m_SolverType: 0 + m_DefaultMaxAngularSpeed: 50 diff --git a/example_unity_6000_0_project/ProjectSettings/EditorBuildSettings.asset b/example_unity_6000_0_project/ProjectSettings/EditorBuildSettings.asset new file mode 100644 index 0000000..086fdc1 --- /dev/null +++ b/example_unity_6000_0_project/ProjectSettings/EditorBuildSettings.asset @@ -0,0 +1,22 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1045 &1 +EditorBuildSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Scenes: + - enabled: 1 + path: Assets/Example/Scenes/FlutterEmbedExampleScene.unity + guid: 99c9720ab356a0642a771bea13969a05 + - enabled: 1 + path: Assets/Example/Scenes/FlutterEmbedExampleSceneAR.unity + guid: c39b9dfab960f5f48bef5c5cb5ecc4b6 + m_configObjects: + UnityEditor.XR.ARCore.ARCoreSettings: {fileID: 11400000, guid: 814ab6c01ebf3674a989665a56cc192f, + type: 2} + UnityEditor.XR.ARKit.ARKitSettings: {fileID: 11400000, guid: af33930b30debe2468b7f1d0a834679f, + type: 2} + com.unity.xr.arfoundation.simulation_settings: {fileID: 11400000, guid: 949df4f5018867b40a4a9e6b8dcb054f, + type: 2} + com.unity.xr.management.loader_settings: {fileID: 11400000, guid: 092a8980423e11b459eada1167b92f7a, + type: 2} diff --git a/example_unity_6000_0_project/ProjectSettings/EditorSettings.asset b/example_unity_6000_0_project/ProjectSettings/EditorSettings.asset new file mode 100644 index 0000000..c8da44e --- /dev/null +++ b/example_unity_6000_0_project/ProjectSettings/EditorSettings.asset @@ -0,0 +1,35 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!159 &1 +EditorSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_ExternalVersionControlSupport: Visible Meta Files + m_SerializationMode: 2 + m_LineEndingsForNewScripts: 2 + m_DefaultBehaviorMode: 0 + m_PrefabRegularEnvironment: {fileID: 0} + m_PrefabUIEnvironment: {fileID: 0} + m_SpritePackerMode: 0 + m_SpritePackerPaddingPower: 1 + m_EtcTextureCompressorBehavior: 1 + m_EtcTextureFastCompressor: 1 + m_EtcTextureNormalCompressor: 2 + m_EtcTextureBestCompressor: 4 + m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef;asmref;rsp + m_ProjectGenerationRootNamespace: + m_CollabEditorSettings: + inProgressEnabled: 1 + m_EnableTextureStreamingInEditMode: 1 + m_EnableTextureStreamingInPlayMode: 1 + m_AsyncShaderCompilation: 1 + m_EnterPlayModeOptionsEnabled: 0 + m_EnterPlayModeOptions: 3 + m_ShowLightmapResolutionOverlay: 1 + m_UseLegacyProbeSampleCount: 0 + m_AssetPipelineMode: 1 + m_CacheServerMode: 0 + m_CacheServerEndpoint: + m_CacheServerNamespacePrefix: default + m_CacheServerEnableDownload: 1 + m_CacheServerEnableUpload: 1 diff --git a/example_unity_6000_0_project/ProjectSettings/GraphicsSettings.asset b/example_unity_6000_0_project/ProjectSettings/GraphicsSettings.asset new file mode 100644 index 0000000..49ee382 --- /dev/null +++ b/example_unity_6000_0_project/ProjectSettings/GraphicsSettings.asset @@ -0,0 +1,70 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!30 &1 +GraphicsSettings: + m_ObjectHideFlags: 0 + serializedVersion: 16 + m_Deferred: + m_Mode: 1 + m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} + m_DeferredReflections: + m_Mode: 1 + m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0} + m_ScreenSpaceShadows: + m_Mode: 1 + m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0} + m_DepthNormals: + m_Mode: 1 + m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0} + m_MotionVectors: + m_Mode: 1 + m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0} + m_LightHalo: + m_Mode: 1 + m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0} + m_LensFlare: + m_Mode: 1 + m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0} + m_VideoShadersIncludeMode: 2 + m_AlwaysIncludedShaders: + - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10783, guid: 0000000000000000f000000000000000, type: 0} + m_PreloadedShaders: [] + m_PreloadShadersBatchTimeLimit: -1 + m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, + type: 0} + m_CustomRenderPipeline: {fileID: 11400000, guid: 7b7fd9122c28c4d15b667c7040e3b3fd, + type: 2} + m_TransparencySortMode: 0 + m_TransparencySortAxis: {x: 0, y: 0, z: 1} + m_DefaultRenderingPath: 1 + m_DefaultMobileRenderingPath: 1 + m_TierSettings: [] + m_LightmapStripping: 0 + m_FogStripping: 0 + m_InstancingStripping: 0 + m_BrgStripping: 0 + m_LightmapKeepPlain: 1 + m_LightmapKeepDirCombined: 1 + m_LightmapKeepDynamicPlain: 1 + m_LightmapKeepDynamicDirCombined: 1 + m_LightmapKeepShadowMask: 1 + m_LightmapKeepSubtractive: 1 + m_FogKeepLinear: 1 + m_FogKeepExp: 1 + m_FogKeepExp2: 1 + m_AlbedoSwatchInfos: [] + m_RenderPipelineGlobalSettingsMap: + UnityEngine.Rendering.Universal.UniversalRenderPipeline: {fileID: 11400000, guid: 18dc0cd2c080841dea60987a38ce93fa, + type: 2} + m_LightsUseLinearIntensity: 1 + m_LightsUseColorTemperature: 1 + m_LogWhenShaderIsCompiled: 0 + m_LightProbeOutsideHullStrategy: 0 + m_CameraRelativeLightCulling: 0 + m_CameraRelativeShadowCulling: 0 diff --git a/example_unity_6000_0_project/ProjectSettings/InputManager.asset b/example_unity_6000_0_project/ProjectSettings/InputManager.asset new file mode 100644 index 0000000..b16147e --- /dev/null +++ b/example_unity_6000_0_project/ProjectSettings/InputManager.asset @@ -0,0 +1,487 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!13 &1 +InputManager: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Axes: + - serializedVersion: 3 + m_Name: Horizontal + descriptiveName: + descriptiveNegativeName: + negativeButton: left + positiveButton: right + altNegativeButton: a + altPositiveButton: d + gravity: 3 + dead: 0.001 + sensitivity: 3 + snap: 1 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Vertical + descriptiveName: + descriptiveNegativeName: + negativeButton: down + positiveButton: up + altNegativeButton: s + altPositiveButton: w + gravity: 3 + dead: 0.001 + sensitivity: 3 + snap: 1 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire1 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left ctrl + altNegativeButton: + altPositiveButton: mouse 0 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire2 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left alt + altNegativeButton: + altPositiveButton: mouse 1 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire3 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left shift + altNegativeButton: + altPositiveButton: mouse 2 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Jump + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: space + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse X + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse Y + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 1 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse ScrollWheel + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 2 + joyNum: 0 + - serializedVersion: 3 + m_Name: Horizontal + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0.19 + sensitivity: 1 + snap: 0 + invert: 0 + type: 2 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Vertical + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0.19 + sensitivity: 1 + snap: 0 + invert: 1 + type: 2 + axis: 1 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire1 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 0 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire2 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 1 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire3 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 2 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Jump + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 3 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Submit + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: return + altNegativeButton: + altPositiveButton: joystick button 0 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Submit + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: enter + altNegativeButton: + altPositiveButton: space + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Cancel + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: escape + altNegativeButton: + altPositiveButton: joystick button 1 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Enable Debug Button 1 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left ctrl + altNegativeButton: + altPositiveButton: joystick button 8 + gravity: 0 + dead: 0 + sensitivity: 0 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Enable Debug Button 2 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: backspace + altNegativeButton: + altPositiveButton: joystick button 9 + gravity: 0 + dead: 0 + sensitivity: 0 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Debug Reset + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left alt + altNegativeButton: + altPositiveButton: joystick button 1 + gravity: 0 + dead: 0 + sensitivity: 0 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Debug Next + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: page down + altNegativeButton: + altPositiveButton: joystick button 5 + gravity: 0 + dead: 0 + sensitivity: 0 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Debug Previous + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: page up + altNegativeButton: + altPositiveButton: joystick button 4 + gravity: 0 + dead: 0 + sensitivity: 0 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Debug Validate + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: return + altNegativeButton: + altPositiveButton: joystick button 0 + gravity: 0 + dead: 0 + sensitivity: 0 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Debug Persistent + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: right shift + altNegativeButton: + altPositiveButton: joystick button 2 + gravity: 0 + dead: 0 + sensitivity: 0 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Debug Multiplier + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left shift + altNegativeButton: + altPositiveButton: joystick button 3 + gravity: 0 + dead: 0 + sensitivity: 0 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Debug Horizontal + descriptiveName: + descriptiveNegativeName: + negativeButton: left + positiveButton: right + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Debug Vertical + descriptiveName: + descriptiveNegativeName: + negativeButton: down + positiveButton: up + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Debug Vertical + descriptiveName: + descriptiveNegativeName: + negativeButton: down + positiveButton: up + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 2 + axis: 6 + joyNum: 0 + - serializedVersion: 3 + m_Name: Debug Horizontal + descriptiveName: + descriptiveNegativeName: + negativeButton: left + positiveButton: right + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 2 + axis: 5 + joyNum: 0 diff --git a/example_unity_6000_0_project/ProjectSettings/MemorySettings.asset b/example_unity_6000_0_project/ProjectSettings/MemorySettings.asset new file mode 100644 index 0000000..5b5face --- /dev/null +++ b/example_unity_6000_0_project/ProjectSettings/MemorySettings.asset @@ -0,0 +1,35 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!387306366 &1 +MemorySettings: + m_ObjectHideFlags: 0 + m_EditorMemorySettings: + m_MainAllocatorBlockSize: -1 + m_ThreadAllocatorBlockSize: -1 + m_MainGfxBlockSize: -1 + m_ThreadGfxBlockSize: -1 + m_CacheBlockSize: -1 + m_TypetreeBlockSize: -1 + m_ProfilerBlockSize: -1 + m_ProfilerEditorBlockSize: -1 + m_BucketAllocatorGranularity: -1 + m_BucketAllocatorBucketsCount: -1 + m_BucketAllocatorBlockSize: -1 + m_BucketAllocatorBlockCount: -1 + m_ProfilerBucketAllocatorGranularity: -1 + m_ProfilerBucketAllocatorBucketsCount: -1 + m_ProfilerBucketAllocatorBlockSize: -1 + m_ProfilerBucketAllocatorBlockCount: -1 + m_TempAllocatorSizeMain: -1 + m_JobTempAllocatorBlockSize: -1 + m_BackgroundJobTempAllocatorBlockSize: -1 + m_JobTempAllocatorReducedBlockSize: -1 + m_TempAllocatorSizeGIBakingWorker: -1 + m_TempAllocatorSizeNavMeshWorker: -1 + m_TempAllocatorSizeAudioWorker: -1 + m_TempAllocatorSizeCloudWorker: -1 + m_TempAllocatorSizeGfx: -1 + m_TempAllocatorSizeJobWorker: -1 + m_TempAllocatorSizeBackgroundWorker: -1 + m_TempAllocatorSizePreloadManager: -1 + m_PlatformMemorySettings: {} diff --git a/example_unity_6000_0_project/ProjectSettings/MultiplayerManager.asset b/example_unity_6000_0_project/ProjectSettings/MultiplayerManager.asset new file mode 100644 index 0000000..2a93664 --- /dev/null +++ b/example_unity_6000_0_project/ProjectSettings/MultiplayerManager.asset @@ -0,0 +1,7 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!655991488 &1 +MultiplayerManager: + m_ObjectHideFlags: 0 + m_EnableMultiplayerRoles: 0 + m_StrippingTypes: {} diff --git a/example_unity_6000_0_project/ProjectSettings/NavMeshAreas.asset b/example_unity_6000_0_project/ProjectSettings/NavMeshAreas.asset new file mode 100644 index 0000000..3b0b7c3 --- /dev/null +++ b/example_unity_6000_0_project/ProjectSettings/NavMeshAreas.asset @@ -0,0 +1,91 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!126 &1 +NavMeshProjectSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + areas: + - name: Walkable + cost: 1 + - name: Not Walkable + cost: 1 + - name: Jump + cost: 2 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + m_LastAgentTypeID: -887442657 + m_Settings: + - serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.75 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_SettingNames: + - Humanoid diff --git a/example_unity_6000_0_project/ProjectSettings/PackageManagerSettings.asset b/example_unity_6000_0_project/ProjectSettings/PackageManagerSettings.asset new file mode 100644 index 0000000..be4a797 --- /dev/null +++ b/example_unity_6000_0_project/ProjectSettings/PackageManagerSettings.asset @@ -0,0 +1,43 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &1 +MonoBehaviour: + m_ObjectHideFlags: 61 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 13964, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_EnablePreviewPackages: 0 + m_EnablePackageDependencies: 0 + m_AdvancedSettingsExpanded: 1 + m_ScopedRegistriesSettingsExpanded: 1 + oneTimeWarningShown: 0 + m_Registries: + - m_Id: main + m_Name: + m_Url: https://packages.unity.com + m_Scopes: [] + m_IsDefault: 1 + m_Capabilities: 7 + m_UserSelectedRegistryName: + m_UserAddingNewScopedRegistry: 0 + m_RegistryInfoDraft: + m_ErrorMessage: + m_Original: + m_Id: + m_Name: + m_Url: + m_Scopes: [] + m_IsDefault: 0 + m_Capabilities: 0 + m_Modified: 0 + m_Name: + m_Url: + m_Scopes: + - + m_SelectedScopeIndex: 0 diff --git a/example_unity_6000_0_project/ProjectSettings/Physics2DSettings.asset b/example_unity_6000_0_project/ProjectSettings/Physics2DSettings.asset new file mode 100644 index 0000000..6c5cf8a --- /dev/null +++ b/example_unity_6000_0_project/ProjectSettings/Physics2DSettings.asset @@ -0,0 +1,56 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!19 &1 +Physics2DSettings: + m_ObjectHideFlags: 0 + serializedVersion: 4 + m_Gravity: {x: 0, y: -9.81} + m_DefaultMaterial: {fileID: 0} + m_VelocityIterations: 8 + m_PositionIterations: 3 + m_VelocityThreshold: 1 + m_MaxLinearCorrection: 0.2 + m_MaxAngularCorrection: 8 + m_MaxTranslationSpeed: 100 + m_MaxRotationSpeed: 360 + m_BaumgarteScale: 0.2 + m_BaumgarteTimeOfImpactScale: 0.75 + m_TimeToSleep: 0.5 + m_LinearSleepTolerance: 0.01 + m_AngularSleepTolerance: 2 + m_DefaultContactOffset: 0.01 + m_JobOptions: + serializedVersion: 2 + useMultithreading: 0 + useConsistencySorting: 0 + m_InterpolationPosesPerJob: 100 + m_NewContactsPerJob: 30 + m_CollideContactsPerJob: 100 + m_ClearFlagsPerJob: 200 + m_ClearBodyForcesPerJob: 200 + m_SyncDiscreteFixturesPerJob: 50 + m_SyncContinuousFixturesPerJob: 50 + m_FindNearestContactsPerJob: 100 + m_UpdateTriggerContactsPerJob: 100 + m_IslandSolverCostThreshold: 100 + m_IslandSolverBodyCostScale: 1 + m_IslandSolverContactCostScale: 10 + m_IslandSolverJointCostScale: 10 + m_IslandSolverBodiesPerJob: 50 + m_IslandSolverContactsPerJob: 50 + m_AutoSimulation: 1 + m_QueriesHitTriggers: 1 + m_QueriesStartInColliders: 1 + m_CallbacksOnDisable: 1 + m_ReuseCollisionCallbacks: 0 + m_AutoSyncTransforms: 0 + m_AlwaysShowColliders: 0 + m_ShowColliderSleep: 1 + m_ShowColliderContacts: 0 + m_ShowColliderAABB: 0 + m_ContactArrowScale: 0.2 + m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412} + m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432} + m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745} + m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804} + m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff diff --git a/example_unity_6000_0_project/ProjectSettings/PresetManager.asset b/example_unity_6000_0_project/ProjectSettings/PresetManager.asset new file mode 100644 index 0000000..67a94da --- /dev/null +++ b/example_unity_6000_0_project/ProjectSettings/PresetManager.asset @@ -0,0 +1,7 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1386491679 &1 +PresetManager: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_DefaultPresets: {} diff --git a/example_unity_6000_0_project/ProjectSettings/ProjectSettings.asset b/example_unity_6000_0_project/ProjectSettings/ProjectSettings.asset new file mode 100644 index 0000000..27e2d03 --- /dev/null +++ b/example_unity_6000_0_project/ProjectSettings/ProjectSettings.asset @@ -0,0 +1,949 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!129 &1 +PlayerSettings: + m_ObjectHideFlags: 0 + serializedVersion: 28 + productGUID: 1e6e3da5ff17ca941a66643c3affdf53 + AndroidProfiler: 0 + AndroidFilterTouchesWhenObscured: 0 + AndroidEnableSustainedPerformanceMode: 0 + defaultScreenOrientation: 4 + targetDevice: 2 + useOnDemandResources: 0 + accelerometerFrequency: 60 + companyName: DefaultCompany + productName: FlutterEmbedUnityExample + defaultCursor: {fileID: 0} + cursorHotspot: {x: 0, y: 0} + m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} + m_ShowUnitySplashScreen: 1 + m_ShowUnitySplashLogo: 1 + m_SplashScreenOverlayOpacity: 1 + m_SplashScreenAnimation: 1 + m_SplashScreenLogoStyle: 1 + m_SplashScreenDrawMode: 0 + m_SplashScreenBackgroundAnimationZoom: 1 + m_SplashScreenLogoAnimationZoom: 1 + m_SplashScreenBackgroundLandscapeAspect: 1 + m_SplashScreenBackgroundPortraitAspect: 1 + m_SplashScreenBackgroundLandscapeUvs: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + m_SplashScreenBackgroundPortraitUvs: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + m_SplashScreenLogos: [] + m_VirtualRealitySplashScreen: {fileID: 0} + m_HolographicTrackingLossScreen: {fileID: 0} + defaultScreenWidth: 1024 + defaultScreenHeight: 768 + defaultScreenWidthWeb: 960 + defaultScreenHeightWeb: 600 + m_StereoRenderingPath: 0 + m_ActiveColorSpace: 1 + unsupportedMSAAFallback: 0 + m_SpriteBatchVertexThreshold: 300 + m_MTRendering: 1 + mipStripping: 0 + numberOfMipsStripped: 0 + numberOfMipsStrippedPerMipmapLimitGroup: {} + m_StackTraceTypes: 010000000100000001000000010000000100000001000000 + iosShowActivityIndicatorOnLoading: -1 + androidShowActivityIndicatorOnLoading: -1 + iosUseCustomAppBackgroundBehavior: 0 + allowedAutorotateToPortrait: 1 + allowedAutorotateToPortraitUpsideDown: 1 + allowedAutorotateToLandscapeRight: 1 + allowedAutorotateToLandscapeLeft: 1 + useOSAutorotation: 1 + use32BitDisplayBuffer: 1 + preserveFramebufferAlpha: 0 + disableDepthAndStencilBuffers: 0 + androidStartInFullscreen: 0 + androidRenderOutsideSafeArea: 1 + androidUseSwappy: 0 + androidBlitType: 0 + androidResizeableActivity: 1 + androidDefaultWindowWidth: 1920 + androidDefaultWindowHeight: 1080 + androidMinimumWindowWidth: 400 + androidMinimumWindowHeight: 300 + androidFullscreenMode: 1 + androidAutoRotationBehavior: 1 + androidPredictiveBackSupport: 0 + androidApplicationEntry: 1 + defaultIsNativeResolution: 1 + macRetinaSupport: 1 + runInBackground: 0 + captureSingleScreen: 0 + muteOtherAudioSources: 0 + Prepare IOS For Recording: 0 + Force IOS Speakers When Recording: 0 + deferSystemGesturesMode: 0 + hideHomeButton: 0 + submitAnalytics: 1 + usePlayerLog: 1 + dedicatedServerOptimizations: 0 + bakeCollisionMeshes: 0 + forceSingleInstance: 0 + useFlipModelSwapchain: 1 + resizableWindow: 0 + useMacAppStoreValidation: 0 + macAppStoreCategory: public.app-category.games + gpuSkinning: 1 + meshDeformation: 2 + xboxPIXTextureCapture: 0 + xboxEnableAvatar: 0 + xboxEnableKinect: 0 + xboxEnableKinectAutoTracking: 0 + xboxEnableFitness: 0 + visibleInBackground: 1 + allowFullscreenSwitch: 1 + fullscreenMode: 1 + xboxSpeechDB: 0 + xboxEnableHeadOrientation: 0 + xboxEnableGuest: 0 + xboxEnablePIXSampling: 0 + metalFramebufferOnly: 0 + xboxOneResolution: 0 + xboxOneSResolution: 0 + xboxOneXResolution: 3 + xboxOneMonoLoggingLevel: 0 + xboxOneLoggingLevel: 1 + xboxOneDisableEsram: 0 + xboxOneEnableTypeOptimization: 0 + xboxOnePresentImmediateThreshold: 0 + switchQueueCommandMemory: 1048576 + switchQueueControlMemory: 16384 + switchQueueComputeMemory: 262144 + switchNVNShaderPoolsGranularity: 33554432 + switchNVNDefaultPoolsGranularity: 16777216 + switchNVNOtherPoolsGranularity: 16777216 + switchGpuScratchPoolGranularity: 2097152 + switchAllowGpuScratchShrinking: 0 + switchNVNMaxPublicTextureIDCount: 0 + switchNVNMaxPublicSamplerIDCount: 0 + switchMaxWorkerMultiple: 8 + switchNVNGraphicsFirmwareMemory: 32 + vulkanNumSwapchainBuffers: 3 + vulkanEnableSetSRGBWrite: 0 + vulkanEnablePreTransform: 1 + vulkanEnableLateAcquireNextImage: 0 + vulkanEnableCommandBufferRecycling: 1 + loadStoreDebugModeEnabled: 0 + visionOSBundleVersion: 1.0 + tvOSBundleVersion: 1.0 + bundleVersion: 0.1.0 + preloadedAssets: [] + metroInputSource: 0 + wsaTransparentSwapchain: 0 + m_HolographicPauseOnTrackingLoss: 1 + xboxOneDisableKinectGpuReservation: 1 + xboxOneEnable7thCore: 1 + vrSettings: + enable360StereoCapture: 0 + isWsaHolographicRemotingEnabled: 0 + enableFrameTimingStats: 0 + enableOpenGLProfilerGPURecorders: 1 + allowHDRDisplaySupport: 0 + useHDRDisplay: 0 + hdrBitDepth: 0 + m_ColorGamuts: 00000000 + targetPixelDensity: 30 + resolutionScalingMode: 0 + resetResolutionOnWindowResize: 1 + androidSupportedAspectRatio: 1 + androidMaxAspectRatio: 2.1 + androidMinAspectRatio: 1 + applicationIdentifier: + Android: com.UnityTechnologies.com.unity.template.urpblank + Standalone: com.Unity-Technologies.com.unity.template.urp-blank + iPhone: com.Unity-Technologies.com.unity.template.urp-blank + buildNumber: + Standalone: 0 + VisionOS: 0 + iPhone: 0 + tvOS: 0 + overrideDefaultApplicationIdentifier: 1 + AndroidBundleVersionCode: 1 + AndroidMinSdkVersion: 23 + AndroidTargetSdkVersion: 34 + AndroidPreferredInstallLocation: 1 + aotOptions: + stripEngineCode: 1 + iPhoneStrippingLevel: 0 + iPhoneScriptCallOptimization: 0 + ForceInternetPermission: 0 + ForceSDCardPermission: 0 + CreateWallpaper: 0 + androidSplitApplicationBinary: 0 + keepLoadedShadersAlive: 0 + StripUnusedMeshComponents: 0 + strictShaderVariantMatching: 0 + VertexChannelCompressionMask: 4054 + iPhoneSdkVersion: 988 + iOSSimulatorArchitecture: 0 + iOSTargetOSVersionString: 13.0 + tvOSSdkVersion: 0 + tvOSSimulatorArchitecture: 0 + tvOSRequireExtendedGameController: 0 + tvOSTargetOSVersionString: 13.0 + VisionOSSdkVersion: 0 + VisionOSTargetOSVersionString: 1.0 + uIPrerenderedIcon: 0 + uIRequiresPersistentWiFi: 0 + uIRequiresFullScreen: 1 + uIStatusBarHidden: 1 + uIExitOnSuspend: 0 + uIStatusBarStyle: 0 + appleTVSplashScreen: {fileID: 0} + appleTVSplashScreen2x: {fileID: 0} + tvOSSmallIconLayers: [] + tvOSSmallIconLayers2x: [] + tvOSLargeIconLayers: [] + tvOSLargeIconLayers2x: [] + tvOSTopShelfImageLayers: [] + tvOSTopShelfImageLayers2x: [] + tvOSTopShelfImageWideLayers: [] + tvOSTopShelfImageWideLayers2x: [] + iOSLaunchScreenType: 0 + iOSLaunchScreenPortrait: {fileID: 0} + iOSLaunchScreenLandscape: {fileID: 0} + iOSLaunchScreenBackgroundColor: + serializedVersion: 2 + rgba: 0 + iOSLaunchScreenFillPct: 100 + iOSLaunchScreenSize: 100 + iOSLaunchScreeniPadType: 0 + iOSLaunchScreeniPadImage: {fileID: 0} + iOSLaunchScreeniPadBackgroundColor: + serializedVersion: 2 + rgba: 0 + iOSLaunchScreeniPadFillPct: 100 + iOSLaunchScreeniPadSize: 100 + iOSLaunchScreenCustomStoryboardPath: + iOSLaunchScreeniPadCustomStoryboardPath: + iOSDeviceRequirements: [] + iOSURLSchemes: [] + macOSURLSchemes: [] + iOSBackgroundModes: 0 + iOSMetalForceHardShadows: 0 + metalEditorSupport: 1 + metalAPIValidation: 1 + metalCompileShaderBinary: 0 + iOSRenderExtraFrameOnPause: 0 + iosCopyPluginsCodeInsteadOfSymlink: 0 + appleDeveloperTeamID: + iOSManualSigningProvisioningProfileID: + tvOSManualSigningProvisioningProfileID: + VisionOSManualSigningProvisioningProfileID: + iOSManualSigningProvisioningProfileType: 0 + tvOSManualSigningProvisioningProfileType: 0 + VisionOSManualSigningProvisioningProfileType: 0 + appleEnableAutomaticSigning: 0 + iOSRequireARKit: 0 + iOSAutomaticallyDetectAndAddCapabilities: 1 + appleEnableProMotion: 0 + shaderPrecisionModel: 0 + clonedFromGUID: 3c72c65a16f0acb438eed22b8b16c24a + templatePackageId: com.unity.template.urp-blank@3.0.2 + templateDefaultScene: Assets/Scenes/SampleScene.unity + useCustomMainManifest: 0 + useCustomLauncherManifest: 0 + useCustomMainGradleTemplate: 0 + useCustomLauncherGradleManifest: 0 + useCustomBaseGradleTemplate: 0 + useCustomGradlePropertiesTemplate: 0 + useCustomGradleSettingsTemplate: 0 + useCustomProguardFile: 0 + AndroidTargetArchitectures: 3 + AndroidSplashScreenScale: 0 + androidSplashScreen: {fileID: 0} + AndroidKeystoreName: + AndroidKeyaliasName: + AndroidEnableArmv9SecurityFeatures: 0 + AndroidEnableArm64MTE: 0 + AndroidBuildApkPerCpuArchitecture: 0 + AndroidTVCompatibility: 0 + AndroidIsGame: 1 + AndroidEnableTango: 0 + androidEnableBanner: 1 + androidUseLowAccuracyLocation: 0 + androidUseCustomKeystore: 0 + m_AndroidBanners: + - width: 320 + height: 180 + banner: {fileID: 0} + androidGamepadSupportLevel: 0 + AndroidMinifyRelease: 0 + AndroidMinifyDebug: 0 + AndroidValidateAppBundleSize: 1 + AndroidAppBundleSizeToValidate: 150 + AndroidReportGooglePlayAppDependencies: 1 + androidSymbolsSizeThreshold: 800 + m_BuildTargetIcons: [] + m_BuildTargetPlatformIcons: + - m_BuildTarget: iPhone + m_Icons: + - m_Textures: [] + m_Width: 180 + m_Height: 180 + m_Kind: 0 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 120 + m_Height: 120 + m_Kind: 0 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 167 + m_Height: 167 + m_Kind: 0 + m_SubKind: iPad + - m_Textures: [] + m_Width: 152 + m_Height: 152 + m_Kind: 0 + m_SubKind: iPad + - m_Textures: [] + m_Width: 76 + m_Height: 76 + m_Kind: 0 + m_SubKind: iPad + - m_Textures: [] + m_Width: 120 + m_Height: 120 + m_Kind: 3 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 80 + m_Height: 80 + m_Kind: 3 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 80 + m_Height: 80 + m_Kind: 3 + m_SubKind: iPad + - m_Textures: [] + m_Width: 40 + m_Height: 40 + m_Kind: 3 + m_SubKind: iPad + - m_Textures: [] + m_Width: 87 + m_Height: 87 + m_Kind: 1 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 58 + m_Height: 58 + m_Kind: 1 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 29 + m_Height: 29 + m_Kind: 1 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 58 + m_Height: 58 + m_Kind: 1 + m_SubKind: iPad + - m_Textures: [] + m_Width: 29 + m_Height: 29 + m_Kind: 1 + m_SubKind: iPad + - m_Textures: [] + m_Width: 60 + m_Height: 60 + m_Kind: 2 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 40 + m_Height: 40 + m_Kind: 2 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 40 + m_Height: 40 + m_Kind: 2 + m_SubKind: iPad + - m_Textures: [] + m_Width: 20 + m_Height: 20 + m_Kind: 2 + m_SubKind: iPad + - m_Textures: [] + m_Width: 1024 + m_Height: 1024 + m_Kind: 4 + m_SubKind: App Store + - m_BuildTarget: Android + m_Icons: + - m_Textures: [] + m_Width: 432 + m_Height: 432 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 324 + m_Height: 324 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 216 + m_Height: 216 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 162 + m_Height: 162 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 108 + m_Height: 108 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 81 + m_Height: 81 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 192 + m_Height: 192 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 144 + m_Height: 144 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 96 + m_Height: 96 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 72 + m_Height: 72 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 48 + m_Height: 48 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 36 + m_Height: 36 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 192 + m_Height: 192 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 144 + m_Height: 144 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 96 + m_Height: 96 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 72 + m_Height: 72 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 48 + m_Height: 48 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 36 + m_Height: 36 + m_Kind: 0 + m_SubKind: + - m_BuildTarget: tvOS + m_Icons: + - m_Textures: [] + m_Width: 1280 + m_Height: 768 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 800 + m_Height: 480 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 400 + m_Height: 240 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 4640 + m_Height: 1440 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 2320 + m_Height: 720 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 3840 + m_Height: 1440 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 1920 + m_Height: 720 + m_Kind: 1 + m_SubKind: + m_BuildTargetBatching: [] + m_BuildTargetShaderSettings: [] + m_BuildTargetGraphicsJobs: [] + m_BuildTargetGraphicsJobMode: [] + m_BuildTargetGraphicsAPIs: + - m_BuildTarget: iOSSupport + m_APIs: 10000000 + m_Automatic: 1 + - m_BuildTarget: AndroidPlayer + m_APIs: 0b00000015000000 + m_Automatic: 0 + m_BuildTargetVRSettings: [] + m_DefaultShaderChunkSizeInMB: 16 + m_DefaultShaderChunkCount: 0 + openGLRequireES31: 0 + openGLRequireES31AEP: 0 + openGLRequireES32: 0 + m_TemplateCustomTags: {} + mobileMTRendering: + Android: 1 + iPhone: 1 + tvOS: 1 + m_BuildTargetGroupLightmapEncodingQuality: + - serializedVersion: 2 + m_BuildTarget: Android + m_EncodingQuality: 1 + m_BuildTargetGroupLightmapSettings: [] + m_BuildTargetGroupLoadStoreDebugModeSettings: [] + m_BuildTargetNormalMapEncoding: + - m_BuildTarget: Android + m_Encoding: 1 + m_BuildTargetDefaultTextureCompressionFormat: + - serializedVersion: 3 + m_BuildTarget: Android + m_Formats: 03000000 + playModeTestRunnerEnabled: 0 + runPlayModeTestAsEditModeTest: 0 + actionOnDotNetUnhandledException: 1 + enableInternalProfiler: 0 + logObjCUncaughtExceptions: 1 + enableCrashReportAPI: 0 + cameraUsageDescription: To demo VR capabilities of the plugin + locationUsageDescription: + microphoneUsageDescription: + bluetoothUsageDescription: + macOSTargetOSVersion: 11.0 + switchNMETAOverride: + switchNetLibKey: + switchSocketMemoryPoolSize: 6144 + switchSocketAllocatorPoolSize: 128 + switchSocketConcurrencyLimit: 14 + switchScreenResolutionBehavior: 2 + switchUseCPUProfiler: 0 + switchEnableFileSystemTrace: 0 + switchLTOSetting: 0 + switchApplicationID: 0x01004b9000490000 + switchNSODependencies: + switchCompilerFlags: + switchTitleNames_0: + switchTitleNames_1: + switchTitleNames_2: + switchTitleNames_3: + switchTitleNames_4: + switchTitleNames_5: + switchTitleNames_6: + switchTitleNames_7: + switchTitleNames_8: + switchTitleNames_9: + switchTitleNames_10: + switchTitleNames_11: + switchTitleNames_12: + switchTitleNames_13: + switchTitleNames_14: + switchTitleNames_15: + switchPublisherNames_0: + switchPublisherNames_1: + switchPublisherNames_2: + switchPublisherNames_3: + switchPublisherNames_4: + switchPublisherNames_5: + switchPublisherNames_6: + switchPublisherNames_7: + switchPublisherNames_8: + switchPublisherNames_9: + switchPublisherNames_10: + switchPublisherNames_11: + switchPublisherNames_12: + switchPublisherNames_13: + switchPublisherNames_14: + switchPublisherNames_15: + switchIcons_0: {fileID: 0} + switchIcons_1: {fileID: 0} + switchIcons_2: {fileID: 0} + switchIcons_3: {fileID: 0} + switchIcons_4: {fileID: 0} + switchIcons_5: {fileID: 0} + switchIcons_6: {fileID: 0} + switchIcons_7: {fileID: 0} + switchIcons_8: {fileID: 0} + switchIcons_9: {fileID: 0} + switchIcons_10: {fileID: 0} + switchIcons_11: {fileID: 0} + switchIcons_12: {fileID: 0} + switchIcons_13: {fileID: 0} + switchIcons_14: {fileID: 0} + switchIcons_15: {fileID: 0} + switchSmallIcons_0: {fileID: 0} + switchSmallIcons_1: {fileID: 0} + switchSmallIcons_2: {fileID: 0} + switchSmallIcons_3: {fileID: 0} + switchSmallIcons_4: {fileID: 0} + switchSmallIcons_5: {fileID: 0} + switchSmallIcons_6: {fileID: 0} + switchSmallIcons_7: {fileID: 0} + switchSmallIcons_8: {fileID: 0} + switchSmallIcons_9: {fileID: 0} + switchSmallIcons_10: {fileID: 0} + switchSmallIcons_11: {fileID: 0} + switchSmallIcons_12: {fileID: 0} + switchSmallIcons_13: {fileID: 0} + switchSmallIcons_14: {fileID: 0} + switchSmallIcons_15: {fileID: 0} + switchManualHTML: + switchAccessibleURLs: + switchLegalInformation: + switchMainThreadStackSize: 1048576 + switchPresenceGroupId: + switchLogoHandling: 0 + switchReleaseVersion: 0 + switchDisplayVersion: 1.0.0 + switchStartupUserAccount: 0 + switchSupportedLanguagesMask: 0 + switchLogoType: 0 + switchApplicationErrorCodeCategory: + switchUserAccountSaveDataSize: 0 + switchUserAccountSaveDataJournalSize: 0 + switchApplicationAttribute: 0 + switchCardSpecSize: -1 + switchCardSpecClock: -1 + switchRatingsMask: 0 + switchRatingsInt_0: 0 + switchRatingsInt_1: 0 + switchRatingsInt_2: 0 + switchRatingsInt_3: 0 + switchRatingsInt_4: 0 + switchRatingsInt_5: 0 + switchRatingsInt_6: 0 + switchRatingsInt_7: 0 + switchRatingsInt_8: 0 + switchRatingsInt_9: 0 + switchRatingsInt_10: 0 + switchRatingsInt_11: 0 + switchRatingsInt_12: 0 + switchLocalCommunicationIds_0: + switchLocalCommunicationIds_1: + switchLocalCommunicationIds_2: + switchLocalCommunicationIds_3: + switchLocalCommunicationIds_4: + switchLocalCommunicationIds_5: + switchLocalCommunicationIds_6: + switchLocalCommunicationIds_7: + switchParentalControl: 0 + switchAllowsScreenshot: 1 + switchAllowsVideoCapturing: 1 + switchAllowsRuntimeAddOnContentInstall: 0 + switchDataLossConfirmation: 0 + switchUserAccountLockEnabled: 0 + switchSystemResourceMemory: 16777216 + switchSupportedNpadStyles: 22 + switchNativeFsCacheSize: 32 + switchIsHoldTypeHorizontal: 0 + switchSupportedNpadCount: 8 + switchEnableTouchScreen: 1 + switchSocketConfigEnabled: 0 + switchTcpInitialSendBufferSize: 32 + switchTcpInitialReceiveBufferSize: 64 + switchTcpAutoSendBufferSizeMax: 256 + switchTcpAutoReceiveBufferSizeMax: 256 + switchUdpSendBufferSize: 9 + switchUdpReceiveBufferSize: 42 + switchSocketBufferEfficiency: 4 + switchSocketInitializeEnabled: 1 + switchNetworkInterfaceManagerInitializeEnabled: 1 + switchDisableHTCSPlayerConnection: 0 + switchUseNewStyleFilepaths: 0 + switchUseLegacyFmodPriorities: 0 + switchUseMicroSleepForYield: 1 + switchEnableRamDiskSupport: 0 + switchMicroSleepForYieldTime: 25 + switchRamDiskSpaceSize: 12 + switchUpgradedPlayerSettingsToNMETA: 0 + ps4NPAgeRating: 12 + ps4NPTitleSecret: + ps4NPTrophyPackPath: + ps4ParentalLevel: 11 + ps4ContentID: ED1633-NPXX51362_00-0000000000000000 + ps4Category: 0 + ps4MasterVersion: 01.00 + ps4AppVersion: 01.00 + ps4AppType: 0 + ps4ParamSfxPath: + ps4VideoOutPixelFormat: 0 + ps4VideoOutInitialWidth: 1920 + ps4VideoOutBaseModeInitialWidth: 1920 + ps4VideoOutReprojectionRate: 60 + ps4PronunciationXMLPath: + ps4PronunciationSIGPath: + ps4BackgroundImagePath: + ps4StartupImagePath: + ps4StartupImagesFolder: + ps4IconImagesFolder: + ps4SaveDataImagePath: + ps4SdkOverride: + ps4BGMPath: + ps4ShareFilePath: + ps4ShareOverlayImagePath: + ps4PrivacyGuardImagePath: + ps4ExtraSceSysFile: + ps4NPtitleDatPath: + ps4RemotePlayKeyAssignment: -1 + ps4RemotePlayKeyMappingDir: + ps4PlayTogetherPlayerCount: 0 + ps4EnterButtonAssignment: 2 + ps4ApplicationParam1: 0 + ps4ApplicationParam2: 0 + ps4ApplicationParam3: 0 + ps4ApplicationParam4: 0 + ps4DownloadDataSize: 0 + ps4GarlicHeapSize: 2048 + ps4ProGarlicHeapSize: 2560 + playerPrefsMaxSize: 32768 + ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ + ps4pnSessions: 1 + ps4pnPresence: 1 + ps4pnFriends: 1 + ps4pnGameCustomData: 1 + playerPrefsSupport: 0 + enableApplicationExit: 0 + resetTempFolder: 1 + restrictedAudioUsageRights: 0 + ps4UseResolutionFallback: 0 + ps4ReprojectionSupport: 0 + ps4UseAudio3dBackend: 0 + ps4UseLowGarlicFragmentationMode: 1 + ps4SocialScreenEnabled: 0 + ps4ScriptOptimizationLevel: 2 + ps4Audio3dVirtualSpeakerCount: 14 + ps4attribCpuUsage: 0 + ps4PatchPkgPath: + ps4PatchLatestPkgPath: + ps4PatchChangeinfoPath: + ps4PatchDayOne: 0 + ps4attribUserManagement: 0 + ps4attribMoveSupport: 0 + ps4attrib3DSupport: 0 + ps4attribShareSupport: 0 + ps4attribExclusiveVR: 0 + ps4disableAutoHideSplash: 0 + ps4videoRecordingFeaturesUsed: 0 + ps4contentSearchFeaturesUsed: 0 + ps4CompatibilityPS5: 0 + ps4AllowPS5Detection: 0 + ps4GPU800MHz: 1 + ps4attribEyeToEyeDistanceSettingVR: 0 + ps4IncludedModules: [] + ps4attribVROutputEnabled: 0 + monoEnv: + splashScreenBackgroundSourceLandscape: {fileID: 0} + splashScreenBackgroundSourcePortrait: {fileID: 0} + blurSplashScreenBackground: 1 + spritePackerPolicy: + webGLMemorySize: 32 + webGLExceptionSupport: 1 + webGLNameFilesAsHashes: 0 + webGLShowDiagnostics: 0 + webGLDataCaching: 1 + webGLDebugSymbols: 0 + webGLEmscriptenArgs: + webGLModulesDirectory: + webGLTemplate: APPLICATION:Default + webGLAnalyzeBuildSize: 0 + webGLUseEmbeddedResources: 0 + webGLCompressionFormat: 0 + webGLWasmArithmeticExceptions: 0 + webGLLinkerTarget: 1 + webGLThreadsSupport: 0 + webGLDecompressionFallback: 0 + webGLInitialMemorySize: 32 + webGLMaximumMemorySize: 2048 + webGLMemoryGrowthMode: 2 + webGLMemoryLinearGrowthStep: 16 + webGLMemoryGeometricGrowthStep: 0.2 + webGLMemoryGeometricGrowthCap: 96 + webGLEnableWebGPU: 0 + webGLPowerPreference: 2 + webGLWebAssemblyTable: 0 + webGLWebAssemblyBigInt: 0 + webGLCloseOnQuit: 0 + webWasm2023: 0 + scriptingDefineSymbols: + iPhone: UNITY_XR_ARKIT_LOADER_ENABLED + additionalCompilerArguments: {} + platformArchitecture: {} + scriptingBackend: + Android: 1 + Standalone: 1 + il2cppCompilerConfiguration: + Android: 0 + il2cppCodeGeneration: + Android: 1 + iPhone: 1 + il2cppStacktraceInformation: {} + managedStrippingLevel: + EmbeddedLinux: 1 + GameCoreScarlett: 1 + GameCoreXboxOne: 1 + Nintendo Switch: 1 + PS4: 1 + PS5: 1 + QNX: 1 + Stadia: 1 + VisionOS: 1 + WebGL: 1 + Windows Store Apps: 1 + XboxOne: 1 + iPhone: 1 + tvOS: 1 + incrementalIl2cppBuild: {} + suppressCommonWarnings: 1 + allowUnsafeCode: 0 + useDeterministicCompilation: 1 + additionalIl2CppArgs: + scriptingRuntimeVersion: 1 + gcIncremental: 0 + gcWBarrierValidation: 0 + apiCompatibilityLevelPerPlatform: {} + editorAssembliesCompatibilityLevel: 1 + m_RenderingPath: 1 + m_MobileRenderingPath: 1 + metroPackageName: FlutterEmbedUnityExample + metroPackageVersion: + metroCertificatePath: + metroCertificatePassword: + metroCertificateSubject: + metroCertificateIssuer: + metroCertificateNotAfter: 0000000000000000 + metroApplicationDescription: FlutterEmbedUnityExample + wsaImages: {} + metroTileShortName: + metroTileShowName: 0 + metroMediumTileShowName: 0 + metroLargeTileShowName: 0 + metroWideTileShowName: 0 + metroSupportStreamingInstall: 0 + metroLastRequiredScene: 0 + metroDefaultTileSize: 1 + metroTileForegroundText: 2 + metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} + metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, + a: 1} + metroSplashScreenUseBackgroundColor: 0 + syncCapabilities: 0 + platformCapabilities: {} + metroTargetDeviceFamilies: {} + metroFTAName: + metroFTAFileTypes: [] + metroProtocolName: + vcxProjDefaultLanguage: + XboxOneProductId: + XboxOneUpdateKey: + XboxOneSandboxId: + XboxOneContentId: + XboxOneTitleId: + XboxOneSCId: + XboxOneGameOsOverridePath: + XboxOnePackagingOverridePath: + XboxOneAppManifestOverridePath: + XboxOneVersion: 1.0.0.0 + XboxOnePackageEncryption: 0 + XboxOnePackageUpdateGranularity: 2 + XboxOneDescription: + XboxOneLanguage: + - enus + XboxOneCapability: [] + XboxOneGameRating: {} + XboxOneIsContentPackage: 0 + XboxOneEnhancedXboxCompatibilityMode: 0 + XboxOneEnableGPUVariability: 1 + XboxOneSockets: {} + XboxOneSplashScreen: {fileID: 0} + XboxOneAllowedProductIds: [] + XboxOnePersistentLocalStorageSize: 0 + XboxOneXTitleMemory: 8 + XboxOneOverrideIdentityName: + XboxOneOverrideIdentityPublisher: + vrEditorSettings: {} + cloudServicesEnabled: {} + luminIcon: + m_Name: + m_ModelFolderPath: + m_PortalFolderPath: + luminCert: + m_CertPath: + m_SignPackage: 1 + luminIsChannelApp: 0 + luminVersion: + m_VersionCode: 1 + m_VersionName: + hmiPlayerDataPath: + hmiForceSRGBBlit: 1 + embeddedLinuxEnableGamepadInput: 1 + hmiCpuConfiguration: + hmiLogStartupTiming: 0 + qnxGraphicConfPath: + apiCompatibilityLevel: 6 + captureStartupLogs: {} + activeInputHandler: 1 + windowsGamepadBackendHint: 0 + cloudProjectId: + framebufferDepthMemorylessMode: 0 + qualitySettingsNames: [] + projectName: + organizationId: + cloudEnabled: 0 + legacyClampBlendShapeWeights: 0 + hmiLoadingImage: {fileID: 0} + platformRequiresReadableAssets: 0 + virtualTexturingSupportEnabled: 0 + insecureHttpOption: 0 + androidVulkanDenyFilterList: [] + androidVulkanAllowFilterList: [] diff --git a/example_unity_6000_0_project/ProjectSettings/ProjectVersion.txt b/example_unity_6000_0_project/ProjectSettings/ProjectVersion.txt new file mode 100644 index 0000000..540ac31 --- /dev/null +++ b/example_unity_6000_0_project/ProjectSettings/ProjectVersion.txt @@ -0,0 +1,2 @@ +m_EditorVersion: 6000.0.8f1 +m_EditorVersionWithRevision: 6000.0.8f1 (fa7102f01711) diff --git a/example_unity_6000_0_project/ProjectSettings/QualitySettings.asset b/example_unity_6000_0_project/ProjectSettings/QualitySettings.asset new file mode 100644 index 0000000..6238eb7 --- /dev/null +++ b/example_unity_6000_0_project/ProjectSettings/QualitySettings.asset @@ -0,0 +1,136 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!47 &1 +QualitySettings: + m_ObjectHideFlags: 0 + serializedVersion: 5 + m_CurrentQuality: 2 + m_QualitySettings: + - serializedVersion: 2 + name: Performant + pixelLightCount: 0 + shadows: 0 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 20 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 0 + skinWeights: 2 + textureQuality: 0 + anisotropicTextures: 0 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 0 + lodBias: 0.4 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 4 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + customRenderPipeline: {fileID: 11400000, guid: d0e2fc18fe036412f8223b3b3d9ad574, + type: 2} + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Balanced + pixelLightCount: 1 + shadows: 1 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 20 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 0 + skinWeights: 4 + textureQuality: 0 + anisotropicTextures: 1 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 1 + lodBias: 1 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 64 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + customRenderPipeline: {fileID: 11400000, guid: e1260c1148f6143b28bae5ace5e9c5d1, + type: 2} + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: High Fidelity + pixelLightCount: 2 + shadows: 2 + shadowResolution: 1 + shadowProjection: 1 + shadowCascades: 2 + shadowDistance: 40 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 1 + skinWeights: 255 + textureQuality: 0 + anisotropicTextures: 2 + antiAliasing: 4 + softParticles: 0 + softVegetation: 1 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 + vSyncCount: 1 + lodBias: 2 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 2048 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + customRenderPipeline: {fileID: 11400000, guid: 7b7fd9122c28c4d15b667c7040e3b3fd, + type: 2} + excludedTargetPlatforms: [] + m_PerPlatformDefaultQuality: + Android: 1 + CloudRendering: 2 + Lumin: 2 + GameCoreScarlett: 2 + GameCoreXboxOne: 2 + Nintendo Switch: 2 + PS4: 2 + PS5: 2 + Server: 0 + Stadia: 2 + Standalone: 2 + WebGL: 1 + Windows Store Apps: 2 + XboxOne: 2 + iPhone: 1 + tvOS: 1 diff --git a/example_unity_6000_0_project/ProjectSettings/SceneTemplateSettings.json b/example_unity_6000_0_project/ProjectSettings/SceneTemplateSettings.json new file mode 100644 index 0000000..6f3e60f --- /dev/null +++ b/example_unity_6000_0_project/ProjectSettings/SceneTemplateSettings.json @@ -0,0 +1,167 @@ +{ + "templatePinStates": [], + "dependencyTypeInfos": [ + { + "userAdded": false, + "type": "UnityEngine.AnimationClip", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEditor.Animations.AnimatorController", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEngine.AnimatorOverrideController", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEditor.Audio.AudioMixerController", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEngine.ComputeShader", + "ignore": true, + "defaultInstantiationMode": 1, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEngine.Cubemap", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEngine.GameObject", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEditor.LightingDataAsset", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": false + }, + { + "userAdded": false, + "type": "UnityEngine.LightingSettings", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEngine.Material", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEditor.MonoScript", + "ignore": true, + "defaultInstantiationMode": 1, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEngine.PhysicMaterial", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEngine.PhysicsMaterial2D", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEngine.Rendering.PostProcessing.PostProcessProfile", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEngine.Rendering.PostProcessing.PostProcessResources", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEngine.Rendering.VolumeProfile", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEditor.SceneAsset", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": false + }, + { + "userAdded": false, + "type": "UnityEngine.Shader", + "ignore": true, + "defaultInstantiationMode": 1, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEngine.ShaderVariantCollection", + "ignore": true, + "defaultInstantiationMode": 1, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEngine.Texture", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEngine.Texture2D", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEngine.Timeline.TimelineAsset", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + } + ], + "defaultDependencyTypeInfo": { + "userAdded": false, + "type": "", + "ignore": false, + "defaultInstantiationMode": 1, + "supportsModification": true + }, + "newSceneOverride": 0 +} \ No newline at end of file diff --git a/example_unity_6000_0_project/ProjectSettings/ShaderGraphSettings.asset b/example_unity_6000_0_project/ProjectSettings/ShaderGraphSettings.asset new file mode 100644 index 0000000..e66042a --- /dev/null +++ b/example_unity_6000_0_project/ProjectSettings/ShaderGraphSettings.asset @@ -0,0 +1,18 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &1 +MonoBehaviour: + m_ObjectHideFlags: 61 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: de02f9e1d18f588468e474319d09a723, type: 3} + m_Name: + m_EditorClassIdentifier: + shaderVariantLimit: 128 + customInterpolatorErrorThreshold: 32 + customInterpolatorWarningThreshold: 16 + customHeatmapValues: {fileID: 0} diff --git a/example_unity_6000_0_project/ProjectSettings/TagManager.asset b/example_unity_6000_0_project/ProjectSettings/TagManager.asset new file mode 100644 index 0000000..b00eabb --- /dev/null +++ b/example_unity_6000_0_project/ProjectSettings/TagManager.asset @@ -0,0 +1,52 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!78 &1 +TagManager: + serializedVersion: 3 + tags: [] + layers: + - Default + - TransparentFX + - Ignore Raycast + - + - Water + - UI + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + m_SortingLayers: + - name: Default + uniqueID: 0 + locked: 0 + m_RenderingLayers: + - Default + - Light Layer 1 + - Light Layer 2 + - Light Layer 3 + - Light Layer 4 + - Light Layer 5 + - Light Layer 6 + - Light Layer 7 diff --git a/example_unity_6000_0_project/ProjectSettings/TimeManager.asset b/example_unity_6000_0_project/ProjectSettings/TimeManager.asset new file mode 100644 index 0000000..558a017 --- /dev/null +++ b/example_unity_6000_0_project/ProjectSettings/TimeManager.asset @@ -0,0 +1,9 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!5 &1 +TimeManager: + m_ObjectHideFlags: 0 + Fixed Timestep: 0.02 + Maximum Allowed Timestep: 0.33333334 + m_TimeScale: 1 + Maximum Particle Timestep: 0.03 diff --git a/example_unity_6000_0_project/ProjectSettings/URPProjectSettings.asset b/example_unity_6000_0_project/ProjectSettings/URPProjectSettings.asset new file mode 100644 index 0000000..08faf03 --- /dev/null +++ b/example_unity_6000_0_project/ProjectSettings/URPProjectSettings.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &1 +MonoBehaviour: + m_ObjectHideFlags: 61 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 247994e1f5a72c2419c26a37e9334c01, type: 3} + m_Name: + m_EditorClassIdentifier: + m_LastMaterialVersion: 9 diff --git a/example_unity_6000_0_project/ProjectSettings/UnityConnectSettings.asset b/example_unity_6000_0_project/ProjectSettings/UnityConnectSettings.asset new file mode 100644 index 0000000..a88bee0 --- /dev/null +++ b/example_unity_6000_0_project/ProjectSettings/UnityConnectSettings.asset @@ -0,0 +1,36 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!310 &1 +UnityConnectSettings: + m_ObjectHideFlags: 0 + serializedVersion: 1 + m_Enabled: 0 + m_TestMode: 0 + m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events + m_EventUrl: https://cdp.cloud.unity3d.com/v1/events + m_ConfigUrl: https://config.uca.cloud.unity3d.com + m_DashboardUrl: https://dashboard.unity3d.com + m_TestInitMode: 0 + CrashReportingSettings: + m_EventUrl: https://perf-events.cloud.unity3d.com + m_Enabled: 0 + m_LogBufferSize: 10 + m_CaptureEditorExceptions: 1 + UnityPurchasingSettings: + m_Enabled: 0 + m_TestMode: 0 + UnityAnalyticsSettings: + m_Enabled: 0 + m_TestMode: 0 + m_InitializeOnStartup: 1 + m_PackageRequiringCoreStatsPresent: 0 + UnityAdsSettings: + m_Enabled: 0 + m_InitializeOnStartup: 1 + m_TestMode: 0 + m_IosGameId: + m_AndroidGameId: + m_GameIds: {} + m_GameId: + PerformanceReportingSettings: + m_Enabled: 0 diff --git a/example_unity_6000_0_project/ProjectSettings/VFXManager.asset b/example_unity_6000_0_project/ProjectSettings/VFXManager.asset new file mode 100644 index 0000000..3a95c98 --- /dev/null +++ b/example_unity_6000_0_project/ProjectSettings/VFXManager.asset @@ -0,0 +1,12 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!937362698 &1 +VFXManager: + m_ObjectHideFlags: 0 + m_IndirectShader: {fileID: 0} + m_CopyBufferShader: {fileID: 0} + m_SortShader: {fileID: 0} + m_StripUpdateShader: {fileID: 0} + m_RenderPipeSettingsPath: + m_FixedTimeStep: 0.016666668 + m_MaxDeltaTime: 0.05 diff --git a/example_unity_6000_0_project/ProjectSettings/VersionControlSettings.asset b/example_unity_6000_0_project/ProjectSettings/VersionControlSettings.asset new file mode 100644 index 0000000..dca2881 --- /dev/null +++ b/example_unity_6000_0_project/ProjectSettings/VersionControlSettings.asset @@ -0,0 +1,8 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!890905787 &1 +VersionControlSettings: + m_ObjectHideFlags: 0 + m_Mode: Visible Meta Files + m_CollabEditorSettings: + inProgressEnabled: 1 diff --git a/example_unity_6000_0_project/ProjectSettings/XRPackageSettings.asset b/example_unity_6000_0_project/ProjectSettings/XRPackageSettings.asset new file mode 100644 index 0000000..7e791e1 --- /dev/null +++ b/example_unity_6000_0_project/ProjectSettings/XRPackageSettings.asset @@ -0,0 +1,5 @@ +{ + "m_Settings": [ + "RemoveLegacyInputHelpersForReload" + ] +} \ No newline at end of file diff --git a/example_unity_6000_0_project/ProjectSettings/XRSettings.asset b/example_unity_6000_0_project/ProjectSettings/XRSettings.asset new file mode 100644 index 0000000..482590c --- /dev/null +++ b/example_unity_6000_0_project/ProjectSettings/XRSettings.asset @@ -0,0 +1,10 @@ +{ + "m_SettingKeys": [ + "VR Device Disabled", + "VR Device User Alert" + ], + "m_SettingValues": [ + "False", + "False" + ] +} \ No newline at end of file diff --git a/example_unity_6000_0_project/README.md b/example_unity_6000_0_project/README.md new file mode 100644 index 0000000..6afd5ed --- /dev/null +++ b/example_unity_6000_0_project/README.md @@ -0,0 +1,5 @@ +# Example Unity project + +Use this Unity project as an example of how to send and receive message from Flutter, or to build [the example Flutter app](https://github.com/jamesncl/flutter_embed_unity/tree/main/flutter_embed_unity/example). + +It is also used to develop the `flutter_embed_unity_2022_3.unitypackage`, including the build scripts which make it easier to integrate the Unity project export into your Flutter app. As an alternative to importing `flutter_embed_unity_2022_3.unitypackage` you could copy the script assets from this project. From 48d332381e6112cd55b0c97ae70a6a8a604442b5 Mon Sep 17 00:00:00 2001 From: timbotimbo Date: Tue, 2 Jul 2024 00:28:24 +0200 Subject: [PATCH 7/9] Update Unity exporter to handle the new 'shared' folder and remove the Gradle 8 namespace replace. --- .../Editor/ProjectExportChecker.cs | 6 +++--- .../Editor/ProjectExporterAndroid.cs | 21 ++++++++++++++++--- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExportChecker.cs b/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExportChecker.cs index 1967dbe..e5dfca7 100644 --- a/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExportChecker.cs +++ b/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExportChecker.cs @@ -96,9 +96,9 @@ internal ProjectExportCheckerResult PreCheckIos() private bool PreCheckCommon(ref List precheckWarnings, NamedBuildTarget namedBuildTarget, BuildTargetGroup buildTargetGroup) { -#if !UNITY_2022_3 - ShowErrorMessage("This plugin only supports Unity 2022.3 LTS (Long Term Support)."); - return ProjectExportCheckerResult.Failure(); +#if !UNITY_6000 + ProjectExportHelpers.ShowErrorMessage("This plugin only supports Unity 6000.0 ."); + return false; #endif if (PlayerSettings.GetScriptingBackend(EditorUserBuildSettings.selectedBuildTargetGroup) != ScriptingImplementation.IL2CPP) diff --git a/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExporterAndroid.cs b/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExporterAndroid.cs index 191b9ef..ddc7ee8 100644 --- a/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExporterAndroid.cs +++ b/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExporterAndroid.cs @@ -78,6 +78,21 @@ protected override void TransformExportedProject(string exportPath) unityLibrarySubModuleDirectory.Delete(true); Debug.Log($"Moved {unityLibrarySubModuleDirectory.FullName} to {exportDirectory.FullName}"); + // Now move the contents of + // '/shared/' + // to '/unityLibrary' + // Should only be keepUnitySymbols.gradle + DirectoryInfo sharedDirectory = new DirectoryInfo(Path.Combine(exportPath, "shared")); + if (!sharedDirectory.Exists) + { + ProjectExportHelpers.ShowErrorMessage($"Unexpected error: '{sharedDirectory.FullName} not found"); + return; + } + ProjectExportHelpers.MoveContentsOfDirectory(sharedDirectory, exportDirectory); + sharedDirectory.Delete(true); + Debug.Log($"Moved {sharedDirectory.FullName} to {exportDirectory.FullName}"); + + // The export includes an activity in the AndroidManifest.xml which is not going to be // used (because we are using a Flutter PlatfromView instead). Remove it FileInfo androidManifestFile = new FileInfo(Path.Combine(exportPath, "src", "main", "AndroidManifest.xml")); @@ -99,10 +114,10 @@ protected override void TransformExportedProject(string exportPath) return; } string buildGradleContents = File.ReadAllText(buildGradleFile.FullName); - Regex regexAndroidBlock = new Regex(Regex.Escape("android {")); - buildGradleContents = regexAndroidBlock.Replace(buildGradleContents, "android {\n\tnamespace 'com.unity3d.player'", 1); + // Change references to the ../../shared folder to unityLibrary + buildGradleContents = Regex.Replace(buildGradleContents, @"\.\./shared/", "./"); File.WriteAllText(buildGradleFile.FullName, buildGradleContents); - Debug.Log($"Added namespace 'com.unity3d.player' to {buildGradleFile.FullName} for Gradle 8 compatibility"); + Debug.Log($"Fixed ../../shared references in {buildGradleFile.FullName}"); DirectoryInfo burstDebugInformation = new DirectoryInfo(Path.Join(exportPath, "..", "unityLibrary_BurstDebugInformation_DoNotShip")); if(burstDebugInformation.Exists) { From ba91e727b8b47bc7608c9ba94a4492b81b012808 Mon Sep 17 00:00:00 2001 From: timbotimbo Date: Tue, 2 Jul 2024 22:45:23 +0200 Subject: [PATCH 8/9] Fix some comments in ProjectExporterAndroid. --- .../Assets/FlutterEmbed/Editor/ProjectExporterAndroid.cs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExporterAndroid.cs b/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExporterAndroid.cs index ddc7ee8..c65562e 100644 --- a/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExporterAndroid.cs +++ b/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExporterAndroid.cs @@ -106,18 +106,17 @@ protected override void TransformExportedProject(string exportPath) File.WriteAllText(androidManifestFile.FullName, androidManifestContents); Debug.Log($"Removed from {androidManifestFile.FullName}"); - // Add the namespace 'com.unity3d.player' to unityLibrary\build.gradle - // for compatibility with Gradle 8 + // Fix an import in unityLibrary\build.gradle FileInfo buildGradleFile = new FileInfo(Path.Combine(exportPath, "build.gradle")); if(!buildGradleFile.Exists) { ProjectExportHelpers.ShowErrorMessage($"Unexpected error: '{buildGradleFile.FullName} not found"); return; } string buildGradleContents = File.ReadAllText(buildGradleFile.FullName); - // Change references to the ../../shared folder to unityLibrary + // Change references to the ../shared folder to unityLibrary buildGradleContents = Regex.Replace(buildGradleContents, @"\.\./shared/", "./"); File.WriteAllText(buildGradleFile.FullName, buildGradleContents); - Debug.Log($"Fixed ../../shared references in {buildGradleFile.FullName}"); + Debug.Log($"Fixed ../shared references in {buildGradleFile.FullName}"); DirectoryInfo burstDebugInformation = new DirectoryInfo(Path.Join(exportPath, "..", "unityLibrary_BurstDebugInformation_DoNotShip")); if(burstDebugInformation.Exists) { From eca64a64c38abd4058bebe25a03906944f14c36b Mon Sep 17 00:00:00 2001 From: timbotimbo Date: Fri, 6 Sep 2024 15:26:11 +0200 Subject: [PATCH 9/9] Add export check for the Android setting 'Application Entry Point'. --- .../FlutterEmbed/Editor/ProjectExportChecker.cs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExportChecker.cs b/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExportChecker.cs index e5dfca7..97b9024 100644 --- a/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExportChecker.cs +++ b/example_unity_6000_0_project/Assets/FlutterEmbed/Editor/ProjectExportChecker.cs @@ -32,10 +32,18 @@ internal ProjectExportCheckerResult PreCheckAndroid() { if (EditorUserBuildSettings.activeBuildTarget != BuildTarget.Android) { - ProjectExportHelpers.ShowErrorMessage("Can't export until you change the build target to Android: see File -> Build settings -> Platform, then Switch Target"); + ProjectExportHelpers.ShowErrorMessage("Can't export until you change the build target to Android: see File -> Build Profiles -> Platform, then Switch Target"); return ProjectExportCheckerResult.Failure(); } +#if UNITY_ANDROID && UNITY_2023_1_OR_NEWER + if (PlayerSettings.Android.applicationEntry != AndroidApplicationEntry.Activity) + { + ProjectExportHelpers.ShowErrorMessage("Can't export until you change the 'Application Entry Point' to 'Activity'. \nFile -> Build Profiles -> Player Settings -> Other Settings -> Application Entry Point."); + return ProjectExportCheckerResult.Failure(); + } +#endif + // Because Debug.Log does not work until after the build, collect any log messages to show at the end: List precheckWarnings = new(); @@ -70,7 +78,7 @@ internal ProjectExportCheckerResult PreCheckIos() { if (EditorUserBuildSettings.activeBuildTarget != BuildTarget.iOS) { - ProjectExportHelpers.ShowErrorMessage("Can't export until you change the build target to iOS: see File -> Build settings -> Platform, then Switch Target"); + ProjectExportHelpers.ShowErrorMessage("Can't export until you change the build target to iOS: see File -> Build Profiles -> Platform, then Switch Target"); return ProjectExportCheckerResult.Failure(); }