Browse Source

删除无用资源

lvjincheng 3 years ago
parent
commit
d2e40185cd
72 changed files with 1 additions and 9753 deletions
  1. BIN
      BluetoothServer.jar
  2. 0 7
      BluetoothServer/.classpath
  3. 0 17
      BluetoothServer/.project
  4. 0 11
      BluetoothServer/.settings/org.eclipse.jdt.core.prefs
  5. BIN
      BluetoothServer/bin/Player.class
  6. BIN
      BluetoothServer/lib/JCEngine.jar
  7. 0 40
      BluetoothServer/src/Player.java
  8. 0 12
      DebugCS/DebugGameChallenge.cs
  9. BIN
      DebugCS/TestBLE.unitypackage
  10. 0 0
      Documents/App私钥-密码.txt
  11. 0 0
      Documents/App私钥.md
  12. 0 0
      Documents/App私钥/2022-11-17/smartbow.jks
  13. 0 0
      Documents/App私钥/2022-11-17/smartbow.keystore
  14. 0 0
      Documents/App私钥/2022-4-25/output.zip
  15. 0 0
      Documents/App私钥/2022-4-25/smartbow.jks
  16. 0 0
      Documents/App私钥/2022-4-25/smartbow.keystore
  17. 0 0
      Documents/App私钥/pepk.jar
  18. 1 1
      ProjectSettings/ProjectSettings.asset
  19. 0 14
      SmartBowLib/.gitignore
  20. 0 116
      SmartBowLib/.idea/codeStyles/Project.xml
  21. 0 16
      SmartBowLib/.idea/gradle.xml
  22. 0 9
      SmartBowLib/.idea/misc.xml
  23. 0 12
      SmartBowLib/.idea/runConfigurations.xml
  24. 0 6
      SmartBowLib/.idea/vcs.xml
  25. 0 27
      SmartBowLib/build.gradle
  26. 0 20
      SmartBowLib/gradle.properties
  27. BIN
      SmartBowLib/gradle/wrapper/gradle-wrapper.jar
  28. 0 6
      SmartBowLib/gradle/wrapper/gradle-wrapper.properties
  29. 0 172
      SmartBowLib/gradlew
  30. 0 84
      SmartBowLib/gradlew.bat
  31. 0 2
      SmartBowLib/settings.gradle
  32. 0 1
      SmartBowLib/smartbowlib/.gitignore
  33. 0 35
      SmartBowLib/smartbowlib/build.gradle
  34. 0 0
      SmartBowLib/smartbowlib/consumer-rules.pro
  35. BIN
      SmartBowLib/smartbowlib/libs/classes.jar
  36. BIN
      SmartBowLib/smartbowlib/libs/sdk-api.jar
  37. 0 21
      SmartBowLib/smartbowlib/proguard-rules.pro
  38. 0 27
      SmartBowLib/smartbowlib/src/androidTest/java/com/example/smartbowlib/ExampleInstrumentedTest.java
  39. 0 8
      SmartBowLib/smartbowlib/src/main/AndroidManifest.xml
  40. 0 95
      SmartBowLib/smartbowlib/src/main/java/com/example/smartbowlib/BluetoothTester.java
  41. 0 22
      SmartBowLib/smartbowlib/src/main/java/com/example/smartbowlib/UnityMsgSender.java
  42. 0 58
      SmartBowLib/smartbowlib/src/main/java/com/example/smartbowlib/lebo/AuthFragment.java
  43. 0 50
      SmartBowLib/smartbowlib/src/main/java/com/example/smartbowlib/lebo/BrowseFragment.java
  44. 0 71
      SmartBowLib/smartbowlib/src/main/java/com/example/smartbowlib/lebo/ConnectFragment.java
  45. 0 175
      SmartBowLib/smartbowlib/src/main/java/com/example/smartbowlib/lebo/MirrorFragment.java
  46. 0 84
      SmartBowLib/smartbowlib/src/main/java/com/example/smartbowlib/lebo/ScreenProjection.java
  47. 0 3
      SmartBowLib/smartbowlib/src/main/res/values/strings.xml
  48. 0 45
      SmartBowLib/smartbowlib/src/test/java/com/example/smartbowlib/ExampleUnitTest.java
  49. 0 147
      代码备份/2022-6-11/o09AxisCS.cs
  50. 0 1
      代码备份/2022-6-11/备份原因.txt
  51. BIN
      代码备份/2022-6-24/hit.mp3
  52. BIN
      代码备份/2022-6-24/hit.wav
  53. 0 1
      代码备份/2022-6-24/备份原因.txt
  54. 0 589
      代码备份/2022-6-4/BluetoothAim.cs
  55. 0 1
      代码备份/2022-6-4/备份原因.txt
  56. 0 377
      代码备份/2022-7-15/修改前/AimHandler.cs
  57. 0 484
      代码备份/2022-7-15/修改前/BluetoothAim.cs
  58. 0 369
      代码备份/2022-7-15/修改后-新硬件1和2/AimHandler.cs
  59. 0 484
      代码备份/2022-7-15/修改后-新硬件1和2/BluetoothAim.cs
  60. 0 381
      代码备份/2022-7-15/修改后-旧版换方向/AimHandler.cs
  61. 0 276
      代码备份/2022-8-9/o09AxisCS.cs
  62. BIN
      代码备份/九轴dll/0.001/o0MagnetometerCalibrater.dll
  63. BIN
      代码备份/九轴dll/0.01/o0MagnetometerCalibrater.dll
  64. 0 301
      代码备份/新版算法-2022-8-24/o09AxisCS.cs
  65. 0 159
      代码备份/旧版算法-2022-8-19/o09AxisCS.cs
  66. 0 340
      代码备份/校准界面-2022-10-17/DeviceCalibrateView.cs
  67. 0 4057
      代码备份/校准界面-2022-10-17/DeviceCalibrateView.prefab
  68. 0 7
      代码备份/校准界面-2022-10-17/DeviceCalibrateView.prefab.meta
  69. 0 512
      代码备份/野鸡-2022-10-18/Yeji.cs
  70. BIN
      备用资源/Fonts/SDF/TTC/msyh.ttc
  71. BIN
      备用资源/Fonts/SDF/TTC/msyhbd.ttc
  72. BIN
      备用资源/Fonts/SDF/TTC/msyhl.ttc

BIN
BluetoothServer.jar


+ 0 - 7
BluetoothServer/.classpath

@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
-	<classpathentry kind="lib" path="lib/JCEngine.jar"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>

+ 0 - 17
BluetoothServer/.project

@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>BluetoothServer</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>

+ 0 - 11
BluetoothServer/.settings/org.eclipse.jdt.core.prefs

@@ -1,11 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.8
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.8

BIN
BluetoothServer/bin/Player.class


BIN
BluetoothServer/lib/JCEngine.jar


+ 0 - 40
BluetoothServer/src/Player.java

@@ -1,40 +0,0 @@
-import io.netty.util.internal.ConcurrentSet;
-import pers.jc.engine.JCEngine;
-import pers.jc.engine.JCEntity;
-import pers.jc.network.SocketFunction;
-import pers.jc.util.JCLogger;
-
-@SuppressWarnings("deprecation")
-public class Player extends JCEntity {
-	public static ConcurrentSet<Player> players = new ConcurrentSet<>();
-	
-	public static void main(String[] args) {
-		JCEngine.boot(9888, "/BLE", Player.class);
-	}
-	
-	@Override
-	public void onLoad() {
-		players.add(this);
-		System.out.println("怬 ID:" + id);
-	}
-	
-	@Override
-	public void onDestroy() {
-		players.remove(this);
-		System.out.println("Í˳ö ID:" + id);
-	}
-	
-	@SocketFunction
-	public void uploadData(String sign, String data) {
-		for (Player player : players) {
-			if (player != this) {
-				player.call("receiveData", sign, data);
-			}
-		}
-	}
-	
-	@SocketFunction
-	public void showError(String error) {
-		JCLogger.error("[Error From Client]", error);
-	}
-}

+ 0 - 12
DebugCS/DebugGameChallenge.cs

@@ -1,12 +0,0 @@
-//调试:打印树、左边树和右边树的三者间距离
-void DebugLogDistance() {
-    Vector3 v3a = GameObject.Find("TreeCollider").transform.position;
-    Vector2 v2a = new Vector2(v3a.x, v3a.z);
-    Vector3 v3b = GameObject.Find("TreeCollider (1)").transform.position;
-    Vector2 v2b = new Vector2(v3b.x, v3b.z);
-    Vector3 v3c = GameObject.Find("Main Camera").transform.position;
-    Vector2 v2c = new Vector2(v3c.x, v3c.z);
-    Debug.Log("弓到右边树的距离:" + (v2c - v2a).magnitude + "M");
-    Debug.Log("弓到左边树的距离:" + (v2c - v2b).magnitude + "M");
-    Debug.Log("左边树到右边树的距离:" + (v2b - v2a).magnitude + "M");
-}

BIN
DebugCS/TestBLE.unitypackage


+ 0 - 0
Doc/password.txt → Documents/App私钥-密码.txt


+ 0 - 0
Doc/App私钥.md → Documents/App私钥.md


+ 0 - 0
Doc/App私钥/2022-11-17/smartbow.jks → Documents/App私钥/2022-11-17/smartbow.jks


+ 0 - 0
Doc/App私钥/2022-11-17/smartbow.keystore → Documents/App私钥/2022-11-17/smartbow.keystore


+ 0 - 0
Doc/App私钥/2022-4-25/output.zip → Documents/App私钥/2022-4-25/output.zip


+ 0 - 0
Doc/App私钥/2022-4-25/smartbow.jks → Documents/App私钥/2022-4-25/smartbow.jks


+ 0 - 0
Doc/App私钥/2022-4-25/smartbow.keystore → Documents/App私钥/2022-4-25/smartbow.keystore


+ 0 - 0
Doc/App私钥/pepk.jar → Documents/App私钥/pepk.jar


+ 1 - 1
ProjectSettings/ProjectSettings.asset

@@ -245,7 +245,7 @@ PlayerSettings:
   AndroidTargetArchitectures: 2
   AndroidSplashScreenScale: 0
   androidSplashScreen: {fileID: 0}
-  AndroidKeystoreName: "{inproject}: Doc/App\u79C1\u94A5/2022-11-17/smartbow.keystore"
+  AndroidKeystoreName: "{inproject}: Documents/App\u79C1\u94A5/2022-11-17/smartbow.keystore"
   AndroidKeyaliasName: smartbow
   AndroidBuildApkPerCpuArchitecture: 0
   AndroidTVCompatibility: 0

+ 0 - 14
SmartBowLib/.gitignore

@@ -1,14 +0,0 @@
-*.iml
-.gradle
-/local.properties
-/.idea/caches
-/.idea/libraries
-/.idea/modules.xml
-/.idea/workspace.xml
-/.idea/navEditor.xml
-/.idea/assetWizardSettings.xml
-.DS_Store
-/build
-/captures
-.externalNativeBuild
-.cxx

+ 0 - 116
SmartBowLib/.idea/codeStyles/Project.xml

@@ -1,116 +0,0 @@
-<component name="ProjectCodeStyleConfiguration">
-  <code_scheme name="Project" version="173">
-    <codeStyleSettings language="XML">
-      <indentOptions>
-        <option name="CONTINUATION_INDENT_SIZE" value="4" />
-      </indentOptions>
-      <arrangement>
-        <rules>
-          <section>
-            <rule>
-              <match>
-                <AND>
-                  <NAME>xmlns:android</NAME>
-                  <XML_ATTRIBUTE />
-                  <XML_NAMESPACE>^$</XML_NAMESPACE>
-                </AND>
-              </match>
-            </rule>
-          </section>
-          <section>
-            <rule>
-              <match>
-                <AND>
-                  <NAME>xmlns:.*</NAME>
-                  <XML_ATTRIBUTE />
-                  <XML_NAMESPACE>^$</XML_NAMESPACE>
-                </AND>
-              </match>
-              <order>BY_NAME</order>
-            </rule>
-          </section>
-          <section>
-            <rule>
-              <match>
-                <AND>
-                  <NAME>.*:id</NAME>
-                  <XML_ATTRIBUTE />
-                  <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
-                </AND>
-              </match>
-            </rule>
-          </section>
-          <section>
-            <rule>
-              <match>
-                <AND>
-                  <NAME>.*:name</NAME>
-                  <XML_ATTRIBUTE />
-                  <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
-                </AND>
-              </match>
-            </rule>
-          </section>
-          <section>
-            <rule>
-              <match>
-                <AND>
-                  <NAME>name</NAME>
-                  <XML_ATTRIBUTE />
-                  <XML_NAMESPACE>^$</XML_NAMESPACE>
-                </AND>
-              </match>
-            </rule>
-          </section>
-          <section>
-            <rule>
-              <match>
-                <AND>
-                  <NAME>style</NAME>
-                  <XML_ATTRIBUTE />
-                  <XML_NAMESPACE>^$</XML_NAMESPACE>
-                </AND>
-              </match>
-            </rule>
-          </section>
-          <section>
-            <rule>
-              <match>
-                <AND>
-                  <NAME>.*</NAME>
-                  <XML_ATTRIBUTE />
-                  <XML_NAMESPACE>^$</XML_NAMESPACE>
-                </AND>
-              </match>
-              <order>BY_NAME</order>
-            </rule>
-          </section>
-          <section>
-            <rule>
-              <match>
-                <AND>
-                  <NAME>.*</NAME>
-                  <XML_ATTRIBUTE />
-                  <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
-                </AND>
-              </match>
-              <order>ANDROID_ATTRIBUTE_ORDER</order>
-            </rule>
-          </section>
-          <section>
-            <rule>
-              <match>
-                <AND>
-                  <NAME>.*</NAME>
-                  <XML_ATTRIBUTE />
-                  <XML_NAMESPACE>.*</XML_NAMESPACE>
-                </AND>
-              </match>
-              <order>BY_NAME</order>
-            </rule>
-          </section>
-        </rules>
-      </arrangement>
-    </codeStyleSettings>
-  </code_scheme>
-</component>

+ 0 - 16
SmartBowLib/.idea/gradle.xml

@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="GradleSettings">
-    <option name="linkedExternalProjectsSettings">
-      <GradleProjectSettings>
-        <compositeConfiguration>
-          <compositeBuild compositeDefinitionSource="SCRIPT" />
-        </compositeConfiguration>
-        <option name="distributionType" value="DEFAULT_WRAPPED" />
-        <option name="externalProjectPath" value="$PROJECT_DIR$" />
-        <option name="resolveModulePerSourceSet" value="false" />
-        <option name="testRunner" value="PLATFORM" />
-      </GradleProjectSettings>
-    </option>
-  </component>
-</project>

+ 0 - 9
SmartBowLib/.idea/misc.xml

@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK">
-    <output url="file://$PROJECT_DIR$/build/classes" />
-  </component>
-  <component name="ProjectType">
-    <option name="id" value="Android" />
-  </component>
-</project>

+ 0 - 12
SmartBowLib/.idea/runConfigurations.xml

@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="RunConfigurationProducerService">
-    <option name="ignoredProducers">
-      <set>
-        <option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" />
-        <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" />
-        <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" />
-      </set>
-    </option>
-  </component>
-</project>

+ 0 - 6
SmartBowLib/.idea/vcs.xml

@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="VcsDirectoryMappings">
-    <mapping directory="$PROJECT_DIR$/.." vcs="Git" />
-  </component>
-</project>

+ 0 - 27
SmartBowLib/build.gradle

@@ -1,27 +0,0 @@
-// Top-level build file where you can add configuration options common to all sub-projects/modules.
-
-buildscript {
-    repositories {
-        google()
-        jcenter()
-        
-    }
-    dependencies {
-        classpath 'com.android.tools.build:gradle:3.5.2'
-        
-        // NOTE: Do not place your application dependencies here; they belong
-        // in the individual module build.gradle files
-    }
-}
-
-allprojects {
-    repositories {
-        google()
-        jcenter()
-
-    }
-}
-
-task clean(type: Delete) {
-    delete rootProject.buildDir
-}

+ 0 - 20
SmartBowLib/gradle.properties

@@ -1,20 +0,0 @@
-# Project-wide Gradle settings.
-# IDE (e.g. Android Studio) users:
-# Gradle settings configured through the IDE *will override*
-# any settings specified in this file.
-# For more details on how to configure your build environment visit
-# http://www.gradle.org/docs/current/userguide/build_environment.html
-# Specifies the JVM arguments used for the daemon process.
-# The setting is particularly useful for tweaking memory settings.
-org.gradle.jvmargs=-Xmx1536m
-# When configured, Gradle will run in incubating parallel mode.
-# This option should only be used with decoupled projects. More details, visit
-# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
-# org.gradle.parallel=true
-# AndroidX package structure to make it clearer which packages are bundled with the
-# Android operating system, and which are packaged with your app's APK
-# https://developer.android.com/topic/libraries/support-library/androidx-rn
-android.useAndroidX=true
-# Automatically convert third-party libraries to use AndroidX
-android.enableJetifier=true
-

BIN
SmartBowLib/gradle/wrapper/gradle-wrapper.jar


+ 0 - 6
SmartBowLib/gradle/wrapper/gradle-wrapper.properties

@@ -1,6 +0,0 @@
-#Thu Mar 03 14:38:48 GMT+08:00 2022
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip

+ 0 - 172
SmartBowLib/gradlew

@@ -1,172 +0,0 @@
-#!/usr/bin/env sh
-
-##############################################################################
-##
-##  Gradle start up script for UN*X
-##
-##############################################################################
-
-# Attempt to set APP_HOME
-# Resolve links: $0 may be a link
-PRG="$0"
-# Need this for relative symlinks.
-while [ -h "$PRG" ] ; do
-    ls=`ls -ld "$PRG"`
-    link=`expr "$ls" : '.*-> \(.*\)$'`
-    if expr "$link" : '/.*' > /dev/null; then
-        PRG="$link"
-    else
-        PRG=`dirname "$PRG"`"/$link"
-    fi
-done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >/dev/null
-APP_HOME="`pwd -P`"
-cd "$SAVED" >/dev/null
-
-APP_NAME="Gradle"
-APP_BASE_NAME=`basename "$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=""
-
-# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD="maximum"
-
-warn () {
-    echo "$*"
-}
-
-die () {
-    echo
-    echo "$*"
-    echo
-    exit 1
-}
-
-# 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
-    ;;
-  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" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
-    MAX_FD_LIMIT=`ulimit -H -n`
-    if [ $? -eq 0 ] ; then
-        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
-            MAX_FD="$MAX_FD_LIMIT"
-        fi
-        ulimit -n $MAX_FD
-        if [ $? -ne 0 ] ; then
-            warn "Could not set maximum file descriptor limit: $MAX_FD"
-        fi
-    else
-        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
-    fi
-fi
-
-# For Darwin, add options to specify how the application appears in the dock
-if $darwin; then
-    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
-fi
-
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin ; then
-    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
-    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
-    JAVACMD=`cygpath --unix "$JAVACMD"`
-
-    # We build the pattern for arguments to be converted via cygpath
-    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
-    SEP=""
-    for dir in $ROOTDIRSRAW ; do
-        ROOTDIRS="$ROOTDIRS$SEP$dir"
-        SEP="|"
-    done
-    OURCYGPATTERN="(^($ROOTDIRS))"
-    # Add a user-defined pattern to the cygpath arguments
-    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
-        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
-    fi
-    # Now convert the arguments - kludge to limit ourselves to /bin/sh
-    i=0
-    for arg in "$@" ; do
-        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
-        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
-
-        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
-            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
-        else
-            eval `echo args$i`="\"$arg\""
-        fi
-        i=$((i+1))
-    done
-    case $i in
-        (0) set -- ;;
-        (1) set -- "$args0" ;;
-        (2) set -- "$args0" "$args1" ;;
-        (3) set -- "$args0" "$args1" "$args2" ;;
-        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
-        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
-        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
-        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
-        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
-        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
-    esac
-fi
-
-# Escape application args
-save () {
-    for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
-    echo " "
-}
-APP_ARGS=$(save "$@")
-
-# Collect all arguments for the java command, following the shell quoting and substitution rules
-eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
-
-# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
-if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
-  cd "$(dirname "$0")"
-fi
-
-exec "$JAVACMD" "$@"

+ 0 - 84
SmartBowLib/gradlew.bat

@@ -1,84 +0,0 @@
-@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 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=
-
-@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 init
-
-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 init
-
-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
-
-:init
-@rem Get command-line arguments, handling Windows variants
-
-if not "%OS%" == "Windows_NT" goto win9xME_args
-
-:win9xME_args
-@rem Slurp the command line arguments.
-set CMD_LINE_ARGS=
-set _SKIP=2
-
-:win9xME_args_slurp
-if "x%~1" == "x" goto execute
-
-set CMD_LINE_ARGS=%*
-
-: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 %CMD_LINE_ARGS%
-
-: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

+ 0 - 2
SmartBowLib/settings.gradle

@@ -1,2 +0,0 @@
-include ':smartbowlib'
-rootProject.name='SmartBowLib'

+ 0 - 1
SmartBowLib/smartbowlib/.gitignore

@@ -1 +0,0 @@
-/build

+ 0 - 35
SmartBowLib/smartbowlib/build.gradle

@@ -1,35 +0,0 @@
-apply plugin: 'com.android.library'
-
-android {
-    compileSdkVersion 30
-    buildToolsVersion "30.0.2"
-
-
-    defaultConfig {
-        minSdkVersion 19
-        targetSdkVersion 30
-        versionCode 1
-        versionName "1.0"
-
-        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
-        consumerProguardFiles 'consumer-rules.pro'
-    }
-
-    buildTypes {
-        release {
-            minifyEnabled false
-            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
-        }
-    }
-
-}
-
-dependencies {
-//    implementation fileTree(dir: 'libs', include: ['*.jar'])
-    implementation 'androidx.appcompat:appcompat:1.0.2'
-    testImplementation 'junit:junit:4.12'
-    androidTestImplementation 'androidx.test.ext:junit:1.1.0'
-    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
-    compileOnly files('libs/classes.jar') //unity(只编译,打包时不包含)
-    compileOnly files('libs/sdk-api.jar') //乐播(只编译,打包时不包含)
-}

+ 0 - 0
SmartBowLib/smartbowlib/consumer-rules.pro


BIN
SmartBowLib/smartbowlib/libs/classes.jar


BIN
SmartBowLib/smartbowlib/libs/sdk-api.jar


+ 0 - 21
SmartBowLib/smartbowlib/proguard-rules.pro

@@ -1,21 +0,0 @@
-# Add project specific ProGuard rules here.
-# You can control the set of applied configuration files using the
-# proguardFiles setting in build.gradle.
-#
-# For more details, see
-#   http://developer.android.com/guide/developing/tools/proguard.html
-
-# If your project uses WebView with JS, uncomment the following
-# and specify the fully qualified class name to the JavaScript interface
-# class:
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-#   public *;
-#}
-
-# Uncomment this to preserve the line number information for
-# debugging stack traces.
-#-keepattributes SourceFile,LineNumberTable
-
-# If you keep the line number information, uncomment this to
-# hide the original source file name.
-#-renamesourcefileattribute SourceFile

+ 0 - 27
SmartBowLib/smartbowlib/src/androidTest/java/com/example/smartbowlib/ExampleInstrumentedTest.java

@@ -1,27 +0,0 @@
-package com.example.smartbowlib;
-
-import android.content.Context;
-
-import androidx.test.platform.app.InstrumentationRegistry;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.junit.Assert.*;
-
-/**
- * Instrumented test, which will execute on an Android device.
- *
- * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
- */
-@RunWith(AndroidJUnit4.class)
-public class ExampleInstrumentedTest {
-    @Test
-    public void useAppContext() {
-        // Context of the app under test.
-        Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
-
-        assertEquals("com.example.smartbowlib.test", appContext.getPackageName());
-    }
-}

+ 0 - 8
SmartBowLib/smartbowlib/src/main/AndroidManifest.xml

@@ -1,8 +0,0 @@
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.smartbowlib">
-    <uses-permission android:name="android.permission.BLUETOOTH" />
-    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
-    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
-    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
-    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
-</manifest>

+ 0 - 95
SmartBowLib/smartbowlib/src/main/java/com/example/smartbowlib/BluetoothTester.java

@@ -1,95 +0,0 @@
-package com.example.smartbowlib;
-
-import android.app.Activity;
-import android.bluetooth.BluetoothAdapter;
-import android.content.Context;
-import android.content.pm.PackageManager;
-import android.os.Build.VERSION;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class BluetoothTester {
-
-    /**
-     * 检测蓝牙定位授权
-     * @param context unity的activity
-     * @return
-     */
-    public static int checkBlePermissions(Context context) {
-        if (VERSION.SDK_INT >= 23) {
-            List<String> permissions = new ArrayList<>();
-            if (context.checkSelfPermission("android.permission.BLUETOOTH") != PackageManager.PERMISSION_GRANTED) {
-                permissions.add("android.permission.BLUETOOTH");
-            }
-            if (context.checkSelfPermission("android.permission.ACCESS_COARSE_LOCATION") != PackageManager.PERMISSION_GRANTED) {
-                permissions.add("android.permission.ACCESS_COARSE_LOCATION");
-            }
-            if (context.checkSelfPermission("android.permission.BLUETOOTH_ADMIN") != PackageManager.PERMISSION_GRANTED) {
-                permissions.add("android.permission.BLUETOOTH_ADMIN");
-            }
-            if (context.checkSelfPermission("android.permission.ACCESS_FINE_LOCATION") != PackageManager.PERMISSION_GRANTED) {
-                permissions.add("android.permission.ACCESS_FINE_LOCATION");
-            }
-            if (VERSION.SDK_INT >= 29 && context.checkSelfPermission("android.permission.ACCESS_BACKGROUND_LOCATION") != PackageManager.PERMISSION_GRANTED) {
-                permissions.add("android.permission.ACCESS_BACKGROUND_LOCATION");
-            }
-            if (permissions.size() > 0) {
-                int notAskCount = 0;
-                for (String permission : permissions) {
-                    if (!((Activity) context).shouldShowRequestPermissionRationale(permission)) {
-                        notAskCount++;
-                    }
-                }
-                if (notAskCount > 0) {
-                    return -1; //有权限被永久拒绝
-                }
-                return 0; //有权限未被授予
-            }
-        }
-        return 1; //权限全部被授予
-    }
-
-    public static String test(Context context) {
-        String text = "";
-        if (VERSION.SDK_INT >= 23) {
-            List<String> permissions = new ArrayList<>();
-            if (context.checkSelfPermission("android.permission.BLUETOOTH") != PackageManager.PERMISSION_GRANTED) {
-                permissions.add("android.permission.BLUETOOTH");
-            }
-            if (context.checkSelfPermission("android.permission.ACCESS_COARSE_LOCATION") != PackageManager.PERMISSION_GRANTED) {
-                permissions.add("android.permission.ACCESS_COARSE_LOCATION");
-            }
-            if (context.checkSelfPermission("android.permission.BLUETOOTH_ADMIN") != PackageManager.PERMISSION_GRANTED) {
-                permissions.add("android.permission.BLUETOOTH_ADMIN");
-            }
-            if (context.checkSelfPermission("android.permission.ACCESS_FINE_LOCATION") != PackageManager.PERMISSION_GRANTED) {
-                permissions.add("android.permission.ACCESS_FINE_LOCATION");
-            }
-            if (VERSION.SDK_INT >= 29 && context.checkSelfPermission("android.permission.ACCESS_BACKGROUND_LOCATION") != PackageManager.PERMISSION_GRANTED) {
-                permissions.add("android.permission.ACCESS_BACKGROUND_LOCATION");
-            }
-            if (permissions.size() > 0) {
-                for (String permission : permissions) {
-                    text += permission;
-                    if (!((Activity) context).shouldShowRequestPermissionRationale(permission)) {
-                        text += "===@@@";
-                    }
-                    text += "\n";
-                }
-            }
-        }
-        return text;
-    }
-
-    /**
-     * 检测手机上的蓝牙开关是否已经打开
-     * @return
-     */
-    public static int checkBleValid() {
-        BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
-        if (adapter == null) return -1; //该设备不支持蓝牙
-        if (adapter.isEnabled()) return 1; //蓝牙开关已打开
-        return 0; //蓝牙开关未打开
-    }
-}

+ 0 - 22
SmartBowLib/smartbowlib/src/main/java/com/example/smartbowlib/UnityMsgSender.java

@@ -1,22 +0,0 @@
-package com.example.smartbowlib;
-
-import com.unity3d.player.UnityPlayer;
-
-public class UnityMsgSender {
-
-    public static void log(String info) {
-        UnityPlayer.UnitySendMessage("MsgReceiver", "Log", info);
-    }
-
-    public static void warn(String info) {
-        UnityPlayer.UnitySendMessage("MsgReceiver", "Warn", info);
-    }
-
-    public static void error(String info) {
-        UnityPlayer.UnitySendMessage("MsgReceiver", "Error", info);
-    }
-
-    public static void onMessage(String tag, String msg) {
-        UnityPlayer.UnitySendMessage("MsgReceiver", "OnMessage", tag + '|' + msg);
-    }
-}

+ 0 - 58
SmartBowLib/smartbowlib/src/main/java/com/example/smartbowlib/lebo/AuthFragment.java

@@ -1,58 +0,0 @@
-package com.example.smartbowlib.lebo;
-
-import android.content.Context;
-import android.provider.Settings;
-
-import com.example.smartbowlib.UnityMsgSender;
-import com.hpplay.sdk.source.api.IBindSdkListener;
-import com.hpplay.sdk.source.api.LelinkSourceSDK;
-import com.hpplay.sdk.source.browse.api.AuthListener;
-import com.hpplay.sdk.source.browse.api.IAPI;
-
-class AuthFragment {
-    private Context mContext;
-    public void setContext(Context context) {
-        this.mContext = context;
-    }
-
-    public final IBindSdkListener bindSdkListener = new IBindSdkListener() {
-        @Override
-        public void onBindCallback(boolean success) {
-            UnityMsgSender.log("onBindCallback:" + success);
-            if (!success) {
-                UnityMsgSender.onMessage("lebo.onError", "乐播SDK绑定失败");
-            }
-        }
-    };
-
-    private boolean mFirstAuthSuccess = true;
-    public final AuthListener authLister = new AuthListener() {
-        @Override
-        public void onAuthSuccess(String s, String s1) {
-            UnityMsgSender.log("onAuthSuccess 1:" + s + " 2:" + s1);
-            if (mFirstAuthSuccess) {
-                mFirstAuthSuccess = false;
-                LelinkSourceSDK.getInstance().setPermissionMode(IAPI.PERMISSION_MODE_CLOUD_LICENSE, getAndroidID(mContext));
-                UnityMsgSender.log("Permission License");
-            }
-            UnityMsgSender.onMessage("lebo.onAuthSuccess", "");
-        }
-        @Override
-        public void onAuthFailed(int i) {
-            UnityMsgSender.error("onAuthFailed 1:" + i);
-            UnityMsgSender.onMessage("lebo.onError", "乐播平台认证失败");
-        }
-    };
-
-    private String getAndroidID(Context context) {
-        try {
-            String sAndroidID = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
-            return sAndroidID;
-        } catch (Exception e) {} catch (Error r) {}
-        try {
-            String sAndroidID = Settings.System.getString(context.getContentResolver(), Settings.System.ANDROID_ID);
-            return sAndroidID;
-        } catch (Exception e) {} catch (Error r) {}
-        return "";
-    }
-}

+ 0 - 50
SmartBowLib/smartbowlib/src/main/java/com/example/smartbowlib/lebo/BrowseFragment.java

@@ -1,50 +0,0 @@
-package com.example.smartbowlib.lebo;
-
-import com.example.smartbowlib.UnityMsgSender;
-import com.hpplay.sdk.source.browse.api.IBrowseListener;
-import com.hpplay.sdk.source.browse.api.LelinkServiceInfo;
-
-import org.json.JSONArray;
-import org.json.JSONObject;
-
-import java.util.ArrayList;
-import java.util.List;
-
-class BrowseFragment {
-    private List<LelinkServiceInfo> mBrowseList = new ArrayList<>();
-    public List<LelinkServiceInfo> getBrowseList() {
-        return mBrowseList;
-    }
-
-    public final IBrowseListener browseListener = new IBrowseListener() {
-        @Override
-        public void onBrowse(int i, List<LelinkServiceInfo> list) {
-            if (i == IBrowseListener.BROWSE_ERROR_AUTH) {
-                UnityMsgSender.warn("授权失败");
-                return;
-            }
-            boolean isStop = false;
-            if (i == IBrowseListener.BROWSE_STOP) {
-                isStop = true;
-                UnityMsgSender.warn("搜索停止");
-            } else if (i == IBrowseListener.BROWSE_TIMEOUT) {
-                isStop = true;
-                UnityMsgSender.warn("搜索超时");
-            }
-            mBrowseList = list;
-            JSONArray jsonArray = new JSONArray();
-            for (LelinkServiceInfo item : list) {
-                JSONObject jo = new JSONObject();
-                try {
-                    jo.put("name", item.getName());
-                    jo.put("uid", item.getIp());
-                } catch (Exception e) {}
-                jsonArray.put(jo);
-            }
-            UnityMsgSender.onMessage("lebo.onBrowse", jsonArray.toString());
-            if (isStop) {
-                UnityMsgSender.onMessage("lebo.onBrowseStop", "");
-            }
-        }
-    };
-}

+ 0 - 71
SmartBowLib/smartbowlib/src/main/java/com/example/smartbowlib/lebo/ConnectFragment.java

@@ -1,71 +0,0 @@
-package com.example.smartbowlib.lebo;
-
-import android.text.TextUtils;
-
-import com.example.smartbowlib.UnityMsgSender;
-import com.hpplay.sdk.source.api.IConnectListener;
-import com.hpplay.sdk.source.browse.api.LelinkServiceInfo;
-
-class ConnectFragment {
-    private LelinkServiceInfo mSelectInfo;
-    public LelinkServiceInfo getSelectInfo() {
-        return mSelectInfo;
-    }
-
-    public final IConnectListener connectListener = new IConnectListener() {
-        @Override
-        public void onConnect(LelinkServiceInfo lelinkServiceInfo, int protocol) {
-            UnityMsgSender.log("onConnect:" + lelinkServiceInfo.getName());
-            String type = protocol == IConnectListener.TYPE_LELINK ? "Lelink"
-                    : protocol == IConnectListener.TYPE_DLNA ? "DLNA"
-                    : protocol == IConnectListener.TYPE_IM ? "IM" : ("协议:" + protocol);
-            UnityMsgSender.log(type + "  " + lelinkServiceInfo.getName() + "连接成功");
-            mSelectInfo = lelinkServiceInfo;
-            UnityMsgSender.onMessage("lebo.onConnect", "");
-        }
-        @Override
-        public void onDisconnect(LelinkServiceInfo lelinkServiceInfo, int what, int extra) {
-            if (lelinkServiceInfo == null) {
-                return;
-            }
-            UnityMsgSender.log("onDisconnect:" + lelinkServiceInfo.getName() + " disConnectType:" + what + " extra:" + extra);
-            String text = null;
-            if (what == IConnectListener.WHAT_HARASS_WAITING) {// 防骚扰,等待用户确认
-                // 乐播投屏防骚扰等待消息,请开发者务必处理该消息
-                text = lelinkServiceInfo.getName() + "等待用户确认";
-            } else if (what == IConnectListener.WHAT_DISCONNECT) {
-                switch (extra) {
-                    case IConnectListener.EXTRA_HARASS_REJECT:// 防骚扰,用户拒绝投屏
-                        text = lelinkServiceInfo.getName() + "连接被拒绝";
-                        break;
-                    case IConnectListener.EXTRA_HARASS_TIMEOUT:// 防骚扰,用户响应超时
-                        text = lelinkServiceInfo.getName() + "防骚扰响应超时";
-                        break;
-                    case IConnectListener.EXTRA_HARASS_BLACKLIST:// 防骚扰,该用户被加入黑名单
-                        text = lelinkServiceInfo.getName() + "已被加入投屏黑名单";
-                        break;
-                    case IConnectListener.EXTRA_CONNECT_DEVICE_OFFLINE:
-                        text = lelinkServiceInfo.getName() + "不在线";
-                        break;
-                    default:
-                        text = lelinkServiceInfo.getName() + "连接断开";
-                        break;
-                }
-            } else if (what == IConnectListener.WHAT_CONNECT_FAILED) {
-                switch (extra) {
-                    case IConnectListener.EXTRA_CONNECT_DEVICE_OFFLINE:
-                        text = lelinkServiceInfo.getName() + "不在线";
-                        break;
-                    default:
-                        text = lelinkServiceInfo.getName() + "连接失败";
-                        break;
-                }
-            }
-            if (TextUtils.isEmpty(text)) {
-                text = "onDisconnect " + what + "/" + extra;
-            }
-            UnityMsgSender.log(text);
-            UnityMsgSender.onMessage("lebo.onDisconnect", "");
-        }
-    };
-}

+ 0 - 175
SmartBowLib/smartbowlib/src/main/java/com/example/smartbowlib/lebo/MirrorFragment.java

@@ -1,175 +0,0 @@
-package com.example.smartbowlib.lebo;
-
-import android.text.TextUtils;
-
-import com.example.smartbowlib.UnityMsgSender;
-import com.hpplay.sdk.source.api.INewPlayerListener;
-import com.hpplay.sdk.source.api.LelinkPlayerInfo;
-import com.hpplay.sdk.source.api.LelinkSourceSDK;
-import com.hpplay.sdk.source.bean.CastBean;
-import com.hpplay.sdk.source.browse.api.LelinkServiceInfo;
-
-class MirrorFragment {
-    public final INewPlayerListener playerListener = new INewPlayerListener() {
-        @Override
-        public void onLoading(CastBean bean) {
-            UnityMsgSender.log("onLoading");
-        }
-        @Override
-        public void onStart(CastBean bean) {
-            UnityMsgSender.log("onStart");
-            UnityMsgSender.onMessage("lebo.onStart", "");
-        }
-        @Override
-        public void onPause(CastBean bean) {
-            UnityMsgSender.log("onPause");
-        }
-        @Override
-        public void onCompletion(CastBean bean, int type) {
-            UnityMsgSender.log("onCompletion 1:" + type);
-        }
-        @Override
-        public void onStop(CastBean bean) {
-            UnityMsgSender.log("onStop");
-            UnityMsgSender.onMessage("lebo.onStop", "");
-        }
-        @Override
-        public void onSeekComplete(CastBean bean, int position) {
-            UnityMsgSender.log("onSeekComplete 1:" + position);
-        }
-        @Override
-        public void onInfo(CastBean bean, final int what, final int extra) {
-            UnityMsgSender.log("onInfoA 1:" + what + " 2:" + extra);
-        }
-        @Override
-        public void onInfo(CastBean bean, int what, final String data) {
-            UnityMsgSender.log("onInfoB 1:" + what + " 2:" + data);
-        }
-        @Override
-        public void onError(CastBean bean, int what, int extra) {
-            String text = "未知异常";
-            switch (extra) {
-                case EXTRA_ERROR_AUTH:
-                case EXTRA_ERROR_AUTH_TIME_DONE:
-                    text = "SDK认证失败";
-                    break;
-                case EXTRA_NEED_SCREEN_CODE:
-                    text = "请输入密码";
-                    break;
-                case EXTRA_DEVICE_OFFLINE:
-                    text = "接收端不在线";
-                    break;
-                case EXTRA_ERROR_MIRROR_REQUEST_PERMISSION:
-                    text = "申请录屏权限发生异常";
-                    break;
-                case EXTRA_ERROR_MIRROR_REJECT_PERMISSION:
-                    text = "申请录屏权限被拒绝";
-                    break;
-                case EXTRA_ERROR_MIRROR_DEVICE_UNSUPPORTED:
-                    text = "此设备不支持镜像";
-                    break;
-                case EXTRA_ERROR_MIRROR_IO:
-                    text = "网络通讯异常";
-                    break;
-                case EXTRA_ERROR_MIRROR_UNSUPPORTED:
-                    text = "SDK不支持镜像";
-                    break;
-                case EXTRA_ERROR_MIRROR_SINK_UNSUPPORTED:
-                    text = "接收端不支持此镜像";
-                    break;
-                case EXTRA_ERROR_CLOUD_MIRROR_UNSUPPORTED:
-                    text = "没有云镜像权益";
-                    break;
-                case EXTRA_ERROR_MIRROR_INVALID_INPUT:
-                    text = "输入异常";
-                    break;
-            }
-            if (TextUtils.isEmpty(text)) {
-                text = "镜像 onError " + what + "/" + extra;
-            }
-            UnityMsgSender.error(text);
-            UnityMsgSender.onMessage("lebo.onError", text);
-        }
-        @Override
-        public void onVolumeChanged(CastBean bean, float percent) {
-            UnityMsgSender.log("onVolumeChanged 1:" + percent);
-        }
-        @Override
-        public void onPositionUpdate(CastBean bean, long duration, long position) {
-            UnityMsgSender.log("onPositionUpdate 1:" + duration + " 2:" + position);
-        }
-    };
-
-    private String mPassword;
-    public void setPassword(String password) {
-        this.mPassword = password;
-    }
-
-    public void startMirror(LelinkServiceInfo mSelectInfo, int resolutionCheckId) {
-        // 分辨率
-        int resolutionLevel = 0;
-        switch (resolutionCheckId) {
-            case 2:
-                resolutionLevel = LelinkSourceSDK.RESOLUTION_HIGH;
-                break;
-            case 1:
-                resolutionLevel = LelinkSourceSDK.RESOLUTION_MIDDLE;
-                break;
-            case 0:
-                resolutionLevel = LelinkSourceSDK.RESOLUTION_AUTO;
-                break;
-        }
-        // 比特率
-        int bitrateLevel = 0;
-        int bitrateCheckId = 2;
-        switch (bitrateCheckId) {
-            case 2:
-                bitrateLevel = LelinkSourceSDK.BITRATE_HIGH;
-                break;
-            case 1:
-                bitrateLevel = LelinkSourceSDK.BITRATE_MIDDLE;
-                break;
-            case 0:
-                bitrateLevel = LelinkSourceSDK.BITRATE_LOW;
-                break;
-        }
-        // 音频
-        int audioType = LelinkPlayerInfo.CAPTURE_AUDIO_AUTO;
-        int audioCheckId = 1;
-        switch (audioCheckId) {
-            case 1:
-                audioType = LelinkPlayerInfo.CAPTURE_AUDIO_AUTO;
-                break;
-            case 0:
-                audioType = LelinkPlayerInfo.CAPTURE_AUDIO_CLOSE;
-                break;
-        }
-        // 全屏镜像
-        int fullScreen = LelinkPlayerInfo.FULLSCREEN_AUTO;
-        int fullScreenCheckId = 2;
-        switch (fullScreenCheckId) {
-            case 2:
-                fullScreen = LelinkPlayerInfo.FULLSCREEN_AUTO;
-                break;
-            case 1:
-                fullScreen = LelinkPlayerInfo.FULLSCREEN_ON;
-                break;
-            case 0:
-                fullScreen = LelinkPlayerInfo.FULLSCREEN_OFF;
-                break;
-        }
-        //两种方法都可镜像
-        LelinkPlayerInfo lelinkPlayerInfo = new LelinkPlayerInfo();
-        lelinkPlayerInfo.setAutoBitrate(false);
-        lelinkPlayerInfo.setLelinkServiceInfo(mSelectInfo);
-        lelinkPlayerInfo.setBitRateLevel(bitrateLevel);
-        lelinkPlayerInfo.setResolutionLevel(resolutionLevel);
-        if (!TextUtils.isEmpty(mPassword)) {
-            lelinkPlayerInfo.setCastPwd(mPassword);
-        }
-        lelinkPlayerInfo.setMirrorAudioType(audioType);
-        lelinkPlayerInfo.setFullScreen(fullScreen);
-        LelinkSourceSDK.getInstance().disableExternalAudio();
-        LelinkSourceSDK.getInstance().startMirror(lelinkPlayerInfo);
-    }
-}

+ 0 - 84
SmartBowLib/smartbowlib/src/main/java/com/example/smartbowlib/lebo/ScreenProjection.java

@@ -1,84 +0,0 @@
-package com.example.smartbowlib.lebo;
-
-import android.content.Context;
-
-import com.example.smartbowlib.UnityMsgSender;
-import com.hpplay.sdk.source.api.LelinkSourceSDK;
-import com.hpplay.sdk.source.browse.api.IAPI;
-import com.hpplay.sdk.source.browse.api.LelinkServiceInfo;
-
-import org.json.JSONArray;
-import org.json.JSONObject;
-
-import java.util.List;
-
-public class ScreenProjection {
-    private static AuthFragment mAuthFragment = new AuthFragment();
-    private static BrowseFragment mBrowseFragment = new BrowseFragment();
-    private static ConnectFragment mConnectFragment = new ConnectFragment();
-    private static MirrorFragment mMirrorFragment = new MirrorFragment();
-
-    public void initSDK(Context context) {
-        //重新绑定时,测试发现没法覆盖最初绑定的监听器,因此各种Fragment对象都用static存储,保证全局唯一
-        mAuthFragment.setContext(context);
-        LelinkSourceSDK.getInstance()
-                .setBindSdkListener(mAuthFragment.bindSdkListener)
-                .setBrowseResultListener(mBrowseFragment.browseListener)
-                .setConnectListener(mConnectFragment.connectListener)
-                .setNewPlayListener(mMirrorFragment.playerListener)
-                .setSdkInitInfo(context, "21602", "123e35a2f7a9b8e3ee8c00d2c4562328")
-                .bindSdk();
-        LelinkSourceSDK.getInstance().setOption(IAPI.OPTION_4, mAuthFragment.authLister);
-        UnityMsgSender.log("initSDK");
-    }
-
-    public void unBindSdk() {
-        LelinkSourceSDK.getInstance().unBindSdk();
-        UnityMsgSender.log("unBindSdk");
-    }
-
-    public void startBrowse() {
-        LelinkSourceSDK.getInstance().startBrowse();
-    }
-
-    public void stopBrowse() {
-        LelinkSourceSDK.getInstance().stopBrowse();
-    }
-
-    public void connect(String uid) {
-        UnityMsgSender.log("start connect");
-        for (LelinkServiceInfo item: mBrowseFragment.getBrowseList()) {
-            if (item.getIp().equals(uid)) {
-                LelinkSourceSDK.getInstance().connect(item);
-                return;
-            }
-        }
-        UnityMsgSender.log("start connect fail, can not find target.");
-    }
-
-    public void setPassword(String text) {
-        mMirrorFragment.setPassword(text);
-    }
-
-    public void startMirror(int resolutionCheckId) {
-        mMirrorFragment.startMirror(mConnectFragment.getSelectInfo(), resolutionCheckId);
-    }
-
-    public void stopPlay() {
-        LelinkSourceSDK.getInstance().stopPlay();
-    }
-
-    public void getConnectList() {
-        List<LelinkServiceInfo> list = LelinkSourceSDK.getInstance().getConnectInfos();
-        JSONArray jsonArray = new JSONArray();
-        for (LelinkServiceInfo item : list) {
-            JSONObject jo = new JSONObject();
-            try {
-                jo.put("name", item.getName());
-                jo.put("uid", item.getIp());
-            } catch (Exception e) {}
-            jsonArray.put(jo);
-        }
-        UnityMsgSender.log("getConnectList: " + jsonArray.toString());
-    }
-}

+ 0 - 3
SmartBowLib/smartbowlib/src/main/res/values/strings.xml

@@ -1,3 +0,0 @@
-<resources>
-<string name="app_name">SmartBowLib</string>
-</resources>

+ 0 - 45
SmartBowLib/smartbowlib/src/test/java/com/example/smartbowlib/ExampleUnitTest.java

@@ -1,45 +0,0 @@
-package com.example.smartbowlib;
-
-import org.junit.Test;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.nio.channels.FileChannel;
-
-import static org.junit.Assert.*;
-
-/**
- * Example local unit test, which will execute on the development machine (host).
- *
- * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
- */
-public class ExampleUnitTest {
-    @Test
-    public void copyAARtoDest() { //把导出的aar包复制到目标目录
-        String fileName = "smartbowlib-debug.aar";
-        File source = new File("E:\\UnityProject\\SmartBow\\SmartBowLib\\smartbowlib\\build\\outputs\\aar\\" + fileName);
-        File dest = new File("E:\\UnityProject\\SmartBow\\Assets\\Plugins\\Android\\" + fileName);
-        FileChannel inputChannel = null;
-        FileChannel outputChannel = null;
-        try {
-            inputChannel = new FileInputStream(source).getChannel();
-            outputChannel = new FileOutputStream(dest).getChannel();
-            outputChannel.transferFrom(inputChannel, 0, inputChannel.size());
-        } catch (Exception e) {
-            e.printStackTrace();
-        } finally {
-            try {
-                inputChannel.close();
-                outputChannel.close();
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-        System.out.println("复制成功");
-    }
-    @Test
-    public void addition_isCorrect() {
-        assertEquals(4, 2 + 2);
-    }
-}

+ 0 - 147
代码备份/2022-6-11/o09AxisCS.cs

@@ -1,147 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using UnityEngine;
-
-public class o09AxisCS
-{
-    static public Vector3 AccIdentity = new Vector3(0, -1, 0);
-    static public Vector3 MagIdentity = new Vector3(-1, 2, 0).normalized;
-    public class State
-    {
-        public long TimeGap;
-        public Vector3 Acc = AccIdentity;
-        public Vector3 AccSmooth = AccIdentity;
-        public double AccVariance = 1;
-
-        public Vector3 Gyr;
-        public Vector3 Mag = MagIdentity;
-        public Vector3 MagSmooth = MagIdentity;
-        public Quaternion Qua = Quaternion.identity;
-        public Quaternion QuaSmooth = Quaternion.identity;
-        public double Variance = 1;
-    }
-
-    o0Project.Variance HardwareVarianceGyr = new o0Project.Variance(1000);
-    o0Project.Variance HardwareVarianceAcc = new o0Project.Variance(1000);
-    o0Project.Variance HardwareVarianceMag = new o0Project.Variance(1000);
-
-    public List<State> States = new List<State>();
-
-    public Vector3 AccOld;
-    public Vector3 GyrOld;
-    public Vector3 MagOld;
-
-    public float x;
-    public float y;
-    public float z;
-
-    long TimeGapOld;
-    o0Aien.o0WeightedAverageFilterVector3 AccFilter = new o0Aien.o0WeightedAverageFilterVector3(5);
-    o0Aien.o0WeightedAverageFilterVector3 MagFilter = new o0Aien.o0WeightedAverageFilterVector3(10);
-         
-    public Quaternion update(Vector3 AccOld, Vector3 GyrOld, Vector3 MagOld, long TimeGapOld)
-    {
-        o0UIRawImageTester.UpdateAllOffset();
-
-        var Acc = this.AccOld;
-        var Gyr = (this.GyrOld + GyrOld)/2;
-        var Mag = this.MagOld;
-        float TimeGap = this.TimeGapOld;
-        this.AccOld = AccOld;
-        this.GyrOld = GyrOld;
-        this.MagOld = MagOld;
-        this.TimeGapOld = TimeGapOld;
-        var Last = States.LastOrDefault() ?? new State();
-        if (this.TimeGapOld <= 0)
-            return Last.Qua;
-        States.Add(new State());
-        if (States.Count > 200)
-            States.RemoveAt(0);
-        var state = States.Last();
-        state.Acc = Acc;
-
-        state.AccSmooth = AccFilter.Update(Acc);
-        
-        state.Gyr = Gyr;
-        state.Mag = Mag;/**/
-        state.MagSmooth = MagFilter.Update(Mag);
-        if (States.Count <=1)
-            return Quaternion.identity;
-
-        HardwareVarianceGyr.Update((Gyr).magnitude);//每毫秒方差2.331017E-09 度左右   0.00000002331017
-        HardwareVarianceAcc.Update(Vector3.Angle(state.Acc, Last.Acc));//方差0.0012度左右
-        HardwareVarianceMag.Update(Vector3.Angle(state.Mag, Last.Mag));//方差3.5度左右
-
-        var LastQuaternion = Last.Qua;
-
-        var newQua = new Quaternion();
-        newQua.eulerAngles = Gyr * TimeGap;
-        var quaGyr = LastQuaternion * newQua;
-
-        double AccLengthToAngle = 5;//1倍引力差相当于多少度方差
-        double MagLengthToAngle = 5;//1倍磁力差相当于多少度方差
-
-        double GyrVariance = Last.Variance + Math.Pow((Gyr * TimeGap).magnitude * 0.3,3);// 指数4 = 方差2 * 欧拉角旋转误差2     移动导致累计误差
-        double AccVariance = Math.Max((Gyr * TimeGap).magnitude, Vector3.Angle(state.AccSmooth, Last.AccSmooth)) * 1 + Math.Pow(Math.Abs(state.AccSmooth.magnitude - 9.8) / 9.8 * AccLengthToAngle,4);
-        double MagVariance = Math.Max((Gyr * TimeGap).magnitude, Vector3.Angle(state.MagSmooth, Last.MagSmooth)) * 1 + Math.Pow(Math.Abs(state.MagSmooth.magnitude - 1) / 1 * MagLengthToAngle,4);/**/
-
-        state.Variance = GyrVariance;
-        state.Variance = state.Variance * (AccVariance+ MagVariance) / (state.Variance + (AccVariance + MagVariance));
-
-        if (double.IsNaN(GyrVariance))
-            GyrVariance = double.MinValue;
-        if (double.IsNaN(AccVariance))
-            AccVariance = double.MinValue;
-        if (double.IsNaN(MagVariance))
-            MagVariance = double.MinValue;
-        if (double.IsNaN(state.Variance))
-            state.Variance = double.MinValue;
-
-        var quaAccMag = o0Project.o0.FormQuaternion(AccIdentity, MagIdentity, state.AccSmooth, state.MagSmooth, (float)(AccVariance / (AccVariance + MagVariance)));
-
-        var quaMinRate = GyrVariance / (GyrVariance + Math.Max(AccVariance, MagVariance));
-        var quaMaxRate = GyrVariance / (GyrVariance + Math.Min(AccVariance, MagVariance));
-        Quaternion quaFirst = Quaternion.Slerp(quaGyr, quaAccMag, (float)quaMinRate).normalized;
-        if (float.IsNaN(quaFirst.w))
-            quaFirst = Last.Qua;
-
-        var quaSecondRate = (quaMaxRate - quaMinRate) / (1 - quaMinRate);
-
-        state.Qua = AccVariance < MagVariance ? o0Project.o0.FormQuaternion(quaFirst, AccIdentity, state.AccSmooth, (float)quaSecondRate) : o0Project.o0.FormQuaternion(quaFirst, MagIdentity, state.MagSmooth, (float)quaSecondRate);
-        
-        if (float.IsNaN(state.Qua.w))
-            state.Qua = Last.Qua;/**/
-        state.QuaSmooth = Quaternion.Slerp(Last.QuaSmooth, state.Qua, 0.3f);
-
-        var frontV = Last.Qua * Vector3.forward;
-        var upV = Last.Qua * Vector3.up;
-
-        x = (Mathf.Atan(upV.y / upV.z) / Mathf.PI * 180 + (upV.z < 0 ? 90:270));
-        y = (Mathf.Atan(frontV.z / frontV.x) / Mathf.PI * 180+(frontV.x < 0 ? 90:270));
-        z = (Mathf.Atan(upV.y / upV.x) / Mathf.PI * 180 + (upV.x < 0 ? 90:270));
-
-        return state.Qua;
-    }
-
-    public void SetIdentity()
-    {
-        Quaternion qua = default;
-        AccIdentity = AccOld;
-        MagIdentity = MagOld;
-        qua = o0Project.o0.FormQuaternion(Quaternion.identity, Vector3.down,AccIdentity, 1);
-        AccIdentity=qua*AccIdentity;
-        MagIdentity = qua*MagIdentity;
-        States.Last().Qua = Quaternion.identity;
-        States.Last().Qua = qua*States.Last().Qua;//Quaternion.identity;
-        States.Last().Variance = 0.0000001;
-    }
-
-    public State getLastState() {
-        return this.States.Last();
-    }
-
-    public Vector3 getGyrOld() {
-        return GyrOld;
-    }
-}

+ 0 - 1
代码备份/2022-6-11/备份原因.txt

@@ -1 +0,0 @@
-九轴算法修改待测试

BIN
代码备份/2022-6-24/hit.mp3


BIN
代码备份/2022-6-24/hit.wav


+ 0 - 1
代码备份/2022-6-24/备份原因.txt

@@ -1 +0,0 @@
-射箭击中音频更换

+ 0 - 589
代码备份/2022-6-4/BluetoothAim.cs

@@ -1,589 +0,0 @@
-using ArduinoBluetoothAPI;
-using System;
-using UnityEngine;
-using System.Collections.Generic;
-using UnityEngine.UI;
-using DG.Tweening;
-using UnityEngine.SceneManagement;
-/* 蓝牙瞄准模块 */
-public class BluetoothAim : MonoBehaviour
-{
-    BluetoothHelper bluetoothHelper;
-    BluetoothHelperCharacteristic characteristicWrite;
-    BluetoothHelperService bluetoothService;
-    string targetDeviceName = "Bbow_20210501";
-    string deviceName = "";
-    bool canConnect = true;
-    [SerializeField] Text textUI;
-    public BluetoothStatusEnum status = BluetoothStatusEnum.Connect;
-    public bool hasData = false;
-    public long hasDataTime;
-    public static bool scanLock = false; //防止同时扫描冲突
-    public static BluetoothAim ins;
-
-    void Start() {
-        ins = this;
-        InitAutoDormancy();
-    }
-
-    void OnDestroy()
-    {
-        if (bluetoothHelper != null)
-        {
-            bluetoothHelper.Disconnect();
-        }
-    }
-
-    private bool userDoConnect = false;
-    private bool doConnect = false;
-    public void DoConnect() {
-        if (status == BluetoothStatusEnum.Connect) {
-            userDoConnect = true;
-            doConnect = true;
-            SetStatus(BluetoothStatusEnum.Connecting);
-        } else if (status == BluetoothStatusEnum.ConnectSuccess) {
-            userDoConnect = false;
-            doConnect = false;
-            OnDisconnect();
-            bluetoothHelper.Disconnect();
-        }
-    }
-
-    void OnDisconnect() {
-        hasData = false;
-        canConnect = true;
-        SetStatus(BluetoothStatusEnum.ConnectFail);
-        BowCamera.isTouchMode = true;
-        DestroyWhenDisconenct();
-    }
-
-    void Update()
-    {
-        if (userDoConnect && status == BluetoothStatusEnum.Connect) {
-            DoConnect();
-        }
-        if (doConnect) Connect();
-    }
-
-    void SetStatus(BluetoothStatusEnum statusValue) 
-    {
-        status = statusValue;
-        if (status == BluetoothStatusEnum.ConnectFail) {
-            Sequence sequence = DOTween.Sequence();
-            sequence.AppendInterval(2f);
-            sequence.AppendCallback(delegate() {
-                if (status == BluetoothStatusEnum.ConnectFail) {
-                    status = BluetoothStatusEnum.Connect;        
-                }
-            });
-            sequence.SetUpdate(true);
-            DeviceReconnectView.Show();
-        }
-    }
-
-    void Connect()
-    {
-        if (BluetoothShoot.scanLock)
-        {
-            return;
-        }
-        if (!canConnect)
-        {
-            return;
-        }
-        doConnect = false;
-        scanLock = true;
-        canConnect = false;
-        SetStatus(BluetoothStatusEnum.Connecting);
-        try
-        {
-            BluetoothHelper.BLE = true;
-            bluetoothHelper = BluetoothHelper.GetNewInstance();
-
-            bluetoothHelper.OnConnected += (BluetoothHelper helper) =>
-            {
-                Log("连接成功\n" + helper.getDeviceName());
-                SetStatus(BluetoothStatusEnum.ConnectSuccess);
-                BowCamera.isTouchMode = false;
-                foreach (BluetoothHelperService service in helper.getGattServices())
-                {
-                
-                    if (service.getName().ToLower().StartsWith("0000fff0"))
-                    {
-                        bluetoothService = service;
-
-                        foreach (BluetoothHelperCharacteristic characteristic in service.getCharacteristics())
-                        {
-                            if (characteristic.getName().ToLower().StartsWith("0000fff2"))
-                            {
-                                characteristicWrite = characteristic;
-                            }
-                            else if (characteristic.getName().ToLower().StartsWith("0000fff1"))
-                            {
-
-                                BluetoothHelperCharacteristic ch = new BluetoothHelperCharacteristic(characteristic.getName());
-                                ch.setService(bluetoothService.getName());
-                                bluetoothHelper.Subscribe(ch);
-                            }
-                        }
-                    }
-                }
-                // CallDelay(1, OpenInfrared);
-                // CallDelay(2, OpenReceiveData);
-                // CallDelay(3, RequestBattery);
-                CallDelay(2, () => {
-                    if (status != BluetoothStatusEnum.ConnectSuccess) return;
-                    InitWhenConenct();
-                });
-            };
-            bluetoothHelper.OnConnectionFailed += (BluetoothHelper helper) =>
-            {
-                Log("连接失败\n" + helper.getDeviceName());
-                OnDisconnect();
-            };
-            bluetoothHelper.OnCharacteristicChanged += (helper, value, characteristic) =>
-            {
-                if (!hasData) hasDataTime = JC.CS.Utility.GetTimestamp();
-                hasData = true;
-                byte[] bytes = value;
-                // Log(String.Join(",", bytes));
-                BluetoothClient.UploadData(0, bytes);
-                if (AimHandler.ins)
-                {
-                    AimHandler.ins.OnDataReceived(bytes);
-                }
-            };
-            int scanCount = 0;
-            bluetoothHelper.OnScanEnded += (BluetoothHelper helper, LinkedList<BluetoothDevice> nearbyDevices) =>
-            {
-                scanLock = false;
-                foreach (BluetoothDevice device in nearbyDevices)
-                {
-                    if (device.DeviceName == targetDeviceName)
-                    {
-                        deviceName = device.DeviceName;
-                        bluetoothHelper.setDeviceName(deviceName);
-                        bluetoothHelper.Connect();
-                        Log("发现设备\n" + device.DeviceName);
-                        return;
-                    }
-                }
-                if (scanCount < 3) { //如果没扫描到,则重新扫描,达到延迟提示失败的效果
-                    scanCount++;
-                    scanLock = true;
-                    bluetoothHelper.ScanNearbyDevices();
-                } else {
-                    canConnect = true;
-                    Log("没有发现设备");
-                    SetStatus(BluetoothStatusEnum.ConnectFail);
-                }
-            };
-
-            bluetoothHelper.ScanNearbyDevices();
-            Log("正在扫描设备");
-        }
-        catch (Exception e)
-        {
-            Debug.Log(e.Message);
-            canConnect = true;
-            Log("请打开蓝牙");
-        }
-    }
-
-    #region 自动进入/退出休眠状态, 这里做程指令发送队列,为了控制连续发送指令的间隔,避免硬件收不到或处理不过来
-        class CmdToSend {
-            public string[] cmds;
-            public Action onComplete;
-            public Func<bool> canDo; 
-            public CmdToSend(string[] cmds, Action onComplete, Func<bool> canDo) {
-                this.cmds = cmds; 
-                this.onComplete = onComplete;
-                this.canDo = canDo;
-            }
-        }
-        Queue<CmdToSend> cmdWaitingList = new Queue<CmdToSend>();
-        bool isSendCmdLocked = false;
-        bool canAutoDormancy = false;
-        bool isStartUp = false;
-        JC.CS.CountLocker needModularAwake = new JC.CS.CountLocker();
-        void CheckAndStartUp() {
-            if (needModularAwake.IsLocked()) {
-                StartUp();
-            } else {
-                Dormancy();
-            }
-        }
-        void InitAutoDormancy() {
-            // GlobalEventCenter.ins.onGameSceneLoad += () => { 
-            //     needModularAwake.Lock(); 
-            //     CheckAndStartUp();
-            // };
-            // GlobalEventCenter.ins.onGameSceneDestroy += () => { 
-            //     needModularAwake.Unlock(); 
-            //     CheckAndStartUp();
-            // };
-            // GlobalEventCenter.ins.onSimulateMouseAwakeChanged += (waked) => {
-            //     if (waked) needModularAwake.Lock();
-            //     else needModularAwake.Unlock();;
-            //     CheckAndStartUp();
-            // };
-            // GlobalEventCenter.ins.onDeviceCalibrateViewAwakeChanged += (waked) => {
-            //     if (waked) needModularAwake.Lock();
-            //     else needModularAwake.Unlock();;
-            //     CheckAndStartUp();
-            // };
-            //暂时关闭自动休眠,默认是需要模块保持激活
-            needModularAwake.Lock(); 
-        }
-        void InitWhenConenct() { 
-            canAutoDormancy = true;
-            List<string> cmds = new List<string>();
-            cmds.Add("b"); //确保开启stm32
-            cmds.Add("b"); //获取初始电量
-            cmds.Add("1"); //开启发送逻辑
-            Action onComplete = null;
-            if (needModularAwake.IsLocked()) {
-                cmds.Add("w"); //红外灯开启
-                cmds.Add("3"); //九轴开启
-                onComplete = () => {
-                    isStartUp = true;
-                };
-            } else {
-                cmds.Add("s"); //红外灯关闭
-                cmds.Add("S"); //Stm32关闭
-                cmds.Add("4"); //九轴关闭
-                onComplete = () => {
-                    isStartUp = false;
-                };
-            }
-            SendCDM(null, onComplete, cmds.ToArray());
-        }
-        void DestroyWhenDisconenct() {
-            canAutoDormancy = false;
-            sendCMD_CheckAndDoStop(null);
-
-        }
-        //启动
-        void StartUp() {
-            SendCDM(() => {
-                return !isStartUp;
-            }, () => {
-                isStartUp = true;
-            }, "b", "w", "3");
-        }
-        //休眠
-        void Dormancy() {
-            SendCDM(() => {
-                return isStartUp;
-            }, () => {
-                isStartUp = false;
-            }, "4", "s", "S");
-        }
-        void SendCDM(Func<bool> canDo, Action onComplete, params string[] cmds) {
-            CmdToSend cmdToSend = new CmdToSend(cmds, onComplete, canDo);
-            if (isSendCmdLocked) {
-                cmdWaitingList.Enqueue(cmdToSend);
-                return;
-            }
-            sendCMD_NotCheck(cmdToSend);
-        }   
-        void sendCMD_NotCheck(CmdToSend cmdToSend) {
-            if (cmdToSend.canDo != null && !cmdToSend.canDo.Invoke()) {
-                sendCMD_CheckNext();
-                return;
-            }
-            isSendCmdLocked = true;
-            Sequence sequence = DOTween.Sequence();
-            sequence.PrependInterval(0.3f);
-            foreach (var cmd in cmdToSend.cmds) {
-                sequence.AppendCallback(() => {
-                    bool stopped = sendCMD_CheckAndDoStop(sequence);
-                    if (!stopped) WriteData(cmd);
-                });
-                sequence.AppendInterval(0.5f);
-            }
-            sequence.AppendCallback(() => {
-                bool stopped = sendCMD_CheckAndDoStop(sequence);
-                if (!stopped) {
-                    isSendCmdLocked = false;
-                    cmdToSend.onComplete?.Invoke();
-                    sendCMD_CheckNext();
-                }
-            });
-            sequence.SetUpdate(true);
-        }
-        void sendCMD_CheckNext() {
-            if (cmdWaitingList.Count <= 0) return;
-            CmdToSend cmdToSend = cmdWaitingList.Dequeue();
-            sendCMD_NotCheck(cmdToSend);
-        }
-        bool sendCMD_CheckAndDoStop(Sequence sequence) {
-            if (canAutoDormancy) return false;
-            isStartUp = false;
-            isSendCmdLocked = false;
-            cmdWaitingList.Clear();
-            if (sequence != null) sequence.Kill();
-            return true;
-        }
-    #endregion
-
-
-    void OpenInfrared()
-    {
-        WriteData("1");
-        Log("红外线准备完成\n" + deviceName);
-    }
-
-    void OpenReceiveData()
-    {
-        WriteData("3");
-        Log("瞄准模块准备完成\n" + deviceName);
-    }
-
-    public void RequestBattery() {
-        if (!isStartUp) return;
-        if (isSendCmdLocked) return;
-        WriteData("b");
-    }
-
-    public void ReplyInfraredShoot() {
-        if (isSendCmdLocked) return;
-        WriteData("I");
-    }
-
-    void CallDelay(float delayTime, TweenCallback callback)
-    {
-        Sequence sequence = DOTween.Sequence();
-        sequence.PrependInterval(delayTime).AppendCallback(callback);
-        sequence.SetUpdate(true);
-    }
-
-    public void WriteData(string data)
-    {
-        if (DebugDeviceCMD.ins) DebugDeviceCMD.ins.ShowCMD(data);
-        BluetoothHelperCharacteristic ch = new BluetoothHelperCharacteristic(characteristicWrite.getName());
-        ch.setService(bluetoothService.getName());
-        bluetoothHelper.WriteCharacteristic(ch, data);
-    }
-
-    void Log(string text)
-    {
-        if (textUI) 
-        {
-            textUI.text = text;
-        }
-    }
-}
-// public class BluetoothAim : MonoBehaviour
-// {
-//     BluetoothHelper bluetoothHelper;
-//     BluetoothHelperCharacteristic characteristicWrite;
-//     BluetoothHelperService bluetoothService;
-//     string targetDeviceName = "Bbow_20210501";
-//     string deviceName = "";
-//     bool canConnect = true;
-//     [SerializeField] Text textUI;
-//     public BluetoothStatusEnum status = BluetoothStatusEnum.Connect;
-//     public bool hasData = false;
-//     public long hasDataTime;
-//     public static bool scanLock = false; //防止同时扫描冲突
-//     public static BluetoothAim ins;
-
-//     void Start() {
-//         ins = this;
-//     }
-
-//     void OnDestroy()
-//     {
-//         if (bluetoothHelper != null)
-//         {
-//             bluetoothHelper.Disconnect();
-//         }
-//     }
-
-//     private bool userDoConnect = false;
-//     private bool doConnect = false;
-//     public void DoConnect() {
-//         if (status == BluetoothStatusEnum.Connect) {
-//             userDoConnect = true;
-//             doConnect = true;
-//             SetStatus(BluetoothStatusEnum.Connecting);
-//         } else if (status == BluetoothStatusEnum.ConnectSuccess) {
-//             userDoConnect = false;
-//             doConnect = false;
-//             OnDisconnect();
-//             bluetoothHelper.Disconnect();
-//         }
-//     }
-
-//     void OnDisconnect() {
-//         hasData = false;
-//         canConnect = true;
-//         SetStatus(BluetoothStatusEnum.ConnectFail);
-//         BowCamera.isTouchMode = true;
-//     }
-
-//     void Update()
-//     {
-//         if (userDoConnect && status == BluetoothStatusEnum.Connect) {
-//             DoConnect();
-//         }
-//         if (doConnect) Connect();
-//     }
-
-//     void SetStatus(BluetoothStatusEnum statusValue) 
-//     {
-//         status = statusValue;
-//         if (status == BluetoothStatusEnum.ConnectFail) {
-//             Sequence sequence = DOTween.Sequence();
-//             sequence.AppendInterval(2f);
-//             sequence.AppendCallback(delegate() {
-//                 if (status == BluetoothStatusEnum.ConnectFail) {
-//                     status = BluetoothStatusEnum.Connect;        
-//                 }
-//             });
-//             sequence.SetUpdate(true);
-//             DeviceReconnectView.Show();
-//         }
-//     }
-
-//     void Connect()
-//     {
-//         if (BluetoothShoot.scanLock)
-//         {
-//             return;
-//         }
-//         if (!canConnect)
-//         {
-//             return;
-//         }
-//         doConnect = false;
-//         scanLock = true;
-//         canConnect = false;
-//         SetStatus(BluetoothStatusEnum.Connecting);
-//         try
-//         {
-//             BluetoothHelper.BLE = true;
-//             bluetoothHelper = BluetoothHelper.GetNewInstance();
-
-//             bluetoothHelper.OnConnected += (BluetoothHelper helper) =>
-//             {
-//                 Log("连接成功\n" + helper.getDeviceName());
-//                 SetStatus(BluetoothStatusEnum.ConnectSuccess);
-//                 BowCamera.isTouchMode = false;
-//                 foreach (BluetoothHelperService service in helper.getGattServices())
-//                 {
-                
-//                     if (service.getName().ToLower().StartsWith("0000fff0"))
-//                     {
-//                         bluetoothService = service;
-
-//                         foreach (BluetoothHelperCharacteristic characteristic in service.getCharacteristics())
-//                         {
-//                             if (characteristic.getName().ToLower().StartsWith("0000fff2"))
-//                             {
-//                                 characteristicWrite = characteristic;
-//                             }
-//                             else if (characteristic.getName().ToLower().StartsWith("0000fff1"))
-//                             {
-
-//                                 BluetoothHelperCharacteristic ch = new BluetoothHelperCharacteristic(characteristic.getName());
-//                                 ch.setService(bluetoothService.getName());
-//                                 bluetoothHelper.Subscribe(ch);
-//                             }
-//                         }
-//                     }
-//                 }
-//                 CallDelay(1, OpenInfrared);
-//                 CallDelay(2, OpenReceiveData);
-//                 CallDelay(3, RequestBattery);
-//             };
-//             bluetoothHelper.OnConnectionFailed += (BluetoothHelper helper) =>
-//             {
-//                 Log("连接失败\n" + helper.getDeviceName());
-//                 OnDisconnect();
-//             };
-//             bluetoothHelper.OnCharacteristicChanged += (helper, value, characteristic) =>
-//             {
-//                 if (!hasData) hasDataTime = JC.CS.Utility.GetTimestamp();
-//                 hasData = true;
-//                 byte[] bytes = value;
-//                 // Log(String.Join(",", bytes));
-//                 BluetoothClient.UploadData(0, bytes);
-//                 if (AimHandler.ins)
-//                 {
-//                     AimHandler.ins.OnDataReceived(bytes);
-//                 }
-//             };
-//             bluetoothHelper.OnScanEnded += (BluetoothHelper helper, LinkedList<BluetoothDevice> nearbyDevices) =>
-//             {
-//                 scanLock = false;
-//                 foreach (BluetoothDevice device in nearbyDevices)
-//                 {
-//                     if (device.DeviceName == targetDeviceName)
-//                     {
-//                         deviceName = device.DeviceName;
-//                         bluetoothHelper.setDeviceName(deviceName);
-//                         bluetoothHelper.Connect();
-//                         Log("发现设备\n" + device.DeviceName);
-//                         return;
-//                     }
-//                 }
-//                 canConnect = true;
-//                 Log("没有发现设备");
-//                 SetStatus(BluetoothStatusEnum.ConnectFail);
-//             };
-
-//             bluetoothHelper.ScanNearbyDevices();
-//             Log("正在扫描设备");
-//         }
-//         catch (Exception e)
-//         {
-//             Debug.Log(e.Message);
-//             canConnect = true;
-//             Log("请打开蓝牙");
-//         }
-//     }
-
-//     void OpenInfrared()
-//     {
-//         WriteData("1");
-//         Log("红外线准备完成\n" + deviceName);
-//     }
-
-//     void OpenReceiveData()
-//     {
-//         WriteData("3");
-//         Log("瞄准模块准备完成\n" + deviceName);
-//     }
-
-//     public void RequestBattery() {
-//         WriteData("b");
-//     }
-
-//     public void ReplyInfraredShoot() {
-//         WriteData("I");
-//     }
-
-//     void CallDelay(float delayTime, TweenCallback callback)
-//     {
-//         Sequence sequence = DOTween.Sequence();
-//         sequence.PrependInterval(delayTime).AppendCallback(callback);
-//         sequence.SetUpdate(true);
-//     }
-
-//     public void WriteData(string data)
-//     {
-//         BluetoothHelperCharacteristic ch = new BluetoothHelperCharacteristic(characteristicWrite.getName());
-//         ch.setService(bluetoothService.getName());
-//         bluetoothHelper.WriteCharacteristic(ch, data);
-//     }
-
-//     void Log(string text)
-//     {
-//         if (textUI) 
-//         {
-//             textUI.text = text;
-//         }
-//     }
-// }

+ 0 - 1
代码备份/2022-6-4/备份原因.txt

@@ -1 +0,0 @@
-因为需要接入PC端蓝牙

+ 0 - 377
代码备份/2022-7-15/修改前/AimHandler.cs

@@ -1,377 +0,0 @@
-using System;
-using UnityEngine;
-using System.Collections.Generic;
-using System.Linq;
-using UnityEngine.UI;
-using Newtonsoft.Json;
-/* 瞄准处理器 */
-public class AimHandler : MonoBehaviour
-{
-    Transform controlObj {
-        get {
-            if (CameraToLook.ins) {
-                return CameraToLook.ins.transform;
-            }
-            return null;
-        }
-    }
-    [SerializeField] Button SetIdentityButton;
-    [SerializeField] Button MagCalibrationButton;
-    [SerializeField] Button GyrCalibrationButton;
-    [SerializeField] Text MagScaleText;
-    [SerializeField] Text GyrScaleText;
-
-    //椭圆对象
-    [SerializeField] Ellipse ellipseScript;
-    [SerializeField] GameObject AccObj;
-    [SerializeField] GameObject MagObj;
-
-    [SerializeField] GameObject AccMesh;
-    [SerializeField] GameObject GryMesh;
-    [SerializeField] GameObject MagMesh;
-    [SerializeField] GameObject AMesh;
-    [SerializeField] Transform DebugTexts;
-    [SerializeField] Transform DrawImage;
-    
-    long TimeGap = default;
-    Vector3 Acc = default;
-    Vector3 Gyr = default;
-    Vector3 Mag = default;
-    o09Axis _9Axis = new o09Axis();
-
-    Vector3 cMaxVector = new Vector3(0,0,0);
-    Vector3 cMinVector = new Vector3(0, 0, 0);
-
-    public o0MagneticCalibraterEllipsoidFitting MagCalibrater;
-    o0GyrCalibrater GyrCalibrater;
-
-    //陀螺仪校准进度记录
-    public int gyrCalibrateCompleteCount = 0;
-    public int gyrCalibrateTotalCount = 300;
-
-    long msOld = 0;
-
-    public static AimHandler ins; 
-
-    void Start()
-    {
-        ins = this;
-        BluetoothDispatcher.aim = OnDataReceived;
-
-        //初始化
-        _9Axis.LoadIdentity();
-
-        _9Axis.AccMesh = AccMesh;
-        _9Axis.GryMesh = GryMesh;
-        _9Axis.MagMesh = MagMesh;
-
-        for (var i = 0; i < 9; ++i)
-        {
-            _9Axis.Tester.Add(DrawImage.Find(i.ToString()).gameObject.AddComponent<o0UIRawImageTester>());
-        }
-
-        for (var i = 0; i < 15; ++i)
-        {
-            _9Axis.TextTester.Add(DebugTexts.transform.Find("Text" + i.ToString()).gameObject.GetComponent<Text>());
-        }
-
-        if (SetIdentityButton) 
-        {
-            SetIdentityButton.onClick.AddListener(DoIdentity);
-        }
-        
-        try 
-        {  
-            string magDataStr = PlayerPrefs.GetString("o0MagneticCalibrater");
-            MagCalibrater = JsonConvert.DeserializeObject<o0MagneticCalibraterEllipsoidFitting>(magDataStr);
-        } 
-        catch(Exception) 
-        {
-            MagCalibrater = null;
-        }
-
-        if (MagCalibrater == null) 
-        {
-            MagCalibrater = new o0MagneticCalibraterEllipsoidFitting();
-        }
-        if (MagCalibrationButton)
-        {
-            MagCalibrationButton.onClick.AddListener(delegate {
-                CalibrateMag(!MagCalibrater.Calibration);
-            });
-        }
-
-        try {
-            string gyrDataStr = PlayerPrefs.GetString("o0GyrCalibrater");
-            GyrCalibrater = JsonConvert.DeserializeObject<o0GyrCalibrater>(gyrDataStr);
-            if (GyrCalibrater._Average != Vector3.zero) GyrScaleText.text = "已校准";
-        } catch(Exception) {
-            GyrCalibrater = null;
-        }
-        if (GyrCalibrater == null) 
-        {
-            GyrCalibrater = new o0GyrCalibrater();
-        }
-        if (GyrCalibrationButton)
-        {
-            GyrCalibrationButton.onClick.AddListener(delegate() {
-                CalibrateGyr(!GyrCalibrater.Calibration);
-            });
-        }
-    }
-
-    public void CalibrateGyr(bool calibration) {
-        try {
-            GyrCalibrater.Calibration = calibration;
-            if (calibration)
-            {
-                GyrCalibrationButton.GetComponentInChildren<Text>().text = "停止陀螺仪校准";
-            }
-            else
-            {
-                GyrCalibrationButton.GetComponentInChildren<Text>().text = "开始陀螺仪校准";
-                PlayerPrefs.SetString("o0GyrCalibrater", JsonConvert.SerializeObject(GyrCalibrater));            
-            }
-        } catch (Exception e) { Debug.LogError(e.Message); }
-    }
-
-     public void CalibrateMag(bool calibration) {
-        try {
-            if (calibration)
-            {
-                MagCalibrater.Calibration = calibration;
-                MagCalibrationButton.GetComponentInChildren<Text>().text = "停止地磁计校准";
-                this.cMaxVector = new Vector3(0, 0, 0);
-                this.cMinVector = new Vector3(0, 0, 0);
-                this.ellipseScript.ellipseTran.gameObject.SetActive(false);
-            }
-            else
-            {
-                List<Vector3> list = MagCalibrater.getRecords();
-                //停止校准时候,看看数组值
-                float maxDistance = 0f,ratio = 1f;
-                Vector3 maxVector3 = new Vector3(0,0,0);
-                List<Vector3> endRecords = new List<Vector3>();
-                foreach (Vector3 i in list)
-                {
-                    Vector3 v = i - MagCalibrater._Center;
-                    if (Math.Abs(v.magnitude) > maxDistance)
-                    {
-                        maxVector3 = v;
-                        maxDistance = Math.Abs(v.magnitude);
-                        if(Math.Abs(v.magnitude) < Math.Abs(MagCalibrater._Radius.magnitude))
-                            ratio = Math.Abs(v.magnitude) / Math.Abs(MagCalibrater._Radius.magnitude);
-                        else
-                            ratio = Math.Abs(MagCalibrater._Radius.magnitude) / Math.Abs(v.magnitude);
-                    }
-                }
-                Debug.LogWarning(maxDistance + " == " + Math.Abs(MagCalibrater._Radius.magnitude) + " == " + MagCalibrater._Radius + " = " + maxVector3);
-                //如果比例效果不理想。可以设置为ratio=0.5f 
-                foreach (Vector3 i in list)
-                {
-                    //- MagCalibrater._Center
-                    Vector3 v = i ;
-                    v *= ratio;
-                    if(endRecords.Count>3000)
-                    {
-                        endRecords.RemoveAt(0);
-                    }
-                    endRecords.Add(v);
-                }
-                this.ellipseScript.ClearAndUpdatePointArray();
-                this.ellipseScript.DrawPointCloud(endRecords);
-
-                MagCalibrater.Calibration = calibration;
-
-                this.ellipseScript.ellipseTran.gameObject.SetActive(true);
-                //绘制椭圆形
-                if (MagCalibrater._Radius != this.ellipseScript.ellipseTran.localScale)
-                {
-                    this.ellipseScript.setEllipseLocalScaleAndCenter(MagCalibrater._Radius, MagCalibrater._Center* ratio);
-                    //设置绘制图像相机的对应位置
-                    this.ellipseScript.setCameraPos(MagCalibrater._Center * 0.5f);
-                }
-
-                MagCalibrationButton.GetComponentInChildren<Text>().text = "开始地磁计校准";
-                PlayerPrefs.SetString("o0MagneticCalibrater", JsonConvert.SerializeObject(MagCalibrater));
-            }
-        } catch (Exception e) { Debug.LogError(e.Message); }
-    }
-
-    //转换读取的数据,无符号->有符号
-    float TwoByteToFloat(byte b1, byte b2) 
-    {
-        ushort twoByte = (ushort) (b1 * 256 + b2);
-        short shortNum = (short) twoByte;
-        return (float) shortNum; 
-    }
-
-    public void OnDataReceived(byte[] bytes)
-    {
-        // Debug.Log("瞄准模块数据长度" + bytes.Length);
-        if (bytes.Length != 27)
-        {
-            if (bytes.Length == 2) {
-                if (bytes[0] == 0x66 && bytes[1] == 0x31) {
-                    if (SB_EventSystem.ins && SB_EventSystem.ins.simulateMouseIsAwaked) {
-                        //鼠标居中
-                        SB_EventSystem.ins.MakeMouseToScreenCenter(); 
-                    }
-                    //视角回正
-                    DoIdentity();
-                } else if (bytes[0] == 0x66 && bytes[1] == 0x32) {
-                    if (SB_EventSystem.ins) {
-                        //唤起/隐藏虚拟鼠标
-                        SB_EventSystem.ins.AwakenSimulateMouse(); 
-                    }
-                } else if (bytes[1] == 10) {
-                    //显示电量
-                    DeviceBatteryView.ins.RenderBattery(1, bytes[0]); 
-                }
-            } else if (bytes[0] == 0x5b) {
-                if (SB_EventSystem.ins && SB_EventSystem.ins.simulateMouseIsAwaked) {
-                    //点击鼠标
-                    SB_EventSystem.ins.ClickMouse(); 
-                } else {
-                    //红外射击检测
-                    ShootCheck.ins.ShootByInfrared(bytes); 
-                }
-            }
-            return;
-        }
-        if (bytes[7] == 0 && bytes[8] == 0 && bytes[9] == 0 && bytes[10] == 0 && bytes[11] == 0 && bytes[12] == 0)
-            return;
-        if (bytes[19] == 0 && bytes[20] == 0 && bytes[21] == 0 && bytes[22] == 0 && bytes[23] == 0 && bytes[24] == 0)
-            return;
-        
-        float ax = -TwoByteToFloat(bytes[7], bytes[8]);
-        float ay = -TwoByteToFloat(bytes[9], bytes[10]);
-        float az = -TwoByteToFloat(bytes[11], bytes[12]);
-        ax = ax / 32768 * 16;
-        ay = ay / 32768 * 16;
-        az = az / 32768 * 16;
-        Acc = new Vector3(ay, ax, az);
-        AccObj.transform.GetChild(0).localPosition = Acc;
-
-
-        float roll = TwoByteToFloat(bytes[13], bytes[14]);
-        float pitch = TwoByteToFloat(bytes[15], bytes[16]);
-        float yaw = TwoByteToFloat(bytes[17], bytes[18]);
-        roll = -roll / 32768 * 2000;
-        pitch = -pitch / 32768 * 2000;
-        yaw = -yaw / 32768 * 2000;
-        Gyr = new Vector3(pitch, roll, yaw) / 1000;
-        Gyr = GyrCalibrater.Update(Gyr);
-        if (GyrCalibrater.Calibration) 
-        {
-            if (gyrCalibrateCompleteCount < gyrCalibrateTotalCount) {
-                gyrCalibrateCompleteCount++;
-            }
-        }
-        if (GyrScaleText && GyrCalibrater.Calibration) 
-        {    
-            // GyrScaleText.text = GyrCalibrater._Average.x + "\n" + GyrCalibrater._Average.y + "\n" + GyrCalibrater._Average.z;
-            // GyrScaleText.text = "Gyr*1000,000:" + (_9Axis.GyrOld * 1000000).ToString();
-            GyrScaleText.text = "" + (_9Axis.getGyrOld() * 1000000).ToString();
-        }
-
-        float x = TwoByteToFloat(bytes[19], bytes[20]);
-        float y = TwoByteToFloat(bytes[21], bytes[22]);
-        float z = TwoByteToFloat(bytes[23], bytes[24]);
-        var mag = new Vector3(-y, x, -z);
-        Mag = mag / 32768 * 256;
-    
-
-        if(Mag.x > -128 && Mag.y > -128 && Mag.z > -128 && Mag.x < 128 && Mag.y < 128 && Mag.z < 128)
-        {   
-            //绘制地磁计点
-            if (MagCalibrater.Calibration)
-            {
-                this.ellipseScript.AddAndUpdatePointArray(Mag);
-
-                if (Mag.magnitude > this.cMaxVector.magnitude)
-                {
-                    this.cMaxVector = Mag;
-                }
-                else if (Mag.magnitude < this.cMinVector.magnitude) {
-                    this.cMinVector = Mag;
-                }
-
-                Vector3 _center = this.cMaxVector - this.cMinVector;
-                Debug.LogWarning(_center + " == "+ _center.magnitude);
-                //设置绘制图像相机的对应位置
-                this.ellipseScript.setCameraPos(_center/2);
-            }
-            Mag = MagCalibrater.Update(Mag);
-
-            if (MagScaleText)
-            {
-                MagScaleText.text = MagCalibrater._Radius.ToString();
-            }
-           
-        }
-        MagObj.transform.GetChild(0).localPosition = Mag;
-
-        var ms = (((long)bytes[1]) *60 + bytes[2])*1000 + (long)TwoByteToFloat(bytes[3], bytes[4]);
-        if(msOld == default)
-        {
-            msOld = ms;
-            return;
-        }
-        TimeGap = ms - msOld;
-        msOld = ms;
-
-        AMesh.transform.localRotation = newRotation = _9Axis.update(Acc * 10, Gyr, Mag, TimeGap);
-
-        if (BowQuatDebug.ins) BowQuatDebug.ins.ShowModuleQuat(newRotation.eulerAngles);
-
-        if (SB_EventSystem.ins && SB_EventSystem.ins.simulateMouseIsAwaked) {
-            SB_EventSystem.ins.MoveSimulateMouse(newRotation);
-        }
-        // 记录一些旋转角---start
-        // if (ArmBow.ins) {
-        //     for (int i = ArmBow.ins.recordRotations.Length - 1; i > 0 ; i--)
-        //     {
-        //         ArmBow.ins.recordRotations[i] = ArmBow.ins.recordRotations[i - 1];
-        //     }
-        //     ArmBow.ins.recordRotations[0] = newRotation;
-        //     ArmBow.ins.recordCount++;
-        // }
-        // 记录一些旋转角---end
-    }   
-
-    [NonSerialized] public bool lerpForRotation = true;
-    [NonSerialized] public float lerpTimeRate = 7;
-    public void Update()
-    {
-        if (controlObj && !banControlObjRotate)
-        {
-            if (lerpForRotation)
-            {
-                controlObj.localRotation = Quaternion.Lerp(controlObj.localRotation, newRotation, Time.deltaTime * lerpTimeRate);   
-            } 
-            else 
-            {
-                controlObj.localRotation = newRotation;
-            }
-        }
-    }
-
-    private bool banControlObjRotate = false;
-    public void BanControlObjRotate(bool ban) {
-        banControlObjRotate = ban;
-        if (!ban) {
-            if (controlObj) controlObj.localRotation = newRotation;
-        }
-    }
-
-    Quaternion newRotation = Quaternion.identity;
-
-    public void DoIdentity()
-    {
-        _9Axis.SetIdentityAndSave();
-        Quaternion qua = _9Axis.getLastState().Qua;
-        newRotation = qua;
-        if (controlObj) controlObj.localRotation = qua;
-    }
-}

+ 0 - 484
代码备份/2022-7-15/修改前/BluetoothAim.cs

@@ -1,484 +0,0 @@
-using ArduinoBluetoothAPI;
-using System;
-using UnityEngine;
-using System.Collections.Generic;
-using UnityEngine.UI;
-using DG.Tweening;
-using UnityEngine.SceneManagement;
-/* 蓝牙瞄准模块 */
-public class BluetoothAim : MonoBehaviour
-{
-    BluetoothHelper bluetoothHelper;
-    BluetoothHelperCharacteristic characteristicWrite;
-    BluetoothHelperService bluetoothService;
-    string targetDeviceName = "Bbow_20210501";
-    string deviceName = "";
-    bool canConnect = true;
-    [SerializeField] Text textUI;
-    public BluetoothStatusEnum status = BluetoothStatusEnum.Connect;
-    public bool hasData = false;
-    public long hasDataTime;
-    public static bool scanLock = false; //防止同时扫描冲突
-    public static BluetoothAim ins;
-
-    void Start()
-    {
-        ins = this;
-        InitAutoDormancy();
-
-#if UNITY_STANDALONE_WIN
-        new GameObject("BleUDP").AddComponent<BleUDP>();
-#endif
-    }
-
-    void OnDestroy()
-    {
-        DisconnectBleHelper();
-    }
-
-    private bool userDoConnect = false;
-    private bool doConnect = false;
-    public void DoConnect()
-    {
-        if (status == BluetoothStatusEnum.Connect)
-        {
-            userDoConnect = true;
-            doConnect = true;
-            SetStatus(BluetoothStatusEnum.Connecting);
-        }
-        else if (status == BluetoothStatusEnum.ConnectSuccess)
-        {
-            userDoConnect = false;
-            doConnect = false;
-            OnDisconnect();
-#if UNITY_ANDROID
-            DisconnectBleHelper();
-#elif UNITY_STANDALONE_WIN
-            BleUDP.ins.Disconnect();
-#endif
-        }
-    }
-
-    void OnDisconnect()
-    {
-        hasData = false;
-        canConnect = true;
-        SetStatus(BluetoothStatusEnum.ConnectFail);
-        BowCamera.isTouchMode = true;
-        DestroyWhenDisconenct();
-    }
-
-    void Update()
-    {
-        if (userDoConnect && status == BluetoothStatusEnum.Connect)
-        {
-            DoConnect();
-        }
-        if (doConnect) Connect();
-    }
-
-    void SetStatus(BluetoothStatusEnum statusValue)
-    {
-        status = statusValue;
-        if (status == BluetoothStatusEnum.ConnectFail)
-        {
-            Sequence sequence = DOTween.Sequence();
-            sequence.AppendInterval(2f);
-            sequence.AppendCallback(delegate ()
-            {
-                if (status == BluetoothStatusEnum.ConnectFail)
-                {
-                    status = BluetoothStatusEnum.Connect;
-                }
-            });
-            sequence.SetUpdate(true);
-            DeviceReconnectView.Show();
-        }
-    }
-
-    void DisconnectBleHelper()
-    {
-        if (bluetoothHelper != null) bluetoothHelper.Disconnect();
-    }
-
-    void Connect()
-    {
-        if (BluetoothShoot.scanLock)
-        {
-            return;
-        }
-        if (!canConnect)
-        {
-            return;
-        }
-        doConnect = false;
-        scanLock = true;
-        canConnect = false;
-        SetStatus(BluetoothStatusEnum.Connecting);
-#if UNITY_ANDROID
-        ConnectBleHelper();
-#elif UNITY_STANDALONE_WIN
-        ConnectBleByUDP();
-#endif
-    }
-
-    void ConnectBleHelper()
-    {
-        try
-        {
-            BluetoothHelper.BLE = true;
-            bluetoothHelper = BluetoothHelper.GetNewInstance();
-
-            bluetoothHelper.OnConnected += (BluetoothHelper helper) =>
-            {
-                Log("连接成功\n" + helper.getDeviceName());
-                SetStatus(BluetoothStatusEnum.ConnectSuccess);
-                BowCamera.isTouchMode = false;
-                foreach (BluetoothHelperService service in helper.getGattServices())
-                {
-
-                    if (service.getName().ToLower().StartsWith("0000fff0"))
-                    {
-                        bluetoothService = service;
-
-                        foreach (BluetoothHelperCharacteristic characteristic in service.getCharacteristics())
-                        {
-                            if (characteristic.getName().ToLower().StartsWith("0000fff2"))
-                            {
-                                characteristicWrite = characteristic;
-                            }
-                            else if (characteristic.getName().ToLower().StartsWith("0000fff1"))
-                            {
-
-                                BluetoothHelperCharacteristic ch = new BluetoothHelperCharacteristic(characteristic.getName());
-                                ch.setService(bluetoothService.getName());
-                                bluetoothHelper.Subscribe(ch);
-                            }
-                        }
-                    }
-                }
-                // CallDelay(1, OpenInfrared);
-                // CallDelay(2, OpenReceiveData);
-                // CallDelay(3, RequestBattery);
-                CallDelay(2, () =>
-                {
-                    if (status != BluetoothStatusEnum.ConnectSuccess) return;
-                    InitWhenConenct();
-                });
-            };
-            bluetoothHelper.OnConnectionFailed += (BluetoothHelper helper) =>
-            {
-                Log("连接失败\n" + helper.getDeviceName());
-                OnDisconnect();
-            };
-            bluetoothHelper.OnCharacteristicChanged += (helper, value, characteristic) =>
-            {
-                if (!hasData) hasDataTime = JC.CS.Utility.GetTimestamp();
-                hasData = true;
-                byte[] bytes = value;
-                // Log(String.Join(",", bytes));
-                BluetoothClient.UploadData(0, bytes);
-                if (AimHandler.ins)
-                {
-                    AimHandler.ins.OnDataReceived(bytes);
-                }
-            };
-            int scanCount = 0;
-            bluetoothHelper.OnScanEnded += (BluetoothHelper helper, LinkedList<BluetoothDevice> nearbyDevices) =>
-            {
-                scanLock = false;
-                foreach (BluetoothDevice device in nearbyDevices)
-                {
-                    if (device.DeviceName == targetDeviceName)
-                    {
-                        deviceName = device.DeviceName;
-                        bluetoothHelper.setDeviceName(deviceName);
-                        bluetoothHelper.Connect();
-                        Log("发现设备\n" + device.DeviceName);
-                        return;
-                    }
-                }
-                if (scanCount < 3)
-                { //如果没扫描到,则重新扫描,达到延迟提示失败的效果
-                    scanCount++;
-                    scanLock = true;
-                    bluetoothHelper.ScanNearbyDevices();
-                }
-                else
-                {
-                    canConnect = true;
-                    Log("没有发现设备");
-                    SetStatus(BluetoothStatusEnum.ConnectFail);
-                }
-            };
-
-            bluetoothHelper.ScanNearbyDevices();
-            Log("正在扫描设备");
-        }
-        catch (Exception e)
-        {
-            Debug.LogError(e.Message);
-            Debug.LogError(e.StackTrace);
-            scanLock = false;
-            canConnect = true;
-            SetStatus(BluetoothStatusEnum.ConnectFail);
-            Log("请打开蓝牙");
-        }
-    }
-
-    void ConnectBleByUDP()
-    {
-        try
-        {
-            BleUDP.ins.OnConnected = () =>
-            {
-                Log("连接成功\n" + deviceName);
-                SetStatus(BluetoothStatusEnum.ConnectSuccess);
-                BowCamera.isTouchMode = false;
-                InitWhenConenct();
-            };
-            BleUDP.ins.OnConnectionFailed = () =>
-            {
-                Log("连接失败\n" + deviceName);
-                OnDisconnect();
-            };
-            BleUDP.ins.OnCharacteristicChanged = (byte[] value) =>
-            {
-                if (!hasData) hasDataTime = JC.CS.Utility.GetTimestamp();
-                hasData = true;
-                byte[] bytes = value;
-                // Log(String.Join(",", bytes));
-                BluetoothClient.UploadData(0, bytes);
-                if (AimHandler.ins)
-                {
-                    AimHandler.ins.OnDataReceived(bytes);
-                }
-            };
-            BleUDP.ins.OnScanEnded = () =>
-            {
-                scanLock = false;
-                deviceName = targetDeviceName;
-                BleUDP.ins.Connect();
-                Log("发现设备\n" + deviceName);
-            };
-
-            BleUDP.ins.ScanNearbyDevices();
-        }
-        catch (Exception e)
-        {
-            Debug.LogError(e.Message);
-            Debug.LogError(e.StackTrace);
-            scanLock = false;
-            canConnect = true;
-            SetStatus(BluetoothStatusEnum.ConnectFail);
-        }
-    }
-
-    #region 自动进入/退出休眠状态, 这里做程指令发送队列,为了控制连续发送指令的间隔,避免硬件收不到或处理不过来
-    class CmdToSend
-    {
-        public string[] cmds;
-        public Action onComplete;
-        public Func<bool> canDo;
-        public CmdToSend(string[] cmds, Action onComplete, Func<bool> canDo)
-        {
-            this.cmds = cmds;
-            this.onComplete = onComplete;
-            this.canDo = canDo;
-        }
-    }
-    Queue<CmdToSend> cmdWaitingList = new Queue<CmdToSend>();
-    bool isSendCmdLocked = false;
-    bool canAutoDormancy = false;
-    bool isStartUp = false;
-    JC.CS.CountLocker needModularAwake = new JC.CS.CountLocker();
-    void CheckAndStartUp()
-    {
-        if (needModularAwake.IsLocked())
-        {
-            StartUp();
-        }
-        else
-        {
-            Dormancy();
-        }
-    }
-    void InitAutoDormancy()
-    {
-        // GlobalEventCenter.ins.onGameSceneLoad += () => { 
-        //     needModularAwake.Lock(); 
-        //     CheckAndStartUp();
-        // };
-        // GlobalEventCenter.ins.onGameSceneDestroy += () => { 
-        //     needModularAwake.Unlock(); 
-        //     CheckAndStartUp();
-        // };
-        // GlobalEventCenter.ins.onSimulateMouseAwakeChanged += (waked) => {
-        //     if (waked) needModularAwake.Lock();
-        //     else needModularAwake.Unlock();;
-        //     CheckAndStartUp();
-        // };
-        // GlobalEventCenter.ins.onDeviceCalibrateViewAwakeChanged += (waked) => {
-        //     if (waked) needModularAwake.Lock();
-        //     else needModularAwake.Unlock();;
-        //     CheckAndStartUp();
-        // };
-        //暂时关闭自动休眠,默认是需要模块保持激活
-        needModularAwake.Lock();
-    }
-    void InitWhenConenct()
-    {
-        canAutoDormancy = true;
-        List<string> cmds = new List<string>();
-        cmds.Add("b"); //确保开启stm32
-        cmds.Add("b"); //获取初始电量
-        cmds.Add("1"); //开启发送逻辑
-        Action onComplete = null;
-        if (needModularAwake.IsLocked())
-        {
-            cmds.Add("w"); //红外灯开启
-            cmds.Add("3"); //九轴开启
-            onComplete = () =>
-            {
-                isStartUp = true;
-            };
-        }
-        else
-        {
-            cmds.Add("s"); //红外灯关闭
-            cmds.Add("S"); //Stm32关闭
-            cmds.Add("4"); //九轴关闭
-            onComplete = () =>
-            {
-                isStartUp = false;
-            };
-        }
-        SendCDM(null, onComplete, cmds.ToArray());
-    }
-    void DestroyWhenDisconenct()
-    {
-        canAutoDormancy = false;
-        sendCMD_CheckAndDoStop(null);
-
-    }
-    //启动
-    void StartUp()
-    {
-        SendCDM(() =>
-        {
-            return !isStartUp;
-        }, () =>
-        {
-            isStartUp = true;
-        }, "b", "w", "3");
-    }
-    //休眠
-    void Dormancy()
-    {
-        SendCDM(() =>
-        {
-            return isStartUp;
-        }, () =>
-        {
-            isStartUp = false;
-        }, "4", "s", "S");
-    }
-    void SendCDM(Func<bool> canDo, Action onComplete, params string[] cmds)
-    {
-        CmdToSend cmdToSend = new CmdToSend(cmds, onComplete, canDo);
-        if (isSendCmdLocked)
-        {
-            cmdWaitingList.Enqueue(cmdToSend);
-            return;
-        }
-        sendCMD_NotCheck(cmdToSend);
-    }
-    void sendCMD_NotCheck(CmdToSend cmdToSend)
-    {
-        if (cmdToSend.canDo != null && !cmdToSend.canDo.Invoke())
-        {
-            sendCMD_CheckNext();
-            return;
-        }
-        isSendCmdLocked = true;
-        Sequence sequence = DOTween.Sequence();
-        sequence.PrependInterval(0.3f);
-        foreach (var cmd in cmdToSend.cmds)
-        {
-            sequence.AppendCallback(() =>
-            {
-                bool stopped = sendCMD_CheckAndDoStop(sequence);
-                if (!stopped) WriteData(cmd);
-            });
-            sequence.AppendInterval(0.5f);
-        }
-        sequence.AppendCallback(() =>
-        {
-            bool stopped = sendCMD_CheckAndDoStop(sequence);
-            if (!stopped)
-            {
-                isSendCmdLocked = false;
-                cmdToSend.onComplete?.Invoke();
-                sendCMD_CheckNext();
-            }
-        });
-        sequence.SetUpdate(true);
-    }
-    void sendCMD_CheckNext()
-    {
-        if (cmdWaitingList.Count <= 0) return;
-        CmdToSend cmdToSend = cmdWaitingList.Dequeue();
-        sendCMD_NotCheck(cmdToSend);
-    }
-    bool sendCMD_CheckAndDoStop(Sequence sequence)
-    {
-        if (canAutoDormancy) return false;
-        isStartUp = false;
-        isSendCmdLocked = false;
-        cmdWaitingList.Clear();
-        if (sequence != null) sequence.Kill();
-        return true;
-    }
-    #endregion
-
-    public void RequestBattery()
-    {
-        if (!isStartUp) return;
-        if (isSendCmdLocked) return;
-        WriteData("b");
-    }
-
-    public void ReplyInfraredShoot()
-    {
-        if (isSendCmdLocked) return;
-        WriteData("I");
-    }
-
-    void CallDelay(float delayTime, TweenCallback callback)
-    {
-        Sequence sequence = DOTween.Sequence();
-        sequence.PrependInterval(delayTime).AppendCallback(callback);
-        sequence.SetUpdate(true);
-    }
-
-    public void WriteData(string data)
-    {
-#if UNITY_ANDROID
-        if (DebugDeviceCMD.ins) DebugDeviceCMD.ins.ShowCMD(data);
-        BluetoothHelperCharacteristic ch = new BluetoothHelperCharacteristic(characteristicWrite.getName());
-        ch.setService(bluetoothService.getName());
-        bluetoothHelper.WriteCharacteristic(ch, data);
-#elif UNITY_STANDALONE_WIN
-        BleUDP.ins.SendMsg(data);
-#endif
-
-    }
-
-    void Log(string text)
-    {
-        if (textUI)
-        {
-            textUI.text = text;
-        }
-    }
-}

+ 0 - 369
代码备份/2022-7-15/修改后-新硬件1和2/AimHandler.cs

@@ -1,369 +0,0 @@
-using System;
-using UnityEngine;
-using System.Collections.Generic;
-using System.Linq;
-using UnityEngine.UI;
-using Newtonsoft.Json;
-/* 瞄准处理器 */
-public class AimHandler : MonoBehaviour
-{
-    Transform controlObj {
-        get {
-            if (CameraToLook.ins) {
-                return CameraToLook.ins.transform;
-            }
-            return null;
-        }
-    }
-    [SerializeField] Button SetIdentityButton;
-    [SerializeField] Button MagCalibrationButton;
-    [SerializeField] Button GyrCalibrationButton;
-    [SerializeField] Text MagScaleText;
-    [SerializeField] Text GyrScaleText;
-
-    //椭圆对象
-    [SerializeField] Ellipse ellipseScript;
-    [SerializeField] GameObject AccObj;
-    [SerializeField] GameObject MagObj;
-
-    [SerializeField] GameObject AccMesh;
-    [SerializeField] GameObject GryMesh;
-    [SerializeField] GameObject MagMesh;
-    [SerializeField] GameObject AMesh;
-    [SerializeField] Transform DebugTexts;
-    [SerializeField] Transform DrawImage;
-    
-    long TimeGap = default;
-    Vector3 Acc = default;
-    Vector3 Gyr = default;
-    Vector3 Mag = default;
-    o09Axis _9Axis = new o09Axis();
-
-    Vector3 cMaxVector = new Vector3(0,0,0);
-    Vector3 cMinVector = new Vector3(0, 0, 0);
-
-    public o0MagneticCalibraterEllipsoidFitting MagCalibrater;
-    o0GyrCalibrater GyrCalibrater;
-
-    //陀螺仪校准进度记录
-    public int gyrCalibrateCompleteCount = 0;
-    public int gyrCalibrateTotalCount = 300;
-
-    long msOld = 0;
-
-    public static AimHandler ins; 
-
-    void Start()
-    {
-        ins = this;
-        BluetoothDispatcher.aim = OnDataReceived;
-
-        //初始化
-        _9Axis.LoadIdentity();
-
-        _9Axis.AccMesh = AccMesh;
-        _9Axis.GryMesh = GryMesh;
-        _9Axis.MagMesh = MagMesh;
-
-        for (var i = 0; i < 9; ++i)
-        {
-            _9Axis.Tester.Add(DrawImage.Find(i.ToString()).gameObject.AddComponent<o0UIRawImageTester>());
-        }
-
-        for (var i = 0; i < 15; ++i)
-        {
-            _9Axis.TextTester.Add(DebugTexts.transform.Find("Text" + i.ToString()).gameObject.GetComponent<Text>());
-        }
-
-        if (SetIdentityButton) 
-        {
-            SetIdentityButton.onClick.AddListener(DoIdentity);
-        }
-        
-        try 
-        {  
-            string magDataStr = PlayerPrefs.GetString("o0MagneticCalibrater");
-            MagCalibrater = JsonConvert.DeserializeObject<o0MagneticCalibraterEllipsoidFitting>(magDataStr);
-        } 
-        catch(Exception) 
-        {
-            MagCalibrater = null;
-        }
-
-        if (MagCalibrater == null) 
-        {
-            MagCalibrater = new o0MagneticCalibraterEllipsoidFitting();
-        }
-        if (MagCalibrationButton)
-        {
-            MagCalibrationButton.onClick.AddListener(delegate {
-                CalibrateMag(!MagCalibrater.Calibration);
-            });
-        }
-
-        try {
-            string gyrDataStr = PlayerPrefs.GetString("o0GyrCalibrater");
-            GyrCalibrater = JsonConvert.DeserializeObject<o0GyrCalibrater>(gyrDataStr);
-            if (GyrCalibrater._Average != Vector3.zero) GyrScaleText.text = "已校准";
-        } catch(Exception) {
-            GyrCalibrater = null;
-        }
-        if (GyrCalibrater == null) 
-        {
-            GyrCalibrater = new o0GyrCalibrater();
-        }
-        if (GyrCalibrationButton)
-        {
-            GyrCalibrationButton.onClick.AddListener(delegate() {
-                CalibrateGyr(!GyrCalibrater.Calibration);
-            });
-        }
-    }
-
-    public void CalibrateGyr(bool calibration) {
-        try {
-            GyrCalibrater.Calibration = calibration;
-            if (calibration)
-            {
-                GyrCalibrationButton.GetComponentInChildren<Text>().text = "停止陀螺仪校准";
-            }
-            else
-            {
-                GyrCalibrationButton.GetComponentInChildren<Text>().text = "开始陀螺仪校准";
-                PlayerPrefs.SetString("o0GyrCalibrater", JsonConvert.SerializeObject(GyrCalibrater));            
-            }
-        } catch (Exception e) { Debug.LogError(e.Message); }
-    }
-
-     public void CalibrateMag(bool calibration) {
-        try {
-            if (calibration)
-            {
-                MagCalibrater.Calibration = calibration;
-                MagCalibrationButton.GetComponentInChildren<Text>().text = "停止地磁计校准";
-                this.cMaxVector = new Vector3(0, 0, 0);
-                this.cMinVector = new Vector3(0, 0, 0);
-                this.ellipseScript.ellipseTran.gameObject.SetActive(false);
-            }
-            else
-            {
-                List<Vector3> list = MagCalibrater.getRecords();
-                //停止校准时候,看看数组值
-                float maxDistance = 0f,ratio = 1f;
-                Vector3 maxVector3 = new Vector3(0,0,0);
-                List<Vector3> endRecords = new List<Vector3>();
-                foreach (Vector3 i in list)
-                {
-                    Vector3 v = i - MagCalibrater._Center;
-                    if (Math.Abs(v.magnitude) > maxDistance)
-                    {
-                        maxVector3 = v;
-                        maxDistance = Math.Abs(v.magnitude);
-                        if(Math.Abs(v.magnitude) < Math.Abs(MagCalibrater._Radius.magnitude))
-                            ratio = Math.Abs(v.magnitude) / Math.Abs(MagCalibrater._Radius.magnitude);
-                        else
-                            ratio = Math.Abs(MagCalibrater._Radius.magnitude) / Math.Abs(v.magnitude);
-                    }
-                }
-                Debug.LogWarning(maxDistance + " == " + Math.Abs(MagCalibrater._Radius.magnitude) + " == " + MagCalibrater._Radius + " = " + maxVector3);
-                //如果比例效果不理想。可以设置为ratio=0.5f 
-                foreach (Vector3 i in list)
-                {
-                    //- MagCalibrater._Center
-                    Vector3 v = i ;
-                    v *= ratio;
-                    if(endRecords.Count>3000)
-                    {
-                        endRecords.RemoveAt(0);
-                    }
-                    endRecords.Add(v);
-                }
-                this.ellipseScript.ClearAndUpdatePointArray();
-                this.ellipseScript.DrawPointCloud(endRecords);
-
-                MagCalibrater.Calibration = calibration;
-
-                this.ellipseScript.ellipseTran.gameObject.SetActive(true);
-                //绘制椭圆形
-                if (MagCalibrater._Radius != this.ellipseScript.ellipseTran.localScale)
-                {
-                    this.ellipseScript.setEllipseLocalScaleAndCenter(MagCalibrater._Radius, MagCalibrater._Center* ratio);
-                    //设置绘制图像相机的对应位置
-                    this.ellipseScript.setCameraPos(MagCalibrater._Center * 0.5f);
-                }
-
-                MagCalibrationButton.GetComponentInChildren<Text>().text = "开始地磁计校准";
-                PlayerPrefs.SetString("o0MagneticCalibrater", JsonConvert.SerializeObject(MagCalibrater));
-            }
-        } catch (Exception e) { Debug.LogError(e.Message); }
-    }
-
-    //转换读取的数据,无符号->有符号
-    float TwoByteToFloat(byte b1, byte b2) 
-    {
-        ushort twoByte = (ushort) (b1 * 256 + b2);
-        short shortNum = (short) twoByte;
-        return (float) shortNum; 
-    }
-
-    public void OnDataReceived(byte[] bytes)
-    {
-        // Debug.Log("瞄准模块数据长度" + bytes.Length);
-        if (bytes.Length != 27)
-        {
-            if (bytes.Length == 2) {
-                if (bytes[0] == 0x66 && bytes[1] == 0x31) {
-                    if (SB_EventSystem.ins && SB_EventSystem.ins.simulateMouseIsAwaked) {
-                        //鼠标居中
-                        SB_EventSystem.ins.MakeMouseToScreenCenter(); 
-                    }
-                    //视角回正
-                    DoIdentity();
-                } else if (bytes[0] == 0x66 && bytes[1] == 0x32) {
-                    if (SB_EventSystem.ins) {
-                        //唤起/隐藏虚拟鼠标
-                        SB_EventSystem.ins.AwakenSimulateMouse(); 
-                    }
-                } else if (bytes[1] == 10) {
-                    //显示电量
-                    DeviceBatteryView.ins.RenderBattery(1, bytes[0]); 
-                }
-            } else if (bytes[0] == 0x5b) {
-                if (SB_EventSystem.ins && SB_EventSystem.ins.simulateMouseIsAwaked) {
-                    //点击鼠标
-                    SB_EventSystem.ins.ClickMouse(); 
-                } else {
-                    //红外射击检测
-                    ShootCheck.ins.ShootByInfrared(bytes); 
-                }
-            }
-            return;
-        }
-        if (bytes[7] == 0 && bytes[8] == 0 && bytes[9] == 0 && bytes[10] == 0 && bytes[11] == 0 && bytes[12] == 0)
-            return;
-        if (bytes[19] == 0 && bytes[20] == 0 && bytes[21] == 0 && bytes[22] == 0 && bytes[23] == 0 && bytes[24] == 0)
-            return;
-
-        float ax = TwoByteToFloat(bytes[7], bytes[8]);
-        float ay = TwoByteToFloat(bytes[9], bytes[10]);
-        float az = TwoByteToFloat(bytes[11], bytes[12]);
-
-        float roll = TwoByteToFloat(bytes[13], bytes[14]);
-        float pitch = TwoByteToFloat(bytes[15], bytes[16]);
-        float yaw = TwoByteToFloat(bytes[17], bytes[18]);
-
-        float x = TwoByteToFloat(bytes[19], bytes[20]);
-        float y = TwoByteToFloat(bytes[21], bytes[22]);
-        float z = TwoByteToFloat(bytes[23], bytes[24]);
-
-        float mxr = TwoByteToFloat(bytes[20], bytes[19]);
-        float myr = TwoByteToFloat(bytes[22], bytes[21]);
-        float mzr = TwoByteToFloat(bytes[24], bytes[23]);
-
-
-        Acc = new Vector3(ax, ay, az) / 32768 * 16;
-        Gyr = new Vector3(roll, pitch, yaw) / 32768 * 2;
-        Mag = new Vector3(z, x, -y) / 32768 * 256;//第一个6+3硬件
-        //Acc = new Vector3(-az, ax, -ay) / 32768 * 16;
-        //Gyr = new Vector3(-yaw, roll, -pitch) / 32768 * 2;
-        //Mag = new Vector3(mzr, mxr, -myr) / 32768 * 256;//第二个6+3硬件
-
-
-        AccObj.transform.GetChild(0).localPosition = Acc;
-
-        Gyr = GyrCalibrater.Update(Gyr);
-
-        if (GyrCalibrater.Calibration) 
-        {
-            if (gyrCalibrateCompleteCount < gyrCalibrateTotalCount) {
-                gyrCalibrateCompleteCount++;
-            }
-        }
-        if (GyrScaleText && GyrCalibrater.Calibration) 
-        {    
-            GyrScaleText.text = "" + (_9Axis.getGyrOld() * 1000000).ToString();
-        }
-
-        if(Mag.x > -128 && Mag.y > -128 && Mag.z > -128 && Mag.x < 128 && Mag.y < 128 && Mag.z < 128)
-        {   
-            //绘制地磁计点
-            if (MagCalibrater.Calibration)
-            {
-                this.ellipseScript.AddAndUpdatePointArray(Mag);
-
-                if (Mag.magnitude > this.cMaxVector.magnitude)
-                {
-                    this.cMaxVector = Mag;
-                }
-                else if (Mag.magnitude < this.cMinVector.magnitude) {
-                    this.cMinVector = Mag;
-                }
-
-                Vector3 _center = this.cMaxVector - this.cMinVector;
-                Debug.LogWarning(_center + " == "+ _center.magnitude);
-                //设置绘制图像相机的对应位置
-                this.ellipseScript.setCameraPos(_center/2);
-            }
-            Mag = MagCalibrater.Update(Mag);
-
-            if (MagScaleText)
-            {
-                MagScaleText.text = MagCalibrater._Radius.ToString();
-            }
-           
-        }
-        MagObj.transform.GetChild(0).localPosition = Mag;
-
-        var ms = (((long)bytes[1]) *60 + bytes[2])*1000 + (long)TwoByteToFloat(bytes[3], bytes[4]);
-        if(msOld == default)
-        {
-            msOld = ms;
-            return;
-        }
-        TimeGap = ms - msOld;
-        msOld = ms;
-
-        AMesh.transform.localRotation = newRotation = _9Axis.update(Acc * 10, Gyr, Mag, TimeGap);
-
-        if (BowQuatDebug.ins) BowQuatDebug.ins.ShowModuleQuat(newRotation.eulerAngles);
-
-        if (SB_EventSystem.ins && SB_EventSystem.ins.simulateMouseIsAwaked) {
-            SB_EventSystem.ins.MoveSimulateMouse(newRotation);
-        }
-    }
-
-    [NonSerialized] public bool lerpForRotation = true;
-    [NonSerialized] public float lerpTimeRate = 7;
-    public void Update()
-    {
-        if (controlObj && !banControlObjRotate)
-        {
-            if (lerpForRotation)
-            {
-                controlObj.localRotation = Quaternion.Lerp(controlObj.localRotation, newRotation, Time.deltaTime * lerpTimeRate);   
-            } 
-            else 
-            {
-                controlObj.localRotation = newRotation;
-            }
-        }
-    }
-
-    private bool banControlObjRotate = false;
-    public void BanControlObjRotate(bool ban) {
-        banControlObjRotate = ban;
-        if (!ban) {
-            if (controlObj) controlObj.localRotation = newRotation;
-        }
-    }
-
-    Quaternion newRotation = Quaternion.identity;
-
-    public void DoIdentity()
-    {
-        _9Axis.SetIdentityAndSave();
-        Quaternion qua = _9Axis.getLastState().Qua;
-        newRotation = qua;
-        if (controlObj) controlObj.localRotation = qua;
-    }
-}

+ 0 - 484
代码备份/2022-7-15/修改后-新硬件1和2/BluetoothAim.cs

@@ -1,484 +0,0 @@
-using ArduinoBluetoothAPI;
-using System;
-using UnityEngine;
-using System.Collections.Generic;
-using UnityEngine.UI;
-using DG.Tweening;
-using UnityEngine.SceneManagement;
-/* 蓝牙瞄准模块 */
-public class BluetoothAim : MonoBehaviour
-{
-    BluetoothHelper bluetoothHelper;
-    BluetoothHelperCharacteristic characteristicWrite;
-    BluetoothHelperService bluetoothService;
-    string targetDeviceName = "Bbow_20210501";
-    string deviceName = "";
-    bool canConnect = true;
-    [SerializeField] Text textUI;
-    public BluetoothStatusEnum status = BluetoothStatusEnum.Connect;
-    public bool hasData = false;
-    public long hasDataTime;
-    public static bool scanLock = false; //防止同时扫描冲突
-    public static BluetoothAim ins;
-
-    void Start()
-    {
-        ins = this;
-        InitAutoDormancy();
-
-#if UNITY_STANDALONE_WIN
-        new GameObject("BleUDP").AddComponent<BleUDP>();
-#endif
-    }
-
-    void OnDestroy()
-    {
-        DisconnectBleHelper();
-    }
-
-    private bool userDoConnect = false;
-    private bool doConnect = false;
-    public void DoConnect()
-    {
-        if (status == BluetoothStatusEnum.Connect)
-        {
-            userDoConnect = true;
-            doConnect = true;
-            SetStatus(BluetoothStatusEnum.Connecting);
-        }
-        else if (status == BluetoothStatusEnum.ConnectSuccess)
-        {
-            userDoConnect = false;
-            doConnect = false;
-            OnDisconnect();
-#if UNITY_ANDROID
-            DisconnectBleHelper();
-#elif UNITY_STANDALONE_WIN
-            BleUDP.ins.Disconnect();
-#endif
-        }
-    }
-
-    void OnDisconnect()
-    {
-        hasData = false;
-        canConnect = true;
-        SetStatus(BluetoothStatusEnum.ConnectFail);
-        BowCamera.isTouchMode = true;
-        DestroyWhenDisconenct();
-    }
-
-    void Update()
-    {
-        if (userDoConnect && status == BluetoothStatusEnum.Connect)
-        {
-            DoConnect();
-        }
-        if (doConnect) Connect();
-    }
-
-    void SetStatus(BluetoothStatusEnum statusValue)
-    {
-        status = statusValue;
-        if (status == BluetoothStatusEnum.ConnectFail)
-        {
-            Sequence sequence = DOTween.Sequence();
-            sequence.AppendInterval(2f);
-            sequence.AppendCallback(delegate ()
-            {
-                if (status == BluetoothStatusEnum.ConnectFail)
-                {
-                    status = BluetoothStatusEnum.Connect;
-                }
-            });
-            sequence.SetUpdate(true);
-            DeviceReconnectView.Show();
-        }
-    }
-
-    void DisconnectBleHelper()
-    {
-        if (bluetoothHelper != null) bluetoothHelper.Disconnect();
-    }
-
-    void Connect()
-    {
-        if (BluetoothShoot.scanLock)
-        {
-            return;
-        }
-        if (!canConnect)
-        {
-            return;
-        }
-        doConnect = false;
-        scanLock = true;
-        canConnect = false;
-        SetStatus(BluetoothStatusEnum.Connecting);
-#if UNITY_ANDROID
-        ConnectBleHelper();
-#elif UNITY_STANDALONE_WIN
-        ConnectBleByUDP();
-#endif
-    }
-
-    void ConnectBleHelper()
-    {
-        try
-        {
-            BluetoothHelper.BLE = true;
-            bluetoothHelper = BluetoothHelper.GetNewInstance();
-
-            bluetoothHelper.OnConnected += (BluetoothHelper helper) =>
-            {
-                Log("连接成功\n" + helper.getDeviceName());
-                SetStatus(BluetoothStatusEnum.ConnectSuccess);
-                BowCamera.isTouchMode = false;
-                foreach (BluetoothHelperService service in helper.getGattServices())
-                {
-
-                    if (service.getName().ToLower().StartsWith("6e400001"))
-                    {
-                        bluetoothService = service;
-
-                        foreach (BluetoothHelperCharacteristic characteristic in service.getCharacteristics())
-                        {
-                            if (characteristic.getName().ToLower().StartsWith("6e400002"))
-                            {
-                                characteristicWrite = characteristic;
-                            }
-                            else if (characteristic.getName().ToLower().StartsWith("6e400003"))
-                            {
-
-                                BluetoothHelperCharacteristic ch = new BluetoothHelperCharacteristic(characteristic.getName());
-                                ch.setService(bluetoothService.getName());
-                                bluetoothHelper.Subscribe(ch);
-                            }
-                        }
-                    }
-                }
-                // CallDelay(1, OpenInfrared);
-                // CallDelay(2, OpenReceiveData);
-                // CallDelay(3, RequestBattery);
-                CallDelay(2, () =>
-                {
-                    if (status != BluetoothStatusEnum.ConnectSuccess) return;
-                    InitWhenConenct();
-                });
-            };
-            bluetoothHelper.OnConnectionFailed += (BluetoothHelper helper) =>
-            {
-                Log("连接失败\n" + helper.getDeviceName());
-                OnDisconnect();
-            };
-            bluetoothHelper.OnCharacteristicChanged += (helper, value, characteristic) =>
-            {
-                if (!hasData) hasDataTime = JC.CS.Utility.GetTimestamp();
-                hasData = true;
-                byte[] bytes = value;
-                // Log(String.Join(",", bytes));
-                BluetoothClient.UploadData(0, bytes);
-                if (AimHandler.ins)
-                {
-                    AimHandler.ins.OnDataReceived(bytes);
-                }
-            };
-            int scanCount = 0;
-            bluetoothHelper.OnScanEnded += (BluetoothHelper helper, LinkedList<BluetoothDevice> nearbyDevices) =>
-            {
-                scanLock = false;
-                foreach (BluetoothDevice device in nearbyDevices)
-                {
-                    if (device.DeviceName == targetDeviceName)
-                    {
-                        deviceName = device.DeviceName;
-                        bluetoothHelper.setDeviceName(deviceName);
-                        bluetoothHelper.Connect();
-                        Log("发现设备\n" + device.DeviceName);
-                        return;
-                    }
-                }
-                if (scanCount < 3)
-                { //如果没扫描到,则重新扫描,达到延迟提示失败的效果
-                    scanCount++;
-                    scanLock = true;
-                    bluetoothHelper.ScanNearbyDevices();
-                }
-                else
-                {
-                    canConnect = true;
-                    Log("没有发现设备");
-                    SetStatus(BluetoothStatusEnum.ConnectFail);
-                }
-            };
-
-            bluetoothHelper.ScanNearbyDevices();
-            Log("正在扫描设备");
-        }
-        catch (Exception e)
-        {
-            Debug.LogError(e.Message);
-            Debug.LogError(e.StackTrace);
-            scanLock = false;
-            canConnect = true;
-            SetStatus(BluetoothStatusEnum.ConnectFail);
-            Log("请打开蓝牙");
-        }
-    }
-
-    void ConnectBleByUDP()
-    {
-        try
-        {
-            BleUDP.ins.OnConnected = () =>
-            {
-                Log("连接成功\n" + deviceName);
-                SetStatus(BluetoothStatusEnum.ConnectSuccess);
-                BowCamera.isTouchMode = false;
-                InitWhenConenct();
-            };
-            BleUDP.ins.OnConnectionFailed = () =>
-            {
-                Log("连接失败\n" + deviceName);
-                OnDisconnect();
-            };
-            BleUDP.ins.OnCharacteristicChanged = (byte[] value) =>
-            {
-                if (!hasData) hasDataTime = JC.CS.Utility.GetTimestamp();
-                hasData = true;
-                byte[] bytes = value;
-                // Log(String.Join(",", bytes));
-                BluetoothClient.UploadData(0, bytes);
-                if (AimHandler.ins)
-                {
-                    AimHandler.ins.OnDataReceived(bytes);
-                }
-            };
-            BleUDP.ins.OnScanEnded = () =>
-            {
-                scanLock = false;
-                deviceName = targetDeviceName;
-                BleUDP.ins.Connect();
-                Log("发现设备\n" + deviceName);
-            };
-
-            BleUDP.ins.ScanNearbyDevices();
-        }
-        catch (Exception e)
-        {
-            Debug.LogError(e.Message);
-            Debug.LogError(e.StackTrace);
-            scanLock = false;
-            canConnect = true;
-            SetStatus(BluetoothStatusEnum.ConnectFail);
-        }
-    }
-
-    #region 自动进入/退出休眠状态, 这里做程指令发送队列,为了控制连续发送指令的间隔,避免硬件收不到或处理不过来
-    class CmdToSend
-    {
-        public string[] cmds;
-        public Action onComplete;
-        public Func<bool> canDo;
-        public CmdToSend(string[] cmds, Action onComplete, Func<bool> canDo)
-        {
-            this.cmds = cmds;
-            this.onComplete = onComplete;
-            this.canDo = canDo;
-        }
-    }
-    Queue<CmdToSend> cmdWaitingList = new Queue<CmdToSend>();
-    bool isSendCmdLocked = false;
-    bool canAutoDormancy = false;
-    bool isStartUp = false;
-    JC.CS.CountLocker needModularAwake = new JC.CS.CountLocker();
-    void CheckAndStartUp()
-    {
-        if (needModularAwake.IsLocked())
-        {
-            StartUp();
-        }
-        else
-        {
-            Dormancy();
-        }
-    }
-    void InitAutoDormancy()
-    {
-        // GlobalEventCenter.ins.onGameSceneLoad += () => { 
-        //     needModularAwake.Lock(); 
-        //     CheckAndStartUp();
-        // };
-        // GlobalEventCenter.ins.onGameSceneDestroy += () => { 
-        //     needModularAwake.Unlock(); 
-        //     CheckAndStartUp();
-        // };
-        // GlobalEventCenter.ins.onSimulateMouseAwakeChanged += (waked) => {
-        //     if (waked) needModularAwake.Lock();
-        //     else needModularAwake.Unlock();;
-        //     CheckAndStartUp();
-        // };
-        // GlobalEventCenter.ins.onDeviceCalibrateViewAwakeChanged += (waked) => {
-        //     if (waked) needModularAwake.Lock();
-        //     else needModularAwake.Unlock();;
-        //     CheckAndStartUp();
-        // };
-        //暂时关闭自动休眠,默认是需要模块保持激活
-        needModularAwake.Lock();
-    }
-    void InitWhenConenct()
-    {
-        canAutoDormancy = true;
-        List<string> cmds = new List<string>();
-        cmds.Add("b"); //确保开启stm32
-        cmds.Add("b"); //获取初始电量
-        cmds.Add("1"); //开启发送逻辑
-        Action onComplete = null;
-        if (needModularAwake.IsLocked())
-        {
-            cmds.Add("w"); //红外灯开启
-            cmds.Add("3"); //九轴开启
-            onComplete = () =>
-            {
-                isStartUp = true;
-            };
-        }
-        else
-        {
-            cmds.Add("s"); //红外灯关闭
-            cmds.Add("S"); //Stm32关闭
-            cmds.Add("4"); //九轴关闭
-            onComplete = () =>
-            {
-                isStartUp = false;
-            };
-        }
-        SendCDM(null, onComplete, cmds.ToArray());
-    }
-    void DestroyWhenDisconenct()
-    {
-        canAutoDormancy = false;
-        sendCMD_CheckAndDoStop(null);
-
-    }
-    //启动
-    void StartUp()
-    {
-        SendCDM(() =>
-        {
-            return !isStartUp;
-        }, () =>
-        {
-            isStartUp = true;
-        }, "b", "w", "3");
-    }
-    //休眠
-    void Dormancy()
-    {
-        SendCDM(() =>
-        {
-            return isStartUp;
-        }, () =>
-        {
-            isStartUp = false;
-        }, "4", "s", "S");
-    }
-    void SendCDM(Func<bool> canDo, Action onComplete, params string[] cmds)
-    {
-        CmdToSend cmdToSend = new CmdToSend(cmds, onComplete, canDo);
-        if (isSendCmdLocked)
-        {
-            cmdWaitingList.Enqueue(cmdToSend);
-            return;
-        }
-        sendCMD_NotCheck(cmdToSend);
-    }
-    void sendCMD_NotCheck(CmdToSend cmdToSend)
-    {
-        if (cmdToSend.canDo != null && !cmdToSend.canDo.Invoke())
-        {
-            sendCMD_CheckNext();
-            return;
-        }
-        isSendCmdLocked = true;
-        Sequence sequence = DOTween.Sequence();
-        sequence.PrependInterval(0.3f);
-        foreach (var cmd in cmdToSend.cmds)
-        {
-            sequence.AppendCallback(() =>
-            {
-                bool stopped = sendCMD_CheckAndDoStop(sequence);
-                if (!stopped) WriteData(cmd);
-            });
-            sequence.AppendInterval(0.5f);
-        }
-        sequence.AppendCallback(() =>
-        {
-            bool stopped = sendCMD_CheckAndDoStop(sequence);
-            if (!stopped)
-            {
-                isSendCmdLocked = false;
-                cmdToSend.onComplete?.Invoke();
-                sendCMD_CheckNext();
-            }
-        });
-        sequence.SetUpdate(true);
-    }
-    void sendCMD_CheckNext()
-    {
-        if (cmdWaitingList.Count <= 0) return;
-        CmdToSend cmdToSend = cmdWaitingList.Dequeue();
-        sendCMD_NotCheck(cmdToSend);
-    }
-    bool sendCMD_CheckAndDoStop(Sequence sequence)
-    {
-        if (canAutoDormancy) return false;
-        isStartUp = false;
-        isSendCmdLocked = false;
-        cmdWaitingList.Clear();
-        if (sequence != null) sequence.Kill();
-        return true;
-    }
-    #endregion
-
-    public void RequestBattery()
-    {
-        if (!isStartUp) return;
-        if (isSendCmdLocked) return;
-        WriteData("b");
-    }
-
-    public void ReplyInfraredShoot()
-    {
-        if (isSendCmdLocked) return;
-        WriteData("I");
-    }
-
-    void CallDelay(float delayTime, TweenCallback callback)
-    {
-        Sequence sequence = DOTween.Sequence();
-        sequence.PrependInterval(delayTime).AppendCallback(callback);
-        sequence.SetUpdate(true);
-    }
-
-    public void WriteData(string data)
-    {
-#if UNITY_ANDROID
-        if (DebugDeviceCMD.ins) DebugDeviceCMD.ins.ShowCMD(data);
-        BluetoothHelperCharacteristic ch = new BluetoothHelperCharacteristic(characteristicWrite.getName());
-        ch.setService(bluetoothService.getName());
-        bluetoothHelper.WriteCharacteristic(ch, data);
-#elif UNITY_STANDALONE_WIN
-        BleUDP.ins.SendMsg(data);
-#endif
-
-    }
-
-    void Log(string text)
-    {
-        if (textUI)
-        {
-            textUI.text = text;
-        }
-    }
-}

+ 0 - 381
代码备份/2022-7-15/修改后-旧版换方向/AimHandler.cs

@@ -1,381 +0,0 @@
-using System;
-using UnityEngine;
-using System.Collections.Generic;
-using System.Linq;
-using UnityEngine.UI;
-using Newtonsoft.Json;
-/* 瞄准处理器 */
-public class AimHandler : MonoBehaviour
-{
-    Transform controlObj {
-        get {
-            if (CameraToLook.ins) {
-                return CameraToLook.ins.transform;
-            }
-            return null;
-        }
-    }
-    [SerializeField] Button SetIdentityButton;
-    [SerializeField] Button MagCalibrationButton;
-    [SerializeField] Button GyrCalibrationButton;
-    [SerializeField] Text MagScaleText;
-    [SerializeField] Text GyrScaleText;
-
-    //椭圆对象
-    [SerializeField] Ellipse ellipseScript;
-    [SerializeField] GameObject AccObj;
-    [SerializeField] GameObject MagObj;
-
-    [SerializeField] GameObject AccMesh;
-    [SerializeField] GameObject GryMesh;
-    [SerializeField] GameObject MagMesh;
-    [SerializeField] GameObject AMesh;
-    [SerializeField] Transform DebugTexts;
-    [SerializeField] Transform DrawImage;
-    
-    long TimeGap = default;
-    Vector3 Acc = default;
-    Vector3 Gyr = default;
-    Vector3 Mag = default;
-    o09Axis _9Axis = new o09Axis();
-
-    Vector3 cMaxVector = new Vector3(0,0,0);
-    Vector3 cMinVector = new Vector3(0, 0, 0);
-
-    public o0MagneticCalibraterEllipsoidFitting MagCalibrater;
-    o0GyrCalibrater GyrCalibrater;
-
-    //陀螺仪校准进度记录
-    public int gyrCalibrateCompleteCount = 0;
-    public int gyrCalibrateTotalCount = 300;
-
-    long msOld = 0;
-
-    public static AimHandler ins; 
-
-    void Start()
-    {
-        ins = this;
-        BluetoothDispatcher.aim = OnDataReceived;
-
-        //初始化
-        _9Axis.LoadIdentity();
-
-        _9Axis.AccMesh = AccMesh;
-        _9Axis.GryMesh = GryMesh;
-        _9Axis.MagMesh = MagMesh;
-
-        for (var i = 0; i < 9; ++i)
-        {
-            _9Axis.Tester.Add(DrawImage.Find(i.ToString()).gameObject.AddComponent<o0UIRawImageTester>());
-        }
-
-        for (var i = 0; i < 15; ++i)
-        {
-            _9Axis.TextTester.Add(DebugTexts.transform.Find("Text" + i.ToString()).gameObject.GetComponent<Text>());
-        }
-
-        if (SetIdentityButton) 
-        {
-            SetIdentityButton.onClick.AddListener(DoIdentity);
-        }
-        
-        try 
-        {  
-            string magDataStr = PlayerPrefs.GetString("o0MagneticCalibrater");
-            MagCalibrater = JsonConvert.DeserializeObject<o0MagneticCalibraterEllipsoidFitting>(magDataStr);
-        } 
-        catch(Exception) 
-        {
-            MagCalibrater = null;
-        }
-
-        if (MagCalibrater == null) 
-        {
-            MagCalibrater = new o0MagneticCalibraterEllipsoidFitting();
-        }
-        if (MagCalibrationButton)
-        {
-            MagCalibrationButton.onClick.AddListener(delegate {
-                CalibrateMag(!MagCalibrater.Calibration);
-            });
-        }
-
-        try {
-            string gyrDataStr = PlayerPrefs.GetString("o0GyrCalibrater");
-            GyrCalibrater = JsonConvert.DeserializeObject<o0GyrCalibrater>(gyrDataStr);
-            if (GyrCalibrater._Average != Vector3.zero) GyrScaleText.text = "已校准";
-        } catch(Exception) {
-            GyrCalibrater = null;
-        }
-        if (GyrCalibrater == null) 
-        {
-            GyrCalibrater = new o0GyrCalibrater();
-        }
-        if (GyrCalibrationButton)
-        {
-            GyrCalibrationButton.onClick.AddListener(delegate() {
-                CalibrateGyr(!GyrCalibrater.Calibration);
-            });
-        }
-    }
-
-    public void CalibrateGyr(bool calibration) {
-        try {
-            GyrCalibrater.Calibration = calibration;
-            if (calibration)
-            {
-                GyrCalibrationButton.GetComponentInChildren<Text>().text = "停止陀螺仪校准";
-            }
-            else
-            {
-                GyrCalibrationButton.GetComponentInChildren<Text>().text = "开始陀螺仪校准";
-                PlayerPrefs.SetString("o0GyrCalibrater", JsonConvert.SerializeObject(GyrCalibrater));            
-            }
-        } catch (Exception e) { Debug.LogError(e.Message); }
-    }
-
-     public void CalibrateMag(bool calibration) {
-        try {
-            if (calibration)
-            {
-                MagCalibrater.Calibration = calibration;
-                MagCalibrationButton.GetComponentInChildren<Text>().text = "停止地磁计校准";
-                this.cMaxVector = new Vector3(0, 0, 0);
-                this.cMinVector = new Vector3(0, 0, 0);
-                this.ellipseScript.ellipseTran.gameObject.SetActive(false);
-            }
-            else
-            {
-                List<Vector3> list = MagCalibrater.getRecords();
-                //停止校准时候,看看数组值
-                float maxDistance = 0f,ratio = 1f;
-                Vector3 maxVector3 = new Vector3(0,0,0);
-                List<Vector3> endRecords = new List<Vector3>();
-                foreach (Vector3 i in list)
-                {
-                    Vector3 v = i - MagCalibrater._Center;
-                    if (Math.Abs(v.magnitude) > maxDistance)
-                    {
-                        maxVector3 = v;
-                        maxDistance = Math.Abs(v.magnitude);
-                        if(Math.Abs(v.magnitude) < Math.Abs(MagCalibrater._Radius.magnitude))
-                            ratio = Math.Abs(v.magnitude) / Math.Abs(MagCalibrater._Radius.magnitude);
-                        else
-                            ratio = Math.Abs(MagCalibrater._Radius.magnitude) / Math.Abs(v.magnitude);
-                    }
-                }
-                Debug.LogWarning(maxDistance + " == " + Math.Abs(MagCalibrater._Radius.magnitude) + " == " + MagCalibrater._Radius + " = " + maxVector3);
-                //如果比例效果不理想。可以设置为ratio=0.5f 
-                foreach (Vector3 i in list)
-                {
-                    //- MagCalibrater._Center
-                    Vector3 v = i ;
-                    v *= ratio;
-                    if(endRecords.Count>3000)
-                    {
-                        endRecords.RemoveAt(0);
-                    }
-                    endRecords.Add(v);
-                }
-                this.ellipseScript.ClearAndUpdatePointArray();
-                this.ellipseScript.DrawPointCloud(endRecords);
-
-                MagCalibrater.Calibration = calibration;
-
-                this.ellipseScript.ellipseTran.gameObject.SetActive(true);
-                //绘制椭圆形
-                if (MagCalibrater._Radius != this.ellipseScript.ellipseTran.localScale)
-                {
-                    this.ellipseScript.setEllipseLocalScaleAndCenter(MagCalibrater._Radius, MagCalibrater._Center* ratio);
-                    //设置绘制图像相机的对应位置
-                    this.ellipseScript.setCameraPos(MagCalibrater._Center * 0.5f);
-                }
-
-                MagCalibrationButton.GetComponentInChildren<Text>().text = "开始地磁计校准";
-                PlayerPrefs.SetString("o0MagneticCalibrater", JsonConvert.SerializeObject(MagCalibrater));
-            }
-        } catch (Exception e) { Debug.LogError(e.Message); }
-    }
-
-    //转换读取的数据,无符号->有符号
-    float TwoByteToFloat(byte b1, byte b2) 
-    {
-        ushort twoByte = (ushort) (b1 * 256 + b2);
-        short shortNum = (short) twoByte;
-        return (float) shortNum; 
-    }
-
-    public void OnDataReceived(byte[] bytes)
-    {
-        // Debug.Log("瞄准模块数据长度" + bytes.Length);
-        if (bytes.Length != 27)
-        {
-            if (bytes.Length == 2) {
-                if (bytes[0] == 0x66 && bytes[1] == 0x31) {
-                    if (SB_EventSystem.ins && SB_EventSystem.ins.simulateMouseIsAwaked) {
-                        //鼠标居中
-                        SB_EventSystem.ins.MakeMouseToScreenCenter(); 
-                    }
-                    //视角回正
-                    DoIdentity();
-                } else if (bytes[0] == 0x66 && bytes[1] == 0x32) {
-                    if (SB_EventSystem.ins) {
-                        //唤起/隐藏虚拟鼠标
-                        SB_EventSystem.ins.AwakenSimulateMouse(); 
-                    }
-                } else if (bytes[1] == 10) {
-                    //显示电量
-                    DeviceBatteryView.ins.RenderBattery(1, bytes[0]); 
-                }
-            } else if (bytes[0] == 0x5b) {
-                if (SB_EventSystem.ins && SB_EventSystem.ins.simulateMouseIsAwaked) {
-                    //点击鼠标
-                    SB_EventSystem.ins.ClickMouse(); 
-                } else {
-                    //红外射击检测
-                    ShootCheck.ins.ShootByInfrared(bytes); 
-                }
-            }
-            return;
-        }
-        if (bytes[7] == 0 && bytes[8] == 0 && bytes[9] == 0 && bytes[10] == 0 && bytes[11] == 0 && bytes[12] == 0)
-            return;
-        if (bytes[19] == 0 && bytes[20] == 0 && bytes[21] == 0 && bytes[22] == 0 && bytes[23] == 0 && bytes[24] == 0)
-            return;
-        
-        float ax = -TwoByteToFloat(bytes[7], bytes[8]);
-        float ay = -TwoByteToFloat(bytes[9], bytes[10]);
-        float az = -TwoByteToFloat(bytes[11], bytes[12]);
-        ax = ax / 32768 * 16;
-        ay = ay / 32768 * 16;
-        az = az / 32768 * 16;
-        Acc = new Vector3(az, ay, ax);
-        AccObj.transform.GetChild(0).localPosition = Acc;
-
-
-        float roll = TwoByteToFloat(bytes[13], bytes[14]);
-        float pitch = TwoByteToFloat(bytes[15], bytes[16]);
-        float yaw = TwoByteToFloat(bytes[17], bytes[18]);
-        roll = -roll / 32768 * 2000;
-        pitch = -pitch / 32768 * 2000;
-        yaw = -yaw / 32768 * 2000;
-        Gyr = new Vector3(yaw, pitch, roll) / 1000;
-        Gyr = GyrCalibrater.Update(Gyr);
-        if (GyrCalibrater.Calibration) 
-        {
-            if (gyrCalibrateCompleteCount < gyrCalibrateTotalCount) {
-                gyrCalibrateCompleteCount++;
-            }
-        }
-        if (GyrScaleText && GyrCalibrater.Calibration) 
-        {    
-            // GyrScaleText.text = GyrCalibrater._Average.x + "\n" + GyrCalibrater._Average.y + "\n" + GyrCalibrater._Average.z;
-            // GyrScaleText.text = "Gyr*1000,000:" + (_9Axis.GyrOld * 1000000).ToString();
-            GyrScaleText.text = "" + (_9Axis.getGyrOld() * 1000000).ToString();
-        }
-
-        float x = TwoByteToFloat(bytes[19], bytes[20]);
-        float y = TwoByteToFloat(bytes[21], bytes[22]);
-        float z = TwoByteToFloat(bytes[23], bytes[24]);
-        var mag = new Vector3(z, y, -x);
-        Mag = mag / 32768 * 256;
-    
-
-        if(Mag.x > -128 && Mag.y > -128 && Mag.z > -128 && Mag.x < 128 && Mag.y < 128 && Mag.z < 128)
-        {   
-            //绘制地磁计点
-            if (MagCalibrater.Calibration)
-            {
-                this.ellipseScript.AddAndUpdatePointArray(Mag);
-
-                if (Mag.magnitude > this.cMaxVector.magnitude)
-                {
-                    this.cMaxVector = Mag;
-                }
-                else if (Mag.magnitude < this.cMinVector.magnitude) {
-                    this.cMinVector = Mag;
-                }
-
-                Vector3 _center = this.cMaxVector - this.cMinVector;
-                Debug.LogWarning(_center + " == "+ _center.magnitude);
-                //设置绘制图像相机的对应位置
-                this.ellipseScript.setCameraPos(_center/2);
-            }
-            Mag = MagCalibrater.Update(Mag);
-
-            if (MagScaleText)
-            {
-                MagScaleText.text = MagCalibrater._Radius.ToString();
-            }
-           
-        }
-        MagObj.transform.GetChild(0).localPosition = Mag;
-
-        var ms = (((long)bytes[1]) *60 + bytes[2])*1000 + (long)TwoByteToFloat(bytes[3], bytes[4]);
-        if(msOld == default)
-        {
-            msOld = ms;
-            return;
-        }
-        TimeGap = ms - msOld;
-        msOld = ms;
-
-        var GyrOperator = new Quaternion();
-        GyrOperator.eulerAngles = Gyr * TimeGap;
-        AMesh.transform.localRotation *= GyrOperator;
-
-        newRotation = _9Axis.update(Acc * 10, Gyr, Mag, TimeGap);
-
-        if (BowQuatDebug.ins) BowQuatDebug.ins.ShowModuleQuat(newRotation.eulerAngles);
-
-        if (SB_EventSystem.ins && SB_EventSystem.ins.simulateMouseIsAwaked) {
-            SB_EventSystem.ins.MoveSimulateMouse(newRotation);
-        }
-        // 记录一些旋转角---start
-        // if (ArmBow.ins) {
-        //     for (int i = ArmBow.ins.recordRotations.Length - 1; i > 0 ; i--)
-        //     {
-        //         ArmBow.ins.recordRotations[i] = ArmBow.ins.recordRotations[i - 1];
-        //     }
-        //     ArmBow.ins.recordRotations[0] = newRotation;
-        //     ArmBow.ins.recordCount++;
-        // }
-        // 记录一些旋转角---end
-    }   
-
-    [NonSerialized] public bool lerpForRotation = true;
-    [NonSerialized] public float lerpTimeRate = 7;
-    public void Update()
-    {
-        if (controlObj && !banControlObjRotate)
-        {
-            if (lerpForRotation)
-            {
-                controlObj.localRotation = Quaternion.Lerp(controlObj.localRotation, newRotation, Time.deltaTime * lerpTimeRate);   
-            } 
-            else 
-            {
-                controlObj.localRotation = newRotation;
-            }
-        }
-    }
-
-    private bool banControlObjRotate = false;
-    public void BanControlObjRotate(bool ban) {
-        banControlObjRotate = ban;
-        if (!ban) {
-            if (controlObj) controlObj.localRotation = newRotation;
-        }
-    }
-
-    Quaternion newRotation = Quaternion.identity;
-
-    public void DoIdentity()
-    {
-        _9Axis.SetIdentityAndSave();
-        Quaternion qua = _9Axis.getLastState().Qua;
-        newRotation = qua;
-        if (controlObj) controlObj.localRotation = qua;
-    }
-}

+ 0 - 276
代码备份/2022-8-9/o09AxisCS.cs

@@ -1,276 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using UnityEngine;
-
-public class o09AxisCS
-{
-    static public Vector3 AccIdentity = new Vector3(0, -1, 0);
-    static public Vector3 MagIdentity = new Vector3(-1, 2, 0).normalized;
-    public class State
-    {
-        public long TimeGap;
-        public Vector3 Acc = AccIdentity;
-        public Vector3 AccSmooth = AccIdentity;
-
-        public Vector3 Gyr;
-        public Vector3 Mag = MagIdentity;
-        public Vector3 MagSmooth = MagIdentity;
-        public Quaternion Qua = Quaternion.identity;
-        public Quaternion QuaSmooth = Quaternion.identity;
-        public double GyrVariance = 1;
-        public double AccVariance = 1;
-        public double MagVariance = 1;
-        public Quaternion QuaAccMag = Quaternion.identity;
-        public int QuaAccMagCount = 0;
-        public double AccMagVariance = 1;
-        public double TotalVariance = 1;
-    }
-
-    o0Project.Variance HardwareVarianceGyr = new o0Project.Variance(1000);
-    o0Project.Variance HardwareVarianceAcc = new o0Project.Variance(1000);
-    o0Project.Variance HardwareVarianceMag = new o0Project.Variance(1000);
-
-    public List<State> States = new List<State>();
-
-    public Vector3 AccOld;
-    public Vector3 GyrOld;
-    public Vector3 MagOld;
-
-    public float x;
-    public float y;
-    public float z;
-
-    long TimeGapOld;
-    o0Aien.o0WeightedAverageFilterVector3 AccFilter = new o0Aien.o0WeightedAverageFilterVector3(1);
-    o0Aien.o0WeightedAverageFilterVector3 MagFilter = new o0Aien.o0WeightedAverageFilterVector3(1);
-
-
-
-    public Quaternion update(Vector3 AccOld, Vector3 GyrOld, Vector3 MagOld, long TimeGapOld)
-    {
-        o0UIRawImageTester.UpdateAllOffset();
-
-        var Acc = this.AccOld;
-        var Gyr = (this.GyrOld + GyrOld) / 2;
-        var Mag = this.MagOld;
-        float TimeGap = this.TimeGapOld;
-        this.AccOld = AccOld;
-        this.GyrOld = GyrOld;
-        this.MagOld = MagOld;
-        this.TimeGapOld = TimeGapOld;
-        var Last = States.LastOrDefault() ?? new State();
-        if (this.TimeGapOld <= 0)
-            return Last.Qua;
-        States.Add(new State());
-        if (States.Count > 200)
-            States.RemoveAt(0);
-        var state = States.Last();
-        state.Acc = Acc;
-
-        state.AccSmooth = AccFilter.Update(Acc);
-
-        state.Gyr = Gyr;
-        state.Mag = Mag;/**/
-        state.MagSmooth = MagFilter.Update(Mag);
-        if (States.Count <= 1)
-            return Quaternion.identity;
-
-        HardwareVarianceGyr.Update((Gyr).magnitude);//每毫秒方差2.331017E-09 度左右   0.00000002331017
-        HardwareVarianceAcc.Update(Vector3.Angle(state.Acc, Last.Acc));//方差0.0012度左右
-        HardwareVarianceMag.Update(Vector3.Angle(state.Mag, Last.Mag));//方差3.5度左右
-
-        var LastQuaternion = Last.Qua;
-
-
-
-        var GyrOperator = new Quaternion();
-        GyrOperator.eulerAngles = Gyr * TimeGap;
-        var quaGyr = LastQuaternion * GyrOperator;
-
-        double AccLengthToAngle = 360;//1倍引力差相当于多少度方差
-        double MagLengthToAngle = 360;//1倍磁力差相当于多少度方差
-
-        double GyrVariance = 1 + Math.Pow((Gyr * TimeGap).magnitude, 2);//陀螺仪移动向量
-        double AccVariance = Math.Pow(Math.Max((Gyr * TimeGap).magnitude, Vector3.Angle(state.AccSmooth, Last.AccSmooth)), 2)
-            + (Math.Abs(state.AccSmooth.magnitude - 9.8) > 0.1 ? Math.Pow(Math.Abs(state.AccSmooth.magnitude - 9.8) / 9.8 * AccLengthToAngle, 4) : 0);
-        double MagVariance = Math.Pow(3, 2)
-            + (Math.Abs(state.MagSmooth.magnitude - 1) > 0.1 ? Math.Pow(Math.Abs(state.MagSmooth.magnitude - 1) * MagLengthToAngle, 4) : 0);//指数4其中2是引力2是方差/**/
-
-        //double AccGyrVariance = Last.AccVariance + GyrVariance;
-        //double MagGyrVariance = Last.MagVariance + GyrVariance;// 指数4 = 方差2 * 欧拉角旋转误差2     移动导致累计误差
-
-        //Debug.Log((Gyr * TimeGap).magnitude * 0.1);
-
-
-        //state.MagVariance = MagGyrVariance;
-        //state.MagVariance = state.MagVariance * MagVariance / (state.MagVariance + MagVariance);
-        //state.AccVariance = AccGyrVariance;
-        //state.AccVariance = state.AccVariance * AccVariance / (state.AccVariance + AccVariance);
-
-        //if (double.IsNaN(MagGyrVariance))
-        //    MagGyrVariance = double.MinValue;
-        if (double.IsNaN(GyrVariance))
-            GyrVariance = double.MinValue;
-        if (double.IsNaN(AccVariance))
-            AccVariance = double.MinValue;
-        if (double.IsNaN(MagVariance))
-            MagVariance = double.MinValue;
-        if (double.IsNaN(state.GyrVariance))
-            state.GyrVariance = double.MinValue;
-        if (double.IsNaN(state.AccVariance))
-            state.AccVariance = double.MinValue;
-        if (double.IsNaN(state.MagVariance))
-            state.MagVariance = double.MinValue;
-
-        /////////////////////////////////////////////////临时代码
-
-
-        //var quaAccMag = o0Project.o0.FormQuaternion(AccIdentity, MagIdentity, state.AccSmooth, state.MagSmooth, (float)(AccVariance / (AccVariance + MagVariance)));
-
-        //var tempQuaGyr = Quaternion.Slerp(Last.QuaSmooth, state.Qua, 0.5f);
-
-        var quaAccMag = o0Project.o0.FormQuaternion(AccIdentity, MagIdentity, state.AccSmooth, state.MagSmooth, 1);
-        /*
-        if (state.QuaAccMagCount == 0)
-            state.QuaAccMag = quaAccMag;
-        else
-            state.QuaAccMag = Quaternion.Slerp(state.QuaAccMag, quaAccMag, state.QuaAccMagCount / (state.QuaAccMagCount + 1));
-        ++state.QuaAccMagCount;/**/
-
-        ///////////////////////////////////////////////////
-        //var quaMagRate = MagGyrVariance / (MagGyrVariance + MagVariance);
-        //var quaAccRate = MagGyrVariance / (MagGyrVariance + MagVariance);
-        /*
-
-        var quaMinRate = GyrVariance / (GyrVariance + Math.Max(AccVariance, MagVariance));
-        var quaMaxRate = GyrVariance / (GyrVariance + Math.Min(AccVariance, MagVariance));
-        Quaternion quaFirst = Quaternion.Slerp(quaGyr, quaAccMag, (float)quaMinRate).normalized;
-        if (float.IsNaN(quaFirst.w))
-            quaFirst = Last.Qua;
-
-        var quaSecondRate = (quaMaxRate - quaMinRate) / (1 - quaMinRate);
-
-        state.Qua = AccVariance < MagVariance ? o0Project.o0.FormQuaternion(quaFirst, AccIdentity, state.AccSmooth, (float)quaSecondRate) : o0Project.o0.FormQuaternion(quaFirst, MagIdentity, state.MagSmooth, (float)quaSecondRate);
-        /**/
-        var AccMagVariance = AccVariance + MagVariance;
-        if (GyrVariance > 2f)
-        {
-            state.AccMagVariance = 25;
-            state.QuaAccMag = quaGyr;
-        }
-        else
-        {
-            state.AccMagVariance = Math.Min(Last.AccMagVariance + Math.Max(GyrVariance - 1.0, 0), 10000);
-            state.QuaAccMag = Quaternion.Slerp(Last.QuaAccMag, quaAccMag, (float)(state.AccMagVariance / (state.AccMagVariance + AccMagVariance)));
-            state.AccMagVariance = state.AccMagVariance * AccMagVariance / (state.AccMagVariance + AccMagVariance);
-        }
-
-
-
-        var modelVariance = Math.Max(GyrVariance - 1.1, 0) * 0.05;
-
-        state.GyrVariance = Math.Min(Last.GyrVariance + GyrVariance, 10000);
-        //quaGyr = Quaternion.Slerp(Last.QuaSmooth, quaGyr, (float)(state.GyrVariance / (state.GyrVariance + GyrVariance)));
-        state.GyrVariance = state.GyrVariance * GyrVariance / (state.GyrVariance + GyrVariance);
-
-        /*
-        if (state.AccMagVariance < GyrVariance && 1f > Last.GyrVariance)
-        {
-            Debug.Log("o0 static");
-            quaGyr = Quaternion.Slerp(Last.QuaSmooth, quaGyr, (float)(state.AccMagVariance / (state.AccMagVariance + GyrVariance)));
-        }/**/
-
-        state.MagVariance = Math.Min(Last.MagVariance + modelVariance, 10000);
-        state.Qua = o0Project.o0.FormQuaternion(quaGyr, MagIdentity, state.MagSmooth, (float)(state.MagVariance / (state.MagVariance + MagVariance)));
-        state.MagVariance = state.MagVariance * MagVariance / (state.MagVariance + MagVariance);
-
-
-        state.AccVariance = Math.Min(Last.AccVariance + modelVariance, 10000);
-        //state.Qua = o0Project.o0.FormQuaternion(state.Qua, AccIdentity, state.AccSmooth, (float)(state.AccVariance / (state.AccVariance + AccVariance)));
-        //state.AccVariance = state.AccVariance * AccVariance / (state.AccVariance + AccVariance);
-        state.Qua = Quaternion.Slerp(state.Qua, quaAccMag, (float)(state.AccVariance / (state.AccVariance + AccMagVariance)));
-        state.AccVariance = state.AccVariance * AccMagVariance / (state.AccVariance + AccMagVariance);
-
-        ///////////////////////////////////////////////////////////////
-        ///
-        //var AccMagVariance = Math.Sqrt(AccVariance * AccVariance + MagVariance * MagVariance);
-
-
-
-
-        /*
-        state.TotalVariance = Math.Min(Last.TotalVariance + modelVariance * 0.3, 10000);
-        if (state.TotalVariance > 25)
-            state.TotalVariance = 25;
-        if (state.AccMagVariance < 4)
-        {
-            state.Qua = Quaternion.Slerp(state.Qua, state.QuaAccMag, (float)(state.TotalVariance / (state.TotalVariance + state.AccMagVariance)));
-            state.TotalVariance = state.TotalVariance * state.AccMagVariance / (state.TotalVariance + state.AccMagVariance);
-        }/**/
-
-
-        ///////////////////////////////////////////////////////////////
-
-
-        if (float.IsNaN(state.Qua.w))
-            state.Qua = Last.Qua;/**/
-        state.QuaSmooth = Quaternion.Slerp(Last.QuaSmooth, state.Qua, 0.3f);//Last.QuaSmooth - state.Qua    0 - 1
-
-        var frontV = Last.Qua * Vector3.forward;
-        var upV = Last.Qua * Vector3.up;
-
-        x = (Mathf.Atan(upV.y / upV.z) / Mathf.PI * 180 + (upV.z < 0 ? 90 : 270));
-        y = (Mathf.Atan(frontV.z / frontV.x) / Mathf.PI * 180 + (frontV.x < 0 ? 90 : 270));
-        z = (Mathf.Atan(upV.y / upV.x) / Mathf.PI * 180 + (upV.x < 0 ? 90 : 270));
-
-
-        //QuaTest[0] = o0Project.o0.FormQuaternion(QuaTest[0] * GyrOperator, AccIdentity, state.AccSmooth, 1);
-        //QuaTest[1] = o0Project.o0.FormQuaternion(QuaTest[1] * GyrOperator, MagIdentity, state.MagSmooth, 1);
-        //Debug.Log(o09AxisCS.QuaTest[0]);
-        return state.QuaSmooth;
-    }
-
-    public void SetIdentity()
-    {
-        //Quaternion qua = default;
-
-        int averageCount = Math.Max(States.Count, 10);
-        Vector3 aveAcc = Vector3.zero;
-        Vector3 aveMag = Vector3.zero;
-        for (var i = 0; i < averageCount; ++i)
-        {
-            aveAcc += States[i].Acc;
-            aveMag += States[i].Mag;
-        }
-        aveAcc /= averageCount;
-        aveMag /= averageCount;
-        //AccIdentity = AccOld;
-        //MagIdentity = MagOld;
-        AccIdentity = aveAcc;
-        MagIdentity = aveMag;
-        //qua = o0Project.o0.FormQuaternion(Quaternion.identity, Vector3.down,AccIdentity, 1);
-        //AccIdentity=qua*AccIdentity;
-        //MagIdentity = qua*MagIdentity;
-        States.Last().Qua = Quaternion.identity;
-        States.Last().QuaSmooth = Quaternion.identity;
-        //States.Last().Qua = qua*States.Last().Qua;//Quaternion.identity;
-        States.Last().AccVariance = 0.0000001;
-        States.Last().GyrVariance = 0.0000001;
-        States.Last().MagVariance = 0.0000001;
-        States.Last().QuaAccMag = Quaternion.identity;
-        States.Last().QuaAccMagCount = 0;
-        States.Last().AccMagVariance = 0.0000001;
-        States.Last().TotalVariance = 0.0000001;
-    }
-
-    public State getLastState()
-    {
-        return this.States.Last();
-    }
-
-    public Vector3 getGyrOld()
-    {
-        return GyrOld;
-    }
-}

BIN
代码备份/九轴dll/0.001/o0MagnetometerCalibrater.dll


BIN
代码备份/九轴dll/0.01/o0MagnetometerCalibrater.dll


+ 0 - 301
代码备份/新版算法-2022-8-24/o09AxisCS.cs

@@ -1,301 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using UnityEngine;
-
-public class o09AxisCS
-{
-    static public Vector3 AccIdentity = new Vector3(0, -1, 0);
-    static public Vector3 MagIdentity = new Vector3(-1, 2, 0).normalized;
-    public class State
-    {
-        public long TimeGap;
-        public Vector3 Acc = AccIdentity;
-        public Vector3 AccSmooth = AccIdentity;
-
-        public Vector3 Gyr;
-        public Vector3 Mag = MagIdentity;
-        public Vector3 MagSmooth = MagIdentity;
-        public Quaternion Qua = Quaternion.identity;
-        public Quaternion QuaSmooth = Quaternion.identity;
-        public double GyrVariance = 1;
-        public double AccVariance = 1;
-        public double MagVariance = 1;
-        public Quaternion QuaAccMag = Quaternion.identity;
-        public int QuaAccMagCount = 0;
-        public double AccMagVariance = 1;
-        public double TotalVariance = 1;
-    }
-
-    o0Project.Variance HardwareVarianceGyr = new o0Project.Variance(1000);
-    o0Project.Variance HardwareVarianceAcc = new o0Project.Variance(1000);
-    o0Project.Variance HardwareVarianceMag = new o0Project.Variance(1000);
-
-    public List<State> States = new List<State>();
-
-    public Vector3 AccOld;
-    public Vector3 GyrOld;
-    public Vector3 MagOld;
-
-    public float x;
-    public float y;
-    public float z;
-
-    long TimeGapOld;
-    o0Aien.o0WeightedAverageFilterVector3 AccFilter = new o0Aien.o0WeightedAverageFilterVector3(1);
-    o0Aien.o0WeightedAverageFilterVector3 MagFilter = new o0Aien.o0WeightedAverageFilterVector3(1);
-
-
-
-    public UnityEngine.Quaternion update(Vector3 Acc, Vector3 Gyr, Vector3 Mag, long TimeGap)
-    {
-
-        o0UIRawImageTester.UpdateAllOffset();
-
-        var Last = States.LastOrDefault() ?? new State();
-        States.Add(new State());
-        if (States.Count > 500)
-            States.RemoveAt(0);
-        var state = States.Last();
-        state.Acc = Acc;
-
-        state.AccSmooth = AccFilter.Update(Acc);
-
-        //Debug.Log(Gyr.magnitude);
-
-        state.Gyr = Gyr;
-        state.Mag = Mag;/**/
-        state.MagSmooth = MagFilter.Update(Mag);
-        if (States.Count <= 1)
-            return UnityEngine.Quaternion.identity;
-
-        HardwareVarianceGyr.Update((Gyr).magnitude);//每毫秒方差2.331017E-09 度左右   0.00000002331017
-        HardwareVarianceAcc.Update(Vector3.Angle(state.Acc, Last.Acc));//方差0.0012度左右
-        HardwareVarianceMag.Update(Vector3.Angle(state.Mag, Last.Mag));//方差3.5度左右
-
-        var LastQuaternion = Last.Qua;
-
-
-
-        var GyrOperator = new UnityEngine.Quaternion();
-        GyrOperator.eulerAngles = Gyr * TimeGap;
-        var quaGyr = LastQuaternion * GyrOperator;
-
-
-        //TestVector.Update9AxisRotation(GyrOperator, 1);
-        //TestVector.SetAcc(Acc / 10, 1);
-        //TestVector.SetMag(Mag, 1);
-        var accTest = new UnityEngine.Quaternion();
-        accTest.SetFromToRotation(Last.Acc, Acc);
-        accTest.w *= -1;
-        // TestVector.Update9AxisRotation(accTest, 2);
-        var magTest = new UnityEngine.Quaternion();
-        magTest.SetFromToRotation(Last.Mag, Mag);
-        magTest.w *= -1;
-        // TestVector.Update9AxisRotation(magTest, 3);
-        //TestVector.Set9AxisRotation(Last.Qua, 3);
-
-        double AccLengthToAngle = 360;//1倍引力差相当于多少度方差
-        double MagLengthToAngle = 360;//1倍磁力差相当于多少度方差
-
-        //double GyrVariance = 1 + Math.Pow((Gyr * TimeGap).magnitude, 0.5);//陀螺仪移动向量
-        double GyrVariance = Math.Pow((Gyr * TimeGap).magnitude + 0.225, 0.5);//陀螺仪移动向量
-        var modelVariance = Math.Pow(0.001 + (Gyr * TimeGap).magnitude * 0.3, 2);
-        double AccVariance = Math.Max(Math.Pow((Gyr * TimeGap).magnitude, 1), 1)
-            + (Math.Abs(state.AccSmooth.magnitude - 1) > 0.1 ? Math.Pow(Math.Abs(state.AccSmooth.magnitude - 1) / 1 * AccLengthToAngle, 4) : 0);
-        double MagVariance = 9
-            + (Math.Abs(state.MagSmooth.magnitude - 1) > 0.1 ? Math.Pow(Math.Abs(state.MagSmooth.magnitude - 1) * MagLengthToAngle, 4) : 0);//指数4其中2是引力2是方差/**/
-        /*
-        double GyrVariance = Math.Pow((Gyr * TimeGap).magnitude + 0.225, 0.5);//陀螺仪移动向量
-        double AccVariance = Math.Pow(Math.Max((Gyr * TimeGap).magnitude, Vector3.Angle(state.AccSmooth, Last.AccSmooth)), 0.5)
-            + (Math.Abs(state.AccSmooth.magnitude - 1) > 0.1 ? Math.Pow(Math.Abs(state.AccSmooth.magnitude - 1) / 1 * AccLengthToAngle, 4) : 0);
-        double MagVariance = Math.Pow(3, 1)
-            + (Math.Abs(state.MagSmooth.magnitude - 1) > 0.1 ? Math.Pow(Math.Abs(state.MagSmooth.magnitude - 1) * MagLengthToAngle, 4) : 0);//指数4其中2是引力2是方差/**/
-
-        //double AccGyrVariance = Last.AccVariance + GyrVariance;
-        //double MagGyrVariance = Last.MagVariance + GyrVariance;// 指数4 = 方差2 * 欧拉角旋转误差2     移动导致累计误差
-
-        //Debug.Log((Gyr * TimeGap).magnitude * 0.1);
-
-
-        //state.MagVariance = MagGyrVariance;
-        //state.MagVariance = state.MagVariance * MagVariance / (state.MagVariance + MagVariance);
-        //state.AccVariance = AccGyrVariance;
-        //state.AccVariance = state.AccVariance * AccVariance / (state.AccVariance + AccVariance);
-
-        //if (double.IsNaN(MagGyrVariance))
-        //    MagGyrVariance = double.MinValue;
-        if (double.IsNaN(GyrVariance))
-            GyrVariance = double.MinValue;
-        if (double.IsNaN(AccVariance))
-            AccVariance = double.MinValue;
-        if (double.IsNaN(MagVariance))
-            MagVariance = double.MinValue;
-        if (double.IsNaN(state.GyrVariance))
-            state.GyrVariance = double.MinValue;
-        if (double.IsNaN(state.AccVariance))
-            state.AccVariance = double.MinValue;
-        if (double.IsNaN(state.MagVariance))
-            state.MagVariance = double.MinValue;
-
-        /////////////////////////////////////////////////临时代码
-
-
-        //var quaAccMag = o0Project.o0.FormQuaternion(AccIdentity, MagIdentity, state.AccSmooth, state.MagSmooth, (float)(AccVariance / (AccVariance + MagVariance)));
-
-        //var tempQuaGyr = Quaternion.Slerp(Last.QuaSmooth, state.Qua, 0.5f);
-
-        var quaAccMag = o0Project.o0.FormQuaternion(AccIdentity, MagIdentity, state.AccSmooth, state.MagSmooth, 1);
-        /*
-        if (state.QuaAccMagCount == 0)
-            state.QuaAccMag = quaAccMag;
-        else
-            state.QuaAccMag = Quaternion.Slerp(state.QuaAccMag, quaAccMag, state.QuaAccMagCount / (state.QuaAccMagCount + 1));
-        ++state.QuaAccMagCount;/**/
-
-        ///////////////////////////////////////////////////
-        //var quaMagRate = MagGyrVariance / (MagGyrVariance + MagVariance);
-        //var quaAccRate = MagGyrVariance / (MagGyrVariance + MagVariance);
-        /*
-
-        var quaMinRate = GyrVariance / (GyrVariance + Math.Max(AccVariance, MagVariance));
-        var quaMaxRate = GyrVariance / (GyrVariance + Math.Min(AccVariance, MagVariance));
-        Quaternion quaFirst = Quaternion.Slerp(quaGyr, quaAccMag, (float)quaMinRate).normalized;
-        if (float.IsNaN(quaFirst.w))
-            quaFirst = Last.Qua;
-
-        var quaSecondRate = (quaMaxRate - quaMinRate) / (1 - quaMinRate);
-
-        state.Qua = AccVariance < MagVariance ? o0Project.o0.FormQuaternion(quaFirst, AccIdentity, state.AccSmooth, (float)quaSecondRate) : o0Project.o0.FormQuaternion(quaFirst, MagIdentity, state.MagSmooth, (float)quaSecondRate);
-        /**/
-        var AccMagVariance = AccVariance + MagVariance;
-        if (GyrVariance > 2f)
-        {
-            state.AccMagVariance = 25;
-            state.QuaAccMag = quaGyr;
-        }
-        else
-        {
-            state.AccMagVariance = Math.Min(Last.AccMagVariance + Math.Max(GyrVariance - 1.0, 0), 10000);
-            state.QuaAccMag = UnityEngine.Quaternion.Slerp(Last.QuaAccMag, quaAccMag, (float)(state.AccMagVariance / (state.AccMagVariance + AccMagVariance)));
-            state.AccMagVariance = state.AccMagVariance * AccMagVariance / (state.AccMagVariance + AccMagVariance);
-        }
-
-
-
-        //var modelVariance = Math.Max(GyrVariance, 0) * 0.05;
-
-        state.GyrVariance = Math.Min(Last.GyrVariance + GyrVariance, 10000);
-        //quaGyr = Quaternion.Slerp(Last.QuaSmooth, quaGyr, (float)(state.GyrVariance / (state.GyrVariance + GyrVariance)));
-        state.GyrVariance = state.GyrVariance * GyrVariance / (state.GyrVariance + GyrVariance);
-
-        //Debug.Log(GyrVariance);
-        /*
-        if (state.AccMagVariance < GyrVariance && 1f > Last.GyrVariance)
-        {
-            Debug.Log("o0 static");
-            quaGyr = Quaternion.Slerp(Last.QuaSmooth, quaGyr, (float)(state.AccMagVariance / (state.AccMagVariance + GyrVariance)));
-        }/**/
-
-        state.MagVariance = Math.Min(Last.MagVariance + modelVariance, 10000);
-        state.Qua = o0Project.o0.FormQuaternion(quaGyr, MagIdentity, state.MagSmooth, (float)(state.MagVariance / (state.MagVariance + MagVariance)));
-        state.MagVariance = state.MagVariance * MagVariance / (state.MagVariance + MagVariance);
-
-
-        state.AccVariance = Math.Min(Last.AccVariance + modelVariance, 10000);
-        state.Qua = o0Project.o0.FormQuaternion(state.Qua, AccIdentity, state.AccSmooth, (float)(state.AccVariance / (state.AccVariance + AccVariance)));
-        state.AccVariance = state.AccVariance * AccVariance / (state.AccVariance + AccVariance);
-        //state.Qua = UnityEngine.Quaternion.Slerp(state.Qua, quaAccMag, (float)(state.AccVariance / (state.AccVariance + AccMagVariance)));
-        //state.AccVariance = state.AccVariance * AccMagVariance / (state.AccVariance + AccMagVariance);
-
-        ///////////////////////////////////////////////////////////////
-        ///
-        //var AccMagVariance = Math.Sqrt(AccVariance * AccVariance + MagVariance * MagVariance);
-        //state.Qua.eu
-
-        /*
-        state.TotalVariance = Math.Min(Last.TotalVariance + modelVariance * 0.3, 10000);
-        if (state.TotalVariance > 25)
-            state.TotalVariance = 25;
-        if (state.AccMagVariance < 4)
-        {
-            state.Qua = Quaternion.Slerp(state.Qua, state.QuaAccMag, (float)(state.TotalVariance / (state.TotalVariance + state.AccMagVariance)));
-            state.TotalVariance = state.TotalVariance * state.AccMagVariance / (state.TotalVariance + state.AccMagVariance);
-        }/**/
-
-
-        ///////////////////////////////////////////////////////////////
-
-        if (float.IsNaN(state.Qua.w))
-            state.Qua = Last.Qua;/**/
-        state.QuaSmooth = UnityEngine.Quaternion.Slerp(Last.QuaSmooth, state.Qua, 0.3f);//Last.QuaSmooth - state.Qua    0 - 1
-
-        var frontV = Last.Qua * Vector3.forward;
-        var upV = Last.Qua * Vector3.up;
-
-        x = (Mathf.Atan(upV.y / upV.z) / Mathf.PI * 180 + (upV.z < 0 ? 90 : 270));
-        y = (Mathf.Atan(frontV.z / frontV.x) / Mathf.PI * 180 + (frontV.x < 0 ? 90 : 270));
-        z = (Mathf.Atan(upV.y / upV.x) / Mathf.PI * 180 + (upV.x < 0 ? 90 : 270));
-
-
-        //QuaTest[0] = o0Project.o0.FormQuaternion(QuaTest[0] * GyrOperator, AccIdentity, state.AccSmooth, 1);
-        // QuaTest[0] = o0Project.o0.FormQuaternion(AccIdentity, MagIdentity, state.AccSmooth, state.MagSmooth, (float)(AccVariance / (AccVariance + MagVariance)));
-        // QuaTest[1] = state.QuaAccMag;
-        //QuaTest[1] = o0Project.o0.FormQuaternion(QuaTest[1] * GyrOperator, MagIdentity, state.MagSmooth, 1);
-        //Debug.Log(o09AxisCS.QuaTest[0]);
-        return state.QuaSmooth;
-    }
-
-    public void SetIdentity()
-    {
-        //Quaternion qua = default;
-
-        int averageCount = Math.Max(States.Count, 10);
-        Vector3 aveAcc = Vector3.zero;
-        Vector3 aveMag = Vector3.zero;
-        for (var i = 0; i < averageCount; ++i)
-        {
-            aveAcc += States[i].Acc;
-            aveMag += States[i].Mag;
-        }
-        aveAcc /= averageCount;
-        aveMag /= averageCount;
-        //AccIdentity = AccOld;
-        //MagIdentity = MagOld;
-        AccIdentity = aveAcc;
-        MagIdentity = aveMag;
-        //qua = o0Project.o0.FormQuaternion(Quaternion.identity, Vector3.down,AccIdentity, 1);
-        //AccIdentity=qua*AccIdentity;
-        //MagIdentity = qua*MagIdentity;
-        States.Last().Qua = Quaternion.identity;
-        States.Last().QuaSmooth = Quaternion.identity;
-        //States.Last().Qua = qua*States.Last().Qua;//Quaternion.identity;
-        States.Last().AccVariance = 0.0000001;
-        States.Last().GyrVariance = 0.0000001;
-        States.Last().MagVariance = 0.0000001;
-        States.Last().QuaAccMag = Quaternion.identity;
-        States.Last().QuaAccMagCount = 0;
-        States.Last().AccMagVariance = 0.0000001;
-        States.Last().TotalVariance = 0.0000001;
-    }
-
-    public State getLastState()
-    {
-        return this.States.Last();
-    }
-
-    public Vector3 getGyrOld()
-    {
-        return GyrOld;
-    }
-
-    public void DeleteStatesFromTail(int count) {
-        if (count <= 0 || States.Count == 0) return;
-        States = States.GetRange(0, States.Count - count <= 0 ? 1 :  States.Count - count);
-    }
-    
-    public void SetAccMagVariance(double value) {
-        States.Last().AccVariance = value;
-        States.Last().MagVariance = value;
-    }
-}

+ 0 - 159
代码备份/旧版算法-2022-8-19/o09AxisCS.cs

@@ -1,159 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using UnityEngine;
-
-//旧版算法
-public class o09AxisCS
-{
-    static public Vector3 AccIdentity = new Vector3(0, -1, 0);
-    static public Vector3 MagIdentity = new Vector3(-1, 2, 0).normalized;
-    public class State
-    {
-        public long TimeGap;
-        public Vector3 Acc = AccIdentity;
-        public Vector3 AccSmooth = AccIdentity;
-        public double AccVariance = 1;
-
-        public Vector3 Gyr;
-        public Vector3 Mag = MagIdentity;
-        public Vector3 MagSmooth = MagIdentity;
-        public Quaternion Qua = Quaternion.identity;
-        public Quaternion QuaSmooth = Quaternion.identity;
-        public double Variance = 1;
-    }
-
-    o0Project.Variance HardwareVarianceGyr = new o0Project.Variance(1000);
-    o0Project.Variance HardwareVarianceAcc = new o0Project.Variance(1000);
-    o0Project.Variance HardwareVarianceMag = new o0Project.Variance(1000);
-
-    public List<State> States = new List<State>();
-
-    public Vector3 AccOld;
-    public Vector3 GyrOld;
-    public Vector3 MagOld;
-
-    public float x;
-    public float y;
-    public float z;
-
-    long TimeGapOld;
-    o0Aien.o0WeightedAverageFilterVector3 AccFilter = new o0Aien.o0WeightedAverageFilterVector3(5);
-    o0Aien.o0WeightedAverageFilterVector3 MagFilter = new o0Aien.o0WeightedAverageFilterVector3(10);
-         
-    public Quaternion update(Vector3 AccOld, Vector3 GyrOld, Vector3 MagOld, long TimeGapOld)
-    {
-        o0UIRawImageTester.UpdateAllOffset();
-
-        var Acc = this.AccOld;
-        var Gyr = (this.GyrOld + GyrOld)/2;
-        var Mag = this.MagOld;
-        float TimeGap = this.TimeGapOld;
-        this.AccOld = AccOld;
-        this.GyrOld = GyrOld;
-        this.MagOld = MagOld;
-        this.TimeGapOld = TimeGapOld;
-        var Last = States.LastOrDefault() ?? new State();
-        if (this.TimeGapOld <= 0)
-            return Last.Qua;
-        States.Add(new State());
-        if (States.Count > 200)
-            States.RemoveAt(0);
-        var state = States.Last();
-        state.Acc = Acc;
-
-        state.AccSmooth = AccFilter.Update(Acc);
-        
-        state.Gyr = Gyr;
-        state.Mag = Mag;/**/
-        state.MagSmooth = MagFilter.Update(Mag);
-        if (States.Count <=1)
-            return Quaternion.identity;
-
-        HardwareVarianceGyr.Update((Gyr).magnitude);//每毫秒方差2.331017E-09 度左右   0.00000002331017
-        HardwareVarianceAcc.Update(Vector3.Angle(state.Acc, Last.Acc));//方差0.0012度左右
-        HardwareVarianceMag.Update(Vector3.Angle(state.Mag, Last.Mag));//方差3.5度左右
-
-        var LastQuaternion = Last.Qua;
-
-        var newQua = new Quaternion();
-        newQua.eulerAngles = Gyr * TimeGap;
-        var quaGyr = LastQuaternion * newQua;
-
-        double AccLengthToAngle = 5;//1倍引力差相当于多少度方差
-        double MagLengthToAngle = 5;//1倍磁力差相当于多少度方差
-
-        double GyrVariance = Last.Variance + Math.Pow((Gyr * TimeGap).magnitude * 0.3,3);// 指数4 = 方差2 * 欧拉角旋转误差2     移动导致累计误差
-        double AccVariance = Math.Max((Gyr * TimeGap).magnitude, Vector3.Angle(state.AccSmooth, Last.AccSmooth)) * 1 + Math.Pow(Math.Abs(state.AccSmooth.magnitude - 9.8) / 9.8 * AccLengthToAngle,4);
-        double MagVariance = Math.Max((Gyr * TimeGap).magnitude, Vector3.Angle(state.MagSmooth, Last.MagSmooth)) * 1 + Math.Pow(Math.Abs(state.MagSmooth.magnitude - 1) / 1 * MagLengthToAngle,4);/**/
-
-
-        state.Variance = GyrVariance;
-        state.Variance = state.Variance * (AccVariance+ MagVariance) / (state.Variance + (AccVariance + MagVariance));
-
-        if (double.IsNaN(GyrVariance))
-            GyrVariance = double.MinValue;
-        if (double.IsNaN(AccVariance))
-            AccVariance = double.MinValue;
-        if (double.IsNaN(MagVariance))
-            MagVariance = double.MinValue;
-        if (double.IsNaN(state.Variance))
-            state.Variance = double.MinValue;
-
-        var quaAccMag = o0Project.o0.FormQuaternion(AccIdentity, MagIdentity, state.AccSmooth, state.MagSmooth, (float)(AccVariance / (AccVariance + MagVariance)));
-
-        var quaMinRate = GyrVariance / (GyrVariance + Math.Max(AccVariance, MagVariance));
-        var quaMaxRate = GyrVariance / (GyrVariance + Math.Min(AccVariance, MagVariance));
-        Quaternion quaFirst = Quaternion.Slerp(quaGyr, quaAccMag, (float)quaMinRate).normalized;
-        if (float.IsNaN(quaFirst.w))
-            quaFirst = Last.Qua;
-
-        var quaSecondRate = (quaMaxRate - quaMinRate) / (1 - quaMinRate);
-
-        state.Qua = AccVariance < MagVariance ? o0Project.o0.FormQuaternion(quaFirst, AccIdentity, state.AccSmooth, (float)quaSecondRate) : o0Project.o0.FormQuaternion(quaFirst, MagIdentity, state.MagSmooth, (float)quaSecondRate);
-        
-        if (float.IsNaN(state.Qua.w))
-            state.Qua = Last.Qua;/**/
-        state.QuaSmooth = Quaternion.Slerp(Last.QuaSmooth, state.Qua, 0.3f);
-
-        var frontV = Last.Qua * Vector3.forward;
-        var upV = Last.Qua * Vector3.up;
-
-        x = (Mathf.Atan(upV.y / upV.z) / Mathf.PI * 180 + (upV.z < 0 ? 90:270));
-        y = (Mathf.Atan(frontV.z / frontV.x) / Mathf.PI * 180+(frontV.x < 0 ? 90:270));
-        z = (Mathf.Atan(upV.y / upV.x) / Mathf.PI * 180 + (upV.x < 0 ? 90:270));
-
-        return state.Qua;
-    }
-
-    public void SetIdentity()
-    {
-        Quaternion qua = default;
-        AccIdentity = AccOld;
-        MagIdentity = MagOld;
-        qua = o0Project.o0.FormQuaternion(Quaternion.identity, Vector3.up,AccIdentity, 1);
-        AccIdentity=qua*AccIdentity;
-        MagIdentity = qua*MagIdentity;
-        States.Last().Qua = Quaternion.identity;
-        // States.Last().Qua = qua*States.Last().Qua;//Quaternion.identity;
-        States.Last().Variance = 0.0000001;
-    }
-
-    public State getLastState() {
-        return this.States.Last();
-    }
-
-    public Vector3 getGyrOld() {
-        return GyrOld;
-    }
-
-    public void DeleteStatesFromTail(int count) {
-        if (count <= 0 || States.Count == 0) return;
-        States = States.GetRange(0, States.Count - count <= 0 ? 1 :  States.Count - count);
-    }
-
-    public void SetAccMagVariance(double value) {
-        States.Last().AccVariance = value;
-        States.Last().Variance = value;
-    }
-}

+ 0 - 340
代码备份/校准界面-2022-10-17/DeviceCalibrateView.cs

@@ -1,340 +0,0 @@
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-using UnityEngine.UI;
-/* 设备校准界面,公用(设备界面的校准、校准教程) */
-public class DeviceCalibrateView : MonoBehaviour, MenuBackInterface
-{
-    [SerializeField] Button btnGyrCalibrate;
-    [SerializeField] Text progressGyrCalibrate;
-    [SerializeField] Button btnMagCalibrate;
-    [SerializeField] Button btnIdentityCalibrate;
-    [SerializeField] Button btnBack;
-    [SerializeField] Button btnNext;
-    [SerializeField] Button btnFinish;
-    public Action action_OnDestroy; 
-
-    public DeviceCalibrateItem deviceCalibrateItem = DeviceCalibrateItem.Guide;
-    DeviceCalibrateItem[] deviceCalibrateItemForGuide = {
-        DeviceCalibrateItem.Gyr,
-        DeviceCalibrateItem.Mag
-    };
-    int guideIndex = 0;
-    public bool guide = true;
-    public static DeviceCalibrateView ins;
-    
-    public static void Create(DeviceCalibrateItem itemType = DeviceCalibrateItem.Guide) {
-        GameObject o = GameObject.Instantiate(Resources.Load<GameObject>("Prefabs/Views/DeviceCalibrateView"));
-        o.GetComponent<DeviceCalibrateView>().deviceCalibrateItem = itemType;
-        o.GetComponent<DeviceCalibrateView>().guide = itemType == DeviceCalibrateItem.Guide;
-    }
-
-    void Awake() {
-        ins = this;
-        try { 
-            GlobalEventCenter.ins.onDeviceCalibrateViewAwakeChanged?.Invoke(true); 
-        } catch (System.Exception e) { Debug.LogError(e.Message); }
-    }
-
-    void Start()
-    {
-        BluetoothHolder.ins.ShowMagEllipse(this);
-        btnGyrCalibrate.GetComponent<Button>().onClick.AddListener(ClickGyrCalibrate);
-        btnMagCalibrate.GetComponent<Button>().onClick.AddListener(ClickMagCalibrate);
-        btnIdentityCalibrate.GetComponent<Button>().onClick.AddListener(ClickIdentityCalibrate);
-        magReset.GetComponent<Button>().onClick.AddListener(ClickResetMag);
-        RefreshResetMagBtn();
-        btnBack.GetComponent<Button>().onClick.AddListener(delegate() {
-            guideIndex--;
-            RefreshPage();
-        });
-        btnNext.GetComponent<Button>().onClick.AddListener(delegate() {
-            guideIndex++;
-            RefreshPage();
-        });
-        btnFinish.GetComponent<Button>().onClick.AddListener(delegate() {
-            Destroy(this.gameObject);
-            if (guide && guideIndex == deviceCalibrateItemForGuide.Length - 1) {
-                GameMgr.ins.FinishDeviceCalibrateGuide();
-            }
-        });
-        if (guide) { //看看哪项没校准,就引导校准
-            List<DeviceCalibrateItem> guideList = new List<DeviceCalibrateItem>();
-            if (string.IsNullOrEmpty(PlayerPrefs.GetString("o0GyrCalibrater", null))) {
-                guideList.Add(DeviceCalibrateItem.Gyr);
-            }
-            if (string.IsNullOrEmpty(PlayerPrefs.GetString("new_mag_record", null))) {
-                guideList.Add(DeviceCalibrateItem.Mag);
-            }
-            deviceCalibrateItemForGuide = guideList.ToArray();
-            if (deviceCalibrateItemForGuide.Length == 0) {
-                guideIndex = -1;
-                btnFinish.GetComponent<Button>().onClick.Invoke();
-                return;
-            }
-        }
-        RefreshPage();
-        if (!guide) {
-            PersistenHandler.ins?.menuBackCtr.views.Add(this);
-        }
-    }
-
-    void OnDestroy()
-    {
-        if (ins == this) ins = null;
-        PersistenHandler.ins?.menuBackCtr.views.Remove(this);
-        try { 
-            GlobalEventCenter.ins.onDeviceCalibrateViewAwakeChanged?.Invoke(false); 
-        } catch (System.Exception e) { Debug.LogError(e.Message); }
-        BluetoothHolder.ins.HideMagEllipse(this);
-        // if (gyrCalibrating) {
-        //     AimHandler.ins.CalibrateGyr(false);
-        // }
-        // if (magCalibrating) {
-        //     AimHandler.ins.CalibrateMag(false);
-        // }
-        action_OnDestroy?.Invoke();
-    }
-
-    public bool OnMenuBack() {
-        var is_interactable = btnFinish.interactable;
-        if (is_interactable) Destroy(gameObject);
-        return is_interactable;
-    }
-
-    bool canUpdateGyrCalibrateProgress = false;
-
-    float calibrateMagStartTime = 0; //地磁校准开始时刻
-
-    void Update()
-    {   
-        if (canUpdateGyrCalibrateProgress) {
-            int progress = AimHandler.ins.gyrCalibrateCompleteCount * 100 / AimHandler.ins.gyrCalibrateTotalCount;
-            progressGyrCalibrate.text = progress + "%";
-            if (progress >= 100) {
-                FinishGyrCalibrate();
-            }
-        }
-        UpdateForMag();
-    }
-    [SerializeField] GameObject tipMag1;
-    [SerializeField] GameObject tipMag2;
-    [SerializeField] GameObject magReset;
-
-    void RefreshPage() {
-        if (guide) {
-            deviceCalibrateItem = deviceCalibrateItemForGuide[guideIndex];
-            if (deviceCalibrateItemForGuide.Length == 1) {
-                btnBack.gameObject.SetActive(false);
-                btnNext.gameObject.SetActive(false);
-                btnFinish.gameObject.SetActive(true); 
-            } else {
-                if (guideIndex == 0) {
-                    btnBack.gameObject.SetActive(false);
-                    btnNext.gameObject.SetActive(true);
-                    btnFinish.gameObject.SetActive(false);
-                } else if (guideIndex == deviceCalibrateItemForGuide.Length - 1) {
-                    btnBack.gameObject.SetActive(true);
-                    btnNext.gameObject.SetActive(false);
-                    btnFinish.gameObject.SetActive(true);    
-                } else {
-                    btnBack.gameObject.SetActive(true);
-                    btnNext.gameObject.SetActive(true);
-                    btnFinish.gameObject.SetActive(false);
-                }
-            }
-        } else {
-            btnBack.gameObject.SetActive(false);
-            btnNext.gameObject.SetActive(false);
-            btnFinish.gameObject.SetActive(true);
-        }
-        this.transform.Find("Gyr").gameObject.SetActive(deviceCalibrateItem == DeviceCalibrateItem.Gyr);
-        this.transform.Find("Mag").gameObject.SetActive(deviceCalibrateItem == DeviceCalibrateItem.Mag);
-        this.transform.Find("Identity").gameObject.SetActive(deviceCalibrateItem == DeviceCalibrateItem.Identity);
-    }
-
-    /* ------ 新地磁计校准(2022-10-3) ------ */
-    bool calibrateMagDoing = false;
-    void RefreshResetMagBtn() 
-    {
-        if (calibrateMagDoing) {
-            magReset.GetComponentInChildren<Text>().color = Color.red;
-            magReset.GetComponentInChildren<TextAutoLanguage>().SetText(121);
-            return;
-        }
-        Color outColor;
-        ColorUtility.TryParseHtmlString("#005AB6", out outColor);
-        magReset.GetComponentInChildren<Text>().color = outColor;
-        if (AimHandler.ins.MagCalibrater.Complete) {
-            magReset.GetComponentInChildren<TextAutoLanguage>().SetText(116);
-        } else {
-            magReset.GetComponentInChildren<TextAutoLanguage>().SetText(85);
-        }
-    }
-    void ClickResetMag() 
-    {
-        calibrateMagDoing = !calibrateMagDoing;
-        if (calibrateMagDoing) {
-            calibrateMagStartTime = Time.realtimeSinceStartup;
-            AimHandler.ins.MagCalibrater = new o0._9Axis.MagnetometerAutoCalibrater();
-            PlayerPrefs.DeleteKey("new_mag_record");
-        }
-        interactableAllSkipBtns(!calibrateMagDoing);
-        RefreshResetMagBtn();
-    }
-    void CancelResetMag() {
-        calibrateMagDoing = false;
-        interactableAllSkipBtns(!calibrateMagDoing);
-        RefreshResetMagBtn();
-    }
-    void UpdateForMag() {
-        if (deviceCalibrateItem == DeviceCalibrateItem.Mag) {
-            if (!AimHandler.ins.MagCalibrater.Complete) {
-                tipMag1.SetActive(true);
-                tipMag2.SetActive(false);
-                magReset.SetActive(true);
-                //地磁校准超时提示
-                if (calibrateMagDoing && Time.realtimeSinceStartup - calibrateMagStartTime > 20) {
-                    CancelResetMag();
-                    PopupMgr.ins.ShowTipTop(TextAutoLanguage2.GetTextByKey("tip_mag-calibrate_please-leave-interfere"));
-                }
-            } else {
-                tipMag1.SetActive(false);
-                tipMag2.SetActive(true);
-                magReset.SetActive(true);
-                if (calibrateMagDoing) {
-                    CancelResetMag();
-                }
-            }
-        }
-    }
-    //重置地磁校准超时检测
-    public void ResetCalibrateMagTimeout() {
-        calibrateMagStartTime = Time.realtimeSinceStartup;
-    }
-
-    // ------ 陀螺仪校准 ------
-    bool gyrCalibrating = false;
-    void ClickGyrCalibrate() 
-    {
-        //Logic
-        gyrCalibrating = !gyrCalibrating;
-        interactableAllSkipBtns(!gyrCalibrating);
-        if (gyrCalibrating) {
-            AimHandler.ins.gyrCalibrateCompleteCount = 0;
-            canUpdateGyrCalibrateProgress = true;
-        } else {
-            canUpdateGyrCalibrateProgress = false;
-        }
-        AimHandler.ins.CalibrateGyr(gyrCalibrating);
-        //UI
-        Button btn = btnGyrCalibrate.GetComponent<Button>();
-        if (gyrCalibrating) {
-            btn.GetComponentInChildren<TextAutoLanguage>().SetText(121);
-            btn.GetComponentInChildren<Text>().color = Color.red;
-        } else {
-            btn.GetComponentInChildren<TextAutoLanguage>().SetText(116);
-            Color outColor;
-            ColorUtility.TryParseHtmlString("#005AB6", out outColor);
-            btn.GetComponentInChildren<Text>().color = outColor;
-        }
-    }
-
-    void FinishGyrCalibrate()
-    {   
-        //Logic
-        gyrCalibrating = false;
-        interactableAllSkipBtns(true);
-        canUpdateGyrCalibrateProgress = false;
-        AimHandler.ins.CalibrateGyr(false);
-        //UI
-        Button btn = btnGyrCalibrate.GetComponent<Button>();
-        if (guide) {
-            btn.enabled = false;
-            btn.GetComponent<Image>().sprite = Resources.Load<Sprite>("Textures/Common/ButtonGray");
-            btn.GetComponentInChildren<Text>().color = Color.gray;
-        } else {
-            btn.GetComponentInChildren<TextAutoLanguage>().SetText(116);
-            Color outColor;
-            ColorUtility.TryParseHtmlString("#005AB6", out outColor);
-            btn.GetComponentInChildren<Text>().color = outColor;
-        }
-    }
-
-    // ------ 地磁计校准 ------
-    bool magCalibrating = false;
-    void ClickMagCalibrate() 
-    {
-        Button btn = btnMagCalibrate.GetComponent<Button>();
-        magCalibrating = !magCalibrating;
-        interactableAllSkipBtns(!magCalibrating);
-        if (magCalibrating) {
-            activeMagTipFail(false);
-            btn.GetComponentInChildren<TextAutoLanguage>().SetText(83);
-            btn.GetComponentInChildren<Text>().color = Color.red;
-            AimHandler.ins.CalibrateMag(true);
-        } else {
-            AimHandler.ins.CalibrateMag(false);
-            //检测校准完成时的圆是否理想
-            bool circleIsOk = AimHandler.ins.isCalibrateMagPerfect;
-            //bool circleIsOk = true;
-            // if (AimHandler.ins) {
-            //     Vector3 radius = AimHandler.ins.MagCalibrater._Radius;
-            //     if (radius.Equals(Vector3.zero)) {
-            //         circleIsOk = false;
-            //     } else if (radius.x == 0 || radius.y == 0 || radius.z == 0) {
-            //         circleIsOk = false;
-            //     } else if (
-            //         Mathf.Abs(1f - radius.x / radius.y) > 0.2f ||
-            //         Mathf.Abs(1f - radius.x / radius.z) > 0.2f ||
-            //         Mathf.Abs(1f - radius.y / radius.z) > 0.2f
-            //     ) {
-            //         circleIsOk = false;
-            //     }
-            // }
-            //提示校准效果不理想
-            if (!circleIsOk) activeMagTipFail(true);
-            //调整校准按钮
-            if (guide && circleIsOk) {
-                //关闭按钮
-                btn.enabled = false;
-                btn.GetComponentInChildren<TextAutoLanguage>().SetText(82);
-                btn.GetComponent<Image>().sprite = Resources.Load<Sprite>("Textures/Common/ButtonGray");
-                btn.GetComponentInChildren<Text>().color = Color.gray;
-            } else {
-                btn.GetComponentInChildren<TextAutoLanguage>().SetText(116);
-                Color outColor;
-                ColorUtility.TryParseHtmlString("#005AB6", out outColor);
-                btn.GetComponentInChildren<Text>().color = outColor;    
-            }
-        }
-    }
-
-    private void activeMagTipFail(bool value) {
-        Transform tipFail_T = this.transform.Find("Mag/TipFail");
-        if (tipFail_T.gameObject) {
-            tipFail_T.gameObject.SetActive(value);
-        }
-    }
-
-    // ------ 视角归位 ------
-    void ClickIdentityCalibrate() {
-        AimHandler.ins.DoIdentity();
-        Button btn = btnIdentityCalibrate.GetComponent<Button>();
-        btn.GetComponent<Image>().sprite = Resources.Load<Sprite>("Textures/Common/ButtonGray");
-        btn.GetComponentInChildren<Text>().color = Color.gray;
-        btn.enabled = false;
-    }
-
-    //设置所有跳转按钮是否可交互
-    private void interactableAllSkipBtns(bool value) {
-        this.btnBack.interactable = value;
-        this.btnNext.interactable = value;
-        this.btnFinish.interactable = value;
-    }
-}
-public enum  DeviceCalibrateItem
-{
-    Guide, Gyr, Mag, Identity
-}

+ 0 - 4057
代码备份/校准界面-2022-10-17/DeviceCalibrateView.prefab

@@ -1,4057 +0,0 @@
-%YAML 1.1
-%TAG !u! tag:unity3d.com,2011:
---- !u!1 &897971974499562174
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 31122222153839118}
-  - component: {fileID: 4121953030105551723}
-  - component: {fileID: 7519002518980430387}
-  m_Layer: 5
-  m_Name: MagTip1
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 0
---- !u!224 &31122222153839118
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 897971974499562174}
-  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_Children: []
-  m_Father: {fileID: 6984168368599178995}
-  m_RootOrder: 4
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0.5, y: 0.5}
-  m_AnchorMax: {x: 0.5, y: 0.5}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 822.04443, y: 41.244446}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &4121953030105551723
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 897971974499562174}
-  m_CullTransparentMesh: 1
---- !u!114 &7519002518980430387
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 897971974499562174}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 1, g: 1, b: 1, a: 1}
-  m_RaycastTarget: 1
-  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
-  m_Maskable: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-  m_FontData:
-    m_Font: {fileID: 12800000, guid: 1ad2cf6c2f09744489d8c60b3fe3bab2, type: 3}
-    m_FontSize: 32
-    m_FontStyle: 0
-    m_BestFit: 0
-    m_MinSize: 2
-    m_MaxSize: 40
-    m_Alignment: 4
-    m_AlignByGeometry: 0
-    m_RichText: 1
-    m_HorizontalOverflow: 1
-    m_VerticalOverflow: 1
-    m_LineSpacing: 1
-  m_Text: "\u8BF7\u5C06\u6A21\u5757\u7ED5XYZ\u8F74\u5404\u65CB\u8F6C\u81F3\u5C11\u4E00\u5708\uFF0C\u76F4\u5230\u63D0\u793A\u6821\u51C6\u5B8C\u6210\u4E3A\u6B62\uFF01"
---- !u!1 &1848034465720062135
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 1315163913953585888}
-  - component: {fileID: 3297102788406750563}
-  - component: {fileID: 8902158665750265119}
-  - component: {fileID: 7477066259281216828}
-  m_Layer: 5
-  m_Name: Text
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &1315163913953585888
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 1848034465720062135}
-  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_Children: []
-  m_Father: {fileID: 422015738313018617}
-  m_RootOrder: 0
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 1, y: 1}
-  m_AnchoredPosition: {x: 0, y: 3.449997}
-  m_SizeDelta: {x: 0, y: -0.9000001}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &3297102788406750563
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 1848034465720062135}
-  m_CullTransparentMesh: 1
---- !u!114 &8902158665750265119
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 1848034465720062135}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 0, g: 0.3529412, b: 0.7137255, a: 1}
-  m_RaycastTarget: 1
-  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
-  m_Maskable: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-  m_FontData:
-    m_Font: {fileID: 12800000, guid: 1ad2cf6c2f09744489d8c60b3fe3bab2, type: 3}
-    m_FontSize: 24
-    m_FontStyle: 0
-    m_BestFit: 0
-    m_MinSize: 2
-    m_MaxSize: 40
-    m_Alignment: 4
-    m_AlignByGeometry: 0
-    m_RichText: 1
-    m_HorizontalOverflow: 0
-    m_VerticalOverflow: 0
-    m_LineSpacing: 1
-  m_Text: "\u91CD\u65B0\u6821\u51C6"
---- !u!114 &7477066259281216828
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 1848034465720062135}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: b7cbfcb0916cf694fb3d059ea4b4c1da, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  textID: 85
-  layoutRebuildObject: {fileID: 0}
-  textFormatArgs: []
-  languageFontSizes: []
---- !u!1 &3143278146965190397
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 1611860986899252675}
-  - component: {fileID: 6731675575624031819}
-  - component: {fileID: 4710096192980780221}
-  - component: {fileID: 5249863965231648800}
-  - component: {fileID: 3696872205753952407}
-  m_Layer: 5
-  m_Name: TipFail
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 0
---- !u!224 &1611860986899252675
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 3143278146965190397}
-  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_Children: []
-  m_Father: {fileID: 6984168368599178995}
-  m_RootOrder: 3
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0.5, y: 0.5}
-  m_AnchorMax: {x: 0.5, y: 0.5}
-  m_AnchoredPosition: {x: 0, y: -260}
-  m_SizeDelta: {x: 336, y: 32}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &6731675575624031819
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 3143278146965190397}
-  m_CullTransparentMesh: 1
---- !u!114 &4710096192980780221
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 3143278146965190397}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 1, g: 0.2867924, b: 0.2867924, a: 1}
-  m_RaycastTarget: 1
-  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
-  m_Maskable: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-  m_FontData:
-    m_Font: {fileID: 12800000, guid: 1ad2cf6c2f09744489d8c60b3fe3bab2, type: 3}
-    m_FontSize: 24
-    m_FontStyle: 0
-    m_BestFit: 0
-    m_MinSize: 2
-    m_MaxSize: 40
-    m_Alignment: 4
-    m_AlignByGeometry: 0
-    m_RichText: 1
-    m_HorizontalOverflow: 0
-    m_VerticalOverflow: 0
-    m_LineSpacing: 1
-  m_Text: "\u6821\u51C6\u6548\u679C\u4E0D\u7406\u60F3\uFF0C\u8BF7\u91CD\u65B0\u6821\u51C6\uFF01"
---- !u!114 &5249863965231648800
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 3143278146965190397}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_HorizontalFit: 2
-  m_VerticalFit: 2
---- !u!114 &3696872205753952407
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 3143278146965190397}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: b7cbfcb0916cf694fb3d059ea4b4c1da, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  textID: 120
-  layoutRebuildObject: {fileID: 0}
-  textFormatArgs: []
-  languageFontSizes: []
---- !u!1 &3245592320226212658
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 8038952844669038745}
-  - component: {fileID: 6388355002545919754}
-  - component: {fileID: 5684028733329068729}
-  m_Layer: 5
-  m_Name: BG
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &8038952844669038745
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 3245592320226212658}
-  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_Children: []
-  m_Father: {fileID: 6984168369698221790}
-  m_RootOrder: 0
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 1, y: 1}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: -4, y: -4}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &6388355002545919754
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 3245592320226212658}
-  m_CullTransparentMesh: 1
---- !u!114 &5684028733329068729
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 3245592320226212658}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 0, g: 0, b: 0, a: 1}
-  m_RaycastTarget: 1
-  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
-  m_Maskable: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-  m_Sprite: {fileID: 0}
-  m_Type: 0
-  m_PreserveAspect: 0
-  m_FillCenter: 1
-  m_FillMethod: 4
-  m_FillAmount: 1
-  m_FillClockwise: 1
-  m_FillOrigin: 0
-  m_UseSpriteMesh: 0
-  m_PixelsPerUnitMultiplier: 1
---- !u!1 &4295382300116116190
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 422015738313018617}
-  - component: {fileID: 2457803467517142196}
-  - component: {fileID: 1078973097816403762}
-  - component: {fileID: 2671286861583544749}
-  m_Layer: 5
-  m_Name: MagReset
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 0
---- !u!224 &422015738313018617
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 4295382300116116190}
-  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_Children:
-  - {fileID: 1315163913953585888}
-  m_Father: {fileID: 6984168368599178995}
-  m_RootOrder: 6
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0.5, y: 0.5}
-  m_AnchorMax: {x: 0.5, y: 0.5}
-  m_AnchoredPosition: {x: 0, y: -74}
-  m_SizeDelta: {x: 165, y: 60}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &2457803467517142196
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 4295382300116116190}
-  m_CullTransparentMesh: 1
---- !u!114 &1078973097816403762
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 4295382300116116190}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 1, g: 1, b: 1, a: 1}
-  m_RaycastTarget: 1
-  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
-  m_Maskable: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-  m_Sprite: {fileID: 21300000, guid: 1d745dd9e0569e84ebb0065d8cd1cf72, type: 3}
-  m_Type: 1
-  m_PreserveAspect: 0
-  m_FillCenter: 1
-  m_FillMethod: 4
-  m_FillAmount: 1
-  m_FillClockwise: 1
-  m_FillOrigin: 0
-  m_UseSpriteMesh: 0
-  m_PixelsPerUnitMultiplier: 1
---- !u!114 &2671286861583544749
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 4295382300116116190}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Navigation:
-    m_Mode: 3
-    m_WrapAround: 0
-    m_SelectOnUp: {fileID: 0}
-    m_SelectOnDown: {fileID: 0}
-    m_SelectOnLeft: {fileID: 0}
-    m_SelectOnRight: {fileID: 0}
-  m_Transition: 1
-  m_Colors:
-    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
-    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
-    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
-    m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
-    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
-    m_ColorMultiplier: 1
-    m_FadeDuration: 0.1
-  m_SpriteState:
-    m_HighlightedSprite: {fileID: 0}
-    m_PressedSprite: {fileID: 0}
-    m_SelectedSprite: {fileID: 0}
-    m_DisabledSprite: {fileID: 0}
-  m_AnimationTriggers:
-    m_NormalTrigger: Normal
-    m_HighlightedTrigger: Highlighted
-    m_PressedTrigger: Pressed
-    m_SelectedTrigger: Selected
-    m_DisabledTrigger: Disabled
-  m_Interactable: 1
-  m_TargetGraphic: {fileID: 1078973097816403762}
-  m_OnClick:
-    m_PersistentCalls:
-      m_Calls: []
---- !u!1 &6344043926272941954
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 8430546221710314304}
-  - component: {fileID: 3142023551447444027}
-  - component: {fileID: 6131211019337710105}
-  m_Layer: 5
-  m_Name: BG
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &8430546221710314304
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6344043926272941954}
-  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_Children: []
-  m_Father: {fileID: 6984168368043186734}
-  m_RootOrder: 0
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 1, y: 1}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: -4, y: -4}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &3142023551447444027
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6344043926272941954}
-  m_CullTransparentMesh: 1
---- !u!114 &6131211019337710105
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6344043926272941954}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 0, g: 0, b: 0, a: 1}
-  m_RaycastTarget: 1
-  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
-  m_Maskable: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-  m_Sprite: {fileID: 0}
-  m_Type: 0
-  m_PreserveAspect: 0
-  m_FillCenter: 1
-  m_FillMethod: 4
-  m_FillAmount: 1
-  m_FillClockwise: 1
-  m_FillOrigin: 0
-  m_UseSpriteMesh: 0
-  m_PixelsPerUnitMultiplier: 1
---- !u!1 &6502558348573884214
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 1341053621128030569}
-  - component: {fileID: 9209524120478309156}
-  - component: {fileID: 5108473771216504128}
-  m_Layer: 5
-  m_Name: BG
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &1341053621128030569
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6502558348573884214}
-  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_Children: []
-  m_Father: {fileID: 6984168369017745443}
-  m_RootOrder: 0
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 1, y: 1}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: -4, y: -4}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &9209524120478309156
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6502558348573884214}
-  m_CullTransparentMesh: 1
---- !u!114 &5108473771216504128
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6502558348573884214}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 0, g: 0, b: 0, a: 1}
-  m_RaycastTarget: 1
-  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
-  m_Maskable: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-  m_Sprite: {fileID: 0}
-  m_Type: 0
-  m_PreserveAspect: 0
-  m_FillCenter: 1
-  m_FillMethod: 4
-  m_FillAmount: 1
-  m_FillClockwise: 1
-  m_FillOrigin: 0
-  m_UseSpriteMesh: 0
-  m_PixelsPerUnitMultiplier: 1
---- !u!1 &6984168368043186733
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 6984168368043186734}
-  - component: {fileID: 6984168368043186720}
-  - component: {fileID: 6984168368043186735}
-  m_Layer: 5
-  m_Name: Y
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &6984168368043186734
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368043186733}
-  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_Children:
-  - {fileID: 8430546221710314304}
-  - {fileID: 6984168368986335536}
-  m_Father: {fileID: 6984168368743123379}
-  m_RootOrder: 1
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0.5, y: 0.5}
-  m_AnchorMax: {x: 0.5, y: 0.5}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 240, y: 240}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &6984168368043186720
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368043186733}
-  m_CullTransparentMesh: 1
---- !u!114 &6984168368043186735
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368043186733}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 1, g: 1, b: 1, a: 1}
-  m_RaycastTarget: 1
-  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
-  m_Maskable: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-  m_Sprite: {fileID: 21300000, guid: 3783087de96674d4c8e9f6c0d531c56a, type: 3}
-  m_Type: 1
-  m_PreserveAspect: 0
-  m_FillCenter: 1
-  m_FillMethod: 4
-  m_FillAmount: 1
-  m_FillClockwise: 1
-  m_FillOrigin: 0
-  m_UseSpriteMesh: 0
-  m_PixelsPerUnitMultiplier: 1
---- !u!1 &6984168368074953870
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 6984168368074953871}
-  - component: {fileID: 6984168368074953857}
-  - component: {fileID: 6984168368074953856}
-  - component: {fileID: 6764951882171458844}
-  m_Layer: 5
-  m_Name: Text
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &6984168368074953871
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368074953870}
-  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_Children: []
-  m_Father: {fileID: 6984168369596222397}
-  m_RootOrder: 0
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 1, y: 1}
-  m_AnchoredPosition: {x: 0, y: 3.449997}
-  m_SizeDelta: {x: 0, y: -0.9000001}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &6984168368074953857
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368074953870}
-  m_CullTransparentMesh: 1
---- !u!114 &6984168368074953856
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368074953870}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 0.23921569, g: 0.41960785, b: 0.011764706, a: 1}
-  m_RaycastTarget: 1
-  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
-  m_Maskable: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-  m_FontData:
-    m_Font: {fileID: 12800000, guid: 1ad2cf6c2f09744489d8c60b3fe3bab2, type: 3}
-    m_FontSize: 24
-    m_FontStyle: 0
-    m_BestFit: 0
-    m_MinSize: 2
-    m_MaxSize: 40
-    m_Alignment: 4
-    m_AlignByGeometry: 0
-    m_RichText: 1
-    m_HorizontalOverflow: 0
-    m_VerticalOverflow: 0
-    m_LineSpacing: 1
-  m_Text: "\u5B8C\u6210"
---- !u!114 &6764951882171458844
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368074953870}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: b7cbfcb0916cf694fb3d059ea4b4c1da, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  textID: 79
-  layoutRebuildObject: {fileID: 0}
-  textFormatArgs: []
-  languageFontSizes: []
---- !u!1 &6984168368174673572
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 6984168368174673573}
-  - component: {fileID: 6984168368174673575}
-  - component: {fileID: 6984168368174673574}
-  - component: {fileID: 5019780537336469010}
-  m_Layer: 5
-  m_Name: Text
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &6984168368174673573
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368174673572}
-  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_Children: []
-  m_Father: {fileID: 6984168368777323513}
-  m_RootOrder: 0
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 1, y: 1}
-  m_AnchoredPosition: {x: 0, y: 3.449997}
-  m_SizeDelta: {x: 0, y: -0.9000001}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &6984168368174673575
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368174673572}
-  m_CullTransparentMesh: 1
---- !u!114 &6984168368174673574
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368174673572}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 0, g: 0.3529412, b: 0.7137255, a: 1}
-  m_RaycastTarget: 1
-  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
-  m_Maskable: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-  m_FontData:
-    m_Font: {fileID: 12800000, guid: 1ad2cf6c2f09744489d8c60b3fe3bab2, type: 3}
-    m_FontSize: 24
-    m_FontStyle: 0
-    m_BestFit: 0
-    m_MinSize: 2
-    m_MaxSize: 40
-    m_Alignment: 4
-    m_AlignByGeometry: 0
-    m_RichText: 1
-    m_HorizontalOverflow: 0
-    m_VerticalOverflow: 0
-    m_LineSpacing: 1
-  m_Text: "\u89C6\u89D2\u56DE\u6B63"
---- !u!114 &5019780537336469010
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368174673572}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: b7cbfcb0916cf694fb3d059ea4b4c1da, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  textID: 80
-  layoutRebuildObject: {fileID: 0}
-  textFormatArgs: []
-  languageFontSizes: []
---- !u!1 &6984168368273229286
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 6984168368273229287}
-  - component: {fileID: 6984168368273229305}
-  - component: {fileID: 6984168368273229304}
-  - component: {fileID: 4278393290596046841}
-  m_Layer: 5
-  m_Name: Text
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &6984168368273229287
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368273229286}
-  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_Children: []
-  m_Father: {fileID: 6984168369405797680}
-  m_RootOrder: 0
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 1, y: 1}
-  m_AnchoredPosition: {x: 0, y: 3.449997}
-  m_SizeDelta: {x: 0, y: -0.9000001}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &6984168368273229305
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368273229286}
-  m_CullTransparentMesh: 1
---- !u!114 &6984168368273229304
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368273229286}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 0.7137255, g: 0.3529412, b: 0, a: 1}
-  m_RaycastTarget: 1
-  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
-  m_Maskable: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-  m_FontData:
-    m_Font: {fileID: 12800000, guid: 1ad2cf6c2f09744489d8c60b3fe3bab2, type: 3}
-    m_FontSize: 24
-    m_FontStyle: 0
-    m_BestFit: 0
-    m_MinSize: 2
-    m_MaxSize: 40
-    m_Alignment: 4
-    m_AlignByGeometry: 0
-    m_RichText: 1
-    m_HorizontalOverflow: 0
-    m_VerticalOverflow: 0
-    m_LineSpacing: 1
-  m_Text: "\u4E0A\u4E00\u6B65"
---- !u!114 &4278393290596046841
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368273229286}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: b7cbfcb0916cf694fb3d059ea4b4c1da, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  textID: 77
-  layoutRebuildObject: {fileID: 0}
-  textFormatArgs: []
-  languageFontSizes: []
---- !u!1 &6984168368394668792
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 6984168368394668793}
-  - component: {fileID: 6984168368394668795}
-  - component: {fileID: 6984168368394668794}
-  m_Layer: 5
-  m_Name: Text
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &6984168368394668793
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368394668792}
-  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_Children: []
-  m_Father: {fileID: 6984168368986335536}
-  m_RootOrder: 0
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 1}
-  m_AnchorMax: {x: 0, y: 1}
-  m_AnchoredPosition: {x: 20, y: -20}
-  m_SizeDelta: {x: 160, y: 30}
-  m_Pivot: {x: 0, y: 1}
---- !u!222 &6984168368394668795
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368394668792}
-  m_CullTransparentMesh: 1
---- !u!114 &6984168368394668794
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368394668792}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 1, g: 1, b: 1, a: 1}
-  m_RaycastTarget: 1
-  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
-  m_Maskable: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-  m_FontData:
-    m_Font: {fileID: 12800000, guid: 1ad2cf6c2f09744489d8c60b3fe3bab2, type: 3}
-    m_FontSize: 24
-    m_FontStyle: 0
-    m_BestFit: 0
-    m_MinSize: 2
-    m_MaxSize: 300
-    m_Alignment: 0
-    m_AlignByGeometry: 0
-    m_RichText: 1
-    m_HorizontalOverflow: 1
-    m_VerticalOverflow: 1
-    m_LineSpacing: 1
-  m_Text: Y
---- !u!1 &6984168368426564389
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 6984168368426564390}
-  - component: {fileID: 6984168368426564410}
-  - component: {fileID: 6984168368426564409}
-  - component: {fileID: 6984168368426564408}
-  - component: {fileID: 6984168368426564391}
-  m_Layer: 5
-  m_Name: Tip
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &6984168368426564390
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368426564389}
-  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_Children:
-  - {fileID: 6984168368453046755}
-  - {fileID: 6984168368568621764}
-  m_Father: {fileID: 6984168369610648941}
-  m_RootOrder: 0
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0.5, y: 1}
-  m_AnchorMax: {x: 0.5, y: 1}
-  m_AnchoredPosition: {x: 0, y: -220}
-  m_SizeDelta: {x: 500, y: 100}
-  m_Pivot: {x: 0.5, y: 1}
---- !u!222 &6984168368426564410
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368426564389}
-  m_CullTransparentMesh: 1
---- !u!114 &6984168368426564409
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368426564389}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 1, g: 1, b: 1, a: 1}
-  m_RaycastTarget: 1
-  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
-  m_Maskable: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-  m_Sprite: {fileID: 21300000, guid: 3783087de96674d4c8e9f6c0d531c56a, type: 3}
-  m_Type: 1
-  m_PreserveAspect: 0
-  m_FillCenter: 1
-  m_FillMethod: 4
-  m_FillAmount: 1
-  m_FillClockwise: 1
-  m_FillOrigin: 0
-  m_UseSpriteMesh: 0
-  m_PixelsPerUnitMultiplier: 1
---- !u!114 &6984168368426564408
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368426564389}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Padding:
-    m_Left: 40
-    m_Right: 40
-    m_Top: 20
-    m_Bottom: 20
-  m_ChildAlignment: 4
-  m_Spacing: 20
-  m_ChildForceExpandWidth: 1
-  m_ChildForceExpandHeight: 1
-  m_ChildControlWidth: 0
-  m_ChildControlHeight: 0
-  m_ChildScaleWidth: 0
-  m_ChildScaleHeight: 0
-  m_ReverseArrangement: 0
---- !u!114 &6984168368426564391
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368426564389}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_HorizontalFit: 2
-  m_VerticalFit: 2
---- !u!1 &6984168368453046754
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 6984168368453046755}
-  - component: {fileID: 6984168368453046757}
-  - component: {fileID: 6984168368453046756}
-  m_Layer: 5
-  m_Name: Icon
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &6984168368453046755
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368453046754}
-  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_Children: []
-  m_Father: {fileID: 6984168368426564390}
-  m_RootOrder: 0
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 1}
-  m_AnchorMax: {x: 0, y: 1}
-  m_AnchoredPosition: {x: 60, y: -50}
-  m_SizeDelta: {x: 40, y: 38}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &6984168368453046757
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368453046754}
-  m_CullTransparentMesh: 1
---- !u!114 &6984168368453046756
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368453046754}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 1, g: 1, b: 1, a: 1}
-  m_RaycastTarget: 1
-  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
-  m_Maskable: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-  m_Sprite: {fileID: 21300000, guid: d62eed7feaf1a544f9aeb390c3c400db, type: 3}
-  m_Type: 0
-  m_PreserveAspect: 0
-  m_FillCenter: 1
-  m_FillMethod: 4
-  m_FillAmount: 1
-  m_FillClockwise: 1
-  m_FillOrigin: 0
-  m_UseSpriteMesh: 0
-  m_PixelsPerUnitMultiplier: 1
---- !u!1 &6984168368486957082
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 6984168368486957087}
-  - component: {fileID: 6984168368486957086}
-  - component: {fileID: 6984168368486957085}
-  - component: {fileID: 6984168368486957084}
-  - component: {fileID: 6984168368486957083}
-  m_Layer: 5
-  m_Name: DeviceCalibrateView
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &6984168368486957087
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368486957082}
-  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
-  m_LocalPosition: {x: 0, y: 0, z: 0}
-  m_LocalScale: {x: 0, y: 0, z: 0}
-  m_Children:
-  - {fileID: 6984168368914825672}
-  - {fileID: 6984168369663618349}
-  - {fileID: 6984168368599178995}
-  - {fileID: 6984168369610648941}
-  - {fileID: 6984168369405797680}
-  - {fileID: 6984168369023981446}
-  - {fileID: 6984168369596222397}
-  m_Father: {fileID: 0}
-  m_RootOrder: 0
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 0, y: 0}
-  m_Pivot: {x: 0, y: 0}
---- !u!223 &6984168368486957086
-Canvas:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368486957082}
-  m_Enabled: 1
-  serializedVersion: 3
-  m_RenderMode: 0
-  m_Camera: {fileID: 0}
-  m_PlaneDistance: 100
-  m_PixelPerfect: 0
-  m_ReceivesEvents: 1
-  m_OverrideSorting: 0
-  m_OverridePixelPerfect: 0
-  m_SortingBucketNormalizedSize: 0
-  m_AdditionalShaderChannelsFlag: 0
-  m_SortingLayerID: 0
-  m_SortingOrder: 20
-  m_TargetDisplay: 0
---- !u!114 &6984168368486957085
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368486957082}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_UiScaleMode: 1
-  m_ReferencePixelsPerUnit: 100
-  m_ScaleFactor: 1
-  m_ReferenceResolution: {x: 1280, y: 720}
-  m_ScreenMatchMode: 0
-  m_MatchWidthOrHeight: 1
-  m_PhysicalUnit: 3
-  m_FallbackScreenDPI: 96
-  m_DefaultSpriteDPI: 96
-  m_DynamicPixelsPerUnit: 1
-  m_PresetInfoIsWorld: 0
---- !u!114 &6984168368486957084
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368486957082}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_IgnoreReversedGraphics: 1
-  m_BlockingObjects: 0
-  m_BlockingMask:
-    serializedVersion: 2
-    m_Bits: 4294967295
---- !u!114 &6984168368486957083
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368486957082}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 701d3eb12c9f50c409dac667570608fa, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  btnGyrCalibrate: {fileID: 6984168368495152324}
-  progressGyrCalibrate: {fileID: 6984168369474535886}
-  btnMagCalibrate: {fileID: 6984168369897369988}
-  btnIdentityCalibrate: {fileID: 6984168368777323514}
-  btnBack: {fileID: 6984168369405797681}
-  btnNext: {fileID: 6984168369023981447}
-  btnFinish: {fileID: 6984168369596222398}
-  deviceCalibrateItem: 0
-  guide: 1
-  tipMag1: {fileID: 897971974499562174}
-  tipMag2: {fileID: 8286164872813824460}
-  magReset: {fileID: 4295382300116116190}
---- !u!1 &6984168368495152322
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 6984168368495152323}
-  - component: {fileID: 6984168368495152326}
-  - component: {fileID: 6984168368495152325}
-  - component: {fileID: 6984168368495152324}
-  m_Layer: 5
-  m_Name: Button
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &6984168368495152323
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368495152322}
-  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_Children:
-  - {fileID: 6984168368958003532}
-  m_Father: {fileID: 6984168369663618349}
-  m_RootOrder: 1
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0.5, y: 0.5}
-  m_AnchorMax: {x: 0.5, y: 0.5}
-  m_AnchoredPosition: {x: 0, y: -64}
-  m_SizeDelta: {x: 165, y: 60}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &6984168368495152326
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368495152322}
-  m_CullTransparentMesh: 1
---- !u!114 &6984168368495152325
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368495152322}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 1, g: 1, b: 1, a: 1}
-  m_RaycastTarget: 1
-  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
-  m_Maskable: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-  m_Sprite: {fileID: 21300000, guid: 1d745dd9e0569e84ebb0065d8cd1cf72, type: 3}
-  m_Type: 0
-  m_PreserveAspect: 0
-  m_FillCenter: 1
-  m_FillMethod: 4
-  m_FillAmount: 1
-  m_FillClockwise: 1
-  m_FillOrigin: 0
-  m_UseSpriteMesh: 0
-  m_PixelsPerUnitMultiplier: 1
---- !u!114 &6984168368495152324
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368495152322}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Navigation:
-    m_Mode: 3
-    m_WrapAround: 0
-    m_SelectOnUp: {fileID: 0}
-    m_SelectOnDown: {fileID: 0}
-    m_SelectOnLeft: {fileID: 0}
-    m_SelectOnRight: {fileID: 0}
-  m_Transition: 1
-  m_Colors:
-    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
-    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
-    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
-    m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
-    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
-    m_ColorMultiplier: 1
-    m_FadeDuration: 0.1
-  m_SpriteState:
-    m_HighlightedSprite: {fileID: 0}
-    m_PressedSprite: {fileID: 0}
-    m_SelectedSprite: {fileID: 0}
-    m_DisabledSprite: {fileID: 0}
-  m_AnimationTriggers:
-    m_NormalTrigger: Normal
-    m_HighlightedTrigger: Highlighted
-    m_PressedTrigger: Pressed
-    m_SelectedTrigger: Selected
-    m_DisabledTrigger: Disabled
-  m_Interactable: 1
-  m_TargetGraphic: {fileID: 6984168368495152325}
-  m_OnClick:
-    m_PersistentCalls:
-      m_Calls: []
---- !u!1 &6984168368551622076
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 6984168368551622077}
-  - component: {fileID: 6984168368551622079}
-  - component: {fileID: 6984168368551622078}
-  - component: {fileID: 774677087276539083}
-  m_Layer: 5
-  m_Name: Text
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &6984168368551622077
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368551622076}
-  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_Children: []
-  m_Father: {fileID: 6984168369897369987}
-  m_RootOrder: 0
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 1, y: 1}
-  m_AnchoredPosition: {x: 0, y: 3.449997}
-  m_SizeDelta: {x: 0, y: -0.9000001}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &6984168368551622079
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368551622076}
-  m_CullTransparentMesh: 1
---- !u!114 &6984168368551622078
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368551622076}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 0, g: 0.3529412, b: 0.7137255, a: 1}
-  m_RaycastTarget: 1
-  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
-  m_Maskable: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-  m_FontData:
-    m_Font: {fileID: 12800000, guid: 1ad2cf6c2f09744489d8c60b3fe3bab2, type: 3}
-    m_FontSize: 24
-    m_FontStyle: 0
-    m_BestFit: 0
-    m_MinSize: 2
-    m_MaxSize: 40
-    m_Alignment: 4
-    m_AlignByGeometry: 0
-    m_RichText: 1
-    m_HorizontalOverflow: 0
-    m_VerticalOverflow: 0
-    m_LineSpacing: 1
-  m_Text: "\u5F00\u59CB\u6821\u51C6"
---- !u!114 &774677087276539083
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368551622076}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: b7cbfcb0916cf694fb3d059ea4b4c1da, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  textID: 82
-  layoutRebuildObject: {fileID: 0}
-  textFormatArgs: []
-  languageFontSizes: []
---- !u!1 &6984168368568621763
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 6984168368568621764}
-  - component: {fileID: 6984168368568621767}
-  - component: {fileID: 6984168368568621766}
-  - component: {fileID: 6984168368568621765}
-  - component: {fileID: 4080163861943251711}
-  m_Layer: 5
-  m_Name: Text
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &6984168368568621764
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368568621763}
-  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_Children: []
-  m_Father: {fileID: 6984168368426564390}
-  m_RootOrder: 1
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 1}
-  m_AnchorMax: {x: 0, y: 1}
-  m_AnchoredPosition: {x: 280, y: -50}
-  m_SizeDelta: {x: 360, y: 26.666666}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &6984168368568621767
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368568621763}
-  m_CullTransparentMesh: 1
---- !u!114 &6984168368568621766
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368568621763}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 1, g: 1, b: 1, a: 1}
-  m_RaycastTarget: 1
-  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
-  m_Maskable: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-  m_FontData:
-    m_Font: {fileID: 12800000, guid: 1ad2cf6c2f09744489d8c60b3fe3bab2, type: 3}
-    m_FontSize: 20
-    m_FontStyle: 0
-    m_BestFit: 0
-    m_MinSize: 2
-    m_MaxSize: 40
-    m_Alignment: 4
-    m_AlignByGeometry: 0
-    m_RichText: 1
-    m_HorizontalOverflow: 0
-    m_VerticalOverflow: 0
-    m_LineSpacing: 1
-  m_Text: "\u5B9E\u4F53\u5F13\u6307\u5411\u6B63\u524D\u65B9\uFF0C\u7136\u540E\u70B9\u51FB\u89C6\u89D2\u56DE\u6B63\u3002"
---- !u!114 &6984168368568621765
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368568621763}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_HorizontalFit: 2
-  m_VerticalFit: 2
---- !u!114 &4080163861943251711
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368568621763}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: b7cbfcb0916cf694fb3d059ea4b4c1da, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  textID: 81
-  layoutRebuildObject: {fileID: 6984168368426564390}
-  textFormatArgs: []
-  languageFontSizes: []
---- !u!1 &6984168368599178994
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 6984168368599178995}
-  m_Layer: 5
-  m_Name: Mag
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 0
---- !u!224 &6984168368599178995
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368599178994}
-  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_Children:
-  - {fileID: 6984168369480428192}
-  - {fileID: 6984168368743123379}
-  - {fileID: 6984168369897369987}
-  - {fileID: 1611860986899252675}
-  - {fileID: 31122222153839118}
-  - {fileID: 8073365554632566914}
-  - {fileID: 422015738313018617}
-  m_Father: {fileID: 6984168368486957087}
-  m_RootOrder: 2
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 1, y: 1}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 0, y: 0}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!1 &6984168368707837725
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 6984168368707837726}
-  - component: {fileID: 6984168368707837712}
-  - component: {fileID: 6984168368707837727}
-  m_Layer: 5
-  m_Name: Image
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &6984168368707837726
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368707837725}
-  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_Children:
-  - {fileID: 6984168369178331341}
-  m_Father: {fileID: 6984168369017745443}
-  m_RootOrder: 1
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 1, y: 1}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: -4, y: -4}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &6984168368707837712
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368707837725}
-  m_CullTransparentMesh: 1
---- !u!114 &6984168368707837727
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368707837725}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 1, g: 1, b: 1, a: 1}
-  m_RaycastTarget: 1
-  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
-  m_Maskable: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-  m_Texture: {fileID: 8400000, guid: 8500db53fe6c886499ab38266da22c7f, type: 2}
-  m_UVRect:
-    serializedVersion: 2
-    x: 0
-    y: 0
-    width: 1
-    height: 1
---- !u!1 &6984168368743123378
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 6984168368743123379}
-  m_Layer: 5
-  m_Name: ellipse-Image
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 0
---- !u!224 &6984168368743123379
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368743123378}
-  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_Children:
-  - {fileID: 6984168369017745443}
-  - {fileID: 6984168368043186734}
-  - {fileID: 6984168369698221790}
-  m_Father: {fileID: 6984168368599178995}
-  m_RootOrder: 1
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0.5, y: 0.5}
-  m_AnchorMax: {x: 0.5, y: 0.5}
-  m_AnchoredPosition: {x: 0, y: -10}
-  m_SizeDelta: {x: 0, y: 0}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!1 &6984168368777323512
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 6984168368777323513}
-  - component: {fileID: 6984168368777323516}
-  - component: {fileID: 6984168368777323515}
-  - component: {fileID: 6984168368777323514}
-  m_Layer: 5
-  m_Name: Button
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &6984168368777323513
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368777323512}
-  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_Children:
-  - {fileID: 6984168368174673573}
-  m_Father: {fileID: 6984168369610648941}
-  m_RootOrder: 1
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0.5, y: 0.5}
-  m_AnchorMax: {x: 0.5, y: 0.5}
-  m_AnchoredPosition: {x: 0, y: -80}
-  m_SizeDelta: {x: 165, y: 60}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &6984168368777323516
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368777323512}
-  m_CullTransparentMesh: 1
---- !u!114 &6984168368777323515
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368777323512}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 1, g: 1, b: 1, a: 1}
-  m_RaycastTarget: 1
-  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
-  m_Maskable: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-  m_Sprite: {fileID: 21300000, guid: 1d745dd9e0569e84ebb0065d8cd1cf72, type: 3}
-  m_Type: 1
-  m_PreserveAspect: 0
-  m_FillCenter: 1
-  m_FillMethod: 4
-  m_FillAmount: 1
-  m_FillClockwise: 1
-  m_FillOrigin: 0
-  m_UseSpriteMesh: 0
-  m_PixelsPerUnitMultiplier: 1
---- !u!114 &6984168368777323514
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368777323512}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Navigation:
-    m_Mode: 3
-    m_WrapAround: 0
-    m_SelectOnUp: {fileID: 0}
-    m_SelectOnDown: {fileID: 0}
-    m_SelectOnLeft: {fileID: 0}
-    m_SelectOnRight: {fileID: 0}
-  m_Transition: 1
-  m_Colors:
-    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
-    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
-    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
-    m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
-    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
-    m_ColorMultiplier: 1
-    m_FadeDuration: 0.1
-  m_SpriteState:
-    m_HighlightedSprite: {fileID: 0}
-    m_PressedSprite: {fileID: 0}
-    m_SelectedSprite: {fileID: 0}
-    m_DisabledSprite: {fileID: 0}
-  m_AnimationTriggers:
-    m_NormalTrigger: Normal
-    m_HighlightedTrigger: Highlighted
-    m_PressedTrigger: Pressed
-    m_SelectedTrigger: Selected
-    m_DisabledTrigger: Disabled
-  m_Interactable: 1
-  m_TargetGraphic: {fileID: 6984168368777323515}
-  m_OnClick:
-    m_PersistentCalls:
-      m_Calls: []
---- !u!1 &6984168368914825719
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 6984168368914825672}
-  - component: {fileID: 6984168368914825674}
-  - component: {fileID: 6984168368914825673}
-  m_Layer: 5
-  m_Name: BG
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &6984168368914825672
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368914825719}
-  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_Children: []
-  m_Father: {fileID: 6984168368486957087}
-  m_RootOrder: 0
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 1, y: 1}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 0, y: 0}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &6984168368914825674
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368914825719}
-  m_CullTransparentMesh: 1
---- !u!114 &6984168368914825673
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368914825719}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 0, g: 0, b: 0, a: 0.60784316}
-  m_RaycastTarget: 1
-  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
-  m_Maskable: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-  m_Sprite: {fileID: 0}
-  m_Type: 0
-  m_PreserveAspect: 0
-  m_FillCenter: 1
-  m_FillMethod: 4
-  m_FillAmount: 1
-  m_FillClockwise: 1
-  m_FillOrigin: 0
-  m_UseSpriteMesh: 0
-  m_PixelsPerUnitMultiplier: 1
---- !u!1 &6984168368958003531
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 6984168368958003532}
-  - component: {fileID: 6984168368958003534}
-  - component: {fileID: 6984168368958003533}
-  - component: {fileID: 82858197919339926}
-  m_Layer: 5
-  m_Name: Text
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &6984168368958003532
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368958003531}
-  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_Children: []
-  m_Father: {fileID: 6984168368495152323}
-  m_RootOrder: 0
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 1, y: 1}
-  m_AnchoredPosition: {x: 0, y: 3.45}
-  m_SizeDelta: {x: 0, y: -0.9000001}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &6984168368958003534
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368958003531}
-  m_CullTransparentMesh: 1
---- !u!114 &6984168368958003533
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368958003531}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 0, g: 0.3529412, b: 0.7137255, a: 1}
-  m_RaycastTarget: 1
-  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
-  m_Maskable: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-  m_FontData:
-    m_Font: {fileID: 12800000, guid: 1ad2cf6c2f09744489d8c60b3fe3bab2, type: 3}
-    m_FontSize: 24
-    m_FontStyle: 0
-    m_BestFit: 0
-    m_MinSize: 2
-    m_MaxSize: 40
-    m_Alignment: 4
-    m_AlignByGeometry: 0
-    m_RichText: 1
-    m_HorizontalOverflow: 0
-    m_VerticalOverflow: 0
-    m_LineSpacing: 1
-  m_Text: "\u5F00\u59CB\u6821\u51C6"
---- !u!114 &82858197919339926
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368958003531}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: b7cbfcb0916cf694fb3d059ea4b4c1da, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  textID: 85
-  layoutRebuildObject: {fileID: 0}
-  textFormatArgs: []
-  languageFontSizes: []
---- !u!1 &6984168368986335551
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 6984168368986335536}
-  - component: {fileID: 6984168368986335538}
-  - component: {fileID: 6984168368986335537}
-  m_Layer: 5
-  m_Name: Image
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &6984168368986335536
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368986335551}
-  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_Children:
-  - {fileID: 6984168368394668793}
-  m_Father: {fileID: 6984168368043186734}
-  m_RootOrder: 1
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 1, y: 1}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: -4, y: -4}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &6984168368986335538
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368986335551}
-  m_CullTransparentMesh: 1
---- !u!114 &6984168368986335537
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168368986335551}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 1, g: 1, b: 1, a: 1}
-  m_RaycastTarget: 1
-  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
-  m_Maskable: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-  m_Texture: {fileID: 8400000, guid: 8ec8306781444ad47a46b1d5c17fb3c8, type: 2}
-  m_UVRect:
-    serializedVersion: 2
-    x: 0
-    y: 0
-    width: 1
-    height: 1
---- !u!1 &6984168369017745442
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 6984168369017745443}
-  - component: {fileID: 6984168369017745445}
-  - component: {fileID: 6984168369017745444}
-  m_Layer: 5
-  m_Name: X
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &6984168369017745443
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369017745442}
-  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_Children:
-  - {fileID: 1341053621128030569}
-  - {fileID: 6984168368707837726}
-  m_Father: {fileID: 6984168368743123379}
-  m_RootOrder: 0
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0.5, y: 0.5}
-  m_AnchorMax: {x: 0.5, y: 0.5}
-  m_AnchoredPosition: {x: -260, y: 0}
-  m_SizeDelta: {x: 240, y: 240}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &6984168369017745445
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369017745442}
-  m_CullTransparentMesh: 1
---- !u!114 &6984168369017745444
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369017745442}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 1, g: 1, b: 1, a: 1}
-  m_RaycastTarget: 1
-  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
-  m_Maskable: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-  m_Sprite: {fileID: 21300000, guid: 3783087de96674d4c8e9f6c0d531c56a, type: 3}
-  m_Type: 1
-  m_PreserveAspect: 0
-  m_FillCenter: 1
-  m_FillMethod: 4
-  m_FillAmount: 1
-  m_FillClockwise: 1
-  m_FillOrigin: 0
-  m_UseSpriteMesh: 0
-  m_PixelsPerUnitMultiplier: 1
---- !u!1 &6984168369023981445
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 6984168369023981446}
-  - component: {fileID: 6984168369023981465}
-  - component: {fileID: 6984168369023981464}
-  - component: {fileID: 6984168369023981447}
-  m_Layer: 5
-  m_Name: BtnNext
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &6984168369023981446
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369023981445}
-  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_Children:
-  - {fileID: 6984168369595007960}
-  m_Father: {fileID: 6984168368486957087}
-  m_RootOrder: 5
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 1, y: 0}
-  m_AnchorMax: {x: 1, y: 0}
-  m_AnchoredPosition: {x: -150, y: 80}
-  m_SizeDelta: {x: 165, y: 60}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &6984168369023981465
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369023981445}
-  m_CullTransparentMesh: 1
---- !u!114 &6984168369023981464
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369023981445}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 1, g: 1, b: 1, a: 1}
-  m_RaycastTarget: 1
-  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
-  m_Maskable: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-  m_Sprite: {fileID: 21300000, guid: eac2f624d7125444db238a4b28429c93, type: 3}
-  m_Type: 1
-  m_PreserveAspect: 0
-  m_FillCenter: 1
-  m_FillMethod: 4
-  m_FillAmount: 1
-  m_FillClockwise: 1
-  m_FillOrigin: 0
-  m_UseSpriteMesh: 0
-  m_PixelsPerUnitMultiplier: 1
---- !u!114 &6984168369023981447
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369023981445}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Navigation:
-    m_Mode: 3
-    m_WrapAround: 0
-    m_SelectOnUp: {fileID: 0}
-    m_SelectOnDown: {fileID: 0}
-    m_SelectOnLeft: {fileID: 0}
-    m_SelectOnRight: {fileID: 0}
-  m_Transition: 1
-  m_Colors:
-    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
-    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
-    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
-    m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
-    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
-    m_ColorMultiplier: 1
-    m_FadeDuration: 0.1
-  m_SpriteState:
-    m_HighlightedSprite: {fileID: 0}
-    m_PressedSprite: {fileID: 0}
-    m_SelectedSprite: {fileID: 0}
-    m_DisabledSprite: {fileID: 0}
-  m_AnimationTriggers:
-    m_NormalTrigger: Normal
-    m_HighlightedTrigger: Highlighted
-    m_PressedTrigger: Pressed
-    m_SelectedTrigger: Selected
-    m_DisabledTrigger: Disabled
-  m_Interactable: 1
-  m_TargetGraphic: {fileID: 6984168369023981464}
-  m_OnClick:
-    m_PersistentCalls:
-      m_Calls: []
---- !u!1 &6984168369111700102
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 6984168369111700103}
-  - component: {fileID: 6984168369111700123}
-  - component: {fileID: 6984168369111700122}
-  - component: {fileID: 6984168369111700121}
-  - component: {fileID: 6984168369111700120}
-  m_Layer: 5
-  m_Name: Tip
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &6984168369111700103
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369111700102}
-  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_Children:
-  - {fileID: 6984168370005537969}
-  - {fileID: 6984168369475975118}
-  m_Father: {fileID: 6984168369663618349}
-  m_RootOrder: 0
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0.5, y: 1}
-  m_AnchorMax: {x: 0.5, y: 1}
-  m_AnchoredPosition: {x: 0, y: -224}
-  m_SizeDelta: {x: 500, y: 100}
-  m_Pivot: {x: 0.5, y: 1}
---- !u!222 &6984168369111700123
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369111700102}
-  m_CullTransparentMesh: 1
---- !u!114 &6984168369111700122
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369111700102}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 1, g: 1, b: 1, a: 1}
-  m_RaycastTarget: 1
-  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
-  m_Maskable: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-  m_Sprite: {fileID: 21300000, guid: 3783087de96674d4c8e9f6c0d531c56a, type: 3}
-  m_Type: 1
-  m_PreserveAspect: 0
-  m_FillCenter: 1
-  m_FillMethod: 4
-  m_FillAmount: 1
-  m_FillClockwise: 1
-  m_FillOrigin: 0
-  m_UseSpriteMesh: 0
-  m_PixelsPerUnitMultiplier: 1
---- !u!114 &6984168369111700121
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369111700102}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Padding:
-    m_Left: 40
-    m_Right: 40
-    m_Top: 20
-    m_Bottom: 20
-  m_ChildAlignment: 4
-  m_Spacing: 20
-  m_ChildForceExpandWidth: 1
-  m_ChildForceExpandHeight: 1
-  m_ChildControlWidth: 0
-  m_ChildControlHeight: 0
-  m_ChildScaleWidth: 0
-  m_ChildScaleHeight: 0
-  m_ReverseArrangement: 0
---- !u!114 &6984168369111700120
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369111700102}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_HorizontalFit: 2
-  m_VerticalFit: 2
---- !u!1 &6984168369138150819
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 6984168369138150820}
-  - component: {fileID: 6984168369138150822}
-  - component: {fileID: 6984168369138150821}
-  m_Layer: 5
-  m_Name: Text
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &6984168369138150820
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369138150819}
-  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_Children: []
-  m_Father: {fileID: 6984168369898227185}
-  m_RootOrder: 0
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 1}
-  m_AnchorMax: {x: 0, y: 1}
-  m_AnchoredPosition: {x: 20, y: -20}
-  m_SizeDelta: {x: 160, y: 30}
-  m_Pivot: {x: 0, y: 1}
---- !u!222 &6984168369138150822
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369138150819}
-  m_CullTransparentMesh: 1
---- !u!114 &6984168369138150821
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369138150819}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 1, g: 1, b: 1, a: 1}
-  m_RaycastTarget: 1
-  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
-  m_Maskable: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-  m_FontData:
-    m_Font: {fileID: 12800000, guid: 1ad2cf6c2f09744489d8c60b3fe3bab2, type: 3}
-    m_FontSize: 24
-    m_FontStyle: 0
-    m_BestFit: 0
-    m_MinSize: 2
-    m_MaxSize: 300
-    m_Alignment: 0
-    m_AlignByGeometry: 0
-    m_RichText: 1
-    m_HorizontalOverflow: 1
-    m_VerticalOverflow: 1
-    m_LineSpacing: 1
-  m_Text: Z
---- !u!1 &6984168369178331340
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 6984168369178331341}
-  - component: {fileID: 6984168369178331343}
-  - component: {fileID: 6984168369178331342}
-  m_Layer: 5
-  m_Name: Text
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &6984168369178331341
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369178331340}
-  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_Children: []
-  m_Father: {fileID: 6984168368707837726}
-  m_RootOrder: 0
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 1}
-  m_AnchorMax: {x: 0, y: 1}
-  m_AnchoredPosition: {x: 20, y: -20}
-  m_SizeDelta: {x: 160, y: 30}
-  m_Pivot: {x: 0, y: 1}
---- !u!222 &6984168369178331343
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369178331340}
-  m_CullTransparentMesh: 1
---- !u!114 &6984168369178331342
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369178331340}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 1, g: 1, b: 1, a: 1}
-  m_RaycastTarget: 1
-  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
-  m_Maskable: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-  m_FontData:
-    m_Font: {fileID: 12800000, guid: 1ad2cf6c2f09744489d8c60b3fe3bab2, type: 3}
-    m_FontSize: 24
-    m_FontStyle: 0
-    m_BestFit: 0
-    m_MinSize: 2
-    m_MaxSize: 300
-    m_Alignment: 0
-    m_AlignByGeometry: 0
-    m_RichText: 1
-    m_HorizontalOverflow: 1
-    m_VerticalOverflow: 1
-    m_LineSpacing: 1
-  m_Text: X
---- !u!1 &6984168369211798933
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 6984168369211798934}
-  - component: {fileID: 6984168369211799016}
-  - component: {fileID: 6984168369211798935}
-  m_Layer: 5
-  m_Name: Icon
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &6984168369211798934
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369211798933}
-  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_Children: []
-  m_Father: {fileID: 6984168369480428192}
-  m_RootOrder: 0
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 1}
-  m_AnchorMax: {x: 0, y: 1}
-  m_AnchoredPosition: {x: 60, y: -50}
-  m_SizeDelta: {x: 40, y: 38}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &6984168369211799016
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369211798933}
-  m_CullTransparentMesh: 1
---- !u!114 &6984168369211798935
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369211798933}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 1, g: 1, b: 1, a: 1}
-  m_RaycastTarget: 1
-  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
-  m_Maskable: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-  m_Sprite: {fileID: 21300000, guid: d62eed7feaf1a544f9aeb390c3c400db, type: 3}
-  m_Type: 0
-  m_PreserveAspect: 0
-  m_FillCenter: 1
-  m_FillMethod: 4
-  m_FillAmount: 1
-  m_FillClockwise: 1
-  m_FillOrigin: 0
-  m_UseSpriteMesh: 0
-  m_PixelsPerUnitMultiplier: 1
---- !u!1 &6984168369405797695
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 6984168369405797680}
-  - component: {fileID: 6984168369405797683}
-  - component: {fileID: 6984168369405797682}
-  - component: {fileID: 6984168369405797681}
-  m_Layer: 5
-  m_Name: BtnBack
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &6984168369405797680
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369405797695}
-  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_Children:
-  - {fileID: 6984168368273229287}
-  m_Father: {fileID: 6984168368486957087}
-  m_RootOrder: 4
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 150, y: 80}
-  m_SizeDelta: {x: 165, y: 60}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &6984168369405797683
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369405797695}
-  m_CullTransparentMesh: 1
---- !u!114 &6984168369405797682
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369405797695}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 1, g: 1, b: 1, a: 1}
-  m_RaycastTarget: 1
-  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
-  m_Maskable: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-  m_Sprite: {fileID: 21300000, guid: 8ccd496b30ced39438603d237003eafe, type: 3}
-  m_Type: 1
-  m_PreserveAspect: 0
-  m_FillCenter: 1
-  m_FillMethod: 4
-  m_FillAmount: 1
-  m_FillClockwise: 1
-  m_FillOrigin: 0
-  m_UseSpriteMesh: 0
-  m_PixelsPerUnitMultiplier: 1
---- !u!114 &6984168369405797681
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369405797695}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Navigation:
-    m_Mode: 3
-    m_WrapAround: 0
-    m_SelectOnUp: {fileID: 0}
-    m_SelectOnDown: {fileID: 0}
-    m_SelectOnLeft: {fileID: 0}
-    m_SelectOnRight: {fileID: 0}
-  m_Transition: 1
-  m_Colors:
-    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
-    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
-    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
-    m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
-    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
-    m_ColorMultiplier: 1
-    m_FadeDuration: 0.1
-  m_SpriteState:
-    m_HighlightedSprite: {fileID: 0}
-    m_PressedSprite: {fileID: 0}
-    m_SelectedSprite: {fileID: 0}
-    m_DisabledSprite: {fileID: 0}
-  m_AnimationTriggers:
-    m_NormalTrigger: Normal
-    m_HighlightedTrigger: Highlighted
-    m_PressedTrigger: Pressed
-    m_SelectedTrigger: Selected
-    m_DisabledTrigger: Disabled
-  m_Interactable: 1
-  m_TargetGraphic: {fileID: 6984168369405797682}
-  m_OnClick:
-    m_PersistentCalls:
-      m_Calls: []
---- !u!1 &6984168369474535884
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 6984168369474535885}
-  - component: {fileID: 6984168369474535887}
-  - component: {fileID: 6984168369474535886}
-  m_Layer: 5
-  m_Name: Progress
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &6984168369474535885
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369474535884}
-  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_Children: []
-  m_Father: {fileID: 6984168369663618349}
-  m_RootOrder: 2
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0.5, y: 0}
-  m_AnchorMax: {x: 0.5, y: 0}
-  m_AnchoredPosition: {x: 0, y: 156}
-  m_SizeDelta: {x: 200, y: 60}
-  m_Pivot: {x: 0.5, y: 0}
---- !u!222 &6984168369474535887
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369474535884}
-  m_CullTransparentMesh: 1
---- !u!114 &6984168369474535886
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369474535884}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 1, g: 1, b: 1, a: 1}
-  m_RaycastTarget: 1
-  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
-  m_Maskable: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-  m_FontData:
-    m_Font: {fileID: 12800000, guid: 1ad2cf6c2f09744489d8c60b3fe3bab2, type: 3}
-    m_FontSize: 24
-    m_FontStyle: 0
-    m_BestFit: 0
-    m_MinSize: 2
-    m_MaxSize: 40
-    m_Alignment: 4
-    m_AlignByGeometry: 0
-    m_RichText: 1
-    m_HorizontalOverflow: 0
-    m_VerticalOverflow: 0
-    m_LineSpacing: 1
-  m_Text: 0%
---- !u!1 &6984168369475975117
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 6984168369475975118}
-  - component: {fileID: 6984168369475975104}
-  - component: {fileID: 6984168369475975119}
-  - component: {fileID: 6984168369475975105}
-  - component: {fileID: 4683507629538286255}
-  m_Layer: 5
-  m_Name: Text
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &6984168369475975118
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369475975117}
-  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_Children: []
-  m_Father: {fileID: 6984168369111700103}
-  m_RootOrder: 1
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 1}
-  m_AnchorMax: {x: 0, y: 1}
-  m_AnchoredPosition: {x: 280, y: -50}
-  m_SizeDelta: {x: 360, y: 27}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &6984168369475975104
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369475975117}
-  m_CullTransparentMesh: 1
---- !u!114 &6984168369475975119
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369475975117}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 1, g: 1, b: 1, a: 1}
-  m_RaycastTarget: 1
-  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
-  m_Maskable: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-  m_FontData:
-    m_Font: {fileID: 12800000, guid: 1ad2cf6c2f09744489d8c60b3fe3bab2, type: 3}
-    m_FontSize: 20
-    m_FontStyle: 0
-    m_BestFit: 0
-    m_MinSize: 2
-    m_MaxSize: 40
-    m_Alignment: 4
-    m_AlignByGeometry: 0
-    m_RichText: 1
-    m_HorizontalOverflow: 0
-    m_VerticalOverflow: 0
-    m_LineSpacing: 1
-  m_Text: "\u6821\u51C6\u65F6\u9700\u8981\u5C06\u7784\u51C6\u6A21\u5757\u9759\u6B62\u653E\u5728\u684C\u9762\u4E0A\u3002"
---- !u!114 &6984168369475975105
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369475975117}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_HorizontalFit: 2
-  m_VerticalFit: 2
---- !u!114 &4683507629538286255
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369475975117}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: b7cbfcb0916cf694fb3d059ea4b4c1da, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  textID: 86
-  layoutRebuildObject: {fileID: 6984168369111700103}
-  textFormatArgs: []
-  languageFontSizes: []
---- !u!1 &6984168369480428207
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 6984168369480428192}
-  - component: {fileID: 6984168369480428196}
-  - component: {fileID: 6984168369480428195}
-  - component: {fileID: 6984168369480428194}
-  - component: {fileID: 6984168369480428193}
-  m_Layer: 5
-  m_Name: Tip
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 0
---- !u!224 &6984168369480428192
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369480428207}
-  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_Children:
-  - {fileID: 6984168369211798934}
-  - {fileID: 6984168369721823374}
-  m_Father: {fileID: 6984168368599178995}
-  m_RootOrder: 0
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0.5, y: 1}
-  m_AnchorMax: {x: 0.5, y: 1}
-  m_AnchoredPosition: {x: 0, y: -120}
-  m_SizeDelta: {x: 743.0222, y: 100}
-  m_Pivot: {x: 0.5, y: 1}
---- !u!222 &6984168369480428196
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369480428207}
-  m_CullTransparentMesh: 1
---- !u!114 &6984168369480428195
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369480428207}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 1, g: 1, b: 1, a: 1}
-  m_RaycastTarget: 1
-  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
-  m_Maskable: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-  m_Sprite: {fileID: 21300000, guid: 3783087de96674d4c8e9f6c0d531c56a, type: 3}
-  m_Type: 1
-  m_PreserveAspect: 0
-  m_FillCenter: 1
-  m_FillMethod: 4
-  m_FillAmount: 1
-  m_FillClockwise: 1
-  m_FillOrigin: 0
-  m_UseSpriteMesh: 0
-  m_PixelsPerUnitMultiplier: 1
---- !u!114 &6984168369480428194
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369480428207}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Padding:
-    m_Left: 40
-    m_Right: 40
-    m_Top: 20
-    m_Bottom: 20
-  m_ChildAlignment: 4
-  m_Spacing: 20
-  m_ChildForceExpandWidth: 1
-  m_ChildForceExpandHeight: 1
-  m_ChildControlWidth: 0
-  m_ChildControlHeight: 0
-  m_ChildScaleWidth: 0
-  m_ChildScaleHeight: 0
-  m_ReverseArrangement: 0
---- !u!114 &6984168369480428193
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369480428207}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_HorizontalFit: 2
-  m_VerticalFit: 2
---- !u!1 &6984168369595007943
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 6984168369595007960}
-  - component: {fileID: 6984168369595007962}
-  - component: {fileID: 6984168369595007961}
-  - component: {fileID: 3433743628228857709}
-  m_Layer: 5
-  m_Name: Text
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &6984168369595007960
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369595007943}
-  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_Children: []
-  m_Father: {fileID: 6984168369023981446}
-  m_RootOrder: 0
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 1, y: 1}
-  m_AnchoredPosition: {x: 0, y: 3.449997}
-  m_SizeDelta: {x: 0, y: -0.9000001}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &6984168369595007962
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369595007943}
-  m_CullTransparentMesh: 1
---- !u!114 &6984168369595007961
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369595007943}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 0.23921569, g: 0.41960785, b: 0.011764706, a: 1}
-  m_RaycastTarget: 1
-  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
-  m_Maskable: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-  m_FontData:
-    m_Font: {fileID: 12800000, guid: 1ad2cf6c2f09744489d8c60b3fe3bab2, type: 3}
-    m_FontSize: 24
-    m_FontStyle: 0
-    m_BestFit: 0
-    m_MinSize: 2
-    m_MaxSize: 40
-    m_Alignment: 4
-    m_AlignByGeometry: 0
-    m_RichText: 1
-    m_HorizontalOverflow: 0
-    m_VerticalOverflow: 0
-    m_LineSpacing: 1
-  m_Text: "\u4E0B\u4E00\u6B65"
---- !u!114 &3433743628228857709
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369595007943}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: b7cbfcb0916cf694fb3d059ea4b4c1da, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  textID: 78
-  layoutRebuildObject: {fileID: 0}
-  textFormatArgs: []
-  languageFontSizes: []
---- !u!1 &6984168369596222396
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 6984168369596222397}
-  - component: {fileID: 6984168369596222384}
-  - component: {fileID: 6984168369596222399}
-  - component: {fileID: 6984168369596222398}
-  m_Layer: 5
-  m_Name: BtnFinish
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &6984168369596222397
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369596222396}
-  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_Children:
-  - {fileID: 6984168368074953871}
-  m_Father: {fileID: 6984168368486957087}
-  m_RootOrder: 6
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 1, y: 0}
-  m_AnchorMax: {x: 1, y: 0}
-  m_AnchoredPosition: {x: -150, y: 80}
-  m_SizeDelta: {x: 165, y: 60}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &6984168369596222384
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369596222396}
-  m_CullTransparentMesh: 1
---- !u!114 &6984168369596222399
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369596222396}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 1, g: 1, b: 1, a: 1}
-  m_RaycastTarget: 1
-  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
-  m_Maskable: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-  m_Sprite: {fileID: 21300000, guid: eac2f624d7125444db238a4b28429c93, type: 3}
-  m_Type: 1
-  m_PreserveAspect: 0
-  m_FillCenter: 1
-  m_FillMethod: 4
-  m_FillAmount: 1
-  m_FillClockwise: 1
-  m_FillOrigin: 0
-  m_UseSpriteMesh: 0
-  m_PixelsPerUnitMultiplier: 1
---- !u!114 &6984168369596222398
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369596222396}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Navigation:
-    m_Mode: 3
-    m_WrapAround: 0
-    m_SelectOnUp: {fileID: 0}
-    m_SelectOnDown: {fileID: 0}
-    m_SelectOnLeft: {fileID: 0}
-    m_SelectOnRight: {fileID: 0}
-  m_Transition: 1
-  m_Colors:
-    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
-    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
-    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
-    m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
-    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
-    m_ColorMultiplier: 1
-    m_FadeDuration: 0.1
-  m_SpriteState:
-    m_HighlightedSprite: {fileID: 0}
-    m_PressedSprite: {fileID: 0}
-    m_SelectedSprite: {fileID: 0}
-    m_DisabledSprite: {fileID: 0}
-  m_AnimationTriggers:
-    m_NormalTrigger: Normal
-    m_HighlightedTrigger: Highlighted
-    m_PressedTrigger: Pressed
-    m_SelectedTrigger: Selected
-    m_DisabledTrigger: Disabled
-  m_Interactable: 1
-  m_TargetGraphic: {fileID: 6984168369596222399}
-  m_OnClick:
-    m_PersistentCalls:
-      m_Calls: []
---- !u!1 &6984168369610648940
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 6984168369610648941}
-  m_Layer: 5
-  m_Name: Identity
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 0
---- !u!224 &6984168369610648941
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369610648940}
-  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_Children:
-  - {fileID: 6984168368426564390}
-  - {fileID: 6984168368777323513}
-  m_Father: {fileID: 6984168368486957087}
-  m_RootOrder: 3
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 1, y: 1}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 0, y: 0}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!1 &6984168369663618348
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 6984168369663618349}
-  m_Layer: 5
-  m_Name: Gyr
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 0
---- !u!224 &6984168369663618349
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369663618348}
-  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_Children:
-  - {fileID: 6984168369111700103}
-  - {fileID: 6984168368495152323}
-  - {fileID: 6984168369474535885}
-  m_Father: {fileID: 6984168368486957087}
-  m_RootOrder: 1
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 1, y: 1}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 0, y: 0}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!1 &6984168369698221789
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 6984168369698221790}
-  - component: {fileID: 6984168369698221776}
-  - component: {fileID: 6984168369698221791}
-  m_Layer: 5
-  m_Name: Z
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &6984168369698221790
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369698221789}
-  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_Children:
-  - {fileID: 8038952844669038745}
-  - {fileID: 6984168369898227185}
-  m_Father: {fileID: 6984168368743123379}
-  m_RootOrder: 2
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0.5, y: 0.5}
-  m_AnchorMax: {x: 0.5, y: 0.5}
-  m_AnchoredPosition: {x: 260, y: 0}
-  m_SizeDelta: {x: 240, y: 240}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &6984168369698221776
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369698221789}
-  m_CullTransparentMesh: 1
---- !u!114 &6984168369698221791
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369698221789}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 1, g: 1, b: 1, a: 1}
-  m_RaycastTarget: 1
-  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
-  m_Maskable: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-  m_Sprite: {fileID: 21300000, guid: 3783087de96674d4c8e9f6c0d531c56a, type: 3}
-  m_Type: 1
-  m_PreserveAspect: 0
-  m_FillCenter: 1
-  m_FillMethod: 4
-  m_FillAmount: 1
-  m_FillClockwise: 1
-  m_FillOrigin: 0
-  m_UseSpriteMesh: 0
-  m_PixelsPerUnitMultiplier: 1
---- !u!1 &6984168369721823373
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 6984168369721823374}
-  - component: {fileID: 6984168369721823361}
-  - component: {fileID: 6984168369721823360}
-  - component: {fileID: 6984168369721823375}
-  - component: {fileID: 208034294034311853}
-  m_Layer: 5
-  m_Name: Text
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &6984168369721823374
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369721823373}
-  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_Children: []
-  m_Father: {fileID: 6984168369480428192}
-  m_RootOrder: 1
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 1}
-  m_AnchorMax: {x: 0, y: 1}
-  m_AnchoredPosition: {x: 401.5111, y: -50}
-  m_SizeDelta: {x: 603.0222, y: 27.022223}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &6984168369721823361
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369721823373}
-  m_CullTransparentMesh: 1
---- !u!114 &6984168369721823360
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369721823373}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 1, g: 1, b: 1, a: 1}
-  m_RaycastTarget: 1
-  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
-  m_Maskable: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-  m_FontData:
-    m_Font: {fileID: 12800000, guid: 1ad2cf6c2f09744489d8c60b3fe3bab2, type: 3}
-    m_FontSize: 20
-    m_FontStyle: 0
-    m_BestFit: 0
-    m_MinSize: 2
-    m_MaxSize: 40
-    m_Alignment: 4
-    m_AlignByGeometry: 0
-    m_RichText: 1
-    m_HorizontalOverflow: 0
-    m_VerticalOverflow: 0
-    m_LineSpacing: 1
-  m_Text: "\u5C3D\u91CF\u5C1D\u8BD5\u591A\u89D2\u5EA6\u65CB\u8F6C\u6A21\u5757\uFF0C\u76F4\u5230XYZ\u4E09\u4E2A\u8C61\u9650\u4E2D\u591A\u70B9\u5F62\u6210\u5706\u5F62\u4E3A\u6B62\u3002"
---- !u!114 &6984168369721823375
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369721823373}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_HorizontalFit: 2
-  m_VerticalFit: 2
---- !u!114 &208034294034311853
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369721823373}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: b7cbfcb0916cf694fb3d059ea4b4c1da, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  textID: 84
-  layoutRebuildObject: {fileID: 6984168369480428192}
-  textFormatArgs: []
-  languageFontSizes: []
---- !u!1 &6984168369897369986
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 6984168369897369987}
-  - component: {fileID: 6984168369897369990}
-  - component: {fileID: 6984168369897369989}
-  - component: {fileID: 6984168369897369988}
-  m_Layer: 5
-  m_Name: Button
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 0
---- !u!224 &6984168369897369987
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369897369986}
-  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_Children:
-  - {fileID: 6984168368551622077}
-  m_Father: {fileID: 6984168368599178995}
-  m_RootOrder: 2
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0.5, y: 0.5}
-  m_AnchorMax: {x: 0.5, y: 0.5}
-  m_AnchoredPosition: {x: 0, y: -185}
-  m_SizeDelta: {x: 165, y: 60}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &6984168369897369990
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369897369986}
-  m_CullTransparentMesh: 1
---- !u!114 &6984168369897369989
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369897369986}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 1, g: 1, b: 1, a: 1}
-  m_RaycastTarget: 1
-  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
-  m_Maskable: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-  m_Sprite: {fileID: 21300000, guid: 1d745dd9e0569e84ebb0065d8cd1cf72, type: 3}
-  m_Type: 1
-  m_PreserveAspect: 0
-  m_FillCenter: 1
-  m_FillMethod: 4
-  m_FillAmount: 1
-  m_FillClockwise: 1
-  m_FillOrigin: 0
-  m_UseSpriteMesh: 0
-  m_PixelsPerUnitMultiplier: 1
---- !u!114 &6984168369897369988
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369897369986}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Navigation:
-    m_Mode: 3
-    m_WrapAround: 0
-    m_SelectOnUp: {fileID: 0}
-    m_SelectOnDown: {fileID: 0}
-    m_SelectOnLeft: {fileID: 0}
-    m_SelectOnRight: {fileID: 0}
-  m_Transition: 1
-  m_Colors:
-    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
-    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
-    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
-    m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
-    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
-    m_ColorMultiplier: 1
-    m_FadeDuration: 0.1
-  m_SpriteState:
-    m_HighlightedSprite: {fileID: 0}
-    m_PressedSprite: {fileID: 0}
-    m_SelectedSprite: {fileID: 0}
-    m_DisabledSprite: {fileID: 0}
-  m_AnimationTriggers:
-    m_NormalTrigger: Normal
-    m_HighlightedTrigger: Highlighted
-    m_PressedTrigger: Pressed
-    m_SelectedTrigger: Selected
-    m_DisabledTrigger: Disabled
-  m_Interactable: 1
-  m_TargetGraphic: {fileID: 6984168369897369989}
-  m_OnClick:
-    m_PersistentCalls:
-      m_Calls: []
---- !u!1 &6984168369898227184
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 6984168369898227185}
-  - component: {fileID: 6984168369898227187}
-  - component: {fileID: 6984168369898227186}
-  m_Layer: 5
-  m_Name: Image
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &6984168369898227185
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369898227184}
-  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_Children:
-  - {fileID: 6984168369138150820}
-  m_Father: {fileID: 6984168369698221790}
-  m_RootOrder: 1
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 1, y: 1}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: -4, y: -4}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &6984168369898227187
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369898227184}
-  m_CullTransparentMesh: 1
---- !u!114 &6984168369898227186
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168369898227184}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 1, g: 1, b: 1, a: 1}
-  m_RaycastTarget: 1
-  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
-  m_Maskable: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-  m_Texture: {fileID: 8400000, guid: 370487b204c896a428e4db9efe48e277, type: 2}
-  m_UVRect:
-    serializedVersion: 2
-    x: 0
-    y: 0
-    width: 1
-    height: 1
---- !u!1 &6984168370005537968
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 6984168370005537969}
-  - component: {fileID: 6984168370005537971}
-  - component: {fileID: 6984168370005537970}
-  m_Layer: 5
-  m_Name: Icon
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &6984168370005537969
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168370005537968}
-  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_Children: []
-  m_Father: {fileID: 6984168369111700103}
-  m_RootOrder: 0
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 1}
-  m_AnchorMax: {x: 0, y: 1}
-  m_AnchoredPosition: {x: 60, y: -50}
-  m_SizeDelta: {x: 40, y: 38}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &6984168370005537971
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168370005537968}
-  m_CullTransparentMesh: 1
---- !u!114 &6984168370005537970
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6984168370005537968}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 1, g: 1, b: 1, a: 1}
-  m_RaycastTarget: 1
-  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
-  m_Maskable: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-  m_Sprite: {fileID: 21300000, guid: d62eed7feaf1a544f9aeb390c3c400db, type: 3}
-  m_Type: 0
-  m_PreserveAspect: 0
-  m_FillCenter: 1
-  m_FillMethod: 4
-  m_FillAmount: 1
-  m_FillClockwise: 1
-  m_FillOrigin: 0
-  m_UseSpriteMesh: 0
-  m_PixelsPerUnitMultiplier: 1
---- !u!1 &8286164872813824460
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 8073365554632566914}
-  - component: {fileID: 700732531410769236}
-  - component: {fileID: 8303942291223141081}
-  m_Layer: 5
-  m_Name: MagTip2
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 0
---- !u!224 &8073365554632566914
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 8286164872813824460}
-  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_Children: []
-  m_Father: {fileID: 6984168368599178995}
-  m_RootOrder: 5
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0.5, y: 0.5}
-  m_AnchorMax: {x: 0.5, y: 0.5}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 250.31111, y: 41.244446}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &700732531410769236
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 8286164872813824460}
-  m_CullTransparentMesh: 1
---- !u!114 &8303942291223141081
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 8286164872813824460}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 0.2584905, g: 1, b: 0.2584905, a: 1}
-  m_RaycastTarget: 1
-  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
-  m_Maskable: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-  m_FontData:
-    m_Font: {fileID: 12800000, guid: 1ad2cf6c2f09744489d8c60b3fe3bab2, type: 3}
-    m_FontSize: 32
-    m_FontStyle: 0
-    m_BestFit: 0
-    m_MinSize: 2
-    m_MaxSize: 40
-    m_Alignment: 4
-    m_AlignByGeometry: 0
-    m_RichText: 1
-    m_HorizontalOverflow: 1
-    m_VerticalOverflow: 1
-    m_LineSpacing: 1
-  m_Text: "\u5730\u78C1\u8BA1\u6821\u51C6\u5DF2\u5B8C\u6210"

+ 0 - 7
代码备份/校准界面-2022-10-17/DeviceCalibrateView.prefab.meta

@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: 614d90a57978ee147a335b71d6c1319c
-PrefabImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

+ 0 - 512
代码备份/野鸡-2022-10-18/Yeji.cs

@@ -1,512 +0,0 @@
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-using UnityEngine.AI;
-/* 动物组件-野鸡 */
-public class Yeji : TargetAnimal
-{
-    //动画播放器
-    Animator animator;
-    //寻路代理
-    NavMeshAgent agent;
-    //血量
-    [System.NonSerialized] public int hp = 3;
-    [System.NonSerialized] public TreeAreaRecorder treeAreaRecorder;
-    [System.NonSerialized] public float flyPlaneHeight = 5;
-    float currentHeight = 0;
-    float toFlyHeight = float.NaN;
-    public void SetFlyHeight(float value) {
-        if (toFlyHeight.Equals(float.NaN)) toFlyHeight = value;
-        currentHeight = value;
-        float agentBaseOffset = value - flyPlaneHeight;
-        this.agent.baseOffset = agentBaseOffset / transform.localScale.y;//因为agent的baseoffset会受节点的scale影响
-        state.flying = currentHeight > 0;
-    }
-
-    void Awake()
-    {
-        yejiSet.Add(this);
-        state = new State();
-        state.animal = this;
-        animator = GetComponent<Animator>();
-        agent = GetComponent<NavMeshAgent>();
-        this.agent.avoidancePriority = avoidancePriority;
-        this.onlineHandler.InitOnAwake(this);
-    }
-    static int _avoidancePriority = 0;
-    static int avoidancePriority {
-        get {
-            if (_avoidancePriority < 50) {
-                _avoidancePriority++;
-            } else {
-                _avoidancePriority = 1;
-            }
-            return _avoidancePriority;
-        }
-    }
-
-    void OnDestroy() {
-        yejiSet.Remove(this);
-        tryReleaseOccupyTree();
-        ReleasePreHeight(this);
-    }
-
-    void Update()
-    {
-        this.onlineHandler.Update();
-        if (this.onlineHandler.isMirror) return;
-        //寻路过程监测
-        if (HasCloseToDestination()) {
-            OnReachDestination();
-        } else {
-            OnMovingToDestination();
-        }
-        UpdateAutoStrategy();
-    }
-
-    #region 被击触发
-        public override void OnHit(Arrow arrow, Vector3 hitPoint, string partName)
-        {
-            arrow.Head().position = hitPoint + arrow.transform.forward * 0.1f;
-            arrow.Hit();
-            if (onlineHandler.isMirror) {
-                onlineHandler.onHitData = onlineHandler.uid.ToString() + "," + partName;
-                return;
-            }
-            OnHitLogic(arrow, partName);
-        }
-
-        public void OnHitLogic(Arrow arrow, string partName) {
-            int hurtValue = 0;
-            if (partName == "Wing") {
-                hurtValue = 1;
-            }
-            else if (partName == "Body") hurtValue = 2;
-            else if (partName == "Head") hurtValue = 3;
-            hp -= hurtValue;
-            GameEventCenter.ins.onTargetAnimalHurt?.Invoke(this, hurtValue);
-            if (hp <= 0) {
-                Die(arrow);
-            } else {
-                Hurt();
-            }
-        }
-
-        void Die(Arrow arrow) {
-            if (state.dead) return;
-            if (arrow != null) {
-                arrow.onDoNextShoot += delegate() {
-                    Destroy(this.gameObject);
-                };
-            } else {
-                //需要借住关卡的GameMode来清除
-                onlineHandler.onDoNextShootWillDestroy = true;
-            }
-            this.animator.speed = 1;
-            state.dead = true;
-            this.agent.enabled = false;
-            ReleasePreHeight(this);
-            onDie?.Invoke(this);
-            AudioMgr.ins.PlayAnimalEffect("bird_injured", AudioMgr.GetAudioSource(this.gameObject));
-            this.onlineHandler.injuredID++;
-            if (currentHeight < 1.5f) {
-                if (arrow != null) arrow.arrowCameraComp.arrowCameraTemplate.SendMsg(0, null);
-            }
-        }
-
-        void Hurt() {
-            CancelStand();
-            CancelFlyStay();
-            AudioMgr.ins.PlayAnimalEffect("bird_injured", AudioMgr.GetAudioSource(this.gameObject));
-            this.onlineHandler.injuredID++;
-        }
-    #endregion
-
-    #region 寻路导航
-        bool _moving;
-        bool moving {
-            get { return _moving; }
-            set {
-                movingTime = 0;
-                _moving = value;
-            }
-        } 
-        float movingTime;
-        //启动寻路
-        void SetDestination(Vector3 pos) {
-            moving = true;
-            this.agent.destination = pos;
-        }
-        //寻路过程
-        void OnMovingToDestination() {
-            if (!moving) return;
-            movingTime += Time.deltaTime;
-        }
-        //寻路结束
-        void OnReachDestination() {
-            if (!moving) return;
-            moving = false;
-        }
-        //是否已经接近目的地(寻路完成判断)
-        bool HasCloseToDestination() {
-            if (!moving) return true;
-            return movingTime > 0.1 && this.agent.velocity.magnitude < 0.05f;
-        }
-        //停止寻路
-        void StopNavigation() {
-            if (!moving) return;
-            this.agent.destination = this.agent.nextPosition;
-            this.agent.velocity = Vector3.zero;
-            this.transform.position = this.agent.destination;
-            OnReachDestination();
-        }
-    #endregion
-
-    #region 自动逻辑
-        //自动策略的更新逻辑
-        void UpdateAutoStrategy() {
-            if (state.dead) return;
-            UpdateFlyUpDown();
-            UpdateBehavior();
-        }
-        
-        float canStandTime = 3f;
-        float canFlyStayTime = 3f;
-        //能够在前几棵树徘徊
-        [System.NonSerialized] public int canFlyTreeCount = 3;
-        const float downSpeed = 2.0f;
-        //更新逻辑-起飞降落
-        void UpdateFlyUpDown() {
-            if (state.up && state.landing) { //起飞阶段
-                AnimatorStateInfo animatorStateInfo = animator.GetCurrentAnimatorStateInfo(0);
-                bool isTakeOff = animatorStateInfo.IsName("FlyFromGround");
-                if (isTakeOff) {
-                    if (animatorStateInfo.normalizedTime >= 1.0) {
-                        state.landing = false;
-                        state.flying = true;
-                    }
-                }
-                return;
-            }
-            if (state.up && state.flying) { //上升阶段
-                float surplusHeight = toFlyHeight - currentHeight;
-                float smoothValue = surplusHeight / toFlyHeight;
-                float nextFlyHeight = currentHeight + Time.deltaTime * (1f + 2.5f * smoothValue);
-                this.animator.speed = 1f + 2f * smoothValue;
-                if (nextFlyHeight >= toFlyHeight) { //上升完成
-                    nextFlyHeight = toFlyHeight;
-                    this.animator.speed = 1;
-                    state.up = false;
-                }
-                SetFlyHeight(nextFlyHeight);
-                return;
-            }
-            if (state.down && state.flying) { //下降阶段
-                float nextH = currentHeight - Time.deltaTime * downSpeed;
-                if (nextH <= 0) { //下降完成
-                    nextH = 0;
-                    state.landing = true;
-                    state.flying = false;
-                    StopNavigation();
-                }
-                SetFlyHeight(nextH);
-                return;
-            }
-            if (state.down && state.landing) { //着落阶段
-                AnimatorStateInfo animatorStateInfo = animator.GetCurrentAnimatorStateInfo(0);
-                bool isLand = animatorStateInfo.IsName("LandOnGround");
-                if (isLand) {
-                    if (animatorStateInfo.normalizedTime >= 1.0) {
-                        state.down = false;
-                        //进入站立状态
-                        state.standing = true;
-                        canStandTime = 8f + Random.value * 2f;
-                        animator.CrossFade("IdleOnGround2", 0.2f);
-                    }
-                }
-                return;
-            }
-        }
-
-        TreeAreaRecorder.AreaInfo targetAreaInfo;
-        bool needCheckFlyDown = false;
-        bool willStayOnTree = false;
-        void UpdateBehavior() {
-            if (state.flyStaying) {
-                canFlyStayTime -= Time.deltaTime;
-                if (canFlyStayTime <= 0) {
-                    state.flyStaying = false;
-                }
-                return;
-            }
-
-            if (state.standing) {
-                canStandTime -= Time.deltaTime;
-                if (canStandTime <= 0) {
-                    CancelStand();
-                }
-                return;
-            }
-
-            if (state.landing) return;
-
-            if (state.flying && !state.down && !state.up) {
-                if (needCheckFlyDown) {
-                    float downNeedTime = currentHeight / downSpeed;
-                    float keyDistance = this.agent.speed * downNeedTime; //触发下降的水平距离阈值
-                    Vector3 myP = this.transform.position;
-                    Vector3 desP = this.agent.destination;
-                    desP.y = myP.y;
-                    float distance = Vector3.Distance(myP, desP);
-                    if (distance < keyDistance) {
-                        needCheckFlyDown = false;
-                        if (Random.value < 0.5 && tryOccupyTree()) {
-                            state.down = true;
-                        } else {
-                            willStayOnTree = true;
-                        }
-                    }
-                }
-            }
-            
-            if (moving) return;
-
-            if (willStayOnTree) {
-                willStayOnTree = false;
-                state.flyStaying = true;
-                canFlyStayTime = 9f + Random.value * 1f;
-                return;
-            }
-            
-            AnimatorStateInfo animatorStateInfo = animator.GetCurrentAnimatorStateInfo(0);
-            if (animatorStateInfo.IsName("Yeji Fly Form Tree") || animatorStateInfo.IsName("Yeji Idle On Tree 01") || animatorStateInfo.IsName("Yeji Land On Tree")) {
-                //该动作期间还不能适合执行移动,所以先返回
-                return;
-            }
-
-            //飞向别的树
-            #region 
-                Vector3 myPos = this.transform.position; 
-                TreeAreaRecorder.AreaInfo[] areaInfos = treeAreaRecorder.copyAreaInfos(canFlyTreeCount); 
-                for (int i = 0; i < canFlyTreeCount; i++) {
-                    areaInfos[i].teamCompareValue = areaInfos[i].distanceInHorizontal(myPos);
-                }
-                System.Array.Sort(areaInfos, new ComparerAreaInfosByDistance());
-                TreeAreaRecorder.AreaInfo areaInfo = areaInfos[Random.Range(1, canFlyTreeCount)];
-                Vector3 newPos = YejiHuntGameMode.CalculateNewPosByTreePos(animalsBaseT, flyPlaneHeight, areaInfo);
-                SetDestination(newPos);
-                targetAreaInfo = areaInfo;
-                needCheckFlyDown = true;
-            #endregion
-        }
-
-        class ComparerAreaInfosByDistance : IComparer {
-            public int Compare(object x, object y) {
-                TreeAreaRecorder.AreaInfo a = (TreeAreaRecorder.AreaInfo)x;
-                TreeAreaRecorder.AreaInfo b = (TreeAreaRecorder.AreaInfo)y;
-                if (a.teamCompareValue - b.teamCompareValue > 0) return 1;
-                if (a.teamCompareValue - b.teamCompareValue < 0) return -1;
-                else return 0;
-            }
-        }
-        void CancelStand() {
-            if (!state.standing) return;
-            state.standing = false;
-            state.up = true;
-            animator.CrossFade("FlyFromGround", 0.1f);
-            tryReleaseOccupyTree();
-        }
-
-        void CancelFlyStay() {
-            if (!state.flyStaying) return;
-            canFlyStayTime = 0;
-        }
-
-        bool tryOccupyTree() {
-            if (targetAreaInfo == null) return false;
-            if (targetAreaInfo.occupy != null) return false;
-            else {
-                targetAreaInfo.occupy = this;
-                return true;
-            }
-        }
-
-        void tryReleaseOccupyTree() {
-            if (targetAreaInfo != null && targetAreaInfo.occupy != null && targetAreaInfo.occupy.Equals(this)) {
-                targetAreaInfo.occupy = null;
-            }
-        }
-
-        static float[] preFlyHeights;
-        static object[] preFlyHeightCools;
-        public static void InitPreHeights() {
-            preFlyHeights = new float[]{1.3f, 2.3f};
-            preFlyHeightCools = new object[]{null, null};
-        }
-        public static float RandomOnePreHeight(Yeji yeji) {
-            for (int i = 0; i < preFlyHeightCools.Length; i++) {
-                if (preFlyHeightCools[i] == null) {
-                    preFlyHeightCools[i] = yeji;
-                    return preFlyHeights[i];
-                }
-            }
-            return 2.5f;
-        }
-        public static void ReleasePreHeight(Yeji yeji) {
-            for (int i = 0; i < preFlyHeightCools.Length; i++) {
-                if (yeji.Equals(preFlyHeightCools[i])) {
-                    preFlyHeightCools[i] = null;
-                }
-            }
-        }
-    #endregion
-
-    //状态
-    [System.Serializable]
-    public class State {
-        public bool standing = false;
-        [SerializeField] private bool _flyStaying = false;
-        public bool flyStaying {
-            get { return _flyStaying; }
-            set {
-                _flyStaying = value;
-                animal.animator.SetBool("flyStaying", value);
-            }
-        }
-        [SerializeField] private bool _dead;
-        public bool dead {
-            get { return _dead; }
-            set {
-                _dead = value;
-                animal.animator.SetBool("dead", value);
-            }
-        }
-        [SerializeField] private bool _down;
-        public bool down {
-            get { return _down; }
-            set {
-                _down = value;
-                animal.animator.SetBool("down", value);
-            }
-        }
-        [SerializeField] private bool _landing;
-        public bool landing {
-            get { return _landing; }
-            set {
-                _landing = value;
-                animal.animator.SetBool("landing", value);
-            }
-        }
-        [SerializeField] private bool _up;
-        public bool up {
-            get { return _up; }
-            set {
-                _up = value;
-                animal.animator.SetBool("up", value);
-            }
-        }
-        [SerializeField] private bool _flying;
-        public bool flying {
-            get { return _flying; }
-            set {
-                _flying = value;
-                animal.animator.SetBool("flying", value);
-            }
-        }
-        public Yeji animal;
-    }
-    [SerializeField] public State state;
-
-    //委托
-    public System.Action<Yeji> onDie;
-
-    #region 联机附加部分
-        public static HashSet<Yeji> yejiSet = new HashSet<Yeji>();
-        public OnlineHandler onlineHandler = new OnlineHandler();
-        public class OnlineHandler {
-            Yeji animal;
-            public int uid;
-            public bool isMirror;
-            public int mirrorState = 0;
-            public float animatroSpeed = 1;
-            public YejiSyncData outputSyncData;
-            public void InitOnAwake(Yeji animal) {
-                this.animal = animal;
-                if (isMirror) {
-                    GameObject.Destroy(this.animal.agent);
-                    this.animal.animator.SetLayerWeight(1, 1);
-                }
-            }
-            public void Update() {
-                if (isMirror) {
-                    if (inputSyncData == null) return;
-                    if (!hasUpdateBySyncData) {
-                        this.animal.transform.position = syncPosition;
-                        this.animal.transform.rotation = syncRotation;
-                        hasUpdateBySyncData = true;
-                    } else {
-                        this.animal.transform.position = Vector3.Lerp(this.animal.transform.position, syncPosition, Time.deltaTime * 15);
-                        this.animal.transform.rotation = Quaternion.Lerp(this.animal.transform.rotation, syncRotation, Time.deltaTime * 15);     
-                    }
-                    this.animal.animator.SetInteger("mirrorState", mirrorState);
-                    this.animal.animator.speed = animatroSpeed;
-                    if (inputSyncData.ii != injuredID) {
-                        injuredID = inputSyncData.ii;
-                        AudioMgr.ins.PlayAnimalEffect("bird_injured", AudioMgr.GetAudioSource(this.animal.gameObject));
-                    }
-                    return;
-                }
-                if (GlobalData.pkMatchType == PKMatchType.OnlinePK) {
-                    if (outputSyncData == null) outputSyncData = new YejiSyncData();
-                    int curStateHash = this.animal.animator.GetCurrentAnimatorStateInfo(0).fullPathHash;
-                    mirrorState = System.Array.IndexOf(stateHashList, curStateHash);
-                    animatroSpeed = this.animal.animator.speed;
-                    outputSyncData.SetData(this.animal);
-                }
-            }
-            private YejiSyncData _inputSyncData;
-            public YejiSyncData inputSyncData {
-                get {
-                    return _inputSyncData;
-                }
-                set {
-                    _inputSyncData = value;
-                    uid = value.id;
-                    syncRotation.x = value.rx;
-                    syncRotation.y = value.ry;
-                    syncRotation.z = value.rz;
-                    syncRotation.w = value.rw;
-                    syncPosition.x = value.px;
-                    syncPosition.y = value.py;
-                    syncPosition.z = value.pz;
-                    mirrorState = value.ms;
-                    animatroSpeed = value.asp;
-                }
-            }
-            private Quaternion syncRotation;
-            private Vector3 syncPosition;
-            private bool hasUpdateBySyncData = false;
-            public bool isInvalid = false;  //外部运算用的
-            public string onHitData = null;
-            public bool onDoNextShootWillDestroy = false;
-            public int injuredID = 0;
-            private int[] stateHashList = {
-                Animator.StringToHash("Base Layer.Fly"),
-                Animator.StringToHash("Base Layer.FlyUp"),
-                Animator.StringToHash("Base Layer.FlyFromGround"),
-                Animator.StringToHash("Base Layer.FlyDown"),
-                Animator.StringToHash("Base Layer.LandOnGround"),
-                Animator.StringToHash("Base Layer.IdleOnGround2"),
-                Animator.StringToHash("Base Layer.Yeji Idle On Tree 01"),
-                Animator.StringToHash("Base Layer.Yeji Land On Tree"),
-                Animator.StringToHash("Base Layer.Yeji Fly Form Tree"),
-                Animator.StringToHash("Base Layer.DeadOnSky"),
-                Animator.StringToHash("Base Layer.DeadOnGround")
-            };
-        }
-    #endregion
-
-    public override int GetOnlineID() {
-        return onlineHandler.uid;
-    }
-}

BIN
备用资源/Fonts/SDF/TTC/msyh.ttc


BIN
备用资源/Fonts/SDF/TTC/msyhbd.ttc


BIN
备用资源/Fonts/SDF/TTC/msyhl.ttc