瀏覽代碼

添加RTC 和 相关UI素材

DGJ 1 年之前
父節點
當前提交
90a18951ee
共有 100 個文件被更改,包括 16578 次插入21 次删除
  1. 33 9
      Assets/FrameWork/Login/Scripts/LoginManager.cs
  2. 9 8
      Assets/FrameWork/Login/Scripts/Window/WindowConfig.cs
  3. 13 2
      Assets/FrameWork/ProjectManager/Main.prefab
  4. 8 0
      Assets/FrameWork/ProjectManager/RTC.meta
  5. 8 0
      Assets/FrameWork/ProjectManager/RTC/RoomMain.meta
  6. 5814 0
      Assets/FrameWork/ProjectManager/RTC/RoomMain/RoomMain.prefab
  7. 7 0
      Assets/FrameWork/ProjectManager/RTC/RoomMain/RoomMain.prefab.meta
  8. 13 0
      Assets/FrameWork/ProjectManager/RTC/远程协助.prefab
  9. 0 0
      Assets/FrameWork/ProjectManager/RTC/远程协助.prefab.meta
  10. 5 0
      Assets/FrameWork/ProjectManager/Scripts/Main/ProjectMainWindow.cs
  11. 8 0
      Assets/FrameWork/ProjectManager/Scripts/Project/RTC.meta
  12. 18 0
      Assets/FrameWork/ProjectManager/Scripts/Project/RTC/ProjectRrmoteAssWindow.cs
  13. 11 0
      Assets/FrameWork/ProjectManager/Scripts/Project/RTC/ProjectRrmoteAssWindow.cs.meta
  14. 8 0
      Assets/FrameWork/ProjectManager/Scripts/Project/RTC/RoomMain.meta
  15. 116 0
      Assets/FrameWork/ProjectManager/Scripts/Project/RTC/RoomMain/GHZRoomMain.cs
  16. 11 0
      Assets/FrameWork/ProjectManager/Scripts/Project/RTC/RoomMain/GHZRoomMain.cs.meta
  17. 1 1
      Assets/FrameWork/SaoMiao.prefab
  18. 986 0
      Assets/FrameWork/Scenes/EdustryRTCTest.unity
  19. 7 0
      Assets/FrameWork/Scenes/EdustryRTCTest.unity.meta
  20. 5 1
      Assets/FrameWork/Windows.asset
  21. 8 0
      Assets/RTC.meta
  22. 8 0
      Assets/RTC/Paroxe.meta
  23. 5 0
      Assets/RTC/Paroxe/PDFRenderer.meta
  24. 5 0
      Assets/RTC/Paroxe/PDFRenderer/API.meta
  25. 5 0
      Assets/RTC/Paroxe/PDFRenderer/API/Action.meta
  26. 72 0
      Assets/RTC/Paroxe/PDFRenderer/API/Action/IPDFDeviceActionHandler.cs
  27. 8 0
      Assets/RTC/Paroxe/PDFRenderer/API/Action/IPDFDeviceActionHandler.cs.meta
  28. 174 0
      Assets/RTC/Paroxe/PDFRenderer/API/Action/PDFAction.cs
  29. 8 0
      Assets/RTC/Paroxe/PDFRenderer/API/Action/PDFAction.cs.meta
  30. 107 0
      Assets/RTC/Paroxe/PDFRenderer/API/Action/PDFActionHandlerHelper.cs
  31. 8 0
      Assets/RTC/Paroxe/PDFRenderer/API/Action/PDFActionHandlerHelper.cs.meta
  32. 112 0
      Assets/RTC/Paroxe/PDFRenderer/API/Action/PDFDest.cs
  33. 8 0
      Assets/RTC/Paroxe/PDFRenderer/API/Action/PDFDest.cs.meta
  34. 89 0
      Assets/RTC/Paroxe/PDFRenderer/API/Action/PDFLink.cs
  35. 8 0
      Assets/RTC/Paroxe/PDFRenderer/API/Action/PDFLink.cs.meta
  36. 47 0
      Assets/RTC/Paroxe/PDFRenderer/API/IPDFDevice.cs
  37. 8 0
      Assets/RTC/Paroxe/PDFRenderer/API/IPDFDevice.cs.meta
  38. 26 0
      Assets/RTC/Paroxe/PDFRenderer/API/PDFAsset.cs
  39. 8 0
      Assets/RTC/Paroxe/PDFRenderer/API/PDFAsset.cs.meta
  40. 175 0
      Assets/RTC/Paroxe/PDFRenderer/API/PDFBookmark.cs
  41. 8 0
      Assets/RTC/Paroxe/PDFRenderer/API/PDFBookmark.cs.meta
  42. 398 0
      Assets/RTC/Paroxe/PDFRenderer/API/PDFDocument.cs
  43. 8 0
      Assets/RTC/Paroxe/PDFRenderer/API/PDFDocument.cs.meta
  44. 278 0
      Assets/RTC/Paroxe/PDFRenderer/API/PDFLibrary.cs
  45. 10 0
      Assets/RTC/Paroxe/PDFRenderer/API/PDFLibrary.cs.meta
  46. 360 0
      Assets/RTC/Paroxe/PDFRenderer/API/PDFPage.cs
  47. 8 0
      Assets/RTC/Paroxe/PDFRenderer/API/PDFPage.cs.meta
  48. 2784 0
      Assets/RTC/Paroxe/PDFRenderer/API/PDFViewer.cs
  49. 8 0
      Assets/RTC/Paroxe/PDFRenderer/API/PDFViewer.cs.meta
  50. 116 0
      Assets/RTC/Paroxe/PDFRenderer/API/PDFWebRequest.cs
  51. 11 0
      Assets/RTC/Paroxe/PDFRenderer/API/PDFWebRequest.cs.meta
  52. 5 0
      Assets/RTC/Paroxe/PDFRenderer/API/Rendering.meta
  53. 13 0
      Assets/RTC/Paroxe/PDFRenderer/API/Rendering/IPDFColoredRectListProvider.cs
  54. 8 0
      Assets/RTC/Paroxe/PDFRenderer/API/Rendering/IPDFColoredRectListProvider.cs.meta
  55. 21 0
      Assets/RTC/Paroxe/PDFRenderer/API/Rendering/PDFColoredRect.cs
  56. 8 0
      Assets/RTC/Paroxe/PDFRenderer/API/Rendering/PDFColoredRect.cs.meta
  57. 865 0
      Assets/RTC/Paroxe/PDFRenderer/API/Rendering/PDFRenderer.cs
  58. 8 0
      Assets/RTC/Paroxe/PDFRenderer/API/Rendering/PDFRenderer.cs.meta
  59. 5 0
      Assets/RTC/Paroxe/PDFRenderer/API/Text.meta
  60. 186 0
      Assets/RTC/Paroxe/PDFRenderer/API/Text/PDFProgressiveSearch.cs
  61. 8 0
      Assets/RTC/Paroxe/PDFRenderer/API/Text/PDFProgressiveSearch.cs.meta
  62. 137 0
      Assets/RTC/Paroxe/PDFRenderer/API/Text/PDFSearchHandle.cs
  63. 8 0
      Assets/RTC/Paroxe/PDFRenderer/API/Text/PDFSearchHandle.cs.meta
  64. 52 0
      Assets/RTC/Paroxe/PDFRenderer/API/Text/PDFSearchResult.cs
  65. 8 0
      Assets/RTC/Paroxe/PDFRenderer/API/Text/PDFSearchResult.cs.meta
  66. 253 0
      Assets/RTC/Paroxe/PDFRenderer/API/Text/PDFTextPage.cs
  67. 8 0
      Assets/RTC/Paroxe/PDFRenderer/API/Text/PDFTextPage.cs.meta
  68. 9 0
      Assets/RTC/Paroxe/PDFRenderer/API/WebGL.meta
  69. 47 0
      Assets/RTC/Paroxe/PDFRenderer/API/WebGL/IPDFJS_Promise.cs
  70. 12 0
      Assets/RTC/Paroxe/PDFRenderer/API/WebGL/IPDFJS_Promise.cs.meta
  71. 135 0
      Assets/RTC/Paroxe/PDFRenderer/API/WebGL/PDFJS_Library.cs
  72. 12 0
      Assets/RTC/Paroxe/PDFRenderer/API/WebGL/PDFJS_Library.cs.meta
  73. 90 0
      Assets/RTC/Paroxe/PDFRenderer/API/WebGL/PDFJS_Promise.cs
  74. 12 0
      Assets/RTC/Paroxe/PDFRenderer/API/WebGL/PDFJS_Promise.cs.meta
  75. 二進制
      Assets/RTC/Paroxe/PDFRenderer/ApiDocumentation.chm
  76. 4 0
      Assets/RTC/Paroxe/PDFRenderer/ApiDocumentation.chm.meta
  77. 二進制
      Assets/RTC/Paroxe/PDFRenderer/Documentation.pdf
  78. 8 0
      Assets/RTC/Paroxe/PDFRenderer/Documentation.pdf.meta
  79. 5 0
      Assets/RTC/Paroxe/PDFRenderer/Examples.meta
  80. 190 0
      Assets/RTC/Paroxe/PDFRenderer/Examples/API_Usage.unity
  81. 6 0
      Assets/RTC/Paroxe/PDFRenderer/Examples/API_Usage.unity.meta
  82. 9 0
      Assets/RTC/Paroxe/PDFRenderer/Examples/Assets.meta
  83. 二進制
      Assets/RTC/Paroxe/PDFRenderer/Examples/Assets/NextButton.png
  84. 91 0
      Assets/RTC/Paroxe/PDFRenderer/Examples/Assets/NextButton.png.meta
  85. 157 0
      Assets/RTC/Paroxe/PDFRenderer/Examples/Assets/PDFPlaneMaterial.mat
  86. 6 0
      Assets/RTC/Paroxe/PDFRenderer/Examples/Assets/PDFPlaneMaterial.mat.meta
  87. 二進制
      Assets/RTC/Paroxe/PDFRenderer/Examples/Assets/Previous.png
  88. 91 0
      Assets/RTC/Paroxe/PDFRenderer/Examples/Assets/Previous.png.meta
  89. 13 0
      Assets/RTC/Paroxe/PDFRenderer/Examples/Assets/pdf-sample.asset
  90. 6 0
      Assets/RTC/Paroxe/PDFRenderer/Examples/Assets/pdf-sample.asset.meta
  91. 二進制
      Assets/RTC/Paroxe/PDFRenderer/Examples/Assets/pdf-sample.pdf
  92. 6 0
      Assets/RTC/Paroxe/PDFRenderer/Examples/Assets/pdf-sample.pdf.meta
  93. 390 0
      Assets/RTC/Paroxe/PDFRenderer/Examples/PDFDocument_Render.unity
  94. 6 0
      Assets/RTC/Paroxe/PDFRenderer/Examples/PDFDocument_Render.unity.meta
  95. 615 0
      Assets/RTC/Paroxe/PDFRenderer/Examples/PDFViewer_API_Usage.unity
  96. 6 0
      Assets/RTC/Paroxe/PDFRenderer/Examples/PDFViewer_API_Usage.unity.meta
  97. 483 0
      Assets/RTC/Paroxe/PDFRenderer/Examples/PDFViewer_Asset.unity
  98. 6 0
      Assets/RTC/Paroxe/PDFRenderer/Examples/PDFViewer_Asset.unity.meta
  99. 605 0
      Assets/RTC/Paroxe/PDFRenderer/Examples/PDFViewer_Bytes.unity
  100. 6 0
      Assets/RTC/Paroxe/PDFRenderer/Examples/PDFViewer_Bytes.unity.meta

+ 33 - 9
Assets/FrameWork/Login/Scripts/LoginManager.cs

@@ -1,10 +1,12 @@
+using LitJson;
+using Newtonsoft.Json.Linq;
 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 public class LoginManager : MonoSingleton<LoginManager>
 {
-    //Õ˺ÅÁбí
+    //账�列表
     [HideInInspector]
     public GameObject bigLoginItem;
     [HideInInspector]
@@ -16,7 +18,7 @@ public class LoginManager : MonoSingleton<LoginManager>
     [HideInInspector]
     public List<GameObject> smalllistItem = new List<GameObject>();
 
-    //³£×¤Áбí
+    //常驻列表
     [HideInInspector]
     public GameObject bigOftenUseLoginItem;
     [HideInInspector]
@@ -53,8 +55,11 @@ public class LoginManager : MonoSingleton<LoginManager>
         {
             if (LoginPassWordManager.Instance.tmpField.text.Length > 4)
             {
-                WindowsManager.Instance.show(WindowConfig.windowType.ProjectMain);
-                WindowsManager.Instance.show(WindowConfig.windowType.Top, false);
+             
+                JsonData data = new JsonData();
+                data["account"] = "13910723157";
+                data["password"] = "1";
+                HttpTool.Instance.PostLogin("/cmcc-endustry/v1/user/login", data.ToJson(), LoginCallBack);
             }
             else
             {
@@ -63,7 +68,7 @@ public class LoginManager : MonoSingleton<LoginManager>
         }
         else
         {
-            WindowsManager.Instance.show(WindowConfig.windowType.Tip2, false, "ÇëÑ¡ÔñÕ˺Å");
+            WindowsManager.Instance.show(WindowConfig.windowType.Tip2, false, "请选择账�");
         }
     }
 
@@ -73,10 +78,10 @@ public class LoginManager : MonoSingleton<LoginManager>
         LoginDataManager.Instance.GetOftenUseLoginData((List<AccountData> adata) => {
             GameObject smallitem;
             GameObject bigitem;
-            //´´½¨bigLoginItem
+            //创建bigLoginItem
             bigitem = GameObject.Instantiate(bigOftenUseLoginItem, OftenUseitemRoot.transform);
             OftenUsebiglistItem.Add(bigitem);
-            //´´½¨smallLoginItem
+            //创建smallLoginItem
             for (int j = 3; j >=0; j--)
             {
                 if(adata.Count>j)
@@ -100,12 +105,12 @@ public class LoginManager : MonoSingleton<LoginManager>
         LoginDataManager.Instance.GetLoginData((List<AccountData> adata) => {
             GameObject smallitem;
             GameObject bigitem;
-            //´´½¨bigLoginItem
+            //创建bigLoginItem
             for (int i = 0; i < (adata.Count / 10 + 1); i++)
             {
                 bigitem = GameObject.Instantiate(bigLoginItem, itemRoot.transform);
                 biglistItem.Add(bigitem);
-                //´´½¨smallLoginItem
+                //创建smallLoginItem
                 for (int j = i; j < i + 10; j++)
                 {
                     if (adata.Count > j)
@@ -126,6 +131,25 @@ public class LoginManager : MonoSingleton<LoginManager>
 
     }
 
+    public void LoginCallBack(string msg)
+    {
+        Debug.Log(msg);
+        JObject obj = JObject.Parse(msg);
+
+        if (obj["code"].ToString() == "200")
+        {
+            string token = obj["data"]["token"].ToString();
+            login.UserInfo.Instance.Token = token;
+            WindowsManager.Instance.show(WindowConfig.windowType.ProjectMain);
+            WindowsManager.Instance.show(WindowConfig.windowType.Top, false);
+
+        }
+        else
+        {
+            WindowsManager.Instance.show(WindowConfig.windowType.Tip2, false, obj["code"].ToString());
+        }
+    }
+
     public void removeAll()
     {
 

+ 9 - 8
Assets/FrameWork/Login/Scripts/Window/WindowConfig.cs

@@ -24,14 +24,15 @@ public class WindowConfig : ScriptableObject
 
     public enum windowType
     {
-        Login = 100001, // 怬
-        Project = 100002, // 씀-        XunJian = 200001, // Ѳ¼ì
-        XunJianLB = 201001, // Ѳ¼ì
-        XunJianStart = 201002, // Ѳ¼ì
-        ProjectMain = 200002, // Ö÷Ò³
-        RTC = 200003, // Ô¶³ÌЭÖú
-        YinDao = 200004, // Òýµ¼
+        Login = 100001, // 登录
+        Project = 100002, // 项目
+        XunJian = 200001, // 巡检
+        XunJianLB = 201001, // 巡检
+        XunJianStart = 201002, // 巡检
+        ProjectMain = 200002, // 主页
+        RTC = 200003, // 远程�助
+        RoomMain = 203001, // 远程�助房间
+        YinDao = 200004, // 引导
         PeiXun = 200005, // 
         Error = 900001, // 
         Tip = 800001, // 

+ 13 - 2
Assets/FrameWork/ProjectManager/Main.prefab

@@ -481,7 +481,6 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 7941764f499b5f646bf3802a8fcb1d23, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  data: 
 --- !u!1 &4770717242675470141
 GameObject:
   m_ObjectHideFlags: 0
@@ -600,7 +599,19 @@ MonoBehaviour:
   m_TargetGraphic: {fileID: 8368806592250661571}
   m_OnClick:
     m_PersistentCalls:
-      m_Calls: []
+      m_Calls:
+      - m_Target: {fileID: 7528537326900104617}
+        m_TargetAssemblyTypeName: ProjectMainWindow, Assembly-CSharp
+        m_MethodName: showRtc
+        m_Mode: 1
+        m_Arguments:
+          m_ObjectArgument: {fileID: 0}
+          m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
+          m_IntArgument: 0
+          m_FloatArgument: 0
+          m_StringArgument: 
+          m_BoolArgument: 0
+        m_CallState: 2
 --- !u!1 &5891262030794062655
 GameObject:
   m_ObjectHideFlags: 0

+ 8 - 0
Assets/FrameWork/ProjectManager/RTC.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 0f258707d85448f48821911866e27968
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Assets/FrameWork/ProjectManager/RTC/RoomMain.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: eaf52ead3b0672448aa80d9a2e1dea69
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 5814 - 0
Assets/FrameWork/ProjectManager/RTC/RoomMain/RoomMain.prefab

@@ -0,0 +1,5814 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &150573208179219084
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 554393160505103017}
+  - component: {fileID: 5151942336006968442}
+  - component: {fileID: 3749881178602400963}
+  m_Layer: 5
+  m_Name: Activity1
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &554393160505103017
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 150573208179219084}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: -0.000038079914}
+  m_LocalScale: {x: 0.8898, y: 0.8898, z: 0.8898}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 5555135275300840749}
+  m_Father: {fileID: 3682445429945911578}
+  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: 0, y: 0.0000071228}
+  m_SizeDelta: {x: 100, y: 100}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &5151942336006968442
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 150573208179219084}
+  m_CullTransparentMesh: 0
+--- !u!114 &3749881178602400963
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 150573208179219084}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 2100000, guid: c7115638cf585ad40be0a2a96ff7f47c, type: 2}
+  m_Color: {r: 0.4056604, g: 0.4056604, b: 0.4056604, 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: ef406ac2762ab2446b6ad9dce6b1bc8c, 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 &193454805574065484
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1406796740558127404}
+  - component: {fileID: 1101532242553538283}
+  - component: {fileID: 6469609118081733965}
+  - component: {fileID: 966104139193979278}
+  m_Layer: 5
+  m_Name: InviteBtn
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!224 &1406796740558127404
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 193454805574065484}
+  m_LocalRotation: {x: -0, y: -0, z: 0.000000014901161, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 6158831969476587850}
+  m_Father: {fileID: 7857888061044538414}
+  m_RootOrder: 10
+  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: 10, y: -46}
+  m_SizeDelta: {x: 7.2, y: 7.2}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &1101532242553538283
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 193454805574065484}
+  m_CullTransparentMesh: 0
+--- !u!114 &6469609118081733965
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 193454805574065484}
+  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: 8f7865c7db284a54689589e6f34bd105, 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: 0.8
+--- !u!114 &966104139193979278
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 193454805574065484}
+  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: 2
+  m_Colors:
+    m_NormalColor: {r: 0.20000002, g: 0.5294118, b: 0.9490197, a: 1}
+    m_HighlightedColor: {r: 0.2, g: 0.5294118, b: 0.9490196, a: 1}
+    m_PressedColor: {r: 0, g: 0.4391303, b: 1, a: 1}
+    m_SelectedColor: {r: 0.2, g: 0.5294118, b: 0.9490196, a: 1}
+    m_DisabledColor: {r: 1, g: 1, b: 1, a: 1}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 21300000, guid: ca1db5966ba297d44ad168590f34ff71, type: 3}
+    m_PressedSprite: {fileID: 21300000, guid: ca1db5966ba297d44ad168590f34ff71, type: 3}
+    m_SelectedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_SelectedTrigger: Highlighted
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 6469609118081733965}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls:
+      - m_Target: {fileID: 0}
+        m_TargetAssemblyTypeName: 
+        m_MethodName: ClearAllArrow
+        m_Mode: 1
+        m_Arguments:
+          m_ObjectArgument: {fileID: 0}
+          m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
+          m_IntArgument: 0
+          m_FloatArgument: 0
+          m_StringArgument: 
+          m_BoolArgument: 0
+        m_CallState: 2
+--- !u!1 &222528533991425219
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 4708829914406030557}
+  - component: {fileID: 2478911796328090087}
+  - component: {fileID: 6197920053416839387}
+  m_Layer: 5
+  m_Name: Text (Legacy)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &4708829914406030557
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 222528533991425219}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 614089499642198209}
+  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 &2478911796328090087
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 222528533991425219}
+  m_CullTransparentMesh: 1
+--- !u!114 &6197920053416839387
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 222528533991425219}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, 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_text: "\u53D6\u6D88"
+  m_isRightToLeft: 0
+  m_fontAsset: {fileID: 11400000, guid: 87d73d15ccf613c4c8dad6b4c03399f9, type: 2}
+  m_sharedMaterial: {fileID: 1738077909898060448, guid: 87d73d15ccf613c4c8dad6b4c03399f9, type: 2}
+  m_fontSharedMaterials: []
+  m_fontMaterial: {fileID: 0}
+  m_fontMaterials: []
+  m_fontColor32:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontColor: {r: 1, g: 1, b: 1, a: 1}
+  m_enableVertexGradient: 0
+  m_colorMode: 3
+  m_fontColorGradient:
+    topLeft: {r: 1, g: 1, b: 1, a: 1}
+    topRight: {r: 1, g: 1, b: 1, a: 1}
+    bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+    bottomRight: {r: 1, g: 1, b: 1, a: 1}
+  m_fontColorGradientPreset: {fileID: 0}
+  m_spriteAsset: {fileID: 0}
+  m_tintAllSprites: 0
+  m_StyleSheet: {fileID: 0}
+  m_TextStyleHashCode: -1183493901
+  m_overrideHtmlColors: 0
+  m_faceColor:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontSize: 58
+  m_fontSizeBase: 58
+  m_fontWeight: 400
+  m_enableAutoSizing: 0
+  m_fontSizeMin: 0
+  m_fontSizeMax: 0
+  m_fontStyle: 1
+  m_HorizontalAlignment: 2
+  m_VerticalAlignment: 4096
+  m_textAlignment: 65535
+  m_characterSpacing: 0
+  m_wordSpacing: 0
+  m_lineSpacing: 0
+  m_lineSpacingMax: 0
+  m_paragraphSpacing: 0
+  m_charWidthMaxAdj: 0
+  m_enableWordWrapping: 1
+  m_wordWrappingRatios: 0.4
+  m_overflowMode: 0
+  m_linkedTextComponent: {fileID: 0}
+  parentLinkedComponent: {fileID: 0}
+  m_enableKerning: 0
+  m_enableExtraPadding: 0
+  checkPaddingRequired: 0
+  m_isRichText: 1
+  m_parseCtrlCharacters: 1
+  m_isOrthographic: 1
+  m_isCullingEnabled: 0
+  m_horizontalMapping: 0
+  m_verticalMapping: 0
+  m_uvLineOffset: 0
+  m_geometrySortingOrder: 0
+  m_IsTextObjectScaleStatic: 0
+  m_VertexBufferAutoSizeReduction: 0
+  m_useMaxVisibleDescender: 1
+  m_pageToDisplay: 1
+  m_margin: {x: 0, y: 0, z: 0, w: 0}
+  m_isUsingLegacyAnimationComponent: 0
+  m_isVolumetricText: 0
+  m_hasFontAssetChanged: 0
+  m_baseMaterial: {fileID: 0}
+  m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!1 &540821231345036098
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 6871701588483518696}
+  - component: {fileID: 1521107525271076617}
+  - component: {fileID: 4775951239086071364}
+  m_Layer: 5
+  m_Name: Text (Legacy)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &6871701588483518696
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 540821231345036098}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 8816774697585866043}
+  m_RootOrder: 3
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: -0.000034332, y: -284}
+  m_SizeDelta: {x: 1096, y: 184}
+  m_Pivot: {x: 0, y: 1}
+--- !u!222 &1521107525271076617
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 540821231345036098}
+  m_CullTransparentMesh: 1
+--- !u!114 &4775951239086071364
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 540821231345036098}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, 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_text: "\u662F\u5426\u786E\u8BA4\u9000\u51FA\u8FDC\u7A0B\u534F\u52A9\uFF1F"
+  m_isRightToLeft: 0
+  m_fontAsset: {fileID: 11400000, guid: 87d73d15ccf613c4c8dad6b4c03399f9, type: 2}
+  m_sharedMaterial: {fileID: 1738077909898060448, guid: 87d73d15ccf613c4c8dad6b4c03399f9, type: 2}
+  m_fontSharedMaterials: []
+  m_fontMaterial: {fileID: 0}
+  m_fontMaterials: []
+  m_fontColor32:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontColor: {r: 1, g: 1, b: 1, a: 1}
+  m_enableVertexGradient: 0
+  m_colorMode: 3
+  m_fontColorGradient:
+    topLeft: {r: 1, g: 1, b: 1, a: 1}
+    topRight: {r: 1, g: 1, b: 1, a: 1}
+    bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+    bottomRight: {r: 1, g: 1, b: 1, a: 1}
+  m_fontColorGradientPreset: {fileID: 0}
+  m_spriteAsset: {fileID: 0}
+  m_tintAllSprites: 0
+  m_StyleSheet: {fileID: 0}
+  m_TextStyleHashCode: -1183493901
+  m_overrideHtmlColors: 0
+  m_faceColor:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontSize: 60
+  m_fontSizeBase: 60
+  m_fontWeight: 400
+  m_enableAutoSizing: 0
+  m_fontSizeMin: 0
+  m_fontSizeMax: 0
+  m_fontStyle: 1
+  m_HorizontalAlignment: 2
+  m_VerticalAlignment: 512
+  m_textAlignment: 65535
+  m_characterSpacing: 0
+  m_wordSpacing: 0
+  m_lineSpacing: 0
+  m_lineSpacingMax: 0
+  m_paragraphSpacing: 0
+  m_charWidthMaxAdj: 0
+  m_enableWordWrapping: 1
+  m_wordWrappingRatios: 0.4
+  m_overflowMode: 0
+  m_linkedTextComponent: {fileID: 0}
+  parentLinkedComponent: {fileID: 0}
+  m_enableKerning: 0
+  m_enableExtraPadding: 0
+  checkPaddingRequired: 0
+  m_isRichText: 1
+  m_parseCtrlCharacters: 1
+  m_isOrthographic: 1
+  m_isCullingEnabled: 0
+  m_horizontalMapping: 0
+  m_verticalMapping: 0
+  m_uvLineOffset: 0
+  m_geometrySortingOrder: 0
+  m_IsTextObjectScaleStatic: 0
+  m_VertexBufferAutoSizeReduction: 0
+  m_useMaxVisibleDescender: 1
+  m_pageToDisplay: 1
+  m_margin: {x: 0, y: 0, z: 0, w: 0}
+  m_isUsingLegacyAnimationComponent: 0
+  m_isVolumetricText: 0
+  m_hasFontAssetChanged: 0
+  m_baseMaterial: {fileID: 0}
+  m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!1 &590390410233721522
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 3744461151207278967}
+  - component: {fileID: 4405824195963162278}
+  - component: {fileID: 2143340727513758057}
+  - component: {fileID: 8548793808645145521}
+  m_Layer: 5
+  m_Name: Yes_Btn
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &3744461151207278967
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 590390410233721522}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 1001904384933576621}
+  m_Father: {fileID: 8816774697585866043}
+  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: 221, y: -245}
+  m_SizeDelta: {x: 372, y: 144}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &4405824195963162278
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 590390410233721522}
+  m_CullTransparentMesh: 1
+--- !u!114 &2143340727513758057
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 590390410233721522}
+  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: cf47030174cb1b548aaeafd16253cbb2, 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 &8548793808645145521
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 590390410233721522}
+  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: 2143340727513758057}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls:
+      - m_Target: {fileID: 4663003568023040221}
+        m_TargetAssemblyTypeName: UnityEngine.GameObject, UnityEngine
+        m_MethodName: SetActive
+        m_Mode: 6
+        m_Arguments:
+          m_ObjectArgument: {fileID: 0}
+          m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
+          m_IntArgument: 0
+          m_FloatArgument: 0
+          m_StringArgument: 
+          m_BoolArgument: 0
+        m_CallState: 2
+      - m_Target: {fileID: 0}
+        m_TargetAssemblyTypeName: RoomMain, Assembly-CSharp
+        m_MethodName: CloseRoom
+        m_Mode: 1
+        m_Arguments:
+          m_ObjectArgument: {fileID: 0}
+          m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
+          m_IntArgument: 0
+          m_FloatArgument: 0
+          m_StringArgument: 
+          m_BoolArgument: 0
+        m_CallState: 2
+      - m_Target: {fileID: 0}
+        m_TargetAssemblyTypeName: LiveRTCRoomMain, Assembly-CSharp
+        m_MethodName: LeaveRoom
+        m_Mode: 1
+        m_Arguments:
+          m_ObjectArgument: {fileID: 0}
+          m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
+          m_IntArgument: 0
+          m_FloatArgument: 0
+          m_StringArgument: 
+          m_BoolArgument: 0
+        m_CallState: 2
+--- !u!1 &789187114638624038
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 5407553282484549738}
+  - component: {fileID: 2448489604042351024}
+  - component: {fileID: 159510749579598948}
+  m_Layer: 5
+  m_Name: "\u8BED\u97F3_\u56FE\u6807"
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!224 &5407553282484549738
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 789187114638624038}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 0.93, y: 0.93, z: 0.93}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 3501090156147248509}
+  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: 0, y: 0}
+  m_SizeDelta: {x: 7.2, y: 7.2}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &2448489604042351024
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 789187114638624038}
+  m_CullTransparentMesh: 0
+--- !u!114 &159510749579598948
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 789187114638624038}
+  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: e3b9bce004c69cd42ac3592aaf78e3d8, 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: 0.8
+--- !u!1 &1071769743969464030
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 7857888061044538414}
+  - component: {fileID: 2240354011384519286}
+  - component: {fileID: 2252384848075113745}
+  - component: {fileID: 2599776977383175219}
+  m_Layer: 5
+  m_Name: Canvas
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &7857888061044538414
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1071769743969464030}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0.748}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 3337596331077495272}
+  - {fileID: 6609765733589004249}
+  - {fileID: 4429729479151617543}
+  - {fileID: 2114016506540638749}
+  - {fileID: 4804081970052662109}
+  - {fileID: 8478226001653242841}
+  - {fileID: 8478226002239542108}
+  - {fileID: 8478226002286805264}
+  - {fileID: 8478226002231208760}
+  - {fileID: 3501090156147248509}
+  - {fileID: 1406796740558127404}
+  - {fileID: 8478226003427446842}
+  - {fileID: 8478226002582940428}
+  - {fileID: 8478226003714894572}
+  - {fileID: 2932518516909226258}
+  - {fileID: 2286559404340142839}
+  - {fileID: 3682445429945911578}
+  - {fileID: 1732674548431504526}
+  - {fileID: 8816774697585866043}
+  m_Father: {fileID: 8478226002013285417}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0.04809998, y: -0.1004}
+  m_SizeDelta: {x: 994, y: 313}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!223 &2240354011384519286
+Canvas:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1071769743969464030}
+  m_Enabled: 1
+  serializedVersion: 3
+  m_RenderMode: 2
+  m_Camera: {fileID: 0}
+  m_PlaneDistance: 100
+  m_PixelPerfect: 0
+  m_ReceivesEvents: 1
+  m_OverrideSorting: 0
+  m_OverridePixelPerfect: 0
+  m_SortingBucketNormalizedSize: 0
+  m_AdditionalShaderChannelsFlag: 25
+  m_SortingLayerID: 0
+  m_SortingOrder: 0
+  m_TargetDisplay: 0
+--- !u!114 &2252384848075113745
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1071769743969464030}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_UiScaleMode: 0
+  m_ReferencePixelsPerUnit: 100
+  m_ScaleFactor: 1
+  m_ReferenceResolution: {x: 800, y: 600}
+  m_ScreenMatchMode: 0
+  m_MatchWidthOrHeight: 0
+  m_PhysicalUnit: 3
+  m_FallbackScreenDPI: 96
+  m_DefaultSpriteDPI: 96
+  m_DynamicPixelsPerUnit: 1
+  m_PresetInfoIsWorld: 1
+--- !u!114 &2599776977383175219
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1071769743969464030}
+  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!1 &1393860169871039140
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2932518516909226258}
+  - component: {fileID: 1320347556997054017}
+  - component: {fileID: 6585547547477672607}
+  m_Layer: 5
+  m_Name: "\u623F\u95F4\u53F7\u7801Text"
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!224 &2932518516909226258
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1393860169871039140}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: -0.003700018}
+  m_LocalScale: {x: 0.047500003, y: 0.095000006, z: 0.00018999999}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 7857888061044538414}
+  m_RootOrder: 14
+  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: 12.9751005, y: 69.79991}
+  m_SizeDelta: {x: 2401.91, y: 110}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &1320347556997054017
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1393860169871039140}
+  m_CullTransparentMesh: 0
+--- !u!114 &6585547547477672607
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1393860169871039140}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, 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_text: "\u7528\u6237\u5C0F\u767D\u521B\u5EFA\u7684\u623F\u95F4 "
+  m_isRightToLeft: 0
+  m_fontAsset: {fileID: 11400000, guid: 53b37c1f568195149b410dacded90c09, type: 2}
+  m_sharedMaterial: {fileID: 1738077909898060448, guid: 53b37c1f568195149b410dacded90c09, type: 2}
+  m_fontSharedMaterials: []
+  m_fontMaterial: {fileID: 0}
+  m_fontMaterials: []
+  m_fontColor32:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontColor: {r: 1, g: 1, b: 1, a: 1}
+  m_enableVertexGradient: 0
+  m_colorMode: 3
+  m_fontColorGradient:
+    topLeft: {r: 1, g: 1, b: 1, a: 1}
+    topRight: {r: 1, g: 1, b: 1, a: 1}
+    bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+    bottomRight: {r: 1, g: 1, b: 1, a: 1}
+  m_fontColorGradientPreset: {fileID: 0}
+  m_spriteAsset: {fileID: 0}
+  m_tintAllSprites: 0
+  m_StyleSheet: {fileID: 0}
+  m_TextStyleHashCode: 0
+  m_overrideHtmlColors: 0
+  m_faceColor:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontSize: 54
+  m_fontSizeBase: 54
+  m_fontWeight: 400
+  m_enableAutoSizing: 0
+  m_fontSizeMin: 0
+  m_fontSizeMax: 0
+  m_fontStyle: 0
+  m_HorizontalAlignment: 2
+  m_VerticalAlignment: 4096
+  m_textAlignment: 65535
+  m_characterSpacing: 0
+  m_wordSpacing: 0
+  m_lineSpacing: 0
+  m_lineSpacingMax: 0
+  m_paragraphSpacing: 0
+  m_charWidthMaxAdj: 0
+  m_enableWordWrapping: 1
+  m_wordWrappingRatios: 0.4
+  m_overflowMode: 0
+  m_linkedTextComponent: {fileID: 0}
+  parentLinkedComponent: {fileID: 0}
+  m_enableKerning: 0
+  m_enableExtraPadding: 0
+  checkPaddingRequired: 0
+  m_isRichText: 1
+  m_parseCtrlCharacters: 1
+  m_isOrthographic: 0
+  m_isCullingEnabled: 0
+  m_horizontalMapping: 0
+  m_verticalMapping: 0
+  m_uvLineOffset: 0
+  m_geometrySortingOrder: 0
+  m_IsTextObjectScaleStatic: 0
+  m_VertexBufferAutoSizeReduction: 0
+  m_useMaxVisibleDescender: 1
+  m_pageToDisplay: 1
+  m_margin: {x: 0, y: 0, z: 0, w: 0}
+  m_isUsingLegacyAnimationComponent: 0
+  m_isVolumetricText: 0
+  m_hasFontAssetChanged: 0
+  m_baseMaterial: {fileID: 0}
+  m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!1 &1407336494516650233
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2286559404340142839}
+  - component: {fileID: 2282437803256247836}
+  - component: {fileID: 3244391730678013447}
+  m_Layer: 5
+  m_Name: "\u623F\u95F4\u4EBA\u6570Text"
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!224 &2286559404340142839
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1407336494516650233}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: -0.003700018}
+  m_LocalScale: {x: 0.047500003, y: 0.095000006, z: 0.00018999999}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 7857888061044538414}
+  m_RootOrder: 15
+  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: -14.525052, y: 69.79991}
+  m_SizeDelta: {x: 2401.91, y: 110}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &2282437803256247836
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1407336494516650233}
+  m_CullTransparentMesh: 0
+--- !u!114 &3244391730678013447
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1407336494516650233}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, 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_text: "\u7528\u6237\u5C0F\u767D\u521B\u5EFA\u7684\u623F\u95F4 "
+  m_isRightToLeft: 0
+  m_fontAsset: {fileID: 11400000, guid: 53b37c1f568195149b410dacded90c09, type: 2}
+  m_sharedMaterial: {fileID: 1738077909898060448, guid: 53b37c1f568195149b410dacded90c09, type: 2}
+  m_fontSharedMaterials: []
+  m_fontMaterial: {fileID: 0}
+  m_fontMaterials: []
+  m_fontColor32:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontColor: {r: 1, g: 1, b: 1, a: 1}
+  m_enableVertexGradient: 0
+  m_colorMode: 3
+  m_fontColorGradient:
+    topLeft: {r: 1, g: 1, b: 1, a: 1}
+    topRight: {r: 1, g: 1, b: 1, a: 1}
+    bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+    bottomRight: {r: 1, g: 1, b: 1, a: 1}
+  m_fontColorGradientPreset: {fileID: 0}
+  m_spriteAsset: {fileID: 0}
+  m_tintAllSprites: 0
+  m_StyleSheet: {fileID: 0}
+  m_TextStyleHashCode: 0
+  m_overrideHtmlColors: 0
+  m_faceColor:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontSize: 54
+  m_fontSizeBase: 54
+  m_fontWeight: 400
+  m_enableAutoSizing: 0
+  m_fontSizeMin: 0
+  m_fontSizeMax: 0
+  m_fontStyle: 0
+  m_HorizontalAlignment: 4
+  m_VerticalAlignment: 4096
+  m_textAlignment: 65535
+  m_characterSpacing: 0
+  m_wordSpacing: 0
+  m_lineSpacing: 0
+  m_lineSpacingMax: 0
+  m_paragraphSpacing: 0
+  m_charWidthMaxAdj: 0
+  m_enableWordWrapping: 1
+  m_wordWrappingRatios: 0.4
+  m_overflowMode: 0
+  m_linkedTextComponent: {fileID: 0}
+  parentLinkedComponent: {fileID: 0}
+  m_enableKerning: 0
+  m_enableExtraPadding: 0
+  checkPaddingRequired: 0
+  m_isRichText: 1
+  m_parseCtrlCharacters: 1
+  m_isOrthographic: 0
+  m_isCullingEnabled: 0
+  m_horizontalMapping: 0
+  m_verticalMapping: 0
+  m_uvLineOffset: 0
+  m_geometrySortingOrder: 0
+  m_IsTextObjectScaleStatic: 0
+  m_VertexBufferAutoSizeReduction: 0
+  m_useMaxVisibleDescender: 1
+  m_pageToDisplay: 1
+  m_margin: {x: 0, y: 0, z: 0, w: 0}
+  m_isUsingLegacyAnimationComponent: 0
+  m_isVolumetricText: 0
+  m_hasFontAssetChanged: 0
+  m_baseMaterial: {fileID: 0}
+  m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!1 &1626200957500360177
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2947265446875459299}
+  - component: {fileID: 6353037926984209021}
+  - component: {fileID: 7697785850657183852}
+  m_Layer: 5
+  m_Name: Mask
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &2947265446875459299
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1626200957500360177}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 327}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 8816774697585866043}
+  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: -95.05997, y: 89.11897}
+  m_SizeDelta: {x: 2376.5063, y: 617.8921}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &6353037926984209021
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1626200957500360177}
+  m_CullTransparentMesh: 1
+--- !u!114 &7697785850657183852
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1626200957500360177}
+  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: 0}
+  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: a92a2460a203e27418ff89a0b033285c, 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 &1681596064988785125
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 3682445429945911578}
+  - component: {fileID: 2092626656543957247}
+  - component: {fileID: 3407171727532489705}
+  - component: {fileID: 3663314358885929719}
+  - component: {fileID: 1763595884126896018}
+  m_Layer: 5
+  m_Name: ShouqiBtn
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!224 &3682445429945911578
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1681596064988785125}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: -0.008000016}
+  m_LocalScale: {x: 0.0625, y: 0.125, z: 0.00025}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 554393160505103017}
+  m_Father: {fileID: 7857888061044538414}
+  m_RootOrder: 16
+  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: 50.475006, y: 70.70018}
+  m_SizeDelta: {x: 100, y: 100}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &2092626656543957247
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1681596064988785125}
+  m_CullTransparentMesh: 0
+--- !u!114 &3407171727532489705
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1681596064988785125}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 2100000, guid: c7115638cf585ad40be0a2a96ff7f47c, type: 2}
+  m_Color: {r: 0.18039216, g: 0.18431373, b: 0.18431373, 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: ef406ac2762ab2446b6ad9dce6b1bc8c, 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!65 &3663314358885929719
+BoxCollider:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1681596064988785125}
+  m_Material: {fileID: 0}
+  m_IsTrigger: 0
+  m_Enabled: 1
+  serializedVersion: 2
+  m_Size: {x: 100, y: 100, z: 10}
+  m_Center: {x: 0, y: 0, z: 0}
+--- !u!114 &1763595884126896018
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1681596064988785125}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: b3ba789618d29764280b4afcd4513b22, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  scaleType: 0
+  duration: 0.3
+  scaleRatio: 0.2
+  PositionAnimation: 0
+  forwardRatio: 0.05
+  onClick:
+    m_PersistentCalls:
+      m_Calls: []
+  onEnter:
+    m_PersistentCalls:
+      m_Calls: []
+  onDown:
+    m_PersistentCalls:
+      m_Calls: []
+  onUp:
+    m_PersistentCalls:
+      m_Calls: []
+  onExit:
+    m_PersistentCalls:
+      m_Calls: []
+  initScale: {x: 0, y: 0, z: 0}
+  initPosition: {x: 0, y: 0, z: 0}
+--- !u!1 &2756752511997900854
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 8759080894094388475}
+  - component: {fileID: 2735196741340739391}
+  - component: {fileID: 3210722081177337896}
+  m_Layer: 5
+  m_Name: Text (TMP) (4)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &8759080894094388475
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2756752511997900854}
+  m_LocalRotation: {x: -0, y: -0, z: 0.000000014901161, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1.5, y: 1.5, z: 1.5}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 8478226002231208760}
+  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: -6.920001}
+  m_SizeDelta: {x: 11.151, y: 4.588}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &2735196741340739391
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2756752511997900854}
+  m_CullTransparentMesh: 1
+--- !u!114 &3210722081177337896
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2756752511997900854}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, 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_text: "\u6444\u50CF\u5934"
+  m_isRightToLeft: 0
+  m_fontAsset: {fileID: 11400000, guid: 87d73d15ccf613c4c8dad6b4c03399f9, type: 2}
+  m_sharedMaterial: {fileID: 1738077909898060448, guid: 87d73d15ccf613c4c8dad6b4c03399f9, type: 2}
+  m_fontSharedMaterials: []
+  m_fontMaterial: {fileID: 0}
+  m_fontMaterials: []
+  m_fontColor32:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontColor: {r: 1, g: 1, b: 1, a: 1}
+  m_enableVertexGradient: 0
+  m_colorMode: 3
+  m_fontColorGradient:
+    topLeft: {r: 1, g: 1, b: 1, a: 1}
+    topRight: {r: 1, g: 1, b: 1, a: 1}
+    bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+    bottomRight: {r: 1, g: 1, b: 1, a: 1}
+  m_fontColorGradientPreset: {fileID: 0}
+  m_spriteAsset: {fileID: 0}
+  m_tintAllSprites: 0
+  m_StyleSheet: {fileID: 0}
+  m_TextStyleHashCode: -1183493901
+  m_overrideHtmlColors: 0
+  m_faceColor:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontSize: 2.5
+  m_fontSizeBase: 2.5
+  m_fontWeight: 400
+  m_enableAutoSizing: 0
+  m_fontSizeMin: 18
+  m_fontSizeMax: 72
+  m_fontStyle: 1
+  m_HorizontalAlignment: 2
+  m_VerticalAlignment: 512
+  m_textAlignment: 65535
+  m_characterSpacing: 0
+  m_wordSpacing: 0
+  m_lineSpacing: 0
+  m_lineSpacingMax: 0
+  m_paragraphSpacing: 0
+  m_charWidthMaxAdj: 0
+  m_enableWordWrapping: 1
+  m_wordWrappingRatios: 0.4
+  m_overflowMode: 0
+  m_linkedTextComponent: {fileID: 0}
+  parentLinkedComponent: {fileID: 0}
+  m_enableKerning: 1
+  m_enableExtraPadding: 0
+  checkPaddingRequired: 0
+  m_isRichText: 1
+  m_parseCtrlCharacters: 1
+  m_isOrthographic: 1
+  m_isCullingEnabled: 0
+  m_horizontalMapping: 0
+  m_verticalMapping: 0
+  m_uvLineOffset: 0
+  m_geometrySortingOrder: 0
+  m_IsTextObjectScaleStatic: 0
+  m_VertexBufferAutoSizeReduction: 0
+  m_useMaxVisibleDescender: 1
+  m_pageToDisplay: 1
+  m_margin: {x: 0, y: -0.08230292, z: 0, w: 0}
+  m_isUsingLegacyAnimationComponent: 0
+  m_isVolumetricText: 0
+  m_hasFontAssetChanged: 0
+  m_baseMaterial: {fileID: 0}
+  m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!1 &2875035256726257914
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 4429729479151617543}
+  - component: {fileID: 3321878733281829244}
+  - component: {fileID: 7771351869394837305}
+  m_Layer: 5
+  m_Name: HideBtn
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!224 &4429729479151617543
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2875035256726257914}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 663577093989806724}
+  m_Father: {fileID: 7857888061044538414}
+  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: 90, y: 57}
+  m_SizeDelta: {x: 20, y: 20}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &3321878733281829244
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2875035256726257914}
+  m_CullTransparentMesh: 1
+--- !u!114 &7771351869394837305
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2875035256726257914}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, 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: 21300000, guid: 45952f334976d2647ba6af3e2fb5bb0e, type: 3}
+    m_PressedSprite: {fileID: 0}
+    m_SelectedSprite: {fileID: 21300000, guid: 45952f334976d2647ba6af3e2fb5bb0e, type: 3}
+    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: 371159376032786496}
+  toggleTransition: 1
+  graphic: {fileID: 8664248072805886074}
+  m_Group: {fileID: 0}
+  onValueChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_IsOn: 1
+--- !u!1 &2926362638551263240
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1732674548431504526}
+  - component: {fileID: 2593033287776551473}
+  - component: {fileID: 1764237700414290757}
+  - component: {fileID: 3192518704390998285}
+  - component: {fileID: 2384517970105017894}
+  - component: {fileID: 999705075187897813}
+  m_Layer: 0
+  m_Name: DragBtn
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &1732674548431504526
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2926362638551263240}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: -0.004700005}
+  m_LocalScale: {x: 250, y: 500, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 7857888061044538414}
+  m_RootOrder: 17
+  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.31, y: 49.77}
+  m_SizeDelta: {x: 0.62, y: 0.03}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &2593033287776551473
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2926362638551263240}
+  m_CullTransparentMesh: 0
+--- !u!114 &1764237700414290757
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2926362638551263240}
+  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: 0}
+  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!65 &3192518704390998285
+BoxCollider:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2926362638551263240}
+  m_Material: {fileID: 0}
+  m_IsTrigger: 0
+  m_Enabled: 1
+  serializedVersion: 2
+  m_Size: {x: 0.62, y: 0.03, z: 0}
+  m_Center: {x: 0, y: 0, z: 0}
+--- !u!114 &2384517970105017894
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2926362638551263240}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 8f8ba16b6be60154694163e1357f21ab, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  GrabbaleTransform: {fileID: 0}
+--- !u!114 &999705075187897813
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2926362638551263240}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 0dbccc4d71ae5b447bab3997600fbdce, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  PointerEnter:
+    m_PersistentCalls:
+      m_Calls: []
+  PointerDown:
+    m_PersistentCalls:
+      m_Calls: []
+  PointerClick:
+    m_PersistentCalls:
+      m_Calls: []
+  PointerUp:
+    m_PersistentCalls:
+      m_Calls: []
+  PointerExit:
+    m_PersistentCalls:
+      m_Calls: []
+  PointerDrag:
+    m_PersistentCalls:
+      m_Calls: []
+  Target: {fileID: 8478226002013285417}
+  StartAudio: 6
+  EndAudio: 5
+  headRotate: 1
+  oneGameControllerRotate: 1
+  canOneHandRotate: 0
+  canTwoHandRotate: 0
+  canTwoHandScale: 0
+  minScaleRatio: 0.8
+  maxScaleRatio: 3
+  isParentDrag: 0
+--- !u!1 &3012561550097960916
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 3337596331077495272}
+  - component: {fileID: 3844208524300252759}
+  - component: {fileID: 4672584740384770244}
+  m_Layer: 5
+  m_Name: BG (1)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &3337596331077495272
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3012561550097960916}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 7857888061044538414}
+  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: -79.32, y: 4.78}
+  m_SizeDelta: {x: 126.86, y: 66.65}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &3844208524300252759
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3012561550097960916}
+  m_CullTransparentMesh: 1
+--- !u!114 &4672584740384770244
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3012561550097960916}
+  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: fd4fcf3d6145247418fe670dc885e978, 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 &3059329110365069657
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 5380659344206740025}
+  - component: {fileID: 439706849077161521}
+  - component: {fileID: 5354852089848108821}
+  m_Layer: 5
+  m_Name: Text (TMP)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &5380659344206740025
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3059329110365069657}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1.5, y: 1.5, z: 1.5}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 8478226003427446842}
+  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: -6.92}
+  m_SizeDelta: {x: 11.151, y: 4.588}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &439706849077161521
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3059329110365069657}
+  m_CullTransparentMesh: 1
+--- !u!114 &5354852089848108821
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3059329110365069657}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, 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_text: "\u9000\u51FA"
+  m_isRightToLeft: 0
+  m_fontAsset: {fileID: 11400000, guid: 87d73d15ccf613c4c8dad6b4c03399f9, type: 2}
+  m_sharedMaterial: {fileID: 1738077909898060448, guid: 87d73d15ccf613c4c8dad6b4c03399f9, type: 2}
+  m_fontSharedMaterials: []
+  m_fontMaterial: {fileID: 0}
+  m_fontMaterials: []
+  m_fontColor32:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontColor: {r: 1, g: 1, b: 1, a: 1}
+  m_enableVertexGradient: 0
+  m_colorMode: 3
+  m_fontColorGradient:
+    topLeft: {r: 1, g: 1, b: 1, a: 1}
+    topRight: {r: 1, g: 1, b: 1, a: 1}
+    bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+    bottomRight: {r: 1, g: 1, b: 1, a: 1}
+  m_fontColorGradientPreset: {fileID: 0}
+  m_spriteAsset: {fileID: 0}
+  m_tintAllSprites: 0
+  m_StyleSheet: {fileID: 0}
+  m_TextStyleHashCode: -1183493901
+  m_overrideHtmlColors: 0
+  m_faceColor:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontSize: 2.5
+  m_fontSizeBase: 2.5
+  m_fontWeight: 400
+  m_enableAutoSizing: 0
+  m_fontSizeMin: 18
+  m_fontSizeMax: 72
+  m_fontStyle: 1
+  m_HorizontalAlignment: 2
+  m_VerticalAlignment: 512
+  m_textAlignment: 65535
+  m_characterSpacing: 0
+  m_wordSpacing: 0
+  m_lineSpacing: 0
+  m_lineSpacingMax: 0
+  m_paragraphSpacing: 0
+  m_charWidthMaxAdj: 0
+  m_enableWordWrapping: 1
+  m_wordWrappingRatios: 0.4
+  m_overflowMode: 0
+  m_linkedTextComponent: {fileID: 0}
+  parentLinkedComponent: {fileID: 0}
+  m_enableKerning: 1
+  m_enableExtraPadding: 0
+  checkPaddingRequired: 0
+  m_isRichText: 1
+  m_parseCtrlCharacters: 1
+  m_isOrthographic: 1
+  m_isCullingEnabled: 0
+  m_horizontalMapping: 0
+  m_verticalMapping: 0
+  m_uvLineOffset: 0
+  m_geometrySortingOrder: 0
+  m_IsTextObjectScaleStatic: 0
+  m_VertexBufferAutoSizeReduction: 0
+  m_useMaxVisibleDescender: 1
+  m_pageToDisplay: 1
+  m_margin: {x: 0, y: -0.08230292, z: 0, w: 0}
+  m_isUsingLegacyAnimationComponent: 0
+  m_isVolumetricText: 0
+  m_hasFontAssetChanged: 0
+  m_baseMaterial: {fileID: 0}
+  m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!1 &4076328782634629274
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 5738542241347128845}
+  - component: {fileID: 8609541251211367860}
+  - component: {fileID: 3365417676881831928}
+  m_Layer: 5
+  m_Name: BG
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &5738542241347128845
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4076328782634629274}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 8816774697585866043}
+  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: 0, y: 0}
+  m_SizeDelta: {x: 5000, y: 3000}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &8609541251211367860
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4076328782634629274}
+  m_CullTransparentMesh: 1
+--- !u!114 &3365417676881831928
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4076328782634629274}
+  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: 0.41960785}
+  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: 7b2c942005ceabe4f944774cce58c7ce, 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 &4663003568023040221
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 8816774697585866043}
+  - component: {fileID: 8755099502433072454}
+  - component: {fileID: 3932047068650532858}
+  - component: {fileID: 3843689417762849189}
+  m_Layer: 5
+  m_Name: ExitSelectUI
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!224 &8816774697585866043
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4663003568023040221}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: -17.2}
+  m_LocalScale: {x: 0.1, y: 0.1, z: 0.1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 5738542241347128845}
+  - {fileID: 2947265446875459299}
+  - {fileID: 4825582871943162677}
+  - {fileID: 6871701588483518696}
+  - {fileID: 614089499642198209}
+  - {fileID: 3744461151207278967}
+  m_Father: {fileID: 7857888061044538414}
+  m_RootOrder: 18
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0.5}
+  m_AnchorMax: {x: 0, y: 0.5}
+  m_AnchoredPosition: {x: 444, y: 0}
+  m_SizeDelta: {x: 1096, y: 833.0936}
+  m_Pivot: {x: 0, y: 0.5}
+--- !u!114 &8755099502433072454
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4663003568023040221}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 2fafe2cfe61f6974895a912c3755e8f1, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_AllowSwitchOff: 0
+--- !u!222 &3932047068650532858
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4663003568023040221}
+  m_CullTransparentMesh: 1
+--- !u!114 &3843689417762849189
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4663003568023040221}
+  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: 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: 21300000, guid: a92a2460a203e27418ff89a0b033285c, 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 &4674780581160605566
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1001904384933576621}
+  - component: {fileID: 6177725999751042863}
+  - component: {fileID: 2800060675866589609}
+  m_Layer: 5
+  m_Name: Text (Legacy)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &1001904384933576621
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4674780581160605566}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 3744461151207278967}
+  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 &6177725999751042863
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4674780581160605566}
+  m_CullTransparentMesh: 1
+--- !u!114 &2800060675866589609
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4674780581160605566}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, 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_text: "\u786E\u8BA4"
+  m_isRightToLeft: 0
+  m_fontAsset: {fileID: 11400000, guid: 87d73d15ccf613c4c8dad6b4c03399f9, type: 2}
+  m_sharedMaterial: {fileID: 1738077909898060448, guid: 87d73d15ccf613c4c8dad6b4c03399f9, type: 2}
+  m_fontSharedMaterials: []
+  m_fontMaterial: {fileID: 0}
+  m_fontMaterials: []
+  m_fontColor32:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontColor: {r: 1, g: 1, b: 1, a: 1}
+  m_enableVertexGradient: 0
+  m_colorMode: 3
+  m_fontColorGradient:
+    topLeft: {r: 1, g: 1, b: 1, a: 1}
+    topRight: {r: 1, g: 1, b: 1, a: 1}
+    bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+    bottomRight: {r: 1, g: 1, b: 1, a: 1}
+  m_fontColorGradientPreset: {fileID: 0}
+  m_spriteAsset: {fileID: 0}
+  m_tintAllSprites: 0
+  m_StyleSheet: {fileID: 0}
+  m_TextStyleHashCode: -1183493901
+  m_overrideHtmlColors: 0
+  m_faceColor:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontSize: 58
+  m_fontSizeBase: 58
+  m_fontWeight: 400
+  m_enableAutoSizing: 0
+  m_fontSizeMin: 0
+  m_fontSizeMax: 0
+  m_fontStyle: 1
+  m_HorizontalAlignment: 2
+  m_VerticalAlignment: 4096
+  m_textAlignment: 65535
+  m_characterSpacing: 0
+  m_wordSpacing: 0
+  m_lineSpacing: 0
+  m_lineSpacingMax: 0
+  m_paragraphSpacing: 0
+  m_charWidthMaxAdj: 0
+  m_enableWordWrapping: 1
+  m_wordWrappingRatios: 0.4
+  m_overflowMode: 0
+  m_linkedTextComponent: {fileID: 0}
+  parentLinkedComponent: {fileID: 0}
+  m_enableKerning: 0
+  m_enableExtraPadding: 0
+  checkPaddingRequired: 0
+  m_isRichText: 1
+  m_parseCtrlCharacters: 1
+  m_isOrthographic: 1
+  m_isCullingEnabled: 0
+  m_horizontalMapping: 0
+  m_verticalMapping: 0
+  m_uvLineOffset: 0
+  m_geometrySortingOrder: 0
+  m_IsTextObjectScaleStatic: 0
+  m_VertexBufferAutoSizeReduction: 0
+  m_useMaxVisibleDescender: 1
+  m_pageToDisplay: 1
+  m_margin: {x: 0, y: 0, z: 0, w: 0}
+  m_isUsingLegacyAnimationComponent: 0
+  m_isVolumetricText: 0
+  m_hasFontAssetChanged: 0
+  m_baseMaterial: {fileID: 0}
+  m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!1 &5237891582962530101
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 663577093989806724}
+  - component: {fileID: 5339838147035709479}
+  - component: {fileID: 371159376032786496}
+  m_Layer: 5
+  m_Name: Image (1)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &663577093989806724
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5237891582962530101}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 2979118017500543381}
+  m_Father: {fileID: 4429729479151617543}
+  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 &5339838147035709479
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5237891582962530101}
+  m_CullTransparentMesh: 1
+--- !u!114 &371159376032786496
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5237891582962530101}
+  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: c34812c992ede944c9913fad203a4aa8, 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 &5374472902027273454
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 3501090156147248509}
+  - component: {fileID: 137632930188214178}
+  - component: {fileID: 6110044972179412872}
+  - component: {fileID: 679184272757742161}
+  m_Layer: 5
+  m_Name: ClearAllArrow
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &3501090156147248509
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5374472902027273454}
+  m_LocalRotation: {x: -0, y: -0, z: 0.000000014901161, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 5407553282484549738}
+  - {fileID: 1322503692605996889}
+  m_Father: {fileID: 7857888061044538414}
+  m_RootOrder: 9
+  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: -4.5, y: -18}
+  m_SizeDelta: {x: 7.2, y: 7.2}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &137632930188214178
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5374472902027273454}
+  m_CullTransparentMesh: 0
+--- !u!114 &6110044972179412872
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5374472902027273454}
+  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: 5ede1c394e37fbb40bd775c7e14e2fc9, 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: 0.8
+--- !u!114 &679184272757742161
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5374472902027273454}
+  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: 2
+  m_Colors:
+    m_NormalColor: {r: 0.20000002, g: 0.5294118, b: 0.9490197, a: 1}
+    m_HighlightedColor: {r: 0.2, g: 0.5294118, b: 0.9490196, a: 1}
+    m_PressedColor: {r: 0, g: 0.4391303, b: 1, a: 1}
+    m_SelectedColor: {r: 0.2, g: 0.5294118, b: 0.9490196, a: 1}
+    m_DisabledColor: {r: 1, g: 1, b: 1, a: 1}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 21300000, guid: 78a2200f538473240a67c4919e591c3b, type: 3}
+    m_PressedSprite: {fileID: 21300000, guid: 78a2200f538473240a67c4919e591c3b, type: 3}
+    m_SelectedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_SelectedTrigger: Highlighted
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 6110044972179412872}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls:
+      - m_Target: {fileID: 0}
+        m_TargetAssemblyTypeName: 
+        m_MethodName: ClearAllArrow
+        m_Mode: 1
+        m_Arguments:
+          m_ObjectArgument: {fileID: 0}
+          m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
+          m_IntArgument: 0
+          m_FloatArgument: 0
+          m_StringArgument: 
+          m_BoolArgument: 0
+        m_CallState: 2
+      - m_Target: {fileID: 0}
+        m_TargetAssemblyTypeName: LiveRTCRoomMain, Assembly-CSharp
+        m_MethodName: ClearAllArrow
+        m_Mode: 1
+        m_Arguments:
+          m_ObjectArgument: {fileID: 0}
+          m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
+          m_IntArgument: 0
+          m_FloatArgument: 0
+          m_StringArgument: 
+          m_BoolArgument: 0
+        m_CallState: 2
+--- !u!1 &5839953703390739646
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 6609765733589004249}
+  - component: {fileID: 4901143234925741810}
+  - component: {fileID: 7460031373899721154}
+  m_Layer: 5
+  m_Name: BG
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &6609765733589004249
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5839953703390739646}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 7857888061044538414}
+  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: -70, y: -10}
+  m_SizeDelta: {x: 163.28, y: 103.69}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &4901143234925741810
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5839953703390739646}
+  m_CullTransparentMesh: 1
+--- !u!114 &7460031373899721154
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5839953703390739646}
+  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: 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: 21300000, guid: d898f9ecae71aac48b18f85c820f3200, 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 &6333537955467750209
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2069446406366985687}
+  - component: {fileID: 6647258046698446034}
+  - component: {fileID: 4137556149890887508}
+  m_Layer: 5
+  m_Name: Text (TMP) (3)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &2069446406366985687
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6333537955467750209}
+  m_LocalRotation: {x: -0, y: -0, z: 0.000000014901161, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1.5, y: 1.5, z: 1.5}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 8478226002286805264}
+  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: -6.920001}
+  m_SizeDelta: {x: 11.151, y: 4.588}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &6647258046698446034
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6333537955467750209}
+  m_CullTransparentMesh: 1
+--- !u!114 &4137556149890887508
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6333537955467750209}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, 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_text: "\u9759\u97F3"
+  m_isRightToLeft: 0
+  m_fontAsset: {fileID: 11400000, guid: 87d73d15ccf613c4c8dad6b4c03399f9, type: 2}
+  m_sharedMaterial: {fileID: 1738077909898060448, guid: 87d73d15ccf613c4c8dad6b4c03399f9, type: 2}
+  m_fontSharedMaterials: []
+  m_fontMaterial: {fileID: 0}
+  m_fontMaterials: []
+  m_fontColor32:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontColor: {r: 1, g: 1, b: 1, a: 1}
+  m_enableVertexGradient: 0
+  m_colorMode: 3
+  m_fontColorGradient:
+    topLeft: {r: 1, g: 1, b: 1, a: 1}
+    topRight: {r: 1, g: 1, b: 1, a: 1}
+    bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+    bottomRight: {r: 1, g: 1, b: 1, a: 1}
+  m_fontColorGradientPreset: {fileID: 0}
+  m_spriteAsset: {fileID: 0}
+  m_tintAllSprites: 0
+  m_StyleSheet: {fileID: 0}
+  m_TextStyleHashCode: -1183493901
+  m_overrideHtmlColors: 0
+  m_faceColor:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontSize: 2.5
+  m_fontSizeBase: 2.5
+  m_fontWeight: 400
+  m_enableAutoSizing: 0
+  m_fontSizeMin: 18
+  m_fontSizeMax: 72
+  m_fontStyle: 1
+  m_HorizontalAlignment: 2
+  m_VerticalAlignment: 512
+  m_textAlignment: 65535
+  m_characterSpacing: 0
+  m_wordSpacing: 0
+  m_lineSpacing: 0
+  m_lineSpacingMax: 0
+  m_paragraphSpacing: 0
+  m_charWidthMaxAdj: 0
+  m_enableWordWrapping: 1
+  m_wordWrappingRatios: 0.4
+  m_overflowMode: 0
+  m_linkedTextComponent: {fileID: 0}
+  parentLinkedComponent: {fileID: 0}
+  m_enableKerning: 1
+  m_enableExtraPadding: 0
+  checkPaddingRequired: 0
+  m_isRichText: 1
+  m_parseCtrlCharacters: 1
+  m_isOrthographic: 1
+  m_isCullingEnabled: 0
+  m_horizontalMapping: 0
+  m_verticalMapping: 0
+  m_uvLineOffset: 0
+  m_geometrySortingOrder: 0
+  m_IsTextObjectScaleStatic: 0
+  m_VertexBufferAutoSizeReduction: 0
+  m_useMaxVisibleDescender: 1
+  m_pageToDisplay: 1
+  m_margin: {x: 0, y: -0.08230292, z: 0, w: 0}
+  m_isUsingLegacyAnimationComponent: 0
+  m_isVolumetricText: 0
+  m_hasFontAssetChanged: 0
+  m_baseMaterial: {fileID: 0}
+  m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!1 &6612896728598400814
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 5555135275300840749}
+  - component: {fileID: 6515517131070201522}
+  - component: {fileID: 4178603129659357910}
+  m_Layer: 5
+  m_Name: CheckBoxCheck (1)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &5555135275300840749
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6612896728598400814}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: -0.5, y: -8, z: 9.0701}
+  m_LocalScale: {x: 56.116302, y: 28.558998, z: 56.1161}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 554393160505103017}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!33 &6515517131070201522
+MeshFilter:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6612896728598400814}
+  m_Mesh: {fileID: 5060444177187149915, guid: 1520956ca3dec2f4c924877cce1053eb, type: 3}
+--- !u!23 &4178603129659357910
+MeshRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6612896728598400814}
+  m_Enabled: 1
+  m_CastShadows: 0
+  m_ReceiveShadows: 0
+  m_DynamicOccludee: 0
+  m_StaticShadowCaster: 0
+  m_MotionVectors: 1
+  m_LightProbeUsage: 0
+  m_ReflectionProbeUsage: 0
+  m_RayTracingMode: 2
+  m_RayTraceProcedural: 0
+  m_RenderingLayerMask: 4294967295
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 2100000, guid: 923bfab439683cc45ba3e92ef6d4601f, type: 2}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_ReceiveGI: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 0
+  m_SelectedEditorRenderState: 3
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: 0
+  m_SortingLayer: 0
+  m_SortingOrder: 0
+  m_AdditionalVertexStreams: {fileID: 0}
+--- !u!1 &6789431462835138744
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 5910444338821831777}
+  - component: {fileID: 7373809607170863614}
+  m_Layer: 0
+  m_Name: CreateRoom
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &5910444338821831777
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6789431462835138744}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 8478226002013285417}
+  m_RootOrder: 2
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &7373809607170863614
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6789431462835138744}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: d792753345f69ef469339a1329d062a3, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+--- !u!1 &6930987800163122297
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 4804081970052662109}
+  - component: {fileID: 3532576351196252954}
+  - component: {fileID: 7753366920881337321}
+  m_Layer: 5
+  m_Name: RawImage
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!224 &4804081970052662109
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6930987800163122297}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 7857888061044538414}
+  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: -79.32, y: 4.78}
+  m_SizeDelta: {x: 126.86, y: 66.65}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &3532576351196252954
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6930987800163122297}
+  m_CullTransparentMesh: 0
+--- !u!114 &7753366920881337321
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6930987800163122297}
+  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: 0
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 0
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Texture: {fileID: 0}
+  m_UVRect:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 1
+    height: 1
+--- !u!1 &7797570340028716519
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2979118017500543381}
+  - component: {fileID: 4528197553635182129}
+  - component: {fileID: 8664248072805886074}
+  m_Layer: 5
+  m_Name: Image
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!224 &2979118017500543381
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7797570340028716519}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 663577093989806724}
+  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 &4528197553635182129
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7797570340028716519}
+  m_CullTransparentMesh: 1
+--- !u!114 &8664248072805886074
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7797570340028716519}
+  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: 7416d0026c4d26248a5fd85a85becef5, 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 &7846297476907495433
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2114016506540638749}
+  - component: {fileID: 8645878426703812447}
+  - component: {fileID: 5404683472867687330}
+  m_Layer: 5
+  m_Name: Support_Image
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &2114016506540638749
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7846297476907495433}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 0.05, y: 0.05, z: 0.05}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 8380437696832960340}
+  m_Father: {fileID: 7857888061044538414}
+  m_RootOrder: 3
+  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: -99.84997}
+  m_SizeDelta: {x: 2133, y: 306}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &8645878426703812447
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7846297476907495433}
+  m_CullTransparentMesh: 1
+--- !u!114 &5404683472867687330
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7846297476907495433}
+  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: 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: 21300000, guid: 848c14c8f48f210429cb5626089b24b1, 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 &7886800962009297539
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 8380437696832960340}
+  - component: {fileID: 1166829356750927999}
+  - component: {fileID: 7041400728663358993}
+  m_Layer: 5
+  m_Name: Text (Legacy)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &8380437696832960340
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7886800962009297539}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 2114016506540638749}
+  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: 0, y: 0}
+  m_SizeDelta: {x: 1137.9, y: 162.75}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &1166829356750927999
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7886800962009297539}
+  m_CullTransparentMesh: 1
+--- !u!114 &7041400728663358993
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7886800962009297539}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, 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_text: "\u8FDC\u7A0B\u534F\u52A9"
+  m_isRightToLeft: 0
+  m_fontAsset: {fileID: 11400000, guid: 87d73d15ccf613c4c8dad6b4c03399f9, type: 2}
+  m_sharedMaterial: {fileID: 1738077909898060448, guid: 87d73d15ccf613c4c8dad6b4c03399f9, type: 2}
+  m_fontSharedMaterials: []
+  m_fontMaterial: {fileID: 0}
+  m_fontMaterials: []
+  m_fontColor32:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontColor: {r: 1, g: 1, b: 1, a: 1}
+  m_enableVertexGradient: 0
+  m_colorMode: 3
+  m_fontColorGradient:
+    topLeft: {r: 1, g: 1, b: 1, a: 1}
+    topRight: {r: 1, g: 1, b: 1, a: 1}
+    bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+    bottomRight: {r: 1, g: 1, b: 1, a: 1}
+  m_fontColorGradientPreset: {fileID: 0}
+  m_spriteAsset: {fileID: 0}
+  m_tintAllSprites: 0
+  m_StyleSheet: {fileID: 0}
+  m_TextStyleHashCode: -1183493901
+  m_overrideHtmlColors: 0
+  m_faceColor:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontSize: 136
+  m_fontSizeBase: 136
+  m_fontWeight: 400
+  m_enableAutoSizing: 0
+  m_fontSizeMin: 18
+  m_fontSizeMax: 72
+  m_fontStyle: 1
+  m_HorizontalAlignment: 2
+  m_VerticalAlignment: 4096
+  m_textAlignment: 65535
+  m_characterSpacing: 0
+  m_wordSpacing: 0
+  m_lineSpacing: 0
+  m_lineSpacingMax: 0
+  m_paragraphSpacing: 0
+  m_charWidthMaxAdj: 0
+  m_enableWordWrapping: 1
+  m_wordWrappingRatios: 0.4
+  m_overflowMode: 0
+  m_linkedTextComponent: {fileID: 0}
+  parentLinkedComponent: {fileID: 0}
+  m_enableKerning: 1
+  m_enableExtraPadding: 0
+  checkPaddingRequired: 0
+  m_isRichText: 1
+  m_parseCtrlCharacters: 1
+  m_isOrthographic: 1
+  m_isCullingEnabled: 0
+  m_horizontalMapping: 0
+  m_verticalMapping: 0
+  m_uvLineOffset: 0
+  m_geometrySortingOrder: 0
+  m_IsTextObjectScaleStatic: 0
+  m_VertexBufferAutoSizeReduction: 0
+  m_useMaxVisibleDescender: 1
+  m_pageToDisplay: 1
+  m_margin: {x: 0, y: 0, z: 0, w: 0}
+  m_isUsingLegacyAnimationComponent: 0
+  m_isVolumetricText: 0
+  m_hasFontAssetChanged: 0
+  m_baseMaterial: {fileID: 0}
+  m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!1 &7985060054078987647
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1322503692605996889}
+  - component: {fileID: 9201669757717530246}
+  - component: {fileID: 5734569117066627176}
+  m_Layer: 5
+  m_Name: Text (TMP) (2)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &1322503692605996889
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7985060054078987647}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 3501090156147248509}
+  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: -6.920001}
+  m_SizeDelta: {x: 11.151, y: 4.588}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &9201669757717530246
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7985060054078987647}
+  m_CullTransparentMesh: 1
+--- !u!114 &5734569117066627176
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7985060054078987647}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, 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_text: "\u6E05\u9664\u6807\u8BB0"
+  m_isRightToLeft: 0
+  m_fontAsset: {fileID: 11400000, guid: 87d73d15ccf613c4c8dad6b4c03399f9, type: 2}
+  m_sharedMaterial: {fileID: 1738077909898060448, guid: 87d73d15ccf613c4c8dad6b4c03399f9, type: 2}
+  m_fontSharedMaterials: []
+  m_fontMaterial: {fileID: 0}
+  m_fontMaterials: []
+  m_fontColor32:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontColor: {r: 1, g: 1, b: 1, a: 1}
+  m_enableVertexGradient: 0
+  m_colorMode: 3
+  m_fontColorGradient:
+    topLeft: {r: 1, g: 1, b: 1, a: 1}
+    topRight: {r: 1, g: 1, b: 1, a: 1}
+    bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+    bottomRight: {r: 1, g: 1, b: 1, a: 1}
+  m_fontColorGradientPreset: {fileID: 0}
+  m_spriteAsset: {fileID: 0}
+  m_tintAllSprites: 0
+  m_StyleSheet: {fileID: 0}
+  m_TextStyleHashCode: -1183493901
+  m_overrideHtmlColors: 0
+  m_faceColor:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontSize: 2
+  m_fontSizeBase: 2
+  m_fontWeight: 400
+  m_enableAutoSizing: 0
+  m_fontSizeMin: 18
+  m_fontSizeMax: 72
+  m_fontStyle: 1
+  m_HorizontalAlignment: 2
+  m_VerticalAlignment: 512
+  m_textAlignment: 65535
+  m_characterSpacing: 0
+  m_wordSpacing: 0
+  m_lineSpacing: 0
+  m_lineSpacingMax: 0
+  m_paragraphSpacing: 0
+  m_charWidthMaxAdj: 0
+  m_enableWordWrapping: 1
+  m_wordWrappingRatios: 0.4
+  m_overflowMode: 0
+  m_linkedTextComponent: {fileID: 0}
+  parentLinkedComponent: {fileID: 0}
+  m_enableKerning: 1
+  m_enableExtraPadding: 0
+  checkPaddingRequired: 0
+  m_isRichText: 1
+  m_parseCtrlCharacters: 1
+  m_isOrthographic: 1
+  m_isCullingEnabled: 0
+  m_horizontalMapping: 0
+  m_verticalMapping: 0
+  m_uvLineOffset: 0
+  m_geometrySortingOrder: 0
+  m_IsTextObjectScaleStatic: 0
+  m_VertexBufferAutoSizeReduction: 0
+  m_useMaxVisibleDescender: 1
+  m_pageToDisplay: 1
+  m_margin: {x: 0, y: -0.08230292, z: 0, w: 0}
+  m_isUsingLegacyAnimationComponent: 0
+  m_isVolumetricText: 0
+  m_hasFontAssetChanged: 0
+  m_baseMaterial: {fileID: 0}
+  m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!1 &8109387582583087602
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 6158831969476587850}
+  - component: {fileID: 6202511169100707716}
+  - component: {fileID: 4263198847409471491}
+  m_Layer: 5
+  m_Name: Text (TMP) (1)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &6158831969476587850
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8109387582583087602}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1.5, y: 1.5, z: 1.5}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 1406796740558127404}
+  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: 0, y: -6.9200006}
+  m_SizeDelta: {x: 11.151, y: 4.588}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &6202511169100707716
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8109387582583087602}
+  m_CullTransparentMesh: 1
+--- !u!114 &4263198847409471491
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8109387582583087602}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, 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_text: "\u9080\u8BF7"
+  m_isRightToLeft: 0
+  m_fontAsset: {fileID: 11400000, guid: 87d73d15ccf613c4c8dad6b4c03399f9, type: 2}
+  m_sharedMaterial: {fileID: 1738077909898060448, guid: 87d73d15ccf613c4c8dad6b4c03399f9, type: 2}
+  m_fontSharedMaterials: []
+  m_fontMaterial: {fileID: 0}
+  m_fontMaterials: []
+  m_fontColor32:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontColor: {r: 1, g: 1, b: 1, a: 1}
+  m_enableVertexGradient: 0
+  m_colorMode: 3
+  m_fontColorGradient:
+    topLeft: {r: 1, g: 1, b: 1, a: 1}
+    topRight: {r: 1, g: 1, b: 1, a: 1}
+    bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+    bottomRight: {r: 1, g: 1, b: 1, a: 1}
+  m_fontColorGradientPreset: {fileID: 0}
+  m_spriteAsset: {fileID: 0}
+  m_tintAllSprites: 0
+  m_StyleSheet: {fileID: 0}
+  m_TextStyleHashCode: -1183493901
+  m_overrideHtmlColors: 0
+  m_faceColor:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontSize: 2.5
+  m_fontSizeBase: 2.5
+  m_fontWeight: 400
+  m_enableAutoSizing: 0
+  m_fontSizeMin: 18
+  m_fontSizeMax: 72
+  m_fontStyle: 1
+  m_HorizontalAlignment: 2
+  m_VerticalAlignment: 512
+  m_textAlignment: 65535
+  m_characterSpacing: 0
+  m_wordSpacing: 0
+  m_lineSpacing: 0
+  m_lineSpacingMax: 0
+  m_paragraphSpacing: 0
+  m_charWidthMaxAdj: 0
+  m_enableWordWrapping: 1
+  m_wordWrappingRatios: 0.4
+  m_overflowMode: 0
+  m_linkedTextComponent: {fileID: 0}
+  parentLinkedComponent: {fileID: 0}
+  m_enableKerning: 1
+  m_enableExtraPadding: 0
+  checkPaddingRequired: 0
+  m_isRichText: 1
+  m_parseCtrlCharacters: 1
+  m_isOrthographic: 1
+  m_isCullingEnabled: 0
+  m_horizontalMapping: 0
+  m_verticalMapping: 0
+  m_uvLineOffset: 0
+  m_geometrySortingOrder: 0
+  m_IsTextObjectScaleStatic: 0
+  m_VertexBufferAutoSizeReduction: 0
+  m_useMaxVisibleDescender: 1
+  m_pageToDisplay: 1
+  m_margin: {x: 0, y: -0.08230292, z: 0, w: 0}
+  m_isUsingLegacyAnimationComponent: 0
+  m_isVolumetricText: 0
+  m_hasFontAssetChanged: 0
+  m_baseMaterial: {fileID: 0}
+  m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!1 &8478226001653242822
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 8478226001653242841}
+  - component: {fileID: 8478226001653242842}
+  - component: {fileID: 8478226001653242843}
+  m_Layer: 0
+  m_Name: RoomBigView
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!4 &8478226001653242841
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226001653242822}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: -79.31, y: 4.78, z: 0}
+  m_LocalScale: {x: 127.57151, y: 66.0968, z: 0}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 7857888061044538414}
+  m_RootOrder: 5
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!33 &8478226001653242842
+MeshFilter:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226001653242822}
+  m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!23 &8478226001653242843
+MeshRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226001653242822}
+  m_Enabled: 1
+  m_CastShadows: 1
+  m_ReceiveShadows: 1
+  m_DynamicOccludee: 1
+  m_StaticShadowCaster: 0
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RayTracingMode: 2
+  m_RayTraceProcedural: 0
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 2100000, guid: e820661e1a5117c4fa82c24f1310f4bf, type: 2}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_ReceiveGI: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 1
+  m_SelectedEditorRenderState: 3
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: 0
+  m_SortingLayer: 0
+  m_SortingOrder: 0
+  m_AdditionalVertexStreams: {fileID: 0}
+--- !u!1 &8478226001788262175
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 8478226001788262174}
+  - component: {fileID: 8478226001788262163}
+  - component: {fileID: 8478226001788262160}
+  m_Layer: 5
+  m_Name: "\u5173\u95ED"
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!224 &8478226001788262174
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226001788262175}
+  m_LocalRotation: {x: -0, y: -0, z: 0.46064693, w: 0.88758355}
+  m_LocalPosition: {x: 0, y: 0, z: -17.100073}
+  m_LocalScale: {x: 0.93, y: 0.93, z: 0.93}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 8478226002028546424}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 54.858}
+  m_AnchorMin: {x: 0.5, y: 0.5}
+  m_AnchorMax: {x: 0.5, y: 0.5}
+  m_AnchoredPosition: {x: 0, y: 1}
+  m_SizeDelta: {x: 55.57, y: 69.46}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &8478226001788262163
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226001788262175}
+  m_CullTransparentMesh: 0
+--- !u!114 &8478226001788262160
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226001788262175}
+  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: 545301cf5023c4143b754a96ff369d25, 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: 0.8
+--- !u!1 &8478226001886907205
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 8478226001886907204}
+  - component: {fileID: 8478226001886907225}
+  - component: {fileID: 8478226001886907206}
+  m_Layer: 5
+  m_Name: "\u89C6\u9891_\u56FE\u6807"
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &8478226001886907204
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226001886907205}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: -17.2}
+  m_LocalScale: {x: 0.93, y: 0.93, z: 0.93}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 8478226002582940428}
+  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: 1.6, y: -1}
+  m_SizeDelta: {x: 50, y: 50}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &8478226001886907225
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226001886907205}
+  m_CullTransparentMesh: 0
+--- !u!114 &8478226001886907206
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226001886907205}
+  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: ba4ad2c202b17e24787b9e7f10c5505d, 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: 0.8
+--- !u!1 &8478226002013285462
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 8478226002013285417}
+  - component: {fileID: 8478226002013285465}
+  m_Layer: 0
+  m_Name: RoomMain
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &8478226002013285417
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002013285462}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 8478226002446254508}
+  - {fileID: 7857888061044538414}
+  - {fileID: 5910444338821831777}
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &8478226002013285465
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002013285462}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: a6b6d7302d9ff0a469ae11ac47a45997, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  audioOpenBtn: {fileID: 8478226003041023806}
+  audioCloseBtn: {fileID: 8478226002028546427}
+  videoOpenBtn: {fileID: 8478226002949949930}
+  videoCloseBtn: {fileID: 8478226002971310093}
+  clearAllArrowBtn: {fileID: 679184272757742161}
+  hangupBtn: {fileID: 8478226003427446845}
+  exitSelectUI: {fileID: 4663003568023040221}
+  noExitBtn: {fileID: 3241715526160996275}
+  yesExitBtn: {fileID: 8548793808645145521}
+  videoRawImage: {fileID: 7753366920881337321}
+--- !u!1 &8478226002028546425
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 8478226002028546424}
+  - component: {fileID: 8478226002028546429}
+  - component: {fileID: 8478226002028546426}
+  - component: {fileID: 8478226002028546427}
+  m_Layer: 5
+  m_Name: AudioClose
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &8478226002028546424
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002028546425}
+  m_LocalRotation: {x: -0, y: -0, z: 0.000000014901161, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 8478226001788262174}
+  - {fileID: 8478226003529248998}
+  m_Father: {fileID: 8478226002286805264}
+  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: 7.2, y: 7.2}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &8478226002028546429
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002028546425}
+  m_CullTransparentMesh: 0
+--- !u!114 &8478226002028546426
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002028546425}
+  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: 85b19f194f61b3048bef96ee3b644268, 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: 0.8
+--- !u!114 &8478226002028546427
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002028546425}
+  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: 2
+  m_Colors:
+    m_NormalColor: {r: 0.2, g: 0.5294118, b: 0.9490196, a: 0}
+    m_HighlightedColor: {r: 0.2, g: 0.5294118, b: 0.9490196, a: 0}
+    m_PressedColor: {r: 0.124955505, g: 0.50149405, b: 0.9811321, a: 0}
+    m_SelectedColor: {r: 0.2, g: 0.5294118, b: 0.9490196, a: 0}
+    m_DisabledColor: {r: 1, g: 1, b: 1, a: 0}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 21300000, guid: 53648ad90692c0b46b010e576ff82e29, type: 3}
+    m_PressedSprite: {fileID: 21300000, guid: 53648ad90692c0b46b010e576ff82e29, type: 3}
+    m_SelectedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_SelectedTrigger: Highlighted
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 8478226002028546426}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls: []
+--- !u!1 &8478226002231208761
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 8478226002231208760}
+  m_Layer: 0
+  m_Name: Video
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &8478226002231208760
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002231208761}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: -4.5, y: 2, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 8478226002949949931}
+  - {fileID: 8478226002971310090}
+  - {fileID: 8759080894094388475}
+  m_Father: {fileID: 7857888061044538414}
+  m_RootOrder: 8
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &8478226002239542109
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 8478226002239542108}
+  - component: {fileID: 8478226002239542110}
+  - component: {fileID: 3884261254842522006}
+  m_Layer: 5
+  m_Name: "\u623F\u95F4\u540D\u79F0Text"
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!224 &8478226002239542108
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002239542109}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: -0.003700018}
+  m_LocalScale: {x: 0.047500003, y: 0.095000006, z: 0.00018999999}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 7857888061044538414}
+  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: 3.7249956, y: 69.79991}
+  m_SizeDelta: {x: 2401.91, y: 110}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &8478226002239542110
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002239542109}
+  m_CullTransparentMesh: 0
+--- !u!114 &3884261254842522006
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002239542109}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, 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_text: "\u7528\u6237\u5C0F\u767D\u521B\u5EFA\u7684\u623F\u95F4"
+  m_isRightToLeft: 0
+  m_fontAsset: {fileID: 11400000, guid: 53b37c1f568195149b410dacded90c09, type: 2}
+  m_sharedMaterial: {fileID: 1738077909898060448, guid: 53b37c1f568195149b410dacded90c09, type: 2}
+  m_fontSharedMaterials: []
+  m_fontMaterial: {fileID: 0}
+  m_fontMaterials: []
+  m_fontColor32:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontColor: {r: 1, g: 1, b: 1, a: 1}
+  m_enableVertexGradient: 0
+  m_colorMode: 3
+  m_fontColorGradient:
+    topLeft: {r: 1, g: 1, b: 1, a: 1}
+    topRight: {r: 1, g: 1, b: 1, a: 1}
+    bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+    bottomRight: {r: 1, g: 1, b: 1, a: 1}
+  m_fontColorGradientPreset: {fileID: 0}
+  m_spriteAsset: {fileID: 0}
+  m_tintAllSprites: 0
+  m_StyleSheet: {fileID: 0}
+  m_TextStyleHashCode: 0
+  m_overrideHtmlColors: 0
+  m_faceColor:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontSize: 54
+  m_fontSizeBase: 54
+  m_fontWeight: 400
+  m_enableAutoSizing: 0
+  m_fontSizeMin: 0
+  m_fontSizeMax: 0
+  m_fontStyle: 0
+  m_HorizontalAlignment: 1
+  m_VerticalAlignment: 4096
+  m_textAlignment: 65535
+  m_characterSpacing: 0
+  m_wordSpacing: 0
+  m_lineSpacing: 0
+  m_lineSpacingMax: 0
+  m_paragraphSpacing: 0
+  m_charWidthMaxAdj: 0
+  m_enableWordWrapping: 1
+  m_wordWrappingRatios: 0.4
+  m_overflowMode: 0
+  m_linkedTextComponent: {fileID: 0}
+  parentLinkedComponent: {fileID: 0}
+  m_enableKerning: 0
+  m_enableExtraPadding: 0
+  checkPaddingRequired: 0
+  m_isRichText: 1
+  m_parseCtrlCharacters: 1
+  m_isOrthographic: 0
+  m_isCullingEnabled: 0
+  m_horizontalMapping: 0
+  m_verticalMapping: 0
+  m_uvLineOffset: 0
+  m_geometrySortingOrder: 0
+  m_IsTextObjectScaleStatic: 0
+  m_VertexBufferAutoSizeReduction: 0
+  m_useMaxVisibleDescender: 1
+  m_pageToDisplay: 1
+  m_margin: {x: 0, y: 0, z: 0, w: 0}
+  m_isUsingLegacyAnimationComponent: 0
+  m_isVolumetricText: 0
+  m_hasFontAssetChanged: 0
+  m_baseMaterial: {fileID: 0}
+  m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!1 &8478226002286805265
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 8478226002286805264}
+  m_Layer: 0
+  m_Name: Audio
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &8478226002286805264
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002286805265}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: -4.5, y: 22, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 8478226003041023807}
+  - {fileID: 8478226002028546424}
+  - {fileID: 2069446406366985687}
+  m_Father: {fileID: 7857888061044538414}
+  m_RootOrder: 7
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &8478226002386406451
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 8478226002386406450}
+  - component: {fileID: 8478226002386406455}
+  - component: {fileID: 8478226002386406452}
+  m_Layer: 5
+  m_Name: "\u89C6\u9891_\u56FE\u6807"
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!224 &8478226002386406450
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002386406451}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: -17.2}
+  m_LocalScale: {x: 0.93, y: 0.93, z: 0.93}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 8478226002949949931}
+  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: 7.2, y: 7.2}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &8478226002386406455
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002386406451}
+  m_CullTransparentMesh: 0
+--- !u!114 &8478226002386406452
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002386406451}
+  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: 81c59afb4d55c704fb203384ff273c8d, 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: 0.8
+--- !u!1 &8478226002418199901
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 8478226002418199900}
+  - component: {fileID: 8478226002418199889}
+  - component: {fileID: 8478226002418199902}
+  m_Layer: 5
+  m_Name: "\u89C6\u9891_\u56FE\u6807"
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &8478226002418199900
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002418199901}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: -17.2}
+  m_LocalScale: {x: 0.93, y: 0.93, z: 0.93}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 8478226003714894572}
+  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: 1.6, y: -1}
+  m_SizeDelta: {x: 50, y: 50}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &8478226002418199889
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002418199901}
+  m_CullTransparentMesh: 0
+--- !u!114 &8478226002418199902
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002418199901}
+  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: ba4ad2c202b17e24787b9e7f10c5505d, 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: 0.8
+--- !u!1 &8478226002446254509
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 8478226002446254508}
+  - component: {fileID: 8478226002446254510}
+  - component: {fileID: 8478226002446254511}
+  m_Layer: 5
+  m_Name: BGkuang
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!224 &8478226002446254508
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002446254509}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0.748}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 8478226002013285417}
+  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: 0.045939967, y: -0.09294001}
+  m_SizeDelta: {x: 0.52178, y: 0.35559}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &8478226002446254510
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002446254509}
+  m_CullTransparentMesh: 0
+--- !u!114 &8478226002446254511
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002446254509}
+  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.043137256, g: 0.12941177, b: 0.4392157, 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 &8478226002533603246
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 8478226002533603233}
+  - component: {fileID: 8478226002533603234}
+  - component: {fileID: 8478226002533603235}
+  m_Layer: 5
+  m_Name: "\u8BED\u97F3_\u56FE\u6807"
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!224 &8478226002533603233
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002533603246}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: -17.100073}
+  m_LocalScale: {x: 0.93, y: 0.93, z: 0.93}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 8478226003041023807}
+  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.29999998, y: -0.09997839}
+  m_SizeDelta: {x: 7.2, y: 7.2}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &8478226002533603234
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002533603246}
+  m_CullTransparentMesh: 0
+--- !u!114 &8478226002533603235
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002533603246}
+  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: c1ce5479e7eaa8743a5b965eaae557e1, 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: 0.8
+--- !u!1 &8478226002582940429
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 8478226002582940428}
+  - component: {fileID: 8478226002582940417}
+  - component: {fileID: 8478226002582940430}
+  - component: {fileID: 8478226002582940431}
+  m_Layer: 5
+  m_Name: ChangeViewOpenBtn
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!224 &8478226002582940428
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002582940429}
+  m_LocalRotation: {x: -0, y: -0, z: 0.000000014901161, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: -0.0041000247}
+  m_LocalScale: {x: 0.087500006, y: 0.17500001, z: 0.00035}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 8478226001886907204}
+  m_Father: {fileID: 7857888061044538414}
+  m_RootOrder: 12
+  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: 20.725136, y: -52.262768}
+  m_SizeDelta: {x: 90, y: 90}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &8478226002582940417
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002582940429}
+  m_CullTransparentMesh: 0
+--- !u!114 &8478226002582940430
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002582940429}
+  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.5254902, g: 0.5254902, b: 0.5254902, a: 0.78431374}
+  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: ef406ac2762ab2446b6ad9dce6b1bc8c, 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: 0.8
+--- !u!114 &8478226002582940431
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002582940429}
+  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: 1, g: 1, b: 1, a: 1}
+    m_PressedColor: {r: 1, g: 1, b: 1, a: 1}
+    m_SelectedColor: {r: 1, g: 1, b: 1, 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: Highlighted
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 8478226002582940430}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls:
+      - m_Target: {fileID: 0}
+        m_TargetAssemblyTypeName: 
+        m_MethodName: openEye
+        m_Mode: 1
+        m_Arguments:
+          m_ObjectArgument: {fileID: 0}
+          m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
+          m_IntArgument: 0
+          m_FloatArgument: 0
+          m_StringArgument: 
+          m_BoolArgument: 0
+        m_CallState: 2
+--- !u!1 &8478226002728249678
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 8478226002728249665}
+  - component: {fileID: 8478226002728249666}
+  - component: {fileID: 8478226002728249667}
+  m_Layer: 5
+  m_Name: "\u5173\u95ED"
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!224 &8478226002728249665
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002728249678}
+  m_LocalRotation: {x: -0, y: -0, z: 0.46064693, w: 0.88758355}
+  m_LocalPosition: {x: 0, y: 0, z: -17.100014}
+  m_LocalScale: {x: 0.9437227, y: 0.9437227, z: 0.94372237}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 8478226002949949931}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 54.858}
+  m_AnchorMin: {x: 0.5, y: 0.5}
+  m_AnchorMax: {x: 0.5, y: 0.5}
+  m_AnchoredPosition: {x: 0, y: 1}
+  m_SizeDelta: {x: 7.2, y: 7.2}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &8478226002728249666
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002728249678}
+  m_CullTransparentMesh: 0
+--- !u!114 &8478226002728249667
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002728249678}
+  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: 545301cf5023c4143b754a96ff369d25, 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: 0.8
+--- !u!1 &8478226002769659687
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 8478226002769659686}
+  - component: {fileID: 8478226002769659707}
+  - component: {fileID: 8478226002769659704}
+  m_Layer: 5
+  m_Name: "\u89C6\u9891_\u56FE\u6807"
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!224 &8478226002769659686
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002769659687}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: -17.2}
+  m_LocalScale: {x: 0.93, y: 0.93, z: 0.93}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 8478226002971310090}
+  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: 7.2, y: 7.2}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &8478226002769659707
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002769659687}
+  m_CullTransparentMesh: 0
+--- !u!114 &8478226002769659704
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002769659687}
+  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: b88498c8120375b4f9044251fdb5d4aa, 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: 0.8
+--- !u!1 &8478226002849704882
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 8478226002849704885}
+  - component: {fileID: 8478226002849704886}
+  - component: {fileID: 8478226002849704887}
+  m_Layer: 5
+  m_Name: "\u5173\u95ED"
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!224 &8478226002849704885
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002849704882}
+  m_LocalRotation: {x: -0, y: -0, z: 0.46064693, w: 0.88758355}
+  m_LocalPosition: {x: 0, y: 0, z: -17.100014}
+  m_LocalScale: {x: 0.9437227, y: 0.9437227, z: 0.94372237}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 8478226002971310090}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 54.858}
+  m_AnchorMin: {x: 0.5, y: 0.5}
+  m_AnchorMax: {x: 0.5, y: 0.5}
+  m_AnchoredPosition: {x: 0, y: 1}
+  m_SizeDelta: {x: 7.2, y: 7.2}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &8478226002849704886
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002849704882}
+  m_CullTransparentMesh: 0
+--- !u!114 &8478226002849704887
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002849704882}
+  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: 545301cf5023c4143b754a96ff369d25, 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: 0.8
+--- !u!1 &8478226002949949928
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 8478226002949949931}
+  - component: {fileID: 8478226002949949932}
+  - component: {fileID: 8478226002949949933}
+  - component: {fileID: 8478226002949949930}
+  m_Layer: 5
+  m_Name: VideoOpen
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!224 &8478226002949949931
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002949949928}
+  m_LocalRotation: {x: -0, y: -0, z: 0.000000014901161, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 8478226002728249665}
+  - {fileID: 8478226002386406450}
+  m_Father: {fileID: 8478226002231208760}
+  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: 0, y: 0}
+  m_SizeDelta: {x: 7.2, y: 7.2}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &8478226002949949932
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002949949928}
+  m_CullTransparentMesh: 0
+--- !u!114 &8478226002949949933
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002949949928}
+  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: 7286f242d8c850543bd91ad0e6073d12, 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: 0.8
+--- !u!114 &8478226002949949930
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002949949928}
+  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: 2
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: 1, g: 1, b: 1, a: 1}
+    m_PressedColor: {r: 1, g: 1, b: 1, a: 1}
+    m_SelectedColor: {r: 1, g: 1, b: 1, 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: 21300000, guid: 26631ea51abac78468d868b711925ac9, type: 3}
+    m_PressedSprite: {fileID: 21300000, guid: 26631ea51abac78468d868b711925ac9, type: 3}
+    m_SelectedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_SelectedTrigger: Highlighted
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 8478226002949949933}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls: []
+--- !u!1 &8478226002971310091
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 8478226002971310090}
+  - component: {fileID: 8478226002971310095}
+  - component: {fileID: 8478226002971310092}
+  - component: {fileID: 8478226002971310093}
+  m_Layer: 5
+  m_Name: VideoClose
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &8478226002971310090
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002971310091}
+  m_LocalRotation: {x: -0, y: -0, z: 0.000000014901161, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 8478226002849704885}
+  - {fileID: 8478226002769659686}
+  m_Father: {fileID: 8478226002231208760}
+  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: 7.2, y: 7.2}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &8478226002971310095
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002971310091}
+  m_CullTransparentMesh: 0
+--- !u!114 &8478226002971310092
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002971310091}
+  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: 4a6d67b74adab44448863dd49a0102f9, 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: 0.8
+--- !u!114 &8478226002971310093
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226002971310091}
+  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: 2
+  m_Colors:
+    m_NormalColor: {r: 0.2, g: 0.5294118, b: 0.9490196, a: 1}
+    m_HighlightedColor: {r: 0.2, g: 0.5294118, b: 0.9490196, a: 1}
+    m_PressedColor: {r: 0.126157, g: 0.50631607, b: 0.990566, a: 1}
+    m_SelectedColor: {r: 0.2, g: 0.5294118, b: 0.9490196, a: 1}
+    m_DisabledColor: {r: 1, g: 1, b: 1, a: 1}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 21300000, guid: d83159b93d70f2747bca184c22f9a974, type: 3}
+    m_PressedSprite: {fileID: 21300000, guid: d83159b93d70f2747bca184c22f9a974, type: 3}
+    m_SelectedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_SelectedTrigger: Highlighted
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 8478226002971310092}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls: []
+--- !u!1 &8478226003005069107
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 8478226003005069106}
+  - component: {fileID: 8478226003005069111}
+  - component: {fileID: 8478226003005069108}
+  m_Layer: 5
+  m_Name: "\u5173\u95ED"
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!224 &8478226003005069106
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226003005069107}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 0.93, y: 0.93, z: 0.93}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 8478226003041023807}
+  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: 0, y: 1}
+  m_SizeDelta: {x: 55.57, y: 69.46}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &8478226003005069111
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226003005069107}
+  m_CullTransparentMesh: 0
+--- !u!114 &8478226003005069108
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226003005069107}
+  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: 545301cf5023c4143b754a96ff369d25, 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: 0.8
+--- !u!1 &8478226003041023804
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 8478226003041023807}
+  - component: {fileID: 8478226003041023792}
+  - component: {fileID: 8478226003041023793}
+  - component: {fileID: 8478226003041023806}
+  m_Layer: 5
+  m_Name: AudioOpen
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!224 &8478226003041023807
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226003041023804}
+  m_LocalRotation: {x: -0, y: -0, z: 0.000000014901161, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 8478226003005069106}
+  - {fileID: 8478226002533603233}
+  m_Father: {fileID: 8478226002286805264}
+  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: 0, y: 0}
+  m_SizeDelta: {x: 7.2, y: 7.2}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &8478226003041023792
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226003041023804}
+  m_CullTransparentMesh: 0
+--- !u!114 &8478226003041023793
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226003041023804}
+  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: ab8e5f46657189b448541cdee6a0047d, 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: 0.8
+--- !u!114 &8478226003041023806
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226003041023804}
+  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: 2
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 0}
+    m_HighlightedColor: {r: 1, g: 1, b: 1, a: 0}
+    m_PressedColor: {r: 1, g: 1, b: 1, a: 0}
+    m_SelectedColor: {r: 1, g: 1, b: 1, a: 0}
+    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 21300000, guid: 3328234fbdc8e31429f7ad6c116f09e0, type: 3}
+    m_PressedSprite: {fileID: 21300000, guid: 3328234fbdc8e31429f7ad6c116f09e0, type: 3}
+    m_SelectedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_SelectedTrigger: Highlighted
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 8478226003041023793}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls: []
+--- !u!1 &8478226003427446843
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 8478226003427446842}
+  - component: {fileID: 8478226003427446847}
+  - component: {fileID: 8478226003427446844}
+  - component: {fileID: 8478226003427446845}
+  m_Layer: 5
+  m_Name: HangUp
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &8478226003427446842
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226003427446843}
+  m_LocalRotation: {x: -0, y: -0, z: 0.000000014901161, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 8478226003676903152}
+  - {fileID: 5380659344206740025}
+  m_Father: {fileID: 7857888061044538414}
+  m_RootOrder: 11
+  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: -4.5, y: -36}
+  m_SizeDelta: {x: 7.2, y: 7.2}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &8478226003427446847
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226003427446843}
+  m_CullTransparentMesh: 0
+--- !u!114 &8478226003427446844
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226003427446843}
+  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: 05523bd860eea7a4dbc023ba45588ade, 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: 0.8
+--- !u!114 &8478226003427446845
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226003427446843}
+  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: 2
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: 1, g: 1, b: 1, a: 1}
+    m_PressedColor: {r: 1, g: 1, b: 1, a: 1}
+    m_SelectedColor: {r: 1, g: 1, b: 1, 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: 21300000, guid: dc9e8a4d5dc01b747a6c0b315cb43dc0, type: 3}
+    m_PressedSprite: {fileID: 21300000, guid: dc9e8a4d5dc01b747a6c0b315cb43dc0, type: 3}
+    m_SelectedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_SelectedTrigger: Highlighted
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 8478226003427446844}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls:
+      - m_Target: {fileID: 4663003568023040221}
+        m_TargetAssemblyTypeName: UnityEngine.GameObject, UnityEngine
+        m_MethodName: SetActive
+        m_Mode: 6
+        m_Arguments:
+          m_ObjectArgument: {fileID: 0}
+          m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
+          m_IntArgument: 0
+          m_FloatArgument: 0
+          m_StringArgument: 
+          m_BoolArgument: 1
+        m_CallState: 2
+--- !u!1 &8478226003529248999
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 8478226003529248998}
+  - component: {fileID: 8478226003529249019}
+  - component: {fileID: 8478226003529249016}
+  m_Layer: 5
+  m_Name: "\u8BED\u97F3_\u56FE\u6807"
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!224 &8478226003529248998
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226003529248999}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: -17.100073}
+  m_LocalScale: {x: 0.93, y: 0.93, z: 0.93}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 8478226002028546424}
+  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.29999998, y: -0.09997839}
+  m_SizeDelta: {x: 7.2, y: 7.2}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &8478226003529249019
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226003529248999}
+  m_CullTransparentMesh: 0
+--- !u!114 &8478226003529249016
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226003529248999}
+  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: 160c9103e5fc92243af5847ca4fd6b13, 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: 0.8
+--- !u!1 &8478226003676903153
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 8478226003676903152}
+  - component: {fileID: 8478226003676903157}
+  - component: {fileID: 8478226003676903154}
+  m_Layer: 5
+  m_Name: "\u6302\u65AD_\u56FE\u6807"
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!224 &8478226003676903152
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226003676903153}
+  m_LocalRotation: {x: -0, y: -0, z: 0.92387867, w: 0.38268548}
+  m_LocalPosition: {x: 0, y: 0, z: -13.8}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 8478226003427446842}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 135}
+  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: 50, y: 50}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &8478226003676903157
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226003676903153}
+  m_CullTransparentMesh: 0
+--- !u!114 &8478226003676903154
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226003676903153}
+  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: b60c13d87bc4fea48b85805e42c8b7fa, 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: 0.8
+--- !u!1 &8478226003714894573
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 8478226003714894572}
+  - component: {fileID: 8478226003714894561}
+  - component: {fileID: 8478226003714894574}
+  - component: {fileID: 8478226003714894575}
+  m_Layer: 5
+  m_Name: ChangeViewCloseBtn
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!224 &8478226003714894572
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226003714894573}
+  m_LocalRotation: {x: -0, y: -0, z: 0.000000014901161, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: -0.0041000247}
+  m_LocalScale: {x: 0.087500006, y: 0.17500001, z: 0.00035}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 8478226002418199900}
+  m_Father: {fileID: 7857888061044538414}
+  m_RootOrder: 13
+  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: 20.725136, y: -52.262768}
+  m_SizeDelta: {x: 90, y: 90}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &8478226003714894561
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226003714894573}
+  m_CullTransparentMesh: 0
+--- !u!114 &8478226003714894574
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226003714894573}
+  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: 0.78431374}
+  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: ef406ac2762ab2446b6ad9dce6b1bc8c, 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: 0.8
+--- !u!114 &8478226003714894575
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8478226003714894573}
+  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: 0.2, g: 0.5294118, b: 0.9490196, a: 1}
+    m_HighlightedColor: {r: 0.2, g: 0.5294118, b: 0.9490196, a: 1}
+    m_PressedColor: {r: 0.11792451, g: 0.5058531, b: 1, a: 1}
+    m_SelectedColor: {r: 0.2, g: 0.5294118, b: 0.9490196, 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: Highlighted
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 8478226003714894574}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls:
+      - m_Target: {fileID: 0}
+        m_TargetAssemblyTypeName: 
+        m_MethodName: closeEye
+        m_Mode: 1
+        m_Arguments:
+          m_ObjectArgument: {fileID: 0}
+          m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
+          m_IntArgument: 0
+          m_FloatArgument: 0
+          m_StringArgument: 
+          m_BoolArgument: 0
+        m_CallState: 2
+--- !u!1 &8535852325348176077
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 614089499642198209}
+  - component: {fileID: 7914809215485953842}
+  - component: {fileID: 7627541329518687030}
+  - component: {fileID: 3241715526160996275}
+  m_Layer: 5
+  m_Name: No_Btn
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &614089499642198209
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8535852325348176077}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 4708829914406030557}
+  m_Father: {fileID: 8816774697585866043}
+  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: -204, y: -245}
+  m_SizeDelta: {x: 372, y: 144}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &7914809215485953842
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8535852325348176077}
+  m_CullTransparentMesh: 1
+--- !u!114 &7627541329518687030
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8535852325348176077}
+  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: cf47030174cb1b548aaeafd16253cbb2, 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 &3241715526160996275
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8535852325348176077}
+  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: 7627541329518687030}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls:
+      - m_Target: {fileID: 4663003568023040221}
+        m_TargetAssemblyTypeName: UnityEngine.GameObject, UnityEngine
+        m_MethodName: SetActive
+        m_Mode: 6
+        m_Arguments:
+          m_ObjectArgument: {fileID: 0}
+          m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
+          m_IntArgument: 0
+          m_FloatArgument: 0
+          m_StringArgument: 
+          m_BoolArgument: 0
+        m_CallState: 2
+--- !u!1 &9136875321025723363
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 4825582871943162677}
+  - component: {fileID: 5631272873463046204}
+  - component: {fileID: 2725230232978704135}
+  m_Layer: 5
+  m_Name: Text (Legacy)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!224 &4825582871943162677
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 9136875321025723363}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 8816774697585866043}
+  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: 250}
+  m_SizeDelta: {x: 0, y: -667.76}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &5631272873463046204
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 9136875321025723363}
+  m_CullTransparentMesh: 1
+--- !u!114 &2725230232978704135
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 9136875321025723363}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, 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_text: "\u89E3\u51B3\u7ED3\u679C"
+  m_isRightToLeft: 0
+  m_fontAsset: {fileID: 11400000, guid: 87d73d15ccf613c4c8dad6b4c03399f9, type: 2}
+  m_sharedMaterial: {fileID: 1738077909898060448, guid: 53b37c1f568195149b410dacded90c09, type: 2}
+  m_fontSharedMaterials: []
+  m_fontMaterial: {fileID: 0}
+  m_fontMaterials: []
+  m_fontColor32:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontColor: {r: 1, g: 1, b: 1, a: 1}
+  m_enableVertexGradient: 0
+  m_colorMode: 3
+  m_fontColorGradient:
+    topLeft: {r: 1, g: 1, b: 1, a: 1}
+    topRight: {r: 1, g: 1, b: 1, a: 1}
+    bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+    bottomRight: {r: 1, g: 1, b: 1, a: 1}
+  m_fontColorGradientPreset: {fileID: 0}
+  m_spriteAsset: {fileID: 0}
+  m_tintAllSprites: 0
+  m_StyleSheet: {fileID: 0}
+  m_TextStyleHashCode: -1183493901
+  m_overrideHtmlColors: 0
+  m_faceColor:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontSize: 87.97
+  m_fontSizeBase: 87.97
+  m_fontWeight: 400
+  m_enableAutoSizing: 0
+  m_fontSizeMin: 0
+  m_fontSizeMax: 0
+  m_fontStyle: 1
+  m_HorizontalAlignment: 2
+  m_VerticalAlignment: 4096
+  m_textAlignment: 65535
+  m_characterSpacing: 0
+  m_wordSpacing: 0
+  m_lineSpacing: 0
+  m_lineSpacingMax: 0
+  m_paragraphSpacing: 0
+  m_charWidthMaxAdj: 0
+  m_enableWordWrapping: 1
+  m_wordWrappingRatios: 0.4
+  m_overflowMode: 0
+  m_linkedTextComponent: {fileID: 0}
+  parentLinkedComponent: {fileID: 0}
+  m_enableKerning: 0
+  m_enableExtraPadding: 0
+  checkPaddingRequired: 0
+  m_isRichText: 1
+  m_parseCtrlCharacters: 1
+  m_isOrthographic: 1
+  m_isCullingEnabled: 0
+  m_horizontalMapping: 0
+  m_verticalMapping: 0
+  m_uvLineOffset: 0
+  m_geometrySortingOrder: 0
+  m_IsTextObjectScaleStatic: 0
+  m_VertexBufferAutoSizeReduction: 0
+  m_useMaxVisibleDescender: 1
+  m_pageToDisplay: 1
+  m_margin: {x: 0, y: 0, z: 0, w: 0}
+  m_isUsingLegacyAnimationComponent: 0
+  m_isVolumetricText: 0
+  m_hasFontAssetChanged: 1
+  m_baseMaterial: {fileID: 0}
+  m_maskOffset: {x: 0, y: 0, z: 0, w: 0}

+ 7 - 0
Assets/FrameWork/ProjectManager/RTC/RoomMain/RoomMain.prefab.meta

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

+ 13 - 0
Assets/FrameWork/ProjectManager/远程协助.prefab → Assets/FrameWork/ProjectManager/RTC/远程协助.prefab

@@ -9,6 +9,7 @@ GameObject:
   serializedVersion: 6
   m_Component:
   - component: {fileID: 1172451362088300627}
+  - component: {fileID: 6076648255187854325}
   m_Layer: 5
   m_Name: "\u8FDC\u7A0B\u534F\u52A9"
   m_TagString: Untagged
@@ -36,3 +37,15 @@ RectTransform:
   m_AnchoredPosition: {x: 0, y: 0}
   m_SizeDelta: {x: 100, y: 100}
   m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &6076648255187854325
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8368926532142905148}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 095bf4eef799e3e48ba8f1d18dafeee5, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 

+ 0 - 0
Assets/FrameWork/ProjectManager/远程协助.prefab.meta → Assets/FrameWork/ProjectManager/RTC/远程协助.prefab.meta


+ 5 - 0
Assets/FrameWork/ProjectManager/Scripts/Main/ProjectMainWindow.cs

@@ -8,4 +8,9 @@ public class ProjectMainWindow : WindowSingleton<ProjectMainWindow>
     {
         WindowsManager.Instance.show(WindowConfig.windowType.XunJianLB);
     }
+
+    public void showRtc()
+    {
+        WindowsManager.Instance.show(WindowConfig.windowType.RoomMain);
+    }
 }

+ 8 - 0
Assets/FrameWork/ProjectManager/Scripts/Project/RTC.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 1ae1216798e078b48999e5fb5ed8dc3d
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 18 - 0
Assets/FrameWork/ProjectManager/Scripts/Project/RTC/ProjectRrmoteAssWindow.cs

@@ -0,0 +1,18 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ProjectRrmoteAssWindow : WindowSingleton<ProjectXunJianWindow>
+{
+    public void show()
+    {
+
+        this.gameObject.SetActive(true);
+    }
+
+    public void hide()
+    {
+
+        this.gameObject.SetActive(false);
+    }
+}

+ 11 - 0
Assets/FrameWork/ProjectManager/Scripts/Project/RTC/ProjectRrmoteAssWindow.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 095bf4eef799e3e48ba8f1d18dafeee5
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Assets/FrameWork/ProjectManager/Scripts/Project/RTC/RoomMain.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 569d650a600cc524aa40d337c877f903
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 116 - 0
Assets/FrameWork/ProjectManager/Scripts/Project/RTC/RoomMain/GHZRoomMain.cs

@@ -0,0 +1,116 @@
+using GHZRtc;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+public class GHZRoomMain : SingletonMono<GHZRoomMain>
+{
+    public Button audioOpenBtn;
+    public Button audioCloseBtn;
+    public Button videoOpenBtn;
+    public Button videoCloseBtn;
+    public Button clearAllArrowBtn;
+    public Button hangupBtn;
+    public GameObject exitSelectUI;
+    public Button noExitBtn;
+    public Button yesExitBtn;
+    public RawImage videoRawImage;
+
+    private bool isRTCVideo;
+
+    private void Awake()
+    {
+        audioOpenBtn.onClick.AddListener(() => LocalAudioStream(true));
+        audioCloseBtn.onClick.AddListener(() => LocalAudioStream(false));
+
+        videoOpenBtn.onClick.AddListener(() => LocalVideoStream(true));
+        videoCloseBtn.onClick.AddListener(() => LocalVideoStream(false));
+
+        clearAllArrowBtn.onClick.AddListener(() => ClearAllArrow());
+        hangupBtn.onClick.AddListener(() => HangUpOnClick());
+        noExitBtn.onClick.AddListener(() => ExitRoom(false));
+        yesExitBtn.onClick.AddListener(() => ExitRoom(true));
+
+        GHZRTCFusionManager.OnUserJoined += UserJoined;
+        GHZRTCFusionManager.OnUserOffline += UserOffline;
+        GHZRTCFusionManager.OnRemoteAudioStateChanged += RemoteAudioStateChanged;
+        GHZRTCFusionManager.OnRemoteVideoStateChanged += RemoteVideoStateChanged;
+
+        isRTCVideo = false;
+    }
+
+    private void OnDisable()
+    {
+        GHZRTCFusionManager.OnUserJoined -= UserJoined;
+        GHZRTCFusionManager.OnUserOffline -= UserOffline;
+        GHZRTCFusionManager.OnRemoteAudioStateChanged -= RemoteAudioStateChanged;
+        GHZRTCFusionManager.OnRemoteVideoStateChanged -= RemoteVideoStateChanged;
+    }
+
+    private void LocalAudioStream( bool state )
+    {
+        audioOpenBtn.gameObject.SetActive(state);
+        audioCloseBtn.gameObject.SetActive(!state);
+        GHZRTCFusionManager.Instance.MuteLocalAudioStream(state);
+    }
+
+    private void LocalVideoStream(bool state)
+    {
+        videoOpenBtn.gameObject.SetActive(state);
+        audioCloseBtn.gameObject.SetActive(!state);
+        GHZRTCFusionManager.Instance.MuteLocalVideoStream(state);
+    }
+
+    private void ClearAllArrow()
+    {
+
+    }
+
+    private void HangUpOnClick()
+    {
+        exitSelectUI.gameObject.SetActive(true);
+    }
+
+    private void ExitRoom(bool state)
+    {
+        exitSelectUI.gameObject.SetActive(false);
+        if (state)
+        {
+          
+            GHZRTCFusionManager.Instance.LeaveRoom();
+        }
+      
+    }
+
+    private void UserJoined (string uid)
+    {
+
+        Debug.Log("DGJ  UserJoined ===>  "+ uid);
+        // 检测到有人进入房间 并且当前无画面 就显示当前人的画面
+        if (!isRTCVideo)
+        {
+            isRTCVideo = true;
+            GHZRTCFusionManager.Instance.SetVideoFrame(videoRawImage, uid);
+            videoRawImage.gameObject.SetActive(true);
+        }
+
+    }
+
+    private void UserOffline(string uid)
+    {
+        Debug.Log("DGJ  UserOffline ===>  " + uid);
+    }
+
+
+    private void RemoteAudioStateChanged(string uid , REMOTE_AUIDO_STATE_REASON_RTC state)
+    {
+
+    }
+
+    private void RemoteVideoStateChanged(string uid ,REMOTE_VIDEO_STATE_REASON_RTC state)
+    {
+
+    }
+
+}

+ 11 - 0
Assets/FrameWork/ProjectManager/Scripts/Project/RTC/RoomMain/GHZRoomMain.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a6b6d7302d9ff0a469ae11ac47a45997
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 1 - 1
Assets/FrameWork/SaoMiao.prefab

@@ -84,7 +84,7 @@ MonoBehaviour:
   m_FallbackScreenDPI: 96
   m_DefaultSpriteDPI: 96
   m_DynamicPixelsPerUnit: 1
-  m_PresetInfoIsWorld: 0
+  m_PresetInfoIsWorld: 1
 --- !u!114 &1620164308813382644
 MonoBehaviour:
   m_ObjectHideFlags: 0

+ 986 - 0
Assets/FrameWork/Scenes/EdustryRTCTest.unity

@@ -0,0 +1,986 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!29 &1
+OcclusionCullingSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_OcclusionBakeSettings:
+    smallestOccluder: 5
+    smallestHole: 0.25
+    backfaceThreshold: 100
+  m_SceneGUID: 00000000000000000000000000000000
+  m_OcclusionCullingData: {fileID: 0}
+--- !u!104 &2
+RenderSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 9
+  m_Fog: 0
+  m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
+  m_FogMode: 3
+  m_FogDensity: 0.01
+  m_LinearFogStart: 0
+  m_LinearFogEnd: 300
+  m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
+  m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
+  m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
+  m_AmbientIntensity: 1
+  m_AmbientMode: 0
+  m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
+  m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
+  m_HaloStrength: 0.5
+  m_FlareStrength: 1
+  m_FlareFadeSpeed: 3
+  m_HaloTexture: {fileID: 0}
+  m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
+  m_DefaultReflectionMode: 0
+  m_DefaultReflectionResolution: 128
+  m_ReflectionBounces: 1
+  m_ReflectionIntensity: 1
+  m_CustomReflection: {fileID: 0}
+  m_Sun: {fileID: 0}
+  m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1}
+  m_UseRadianceAmbientProbe: 0
+--- !u!157 &3
+LightmapSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 12
+  m_GIWorkflowMode: 1
+  m_GISettings:
+    serializedVersion: 2
+    m_BounceScale: 1
+    m_IndirectOutputScale: 1
+    m_AlbedoBoost: 1
+    m_EnvironmentLightingMode: 0
+    m_EnableBakedLightmaps: 1
+    m_EnableRealtimeLightmaps: 0
+  m_LightmapEditorSettings:
+    serializedVersion: 12
+    m_Resolution: 2
+    m_BakeResolution: 40
+    m_AtlasSize: 1024
+    m_AO: 0
+    m_AOMaxDistance: 1
+    m_CompAOExponent: 1
+    m_CompAOExponentDirect: 0
+    m_ExtractAmbientOcclusion: 0
+    m_Padding: 2
+    m_LightmapParameters: {fileID: 0}
+    m_LightmapsBakeMode: 1
+    m_TextureCompression: 1
+    m_FinalGather: 0
+    m_FinalGatherFiltering: 1
+    m_FinalGatherRayCount: 256
+    m_ReflectionCompression: 2
+    m_MixedBakeMode: 2
+    m_BakeBackend: 1
+    m_PVRSampling: 1
+    m_PVRDirectSampleCount: 32
+    m_PVRSampleCount: 512
+    m_PVRBounces: 2
+    m_PVREnvironmentSampleCount: 256
+    m_PVREnvironmentReferencePointCount: 2048
+    m_PVRFilteringMode: 1
+    m_PVRDenoiserTypeDirect: 1
+    m_PVRDenoiserTypeIndirect: 1
+    m_PVRDenoiserTypeAO: 1
+    m_PVRFilterTypeDirect: 0
+    m_PVRFilterTypeIndirect: 0
+    m_PVRFilterTypeAO: 0
+    m_PVREnvironmentMIS: 1
+    m_PVRCulling: 1
+    m_PVRFilteringGaussRadiusDirect: 1
+    m_PVRFilteringGaussRadiusIndirect: 5
+    m_PVRFilteringGaussRadiusAO: 2
+    m_PVRFilteringAtrousPositionSigmaDirect: 0.5
+    m_PVRFilteringAtrousPositionSigmaIndirect: 2
+    m_PVRFilteringAtrousPositionSigmaAO: 1
+    m_ExportTrainingData: 0
+    m_TrainingDataDestination: TrainingData
+    m_LightProbeSampleCountMultiplier: 4
+  m_LightingDataAsset: {fileID: 0}
+  m_LightingSettings: {fileID: 0}
+--- !u!196 &4
+NavMeshSettings:
+  serializedVersion: 2
+  m_ObjectHideFlags: 0
+  m_BuildSettings:
+    serializedVersion: 2
+    agentTypeID: 0
+    agentRadius: 0.5
+    agentHeight: 2
+    agentSlope: 45
+    agentClimb: 0.4
+    ledgeDropHeight: 0
+    maxJumpAcrossDistance: 0
+    minRegionArea: 2
+    manualCellSize: 0
+    cellSize: 0.16666667
+    manualTileSize: 0
+    tileSize: 256
+    accuratePlacement: 0
+    maxJobWorkers: 0
+    preserveTilesOutsideBounds: 0
+    debug:
+      m_Flags: 0
+  m_NavMeshData: {fileID: 0}
+--- !u!1 &549249281
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 549249285}
+  - component: {fileID: 549249283}
+  - component: {fileID: 549249284}
+  m_Layer: 5
+  m_Name: MREduastryStart
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &549249283
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 549249281}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 7e656a8683536334e8c167b4fda505ce, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  global: 1
+  isShowTip: 0
+  wConfig: {fileID: 11400000, guid: 0667bace594664440902795c5cce1cf3, type: 2}
+  canvasRoot: {fileID: 0}
+  windowItemGameObjectList: []
+  windowsConfig: {fileID: 11400000, guid: b605ed4a23ccd7144abbae608329d926, type: 2}
+  isStart: 0
+--- !u!114 &549249284
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 549249281}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 25230ae935fb3694a90363ba85ddd6c6, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  global: 1
+  jd: 30
+--- !u!4 &549249285
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 549249281}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 3
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &639320401
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 639320403}
+  - component: {fileID: 639320402}
+  m_Layer: 0
+  m_Name: Directional Light
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!108 &639320402
+Light:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 639320401}
+  m_Enabled: 1
+  serializedVersion: 10
+  m_Type: 1
+  m_Shape: 0
+  m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
+  m_Intensity: 1
+  m_Range: 10
+  m_SpotAngle: 30
+  m_InnerSpotAngle: 21.80208
+  m_CookieSize: 10
+  m_Shadows:
+    m_Type: 2
+    m_Resolution: -1
+    m_CustomResolution: -1
+    m_Strength: 1
+    m_Bias: 0.05
+    m_NormalBias: 0.4
+    m_NearPlane: 0.2
+    m_CullingMatrixOverride:
+      e00: 1
+      e01: 0
+      e02: 0
+      e03: 0
+      e10: 0
+      e11: 1
+      e12: 0
+      e13: 0
+      e20: 0
+      e21: 0
+      e22: 1
+      e23: 0
+      e30: 0
+      e31: 0
+      e32: 0
+      e33: 1
+    m_UseCullingMatrixOverride: 0
+  m_Cookie: {fileID: 0}
+  m_DrawHalo: 0
+  m_Flare: {fileID: 0}
+  m_RenderMode: 0
+  m_CullingMask:
+    serializedVersion: 2
+    m_Bits: 4294967295
+  m_RenderingLayerMask: 1
+  m_Lightmapping: 4
+  m_LightShadowCasterMode: 0
+  m_AreaSize: {x: 1, y: 1}
+  m_BounceIntensity: 1
+  m_ColorTemperature: 6570
+  m_UseColorTemperature: 0
+  m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
+  m_UseBoundingSphereOverride: 0
+  m_UseViewFrustumForShadowCasterCull: 1
+  m_ShadowRadius: 0
+  m_ShadowAngle: 0
+--- !u!4 &639320403
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 639320401}
+  m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
+  m_LocalPosition: {x: 0, y: 3, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
+--- !u!1 &676269397
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 676269400}
+  - component: {fileID: 676269399}
+  - component: {fileID: 676269401}
+  m_Layer: 0
+  m_Name: EventSystem
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &676269399
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 676269397}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_FirstSelected: {fileID: 0}
+  m_sendNavigationEvents: 1
+  m_DragThreshold: 10
+--- !u!4 &676269400
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 676269397}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &676269401
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 676269397}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 01614664b831546d2ae94a42149d80ac, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_SendPointerHoverToParent: 1
+  m_MoveRepeatDelay: 0.5
+  m_MoveRepeatRate: 0.1
+  m_XRTrackingOrigin: {fileID: 0}
+  m_ActionsAsset: {fileID: -944628639613478452, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+  m_PointAction: {fileID: -1654692200621890270, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+  m_MoveAction: {fileID: -8784545083839296357, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+  m_SubmitAction: {fileID: 392368643174621059, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+  m_CancelAction: {fileID: 7727032971491509709, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+  m_LeftClickAction: {fileID: 3001919216989983466, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+  m_MiddleClickAction: {fileID: -2185481485913320682, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+  m_RightClickAction: {fileID: -4090225696740746782, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+  m_ScrollWheelAction: {fileID: 6240969308177333660, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+  m_TrackedDevicePositionAction: {fileID: 6564999863303420839, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+  m_TrackedDeviceOrientationAction: {fileID: 7970375526676320489, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+  m_DeselectOnBackgroundClick: 1
+  m_PointerBehavior: 0
+  m_CursorLockBehavior: 0
+--- !u!1001 &779723539
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 0}
+    m_Modifications:
+    - target: {fileID: 1057856135280739329, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_RootOrder
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 7361397497352502558, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_fontAsset
+      value: 
+      objectReference: {fileID: 11400000, guid: 87d73d15ccf613c4c8dad6b4c03399f9, type: 2}
+    - target: {fileID: 7361397497352502558, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_hasFontAssetChanged
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 7361397497449978000, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_fontAsset
+      value: 
+      objectReference: {fileID: 11400000, guid: 87d73d15ccf613c4c8dad6b4c03399f9, type: 2}
+    - target: {fileID: 7361397497449978000, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_hasFontAssetChanged
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 7361397497500462290, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_fontAsset
+      value: 
+      objectReference: {fileID: 11400000, guid: 87d73d15ccf613c4c8dad6b4c03399f9, type: 2}
+    - target: {fileID: 7361397497500462290, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_hasFontAssetChanged
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 7361397497610179789, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_fontAsset
+      value: 
+      objectReference: {fileID: 11400000, guid: 87d73d15ccf613c4c8dad6b4c03399f9, type: 2}
+    - target: {fileID: 7361397497610179789, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_hasFontAssetChanged
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 7361397497675596230, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_fontAsset
+      value: 
+      objectReference: {fileID: 11400000, guid: 87d73d15ccf613c4c8dad6b4c03399f9, type: 2}
+    - target: {fileID: 7361397497675596230, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_hasFontAssetChanged
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 7361397497830782758, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_fontAsset
+      value: 
+      objectReference: {fileID: 11400000, guid: 87d73d15ccf613c4c8dad6b4c03399f9, type: 2}
+    - target: {fileID: 7361397497830782758, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_hasFontAssetChanged
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 7361397497840509333, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_fontAsset
+      value: 
+      objectReference: {fileID: 11400000, guid: 87d73d15ccf613c4c8dad6b4c03399f9, type: 2}
+    - target: {fileID: 7361397497840509333, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_hasFontAssetChanged
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 7361397497866658971, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_fontAsset
+      value: 
+      objectReference: {fileID: 11400000, guid: 87d73d15ccf613c4c8dad6b4c03399f9, type: 2}
+    - target: {fileID: 7361397497866658971, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_hasFontAssetChanged
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 7361397497914782573, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_fontAsset
+      value: 
+      objectReference: {fileID: 11400000, guid: 87d73d15ccf613c4c8dad6b4c03399f9, type: 2}
+    - target: {fileID: 7361397497914782573, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_hasFontAssetChanged
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 7361397497932624574, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_fontAsset
+      value: 
+      objectReference: {fileID: 11400000, guid: 87d73d15ccf613c4c8dad6b4c03399f9, type: 2}
+    - target: {fileID: 7361397497932624574, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_hasFontAssetChanged
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 7361397497943944073, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_fontAsset
+      value: 
+      objectReference: {fileID: 11400000, guid: 87d73d15ccf613c4c8dad6b4c03399f9, type: 2}
+    - target: {fileID: 7361397497943944073, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_hasFontAssetChanged
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 7361397497966924154, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_fontAsset
+      value: 
+      objectReference: {fileID: 11400000, guid: 87d73d15ccf613c4c8dad6b4c03399f9, type: 2}
+    - target: {fileID: 7361397497966924154, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_hasFontAssetChanged
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 7361397498062242469, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_fontAsset
+      value: 
+      objectReference: {fileID: 11400000, guid: 87d73d15ccf613c4c8dad6b4c03399f9, type: 2}
+    - target: {fileID: 7361397498062242469, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_hasFontAssetChanged
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 7361397498129900734, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_fontAsset
+      value: 
+      objectReference: {fileID: 11400000, guid: 87d73d15ccf613c4c8dad6b4c03399f9, type: 2}
+    - target: {fileID: 7361397498129900734, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_hasFontAssetChanged
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 7361397498185573409, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_RootOrder
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 7361397498185573409, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7361397498185573409, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7361397498185573409, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7361397498185573409, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 7361397498185573409, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7361397498185573409, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7361397498185573409, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7361397498185573409, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7361397498185573409, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7361397498185573409, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7361397498185573410, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_Name
+      value: SDKSystem
+      objectReference: {fileID: 0}
+    - target: {fileID: 7361397498485156715, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_fontAsset
+      value: 
+      objectReference: {fileID: 11400000, guid: 87d73d15ccf613c4c8dad6b4c03399f9, type: 2}
+    - target: {fileID: 7361397498485156715, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_hasFontAssetChanged
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 7361397498773703831, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_fontAsset
+      value: 
+      objectReference: {fileID: 11400000, guid: 87d73d15ccf613c4c8dad6b4c03399f9, type: 2}
+    - target: {fileID: 7361397498773703831, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_hasFontAssetChanged
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 7361397498857619153, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_fontAsset
+      value: 
+      objectReference: {fileID: 11400000, guid: 87d73d15ccf613c4c8dad6b4c03399f9, type: 2}
+    - target: {fileID: 7361397498857619153, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_hasFontAssetChanged
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 7361397499128269000, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_fontAsset
+      value: 
+      objectReference: {fileID: 11400000, guid: 87d73d15ccf613c4c8dad6b4c03399f9, type: 2}
+    - target: {fileID: 7361397499128269000, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_hasFontAssetChanged
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 7361397499215313580, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_fontAsset
+      value: 
+      objectReference: {fileID: 11400000, guid: 87d73d15ccf613c4c8dad6b4c03399f9, type: 2}
+    - target: {fileID: 7361397499215313580, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_hasFontAssetChanged
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 7361397499264750434, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_fontAsset
+      value: 
+      objectReference: {fileID: 11400000, guid: 87d73d15ccf613c4c8dad6b4c03399f9, type: 2}
+    - target: {fileID: 7361397499264750434, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_hasFontAssetChanged
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 7361397499327801666, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_fontAsset
+      value: 
+      objectReference: {fileID: 11400000, guid: 87d73d15ccf613c4c8dad6b4c03399f9, type: 2}
+    - target: {fileID: 7361397499327801666, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_hasFontAssetChanged
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 9056915208823356004, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+      propertyPath: m_RootOrder
+      value: 1
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+--- !u!1 &852109516
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 852109517}
+  m_Layer: 0
+  m_Name: Tools
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &852109517
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 852109516}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 2061150929}
+  m_Father: {fileID: 0}
+  m_RootOrder: 5
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1005815699
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1005815700}
+  - component: {fileID: 1005815702}
+  - component: {fileID: 1005815701}
+  m_Layer: 5
+  m_Name: Text (TMP)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &1005815700
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1005815699}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 1153523161}
+  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: 250.2, y: 0}
+  m_SizeDelta: {x: 200, y: 50}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1005815701
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1005815699}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, 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_text: New Text
+  m_isRightToLeft: 0
+  m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
+  m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
+  m_fontSharedMaterials: []
+  m_fontMaterial: {fileID: 0}
+  m_fontMaterials: []
+  m_fontColor32:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontColor: {r: 1, g: 1, b: 1, a: 1}
+  m_enableVertexGradient: 0
+  m_colorMode: 3
+  m_fontColorGradient:
+    topLeft: {r: 1, g: 1, b: 1, a: 1}
+    topRight: {r: 1, g: 1, b: 1, a: 1}
+    bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+    bottomRight: {r: 1, g: 1, b: 1, a: 1}
+  m_fontColorGradientPreset: {fileID: 0}
+  m_spriteAsset: {fileID: 0}
+  m_tintAllSprites: 0
+  m_StyleSheet: {fileID: 0}
+  m_TextStyleHashCode: -1183493901
+  m_overrideHtmlColors: 0
+  m_faceColor:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontSize: 36
+  m_fontSizeBase: 36
+  m_fontWeight: 400
+  m_enableAutoSizing: 0
+  m_fontSizeMin: 18
+  m_fontSizeMax: 72
+  m_fontStyle: 0
+  m_HorizontalAlignment: 1
+  m_VerticalAlignment: 256
+  m_textAlignment: 65535
+  m_characterSpacing: 0
+  m_wordSpacing: 0
+  m_lineSpacing: 0
+  m_lineSpacingMax: 0
+  m_paragraphSpacing: 0
+  m_charWidthMaxAdj: 0
+  m_enableWordWrapping: 1
+  m_wordWrappingRatios: 0.4
+  m_overflowMode: 0
+  m_linkedTextComponent: {fileID: 0}
+  parentLinkedComponent: {fileID: 0}
+  m_enableKerning: 1
+  m_enableExtraPadding: 0
+  checkPaddingRequired: 0
+  m_isRichText: 1
+  m_parseCtrlCharacters: 1
+  m_isOrthographic: 1
+  m_isCullingEnabled: 0
+  m_horizontalMapping: 0
+  m_verticalMapping: 0
+  m_uvLineOffset: 0
+  m_geometrySortingOrder: 0
+  m_IsTextObjectScaleStatic: 0
+  m_VertexBufferAutoSizeReduction: 0
+  m_useMaxVisibleDescender: 1
+  m_pageToDisplay: 1
+  m_margin: {x: 0, y: 0, z: 0, w: 0}
+  m_isUsingLegacyAnimationComponent: 0
+  m_isVolumetricText: 0
+  m_hasFontAssetChanged: 0
+  m_baseMaterial: {fileID: 0}
+  m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!222 &1005815702
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1005815699}
+  m_CullTransparentMesh: 1
+--- !u!1001 &1108894162
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 0}
+    m_Modifications:
+    - target: {fileID: 1221499172564011248, guid: 9d9723b802a7a9644bc0048f064e0b1a, type: 3}
+      propertyPath: m_Name
+      value: GHZRtcNew
+      objectReference: {fileID: 0}
+    - target: {fileID: 1221499172564011249, guid: 9d9723b802a7a9644bc0048f064e0b1a, type: 3}
+      propertyPath: m_RootOrder
+      value: 4
+      objectReference: {fileID: 0}
+    - target: {fileID: 1221499172564011249, guid: 9d9723b802a7a9644bc0048f064e0b1a, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 1221499172564011249, guid: 9d9723b802a7a9644bc0048f064e0b1a, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 1.4909999
+      objectReference: {fileID: 0}
+    - target: {fileID: 1221499172564011249, guid: 9d9723b802a7a9644bc0048f064e0b1a, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 1221499172564011249, guid: 9d9723b802a7a9644bc0048f064e0b1a, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 1221499172564011249, guid: 9d9723b802a7a9644bc0048f064e0b1a, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 1221499172564011249, guid: 9d9723b802a7a9644bc0048f064e0b1a, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 1221499172564011249, guid: 9d9723b802a7a9644bc0048f064e0b1a, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 1221499172564011249, guid: 9d9723b802a7a9644bc0048f064e0b1a, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 1221499172564011249, guid: 9d9723b802a7a9644bc0048f064e0b1a, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 1221499172564011249, guid: 9d9723b802a7a9644bc0048f064e0b1a, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: 9d9723b802a7a9644bc0048f064e0b1a, type: 3}
+--- !u!1 &1153523160
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1153523161}
+  - component: {fileID: 1153523164}
+  - component: {fileID: 1153523163}
+  - component: {fileID: 1153523162}
+  - component: {fileID: 1153523165}
+  m_Layer: 5
+  m_Name: Canvas
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!224 &1153523161
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1153523160}
+  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_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 1005815700}
+  m_Father: {fileID: 1509722244}
+  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: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0, y: 0}
+--- !u!114 &1153523162
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1153523160}
+  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 &1153523163
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1153523160}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_UiScaleMode: 0
+  m_ReferencePixelsPerUnit: 100
+  m_ScaleFactor: 1
+  m_ReferenceResolution: {x: 800, y: 600}
+  m_ScreenMatchMode: 0
+  m_MatchWidthOrHeight: 0
+  m_PhysicalUnit: 3
+  m_FallbackScreenDPI: 96
+  m_DefaultSpriteDPI: 96
+  m_DynamicPixelsPerUnit: 1
+  m_PresetInfoIsWorld: 0
+--- !u!223 &1153523164
+Canvas:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1153523160}
+  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: 25
+  m_SortingLayerID: 0
+  m_SortingOrder: 0
+  m_TargetDisplay: 0
+--- !u!114 &1153523165
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1153523160}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: f97025cd26acc684fa1b5a69392a27bd, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  global: 1
+  logText: {fileID: 1005815701}
+--- !u!4 &1509722244 stripped
+Transform:
+  m_CorrespondingSourceObject: {fileID: 7361397498185573409, guid: 7cd0ceba7525bdc42a36be841a8aad16, type: 3}
+  m_PrefabInstance: {fileID: 779723539}
+  m_PrefabAsset: {fileID: 0}
+--- !u!1 &2061150928
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2061150929}
+  - component: {fileID: 2061150930}
+  m_Layer: 0
+  m_Name: HttpTool
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &2061150929
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2061150928}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 852109517}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &2061150930
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2061150928}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 55d86a86da9b1674489340987e1f67f2, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  global: 1

+ 7 - 0
Assets/FrameWork/Scenes/EdustryRTCTest.unity.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 9aab4afa08e54f44d829a3eebd2af315
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 5 - 1
Assets/FrameWork/Windows.asset

@@ -56,7 +56,11 @@ MonoBehaviour:
       parentType: 100002
     - window: {fileID: 8368926532142905148, guid: 05c25e7c9e3236f42b293578ff619559, type: 3}
       type: 200003
-      windowItemGameObjectList: []
+      windowItemGameObjectList:
+      - window: {fileID: 8478226002013285462, guid: 87b3df7a44edbf64a9372f8e62fa9cad, type: 3}
+        type: 203001
+        windowItemGameObjectList: []
+        parentType: 200003
       parentType: 100002
     - window: {fileID: 6535805363672510788, guid: d835331f26741454c8cfaba07623b03f, type: 3}
       type: 200004

+ 8 - 0
Assets/RTC.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: d5f08ca24429dbc46a4fece4979e4ea9
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Assets/RTC/Paroxe.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 6f4613689b6ba3a469848f4a7f114865
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 5 - 0
Assets/RTC/Paroxe/PDFRenderer.meta

@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: e407ef5f105af164b87b7b0eee9c5daf
+folderAsset: yes
+DefaultImporter:
+  userData: 

+ 5 - 0
Assets/RTC/Paroxe/PDFRenderer/API.meta

@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: f170cd199732c2c40a5074d8807e35b2
+folderAsset: yes
+DefaultImporter:
+  userData: 

+ 5 - 0
Assets/RTC/Paroxe/PDFRenderer/API/Action.meta

@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: 395ff322fc415a5478d3edd14270f68b
+folderAsset: yes
+DefaultImporter:
+  userData: 

+ 72 - 0
Assets/RTC/Paroxe/PDFRenderer/API/Action/IPDFDeviceActionHandler.cs

@@ -0,0 +1,72 @@
+
+namespace Paroxe.PdfRenderer
+{
+    /// <summary>
+    /// Implement this class to provide a custom action handling stategy. For example, PDFViewer.BookmarksActionHandler 
+    /// and PDFViewer.LinksActionHandler both refer to a default implementation of this interface.
+    /// </summary>
+    public interface IPDFDeviceActionHandler
+    {
+        /// <summary>
+        /// Called when a goto action is triggered.
+        /// </summary>
+        /// <param name="device"></param>
+        /// <param name="pageIndex"></param>
+        void HandleGotoAction(IPDFDevice device, int pageIndex);
+
+        /// <summary>
+        /// Called when a launch action is triggered.
+        /// </summary>
+        /// <param name="device"></param>
+        /// <param name="filePath"></param>
+        void HandleLaunchAction(IPDFDevice device, string filePath);
+
+        /// <summary>
+        /// Implement the function if you want to provide password. This method received the resolved path
+        /// returned by the previous method (HandleRemoteGotoActionPathResolving)
+        /// </summary>
+        /// <param name="device"></param>
+        /// <param name="resolvedFilePath"></param>
+        /// <returns></returns>
+        string HandleRemoteGotoActionPasswordResolving(IPDFDevice device, string resolvedFilePath);
+
+        /// <summary>
+        /// Implement the function if you want custom path resolving before PDF Viewer open other pdf file. 
+        /// The method must return the modified filePath or just return the original filePath. 
+        /// See PDFViewerDefaultActionHandler class for the default implementation.
+        /// </summary>
+        /// <param name="device"></param>
+        /// <param name="filePath"></param>
+        /// <returns></returns>
+        string HandleRemoteGotoActionPathResolving(IPDFDevice device, string filePath);
+
+        /// <summary>
+        /// This method is called after the new pdf document is loaded but not yet opened in the pdfViewer.
+        /// See PDFViewerDefaultActionHandler class for the default implementation.
+        /// </summary>
+        /// <param name="device"></param>
+        /// <param name="document"></param>
+        /// <param name="pageIndex"></param>
+        void HandleRemoteGotoActionResolved(IPDFDevice device, PDFDocument document, int pageIndex);
+
+        /// <summary>
+        /// This method is called when the pdf pdf file at filePath doesn't exists or is invalid.
+        /// </summary>
+        /// <param name="device"></param>
+        /// <param name="resolvedFilePath"></param>
+        void HandleRemoteGotoActionUnresolved(IPDFDevice device, string resolvedFilePath);
+
+        /// <summary>
+        /// Called when the action is unsuported
+        /// </summary>
+        /// <param name="device"></param>
+        void HandleUnsuportedAction(IPDFDevice device);
+
+        /// <summary>
+        /// Called for action that point to an Uri (Universal Resource Identifier)
+        /// </summary>
+        /// <param name="device"></param>
+        /// <param name="uri"></param>
+        void HandleUriAction(IPDFDevice device, string uri);
+    }
+}

+ 8 - 0
Assets/RTC/Paroxe/PDFRenderer/API/Action/IPDFDeviceActionHandler.cs.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 2c8ad254c4762d74eb517aa592b7bb4b
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 

+ 174 - 0
Assets/RTC/Paroxe/PDFRenderer/API/Action/PDFAction.cs

@@ -0,0 +1,174 @@
+using System;
+using Paroxe.PdfRenderer.Internal;
+using System.Text;
+
+namespace Paroxe.PdfRenderer
+{
+#if !UNITY_WEBGL
+    /// <summary>
+    /// Represents the PDF action into a PDF document.
+    /// </summary>
+    public class PDFAction : IDisposable
+    {
+        private bool m_Disposed;
+        private IntPtr m_NativePointer;
+        private IDisposable m_Source;
+        private PDFDocument m_Document;
+        private ActionType m_ActionType = ActionType.Unknown;
+        private string m_FilePath;
+        private string m_URIPath;
+
+        public PDFAction(PDFLink link, IntPtr nativePointer)
+        {
+            if (link == null)
+                throw new NullReferenceException();
+            if (nativePointer == IntPtr.Zero)
+                throw new NullReferenceException();
+
+            PDFLibrary.AddRef("PDFAction");
+
+            m_Source = link;
+            m_Document = link.Page.Document;
+
+            m_NativePointer = nativePointer;
+        }
+
+        public PDFAction(PDFBookmark bookmark, IntPtr nativePointer)
+        {
+            if (bookmark == null)
+                throw new NullReferenceException();
+            if (nativePointer == IntPtr.Zero)
+                throw new NullReferenceException();
+
+            PDFLibrary.AddRef("PDFAction");
+
+            m_Source = bookmark;
+            m_Document = bookmark.Document;
+
+            m_NativePointer = nativePointer;
+        }
+
+        ~PDFAction()
+        {
+            Dispose(false);
+        }
+
+        public enum ActionType
+        {
+            /// <summary>
+            /// Unsupported action type.
+            /// </summary>
+            Unsupported = 0,
+            /// <summary>
+            /// Go to a destination within current document.
+            /// </summary>
+            GoTo = 1,
+            /// <summary>
+            /// Go to a destination within another document.
+            /// </summary>
+            RemoteGoTo = 2,
+            /// <summary>
+            /// Universal Resource Identifier, including web pages and other Internet based resources.
+            /// </summary>
+            Uri = 3,
+            /// <summary>
+            /// Launch an application or open a file.
+            /// </summary>
+            Launch = 4,
+            Unknown = 133709999
+        };
+
+        public IDisposable Source
+        {
+            get { return m_Source; }
+        }
+
+        public PDFDocument Document
+        {
+            get { return m_Document; }
+        }
+
+        public IntPtr NativePointer
+        {
+            get { return m_NativePointer; }
+        }
+
+        public void Dispose()
+        {
+            Dispose(true);
+            GC.SuppressFinalize(this);
+        }
+
+        protected virtual void Dispose(bool disposing)
+        {
+            if (!m_Disposed)
+            {
+                m_NativePointer = IntPtr.Zero;
+
+                PDFLibrary.RemoveRef("PDFAction");
+
+                m_Disposed = true;
+            }
+        }
+
+        /// <summary>
+        /// Gets the PDFDest object associated with this action.
+        /// </summary>
+        /// <returns></returns>
+        public PDFDest GetDest()
+        {
+            IntPtr destPtr = NativeMethods.FPDFAction_GetDest(m_Document.NativePointer, m_NativePointer);
+            if (destPtr != IntPtr.Zero)
+                return new PDFDest(this, destPtr);
+            return null;
+        }
+
+        public string GetFilePath()
+        {
+            if (string.IsNullOrEmpty(m_FilePath))
+            {
+                byte[] buffer = new byte[4096];
+
+                int filePathLength = (int)NativeMethods.FPDFAction_GetFilePath(m_NativePointer, buffer, (uint)buffer.Length);
+                if (filePathLength > 0)
+                    m_FilePath =
+                        Encoding.Unicode.GetString(Encoding.Convert(Encoding.ASCII, Encoding.Unicode, buffer, 0,
+                            filePathLength));
+            }
+
+            return m_FilePath;
+        }
+
+        /// <summary>
+        /// Gets type of current action.
+        /// </summary>
+        /// <returns></returns>
+        public ActionType GetActionType()
+        {
+            if (m_ActionType == ActionType.Unknown)
+                m_ActionType = (ActionType)NativeMethods.FPDFAction_GetType(m_NativePointer);
+            return m_ActionType;
+        }
+
+        /// <summary>
+        /// Gets URL assigned to the current action.
+        /// </summary>
+        /// <returns></returns>
+        public string GetURIPath()
+        {
+            if (string.IsNullOrEmpty(m_URIPath))
+            {
+                byte[] buffer = new byte[4096];
+
+                int uriLength = (int) NativeMethods.FPDFAction_GetURIPath(m_Document.NativePointer, m_NativePointer, buffer, (uint)buffer.Length);
+                if (uriLength > 0)
+                    m_URIPath =
+                        Encoding.Unicode.GetString(Encoding.Convert(Encoding.ASCII, Encoding.Unicode, buffer, 0,
+                            uriLength));
+            }
+
+            return m_URIPath;
+        }
+    }
+#endif
+}

+ 8 - 0
Assets/RTC/Paroxe/PDFRenderer/API/Action/PDFAction.cs.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: ddcd54ba05549cd43a24b7bac034aee0
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 

+ 107 - 0
Assets/RTC/Paroxe/PDFRenderer/API/Action/PDFActionHandlerHelper.cs

@@ -0,0 +1,107 @@
+
+
+using System.IO;
+
+namespace Paroxe.PdfRenderer
+{
+#if !UNITY_WEBGL
+    /// <summary>
+    /// Provides default action handling implementation.
+    /// </summary>
+    public static class PDFActionHandlerHelper
+    {
+        public static void ExecuteAction(IPDFDeviceActionHandler actionHandler, IPDFDevice device, PDFAction action)
+        {
+            if (action != null)
+            {
+                PDFAction.ActionType type = action.GetActionType();
+
+                switch (type)
+                {
+                    case PDFAction.ActionType.Unsupported:
+                        break;
+
+                    case PDFAction.ActionType.GoTo:
+                        PDFDest dest = action.GetDest();
+                        actionHandler.HandleGotoAction(device, dest.PageIndex);
+                        break;
+
+                    case PDFAction.ActionType.RemoteGoTo:
+                        string resolvedFilePath = actionHandler.HandleRemoteGotoActionPathResolving(device,
+                            action.GetFilePath());
+
+                        if (File.Exists(resolvedFilePath))
+                        {
+                            string password = actionHandler.HandleRemoteGotoActionPasswordResolving(device, resolvedFilePath);
+
+                            PDFDocument newDocument = new PDFDocument(resolvedFilePath, password);
+
+                            if (newDocument.IsValid)
+                            {
+	                            actionHandler.HandleRemoteGotoActionResolved(device, newDocument, action.GetDest().PageIndex);
+                            }
+                            else
+                            {
+	                            actionHandler.HandleRemoteGotoActionUnresolved(device, resolvedFilePath);
+                            }
+                        }
+                        else
+                        {
+	                        actionHandler.HandleRemoteGotoActionUnresolved(device, resolvedFilePath);
+                        }
+
+                        break;
+
+                    case PDFAction.ActionType.Uri:
+                        actionHandler.HandleUriAction(device, action.GetURIPath());
+                        break;
+
+                    case PDFAction.ActionType.Launch:
+                        actionHandler.HandleLaunchAction(device, action.GetFilePath());
+                        break;
+                }
+            }
+        }
+
+        public static void ExecuteBookmarkAction(IPDFDevice device, PDFBookmark bookmark)
+        {
+            if (device.BookmarksActionHandler != null)
+            {
+                PDFDest dest = bookmark.GetDest();
+
+                if (dest != null)
+                {
+                    device.BookmarksActionHandler.HandleGotoAction(device, dest.PageIndex);
+                }
+                else
+                {
+                    PDFAction action = bookmark.GetAction();
+
+                    if (action != null)
+                        ExecuteAction(device.BookmarksActionHandler, device, action);
+                }
+            }
+        }
+
+        public static void ExecuteLinkAction(IPDFDevice device, PDFLink link)
+        {
+            if (device.LinksActionHandler != null)
+            {
+                PDFDest dest = link.GetDest();
+
+                if (dest != null)
+                {
+                    device.LinksActionHandler.HandleGotoAction(device, dest.PageIndex);
+                }
+                else
+                {
+                    PDFAction action = link.GetAction();
+
+                    if (action != null)
+                        ExecuteAction(device.LinksActionHandler, device, action);
+                }
+            }
+        }
+    }
+#endif
+}

+ 8 - 0
Assets/RTC/Paroxe/PDFRenderer/API/Action/PDFActionHandlerHelper.cs.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 7607258334de5fb4f95ef10043bb34db
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 

+ 112 - 0
Assets/RTC/Paroxe/PDFRenderer/API/Action/PDFDest.cs

@@ -0,0 +1,112 @@
+using System;
+using Paroxe.PdfRenderer.Internal;
+
+namespace Paroxe.PdfRenderer
+{
+#if !UNITY_WEBGL
+    /// <summary>
+    /// Represents a destination into a PDF document.
+    /// </summary>
+    public class PDFDest : IDisposable
+    {
+        private bool m_Disposed;
+        private IntPtr m_NativePointer;
+        private IDisposable m_Source;
+        private PDFDocument m_Document;
+        private int m_PageIndex = -1;
+
+        public PDFDest(PDFAction action, IntPtr nativePointer)
+        {
+            if (action == null)
+                throw new NullReferenceException();
+            if (nativePointer == IntPtr.Zero)
+                throw new NullReferenceException();
+
+            PDFLibrary.AddRef("PDFDest");
+
+            m_Source = action;
+            m_Document = action.Document;
+
+            m_NativePointer = nativePointer;
+        }
+
+        public PDFDest(PDFLink link, IntPtr nativePointer)
+        {
+            if (link == null)
+                throw new NullReferenceException();
+            if (nativePointer == IntPtr.Zero)
+                throw new NullReferenceException();
+
+            PDFLibrary.AddRef("PDFDest");
+
+            m_Source = link;
+            m_Document = link.Page.Document;
+
+            m_NativePointer = nativePointer;
+        }
+
+        public PDFDest(PDFBookmark bookmark, IntPtr nativePointer)
+        {
+            if (bookmark == null)
+                throw new NullReferenceException();
+            if (nativePointer == IntPtr.Zero)
+                throw new NullReferenceException();
+
+            PDFLibrary.AddRef("PDFDest");
+
+            m_Source = bookmark;
+            m_Document = bookmark.Document;
+
+            m_NativePointer = nativePointer;
+        }
+
+        ~PDFDest()
+        {
+            Dispose(false);
+        }
+
+        public void Dispose()
+        {
+            Dispose(true);
+            GC.SuppressFinalize(this);
+        }
+
+        protected virtual void Dispose(bool disposing)
+        {
+            if (!m_Disposed)
+            {
+                m_NativePointer = IntPtr.Zero;
+
+                PDFLibrary.RemoveRef("PDFDest");
+
+                m_Disposed = true;
+            }
+        }
+
+        public PDFDocument Document
+        {
+            get { return m_Document; }
+        }
+
+        public IDisposable Source
+        {
+            get { return m_Source; }
+        }
+
+        public IntPtr NativePointer
+        {
+            get { return m_NativePointer; }
+        }
+
+        public int PageIndex
+        {
+            get
+            {
+                if (m_PageIndex < 0)
+                    m_PageIndex = (int)NativeMethods.FPDFDest_GetDestPageIndex(m_Document.NativePointer, m_NativePointer);
+                return m_PageIndex;
+            }
+        }
+    }
+#endif
+}

+ 8 - 0
Assets/RTC/Paroxe/PDFRenderer/API/Action/PDFDest.cs.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 86d728a53cd313647aeea29c2db64c9f
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 

+ 89 - 0
Assets/RTC/Paroxe/PDFRenderer/API/Action/PDFLink.cs

@@ -0,0 +1,89 @@
+using System;
+using Paroxe.PdfRenderer.Internal;
+
+namespace Paroxe.PdfRenderer
+{
+#if !UNITY_WEBGL
+    /// <summary>
+    /// Represents the annotation link in a PDF page.
+    /// </summary>
+    public class PDFLink : IDisposable
+    {
+        private bool m_Disposed;
+        private IntPtr m_NativePointer;
+        private PDFPage m_Page;
+
+        public PDFLink(PDFPage page, IntPtr nativePointer)
+        {
+            if (page == null)
+                throw new NullReferenceException();
+            if (nativePointer == IntPtr.Zero)
+                throw new NullReferenceException();
+
+            PDFLibrary.AddRef("PDFLink");
+
+            m_Page = page;
+
+            m_NativePointer = nativePointer;
+        }
+
+        ~PDFLink()
+        {
+            Dispose(false);
+        }
+
+        public void Dispose()
+        {
+            Dispose(true);
+            GC.SuppressFinalize(this);
+        }
+
+        protected virtual void Dispose(bool disposing)
+        {
+            if (!m_Disposed)
+            {
+                m_NativePointer = IntPtr.Zero;
+
+                PDFLibrary.RemoveRef("PDFLink");
+
+                m_Disposed = true;
+            }
+        }
+
+        public PDFPage Page
+        {
+            get { return m_Page; }
+        }
+
+        public IntPtr NativePointer
+        {
+            get { return m_NativePointer; }
+        }
+
+        /// <summary>
+        /// Gets the named destination assigned to a link. Return null if there is no destination associated with the link,
+        /// in this case the application should try GetAction() instead.
+        /// </summary>
+        /// <returns></returns>
+        public PDFDest GetDest()
+        {
+            IntPtr destPtr = NativeMethods.FPDFLink_GetDest(m_Page.Document.NativePointer, m_NativePointer);
+            if (destPtr != IntPtr.Zero)
+                return new PDFDest(this, destPtr);
+            return null;
+        }
+
+        /// <summary>
+        /// Gets the PDF action assigned to a link.
+        /// </summary>
+        /// <returns></returns>
+        public PDFAction GetAction()
+        {
+            IntPtr actionPtr = NativeMethods.FPDFLink_GetAction(m_NativePointer);
+            if (actionPtr != IntPtr.Zero)
+                return new PDFAction(this, actionPtr);
+            return null;
+        }
+    }
+#endif
+}

+ 8 - 0
Assets/RTC/Paroxe/PDFRenderer/API/Action/PDFLink.cs.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 1f52abc801cf0fc4ca927c58d54a09be
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 

+ 47 - 0
Assets/RTC/Paroxe/PDFRenderer/API/IPDFDevice.cs

@@ -0,0 +1,47 @@
+using UnityEngine;
+
+namespace Paroxe.PdfRenderer
+{
+    /// <summary>
+    /// Interface for device implementation. PDFViewer implements it. It allows to
+    /// decouple PDFViewer from the API
+    /// </summary>
+    public interface IPDFDevice
+    {
+        PDFDocument Document { get; }
+
+        Vector2 GetDevicePageSize(int pageIndex);
+        void GoToPage(int pageIndex);
+
+        IPDFDeviceActionHandler BookmarksActionHandler { get; set; }
+        IPDFDeviceActionHandler LinksActionHandler { get; set; }
+
+        bool AllowOpenURL { get; set; }
+
+#if !UNITY_WEBGL
+        void LoadDocument(PDFDocument document, int pageIndex);
+        void LoadDocument(PDFDocument document, string password, int pageIndex);
+
+        void LoadDocumentFromAsset(PDFAsset pdfAsset, int pageIndex);
+        void LoadDocumentFromAsset(PDFAsset pdfAsset, string password, int pageIndex);
+
+        void LoadDocumentFromResources(string folder, string fileName, int pageIndex);
+        void LoadDocumentFromResources(string folder, string fileName, string password, int pageIndex);
+
+        void LoadDocumentFromStreamingAssets(string folder, string fileName, int pageIndex);
+        void LoadDocumentFromStreamingAssets(string folder, string fileName, string password, int pageIndex);
+
+        void LoadDocumentFromPersistentData(string folder, string fileName, int pageIndex);
+        void LoadDocumentFromPersistentData(string folder, string fileName, string password, int pageIndex);
+
+        void LoadDocumentFromWeb(string url, int pageIndex);
+        void LoadDocumentFromWeb(string url, string password, int pageIndex);
+
+        void LoadDocumentFromBuffer(byte[] buffer, int pageIndex);
+        void LoadDocumentFromBuffer(byte[] buffer, string password, int pageIndex);
+
+        void LoadDocumentFromFile(string filePath, int pageIndex);
+        void LoadDocumentFromFile(string filePath, string password, int pageIndex);
+#endif
+    }
+}

+ 8 - 0
Assets/RTC/Paroxe/PDFRenderer/API/IPDFDevice.cs.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 0a15d6bb06fb7724abaf7a0fc2ca8ad5
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 

+ 26 - 0
Assets/RTC/Paroxe/PDFRenderer/API/PDFAsset.cs

@@ -0,0 +1,26 @@
+using UnityEngine;
+
+namespace Paroxe.PdfRenderer
+{
+    /// <summary>
+    /// For internal use only.
+    /// </summary>
+    public class PDFAsset : ScriptableObject
+    {
+        [SerializeField]
+        public byte[] m_FileContent;
+        [SerializeField]
+        public string m_Password;
+
+        public string Password
+        {
+            get { return m_Password; }
+            set { m_Password = value; }
+        }
+
+        public void Load(byte[] fileContent)
+        {
+            m_FileContent = fileContent;
+        }
+    }
+}

+ 8 - 0
Assets/RTC/Paroxe/PDFRenderer/API/PDFAsset.cs.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 282c5b611a6e8404ca6617367057c9d8
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 

+ 175 - 0
Assets/RTC/Paroxe/PDFRenderer/API/PDFBookmark.cs

@@ -0,0 +1,175 @@
+using System;
+using System.Collections.Generic;
+using Paroxe.PdfRenderer.Internal;
+
+namespace Paroxe.PdfRenderer
+{
+#if !UNITY_WEBGL
+    /// <summary>
+    /// Represents the bookmark into a PDF document.
+    /// </summary>
+    public class PDFBookmark : IDisposable
+    {
+        private bool m_Disposed;
+        private List<PDFBookmark> m_Bookmarks = new List<PDFBookmark>();
+        private PDFDocument m_Document;
+        private IntPtr m_NativePointer;
+        private PDFBookmark m_ParentBookmark;
+        private IPDFDevice m_Device;
+        private string m_Title;
+
+        public PDFBookmark(PDFDocument document, PDFBookmark parentBookmark, IntPtr nativePointer)
+            : this(document, parentBookmark, nativePointer, null)
+        {
+            if (document == null)
+                throw new NullReferenceException();
+        }
+
+        public PDFBookmark(PDFDocument document, PDFBookmark parentBookmark, IntPtr nativePointer, IPDFDevice device)
+        {
+            if (document == null)
+                throw new NullReferenceException();
+
+            m_ParentBookmark = parentBookmark;
+            m_NativePointer = nativePointer;
+            m_Document = document;
+            m_Device = device;
+
+            if (m_NativePointer == IntPtr.Zero)
+                m_Title = "ROOT";
+
+            PDFLibrary.AddRef("PDFBookmark");
+
+            PDFBookmark firstChild = GetFirstChild();
+
+            if (firstChild != null)
+            {
+                PDFBookmark previousSibling = firstChild;
+
+                while (previousSibling != null)
+                {
+                    m_Bookmarks.Add(previousSibling);
+                    previousSibling = previousSibling.GetNextSibling();
+                }
+            }
+        }
+
+        ~PDFBookmark()
+        {
+            Dispose(false);
+        }
+
+        public void Dispose()
+        {
+            Dispose(true);
+            GC.SuppressFinalize(this);
+        }
+
+        protected virtual void Dispose(bool disposing)
+        {
+            if (!m_Disposed)
+            {
+                m_NativePointer = IntPtr.Zero;
+
+                PDFLibrary.RemoveRef("PDFBookmark");
+
+                m_Disposed = true;
+            }
+        }
+
+        public PDFDocument Document
+        {
+            get { return m_Document; }
+        }
+
+        public int ChildCount
+        {
+            get { return m_Bookmarks.Count; }
+        }
+
+        public bool IsTopLevelBookmark
+        {
+            get { return (m_ParentBookmark == null || m_ParentBookmark.NativePointer == IntPtr.Zero); }
+        }
+
+        public PDFBookmark Parent
+        {
+            get { return m_ParentBookmark; }
+        }
+
+        public IntPtr NativePointer
+        {
+            get { return m_NativePointer; }
+        }
+
+        public IList<PDFBookmark> GetChildrenBookmarks()
+        {
+            return m_Bookmarks;
+        }
+
+        public IEnumerable<PDFBookmark> EnumerateChildrenBookmarks()
+        {
+            foreach (PDFBookmark child in m_Bookmarks)
+            {
+                yield return child;
+            }
+        }
+
+        public void ExecuteBookmarkAction()
+        {
+            if (m_Device != null)
+                PDFActionHandlerHelper.ExecuteBookmarkAction(m_Device, this);
+        }
+
+        public PDFBookmark GetChild(int index)
+        {
+            return m_Bookmarks[index];
+        }
+
+        public string GetTitle()
+        {
+            if (string.IsNullOrEmpty(m_Title))
+            {
+                byte[] buffer = new byte[4096];
+
+                int length = (int) NativeMethods.FPDFBookmark_GetTitle(m_NativePointer, buffer, (uint)buffer.Length);
+                if (length > 0)
+                    m_Title = PDFLibrary.Encoding.GetString(buffer);
+            }
+            return m_Title;
+        }
+
+        public PDFAction GetAction()
+        {
+            IntPtr actionPtr = NativeMethods.FPDFBookmark_GetAction(m_NativePointer);
+            if (actionPtr != IntPtr.Zero)
+                return new PDFAction(this, actionPtr);
+            return null;
+        }
+
+        public PDFDest GetDest()
+        {
+            IntPtr destPtr = NativeMethods.FPDFBookmark_GetDest(m_Document.NativePointer, m_NativePointer);
+            if (destPtr != IntPtr.Zero)
+                return new PDFDest(this, destPtr);
+            return null;
+        }
+
+        public PDFBookmark GetFirstChild()
+        {
+            IntPtr childPtr = NativeMethods.FPDFBookmark_GetFirstChild(m_Document.NativePointer, m_NativePointer);
+            if (childPtr != IntPtr.Zero)
+                return new PDFBookmark(m_Document, this, childPtr, m_Device);
+            return null;
+        }
+
+        public PDFBookmark GetNextSibling()
+        {
+            IntPtr nextPtr = NativeMethods.FPDFBookmark_GetNextSibling(m_Document.NativePointer, m_NativePointer);
+            if (nextPtr != IntPtr.Zero)
+                return new PDFBookmark(m_Document, m_ParentBookmark, nextPtr, m_Device);
+            return null;
+        }
+    }
+#endif
+}

+ 8 - 0
Assets/RTC/Paroxe/PDFRenderer/API/PDFBookmark.cs.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: aba473fa03006894eb50487d02bbc754
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 

+ 398 - 0
Assets/RTC/Paroxe/PDFRenderer/API/PDFDocument.cs

@@ -0,0 +1,398 @@
+using Paroxe.PdfRenderer.WebGL;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+using UnityEngine;
+using Paroxe.PdfRenderer.Internal;
+using System.IO;
+
+namespace Paroxe.PdfRenderer
+{
+    /// <summary>
+    /// Represents a PDF document. This class is the entry point of all functionalities.
+    /// </summary>
+    public class PDFDocument : IPDFDocumentInternal, IDisposable
+    {
+        private bool m_Disposed;
+        private bool m_Disposing;
+        private IntPtr m_NativePointer;
+        private GCHandle m_BufferHandle;
+        private byte[] m_DocumentBuffer;
+        private bool m_ValidDocument;
+        private PDFRenderer m_Renderer;
+        private HashSet<PDFPage> m_LoadedPages;
+
+        public static PDFJS_Promise<PDFDocument> LoadDocumentFromUrlAsync(string url)
+        {
+            PDFJS_Promise<PDFDocument> documentPromise = new PDFJS_Promise<PDFDocument>();
+
+#if !UNITY_WEBGL || UNITY_EDITOR
+
+            PDFJS_Library.Instance.PreparePromiseCoroutine(LoadDocumentFromWWWCoroutine, documentPromise, url).Start();
+#else
+            LoadDocumentParameters parameters = new LoadDocumentParameters();
+            parameters.url = url;
+
+            PDFJS_Library.Instance.PreparePromiseCoroutine(LoadDocumentCoroutine, documentPromise, parameters).Start();
+#endif
+
+            return documentPromise;
+        }
+
+#if !UNITY_WEBGL || UNITY_EDITOR
+        private static IEnumerator LoadDocumentFromWWWCoroutine(PDFJS_PromiseCoroutine promiseCoroutine, IPDFJS_Promise promise, object urlString)
+        {
+            PDFJS_Promise<PDFDocument> documentPromise = promise as PDFJS_Promise<PDFDocument>;
+
+            PDFLibrary.Instance.EnsureInitialized();
+            while (!PDFLibrary.Instance.IsInitialized)
+                yield return null;
+
+            string url = urlString as string;
+
+            PDFWebRequest www = new PDFWebRequest(url);
+            www.SendWebRequest();
+
+            yield return www;
+
+            if (string.IsNullOrEmpty(www.error))
+            {
+                documentPromise.HasFinished = true;
+                documentPromise.HasSucceeded = true;
+                documentPromise.HasReceivedJSResponse = true;
+                documentPromise.Result = new PDFDocument(www.bytes);
+
+                promiseCoroutine.ExecuteThenAction(true, documentPromise.Result);
+            }
+            else
+            {
+                documentPromise.HasFinished = true;
+                documentPromise.HasSucceeded = false;
+
+                promiseCoroutine.ExecuteThenAction(false, null);
+            }
+
+            www.Dispose();
+            www = null;
+        }
+#endif
+
+        public static PDFJS_Promise<PDFDocument> LoadDocumentFromBytesAsync(byte[] bytes)
+        {
+            PDFJS_Promise<PDFDocument> documentPromise = new PDFJS_Promise<PDFDocument>();
+
+#if !UNITY_WEBGL || UNITY_EDITOR
+            documentPromise.HasFinished = true;
+            documentPromise.HasSucceeded = true;
+            documentPromise.HasReceivedJSResponse = true;
+            documentPromise.Result = new PDFDocument(bytes);
+#else
+            LoadDocumentParameters parameters = new LoadDocumentParameters();
+            parameters.bytes = bytes;
+
+            PDFJS_Library.Instance.PreparePromiseCoroutine(LoadDocumentCoroutine, documentPromise, parameters).Start();
+#endif
+
+            return documentPromise;
+        }
+
+        public PDFDocument(IntPtr nativePointer)
+        {
+            PDFLibrary.AddRef("PDFDocument");
+
+            m_NativePointer = nativePointer;
+            m_ValidDocument = true;
+        }
+
+#if !UNITY_WEBGL || UNITY_EDITOR
+        /// <summary>
+        /// Open PDF Document with the specified byte array.
+        /// </summary>
+        /// <param name="buffer"></param>
+        public PDFDocument(byte[] buffer)
+            : this(buffer, "")
+        { }
+
+        /// <summary>
+        /// Open PDF Document with the specified byte array.
+        /// </summary>
+        /// <param name="buffer"></param>
+        /// <param name="password">Can be null or empty</param>
+        public PDFDocument(byte[] buffer, string password)
+        {
+            PDFLibrary.AddRef("PDFDocument");
+
+            CommonInit(buffer, password);
+        }
+
+        /// <summary>
+        /// Open PDF Document located at the specified path
+        /// </summary>
+        /// <param name="filePath"></param>
+        public PDFDocument(string filePath)
+            : this(filePath, "")
+        { }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="filePath"></param>
+        /// <param name="password">Can be null or empty</param>
+        public PDFDocument(string filePath, string password)
+        {
+            PDFLibrary.AddRef("PDFDocument");
+
+            CommonInit(File.ReadAllBytes(filePath), password);
+        }
+
+#endif
+
+        ~PDFDocument()
+        {
+            Dispose(false);
+        }
+
+        protected virtual void Dispose(bool _)
+        {
+	        if (!m_Disposed)
+	        {
+		        m_Disposing = true;
+
+                lock (PDFLibrary.nativeLock)
+                {
+                    if (m_NativePointer != IntPtr.Zero)
+                    {
+	                    if (m_LoadedPages != null)
+	                    {
+		                    foreach (PDFPage page in m_LoadedPages)
+			                    page.Dispose();
+
+		                    m_LoadedPages = null;
+                        }
+
+#if UNITY_WEBGL && !UNITY_EDITOR
+                        NativeMethods.PDFJS_CloseDocument(m_NativePointer.ToInt32());
+#else
+                        NativeMethods.FPDF_CloseDocument(m_NativePointer);
+#endif
+                        if (m_DocumentBuffer != null)
+                            m_BufferHandle.Free();
+
+                        m_NativePointer = IntPtr.Zero;
+                    }
+                }
+
+                PDFLibrary.RemoveRef("PDFDocument");
+
+                m_Disposing = false;
+                m_Disposed = true;
+            }
+        }
+
+        void IPDFDocumentInternal.OnPageClose(PDFPage page)
+        {
+	        if (m_LoadedPages != null && !m_Disposing)
+		        m_LoadedPages.Remove(page);
+        }
+
+        public void Dispose()
+        {
+            Dispose(true);
+            GC.SuppressFinalize(this);
+        }
+
+        /// <summary>
+        /// Return a convenience PDFRenderer instance. 
+        /// </summary>
+        public PDFRenderer Renderer
+        {
+            get
+            {
+                if (m_Renderer == null)
+                    m_Renderer = new PDFRenderer();
+                return m_Renderer;
+            }
+        }
+
+        /// <summary>
+        /// The byte array of the document.
+        /// </summary>
+        public byte[] DocumentBuffer
+        {
+            get { return m_DocumentBuffer; }
+        }
+
+        /// <summary>
+        /// Return if the document is valid. The document can be invalid if the password is invalid or if the
+        /// document itseft is corrupted. See PDFLibrary.GetLastError.
+        /// </summary>
+        public bool IsValid
+        {
+            get { return m_ValidDocument; }
+        }
+
+        public IntPtr NativePointer
+        {
+            get { return m_NativePointer; }
+        }
+
+        public int GetPageCount()
+        {
+#if UNITY_WEBGL && !UNITY_EDITOR
+            return NativeMethods.PDFJS_GetPageCount(m_NativePointer.ToInt32());
+#else
+            return NativeMethods.FPDF_GetPageCount(m_NativePointer);
+#endif
+        }
+
+#if !UNITY_WEBGL || UNITY_EDITOR
+        public Vector2 GetPageSize(int pageIndex)
+        {
+            double width;
+            double height;
+
+            NativeMethods.FPDF_GetPageSizeByIndex(m_NativePointer, pageIndex, out width, out height);
+
+            return new Vector2((float)width, (float)height);
+        }
+#endif
+
+#if !UNITY_WEBGL || UNITY_EDITOR
+        public int GetPageWidth(int pageIndex)
+        {
+            double width;
+            double height;
+
+            NativeMethods.FPDF_GetPageSizeByIndex(m_NativePointer, pageIndex, out width, out height);
+
+            return (int)width;
+        }
+#endif
+
+#if !UNITY_WEBGL || UNITY_EDITOR
+        public int GetPageHeight(int pageIndex)
+        {
+            double width;
+            double height;
+
+            NativeMethods.FPDF_GetPageSizeByIndex(m_NativePointer, pageIndex, out width, out height);
+
+            return (int)height;
+        }
+#endif
+
+#if !UNITY_WEBGL
+        /// <summary>
+        /// Return the root bookmark of the document.
+        /// </summary>
+        /// <returns></returns>
+        public PDFBookmark GetRootBookmark()
+        {
+            return GetRootBookmark(null);
+        }
+#endif
+
+#if !UNITY_WEBGL
+        /// <summary>
+        /// Return the root bookmark of the document.
+        /// </summary>
+        /// <param name="device">Pass the device that will receive bookmarks action</param>
+        /// <returns></returns>
+        public PDFBookmark GetRootBookmark(IPDFDevice device)
+        {
+            return new PDFBookmark(this, null, IntPtr.Zero, device);
+        }
+#endif
+
+#if !UNITY_WEBGL || UNITY_EDITOR
+        public PDFPage GetPage(int index)
+        {
+            PDFPage page = new PDFPage(this, index);
+
+            if (m_LoadedPages == null)
+	            m_LoadedPages = new HashSet<PDFPage>();
+
+            m_LoadedPages.Add(page);
+
+            return page;
+        }
+#endif
+
+        public PDFJS_Promise<PDFPage> GetPageAsync(int index)
+        {
+            return PDFPage.LoadPageAsync(this, index);
+        }
+
+        private void CommonInit(byte[] buffer, string password)
+        {
+            m_DocumentBuffer = buffer;
+
+            if (m_DocumentBuffer != null)
+            {
+#if !UNITY_WEBGL || UNITY_EDITOR
+
+                m_BufferHandle = GCHandle.Alloc(m_DocumentBuffer, GCHandleType.Pinned);
+
+                m_NativePointer = NativeMethods.FPDF_LoadMemDocument(m_BufferHandle.AddrOfPinnedObject(), m_DocumentBuffer.Length, password);
+#endif
+
+                m_ValidDocument = (m_NativePointer != IntPtr.Zero);
+            }
+            else
+            {
+                m_ValidDocument = false;
+            }
+        }
+
+#if UNITY_WEBGL && !UNITY_EDITOR
+        class LoadDocumentParameters
+        {
+            public string url;
+            public byte[] bytes;
+        }
+
+        private static IEnumerator LoadDocumentCoroutine(PDFJS_PromiseCoroutine promiseCoroutine, IPDFJS_Promise promise, object pars)
+        {
+            PDFJS_Promise<PDFDocument> documentPromise = promise as PDFJS_Promise<PDFDocument>;
+
+            PDFLibrary.Instance.EnsureInitialized();
+            while (!PDFLibrary.Instance.IsInitialized)
+                yield return null;
+
+            LoadDocumentParameters parameters = pars as LoadDocumentParameters;
+
+            if (!string.IsNullOrEmpty(parameters.url))
+                NativeMethods.PDFJS_LoadDocumentFromURL(promise.PromiseHandle, parameters.url);
+            else
+                NativeMethods.PDFJS_LoadDocumentFromBytes(promise.PromiseHandle, Convert.ToBase64String(parameters.bytes));
+
+            while (!promiseCoroutine.Promise.HasReceivedJSResponse)
+                yield return null;
+
+            if (documentPromise.HasSucceeded)
+            {
+                int documentHandle = int.Parse(promiseCoroutine.Promise.JSObjectHandle);
+                PDFDocument document = new PDFDocument(new IntPtr(documentHandle));
+
+                documentPromise.Result = document;
+                documentPromise.HasFinished = true;
+
+                promiseCoroutine.ExecuteThenAction(true, documentHandle);
+            }
+            else
+            {
+                documentPromise.Result = null;
+                documentPromise.HasFinished = true;
+
+                promiseCoroutine.ExecuteThenAction(false, null);
+            }
+        }
+#endif
+    }
+
+    public interface IPDFDocumentInternal
+    {
+	    void OnPageClose(PDFPage page);
+    }
+}

+ 8 - 0
Assets/RTC/Paroxe/PDFRenderer/API/PDFDocument.cs.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 642b81f54b7c3b743b474be99d3905cc
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 

+ 278 - 0
Assets/RTC/Paroxe/PDFRenderer/API/PDFLibrary.cs

@@ -0,0 +1,278 @@
+using System;
+using System.Collections;
+using Paroxe.PdfRenderer.Internal;
+using System.Text;
+using UnityEngine;
+
+namespace Paroxe.PdfRenderer
+{
+    public class PDFLibrary : IDisposable
+    {
+        public static readonly Encoding Encoding = new UnicodeEncoding(false, false, false);
+
+#if (UNITY_IOS || UNITY_WEBGL) && !UNITY_EDITOR
+        public const string PLUGIN_ASSEMBLY = "__Internal";
+#else
+        public const string PLUGIN_ASSEMBLY = "pdfrenderer";
+#endif
+
+        public static object nativeLock = new object();
+
+        public enum ErrorCode
+        {
+            ErrSuccess = 0, // No error.
+            ErrUnknown = 1, // Unknown error.
+            ErrFile = 2, // File not found or could not be opened.
+            ErrFormat = 3, // File not in PDF format or corrupted.
+            ErrPassword = 4, // Password required or incorrect password.
+            ErrSecurity = 5, // Unsupported security scheme.
+            ErrPage = 6 // Page not found or content error.
+        }
+
+        private static bool m_Disposed;
+        private static PDFLibrary m_Instance;
+        private static int m_RefCount;
+        private
+#if UNITY_WEBGL && !UNITY_EDITOR
+        static
+#endif
+        bool m_IsInitialized;
+        private static bool m_AlreadyDestroyed;
+
+#if UNITY_WEBGL || !UNITY_EDITOR
+        private static bool m_AlreadyInitialized;
+#endif
+
+        private PDFLibrary()
+        {
+#if UNITY_WEBGL && !UNITY_EDITOR
+            if (!m_AlreadyInitialized)
+            {
+                NativeMethods.PDFJS_InitLibrary();
+                m_AlreadyInitialized = true;
+            }
+#else
+
+#if !UNITY_EDITOR
+            if (!m_AlreadyInitialized)
+#endif
+            {
+                m_IsInitialized = true;
+                m_AlreadyDestroyed = false;
+
+                NativeMethods.FPDF_InitLibrary();
+#if !UNITY_EDITOR
+                m_AlreadyInitialized = true;
+#endif
+            }
+#endif
+        }
+
+        ~PDFLibrary()
+        {
+            Dispose(false);
+        }
+
+        /// <summary>
+        /// Return the last error code.
+        /// </summary>
+        /// <returns></returns>
+        public static ErrorCode GetLastError()
+        {
+#if UNITY_WEBGL && !UNITY_EDITOR
+            return ErrorCode.ErrSuccess;
+#else
+            Instance.EnsureInitialized();
+            return (ErrorCode) NativeMethods.FPDF_GetLastError();
+#endif
+        }
+
+        public void Dispose()
+        {
+            Dispose(true);
+            GC.SuppressFinalize(this);
+        }
+
+        protected virtual void Dispose(bool disposing)
+        {
+            lock (nativeLock)
+            {
+                if (!m_Disposed)
+                {
+                    if (m_RefCount == 0)
+                    {
+#if PDFRENDERER_DEBUG
+                        PrintInstanceMap();
+#endif
+
+#if !UNITY_WEBGL || UNITY_EDITOR
+                        if (!m_AlreadyDestroyed)
+                        {
+                            m_AlreadyDestroyed = true;
+#if UNITY_EDITOR
+	                        NativeMethods.FPDF_DestroyLibrary();
+#endif
+                        }
+#endif
+
+                        m_Disposed = true;
+                        m_Instance = null;
+                    }
+
+                    m_Disposed = true;
+                }
+            }
+        }
+
+#if PDFRENDERER_DEBUG
+        private static Dictionary<string, int> s_InstanceMap = new Dictionary<string, int>();
+
+        private static void PrintInstanceMap()
+        {
+            foreach (string key in s_InstanceMap.Keys)
+            {
+                Debug.Log(key + " Count: " + s_InstanceMap[key]);
+            }
+        }
+#endif
+
+        internal static void AddRef(string token)
+        {
+            lock (nativeLock)
+            {
+#if PDFRENDERER_DEBUG
+                if (s_InstanceMap.ContainsKey(token))
+                    s_InstanceMap[token] = s_InstanceMap[token] + 1;
+                else
+                    s_InstanceMap.Add(token, 1);
+#endif
+
+                ++m_RefCount;
+                Instance.EnsureInitialized();
+            }
+        }
+
+        internal static void RemoveRef(string token)
+        {
+            lock (nativeLock)
+            {
+                --m_RefCount;
+
+#if PDFRENDERER_DEBUG
+                s_InstanceMap[token] = s_InstanceMap[token] - 1;
+#endif
+                if (m_RefCount == 0)
+                {
+                    if (m_Disposed)
+                    {
+#if PDFRENDERER_DEBUG
+                        PrintInstanceMap();
+#endif
+#if !UNITY_WEBGL || UNITY_EDITOR
+                        if (!m_AlreadyDestroyed)
+                        {
+                            m_AlreadyDestroyed = true;
+                            NativeMethods.FPDF_DestroyLibrary();
+                        }
+#endif
+
+                        m_Instance = null;
+                    }
+                    else
+                        m_Instance.Dispose();
+                }
+            }
+        }
+
+        public static PDFLibrary Instance
+        {
+            get
+            {
+                if (m_Instance == null)
+                    m_Instance = new PDFLibrary();
+
+                return m_Instance;
+            }
+        }
+
+        public void EnsureInitialized()
+        {
+        }
+
+        public bool IsInitialized
+        {
+            get { return m_IsInitialized; }
+            set { m_IsInitialized = value; }
+        }
+
+        public static int RefCount
+        {
+            get { return m_RefCount; }
+        }
+
+        public void ForceGabageCollection()
+        {
+            if (PDFLibraryMemoryWatcher.I != null)
+                PDFLibraryMemoryWatcher.I.ForceGarbageCollection = true;
+        }
+    }
+
+    public class PDFLibraryMemoryWatcher : MonoBehaviour
+    {
+        private static PDFLibraryMemoryWatcher s_I;
+
+        public static PDFLibraryMemoryWatcher I
+        {
+            get { return s_I; }
+        }
+
+        [RuntimeInitializeOnLoadMethod]
+        private static void EnsureInitialized()
+        {
+            if (s_I == null)
+            {
+                GameObject newObj = new GameObject("PDFLibraryMemoryWatcher");
+                newObj.hideFlags = HideFlags.HideInHierarchy;
+                DontDestroyOnLoad(newObj);
+
+                s_I = newObj.AddComponent<PDFLibraryMemoryWatcher>();
+            }
+        }
+
+
+        public bool ForceGarbageCollection { get; set; }
+
+        private const int CollectPressure = 16;
+        private const float CollectPressureInterval = 2.0f;
+        private int m_LastCollectRefCount;
+
+        private IEnumerator Start()
+        {
+            while (true)
+            {
+                if (ForceGarbageCollection || Mathf.Abs(m_LastCollectRefCount - PDFLibrary.RefCount) >= CollectPressure)
+                {
+                    m_LastCollectRefCount = PDFLibrary.RefCount;
+
+                    if (ForceGarbageCollection)
+                    {
+                        ForceGarbageCollection = false;
+
+                        yield return null;
+                    }
+
+                    GC.Collect();
+
+                    float time = Time.unscaledTime;
+
+                    while (Time.unscaledTime - time < CollectPressureInterval)
+                        yield return null;
+                }
+                else
+                {
+                    yield return null;
+                }
+            }
+        }
+    }
+}

+ 10 - 0
Assets/RTC/Paroxe/PDFRenderer/API/PDFLibrary.cs.meta

@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: eba5e753a54811c4fbaf3500f1c183b0
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 360 - 0
Assets/RTC/Paroxe/PDFRenderer/API/PDFPage.cs

@@ -0,0 +1,360 @@
+using Paroxe.PdfRenderer.WebGL;
+using System;
+using System.Collections.Generic;
+using Paroxe.PdfRenderer.Internal;
+using UnityEngine;
+using System.Collections; // For WebGL
+
+namespace Paroxe.PdfRenderer
+{
+    /// <summary>
+    /// Represents a PDF page inside document.
+    /// </summary>
+    public class PDFPage : IIPDFPageInternal, IDisposable, IEquatable<PDFPage>
+    {
+        private bool m_Disposed;
+        private IntPtr m_NativePointer;
+        private PDFDocument m_Document;
+        private int m_PageIndex;
+#if !UNITY_WEBGL
+		private bool m_Disposing;
+        private HashSet<PDFTextPage> m_LoadedTextPages;
+#endif
+
+#if !UNITY_WEBGL || UNITY_EDITOR
+	    private static Dictionary<IntPtr, int> s_InstanceMap = new Dictionary<IntPtr, int>();
+#endif
+
+        /// <summary>
+        /// Rotations are clockwise
+        /// </summary>
+        public enum PageRotation
+        {
+            Normal = 0,
+            Rotate90 = 1,
+            Rotate180 = 2,
+            Rotate270 = 3
+        };
+
+        public static PDFJS_Promise<PDFPage> LoadPageAsync(PDFDocument document, int pageIndex)
+        {
+            PDFJS_Promise<PDFPage> pagePromise = new PDFJS_Promise<PDFPage>();
+#if UNITY_WEBGL && !UNITY_EDITOR
+
+
+            LoadPageParameters parameters = new LoadPageParameters(document, pageIndex);
+
+            PDFJS_Library.Instance.PreparePromiseCoroutine(LoadPageCoroutine, pagePromise, parameters).Start();
+
+
+#else
+            pagePromise.HasFinished = true;
+            pagePromise.HasSucceeded = true;
+            pagePromise.HasReceivedJSResponse = true;
+            pagePromise.Result = document.GetPage(pageIndex);
+#endif
+
+            return pagePromise;
+        }
+
+#if UNITY_WEBGL && !UNITY_EDITOR
+        public PDFPage(PDFDocument document, IntPtr pageHandle, int pageIndex)
+        {
+            PDFLibrary.AddRef("PDFPage");
+
+            m_Document = document;
+            m_PageIndex = pageIndex;
+
+            m_NativePointer = pageHandle;
+        }
+#endif
+
+#if !UNITY_WEBGL || UNITY_EDITOR
+        public PDFPage(PDFDocument document, int pageIndex)
+        {
+            if (document == null)
+                throw new NullReferenceException();
+            if (pageIndex < 0)
+                throw new ArgumentOutOfRangeException();
+
+            PDFLibrary.AddRef("PDFPage");
+
+            m_Document = document;
+            m_PageIndex = pageIndex;
+
+            m_NativePointer = NativeMethods.FPDF_LoadPage(document.NativePointer, m_PageIndex);
+
+            if (m_NativePointer != IntPtr.Zero)
+            {
+                if (s_InstanceMap.ContainsKey(m_NativePointer))
+                {
+                    s_InstanceMap[m_NativePointer] = s_InstanceMap[m_NativePointer] + 1;
+                }
+                else
+                    s_InstanceMap[m_NativePointer] = 1;
+            }
+        }
+#endif
+
+        ~PDFPage()
+        {
+            Dispose(false);
+        }
+
+        public void Dispose()
+        {
+            Dispose(true);
+            GC.SuppressFinalize(this);
+        }
+
+        protected virtual void Dispose(bool _)
+        {
+            if (!m_Disposed)
+            {
+#if !UNITY_WEBGL
+	            m_Disposing = true;
+#endif
+
+                if (m_NativePointer != IntPtr.Zero)
+                {
+#if !UNITY_WEBGL || UNITY_EDITOR
+
+                    lock (PDFLibrary.nativeLock)
+                    {
+                        s_InstanceMap[m_NativePointer] = s_InstanceMap[m_NativePointer] - 1;
+
+                        if (s_InstanceMap[m_NativePointer] == 0)
+                        {
+#if !UNITY_WEBGL
+	                        if (m_LoadedTextPages != null)
+                            {
+	                            foreach (PDFTextPage textPage in m_LoadedTextPages)
+		                            textPage.Dispose();
+
+	                            m_LoadedTextPages = null;
+                            }
+#endif
+
+                            ((IPDFDocumentInternal)m_Document).OnPageClose(this);
+
+                            NativeMethods.FPDF_ClosePage(m_NativePointer);
+
+	                        s_InstanceMap.Remove(m_NativePointer);
+                            m_NativePointer = IntPtr.Zero;
+                        }
+                    }
+
+#else
+					NativeMethods.PDFJS_ClosePage(m_NativePointer.ToInt32());
+                    m_NativePointer = IntPtr.Zero;
+#endif
+                }
+
+                PDFLibrary.RemoveRef("PDFPage");
+
+#if !UNITY_WEBGL
+                m_Disposing = false;
+#endif
+                m_Disposed = true;
+            }
+        }
+
+#if !UNITY_WEBGL
+        void IIPDFPageInternal.OnTextPageClose(PDFTextPage textPage)
+        {
+	        if (m_LoadedTextPages != null && !m_Disposing)
+		        m_LoadedTextPages.Remove(textPage);
+        }
+#endif
+
+        public IntPtr NativePointer
+        {
+            get { return m_NativePointer; }
+        }
+
+        public PDFDocument Document
+        {
+            get { return m_Document; }
+        }
+
+        public int PageIndex
+        {
+            get { return m_PageIndex; }
+        }
+
+        public Vector2 GetPageSize(float scale = 1.0f)
+        {
+#if !UNITY_WEBGL || UNITY_EDITOR
+            return m_Document.GetPageSize(m_PageIndex) * scale;
+#else
+            return new Vector2(
+                NativeMethods.PDFJS_GetPageWidth(m_NativePointer.ToInt32(), scale),
+                NativeMethods.PDFJS_GetPageHeight(m_NativePointer.ToInt32(), scale));
+#endif
+
+        }
+
+#if UNITY_WEBGL && !UNITY_EDITOR
+        internal static Vector2 GetPageSize(IntPtr pageHandle, float scale = 1.0f)
+        {
+
+            return new Vector2(
+                NativeMethods.PDFJS_GetPageWidth(pageHandle.ToInt32(), scale),
+                NativeMethods.PDFJS_GetPageHeight(pageHandle.ToInt32(), scale));
+
+        }
+#endif
+
+#if !UNITY_WEBGL
+        /// <summary>
+        /// Return an instance of PDFTextPage that give access the the current page text content
+        /// </summary>
+        /// <returns></returns>
+        public PDFTextPage GetTextPage()
+        {
+            PDFTextPage textPage = new PDFTextPage(this);
+
+            if (m_LoadedTextPages == null)
+	            m_LoadedTextPages = new HashSet<PDFTextPage>();
+
+            m_LoadedTextPages.Add(textPage);
+
+            return textPage;
+        }
+
+        public PDFLink GetLinkAtPoint(Vector2 pagePoint)
+        {
+            IntPtr linkPtr = NativeMethods.FPDFLink_GetLinkAtPoint(m_NativePointer, pagePoint.x, pagePoint.y);
+            if (linkPtr != IntPtr.Zero)
+                return new PDFLink(this, linkPtr);
+            return null;
+        }
+
+        public PDFLink GetLinkAtPoint(double pageX, double pageY)
+        {
+            IntPtr linkPtr = NativeMethods.FPDFLink_GetLinkAtPoint(m_NativePointer, pageX, pageY);
+            if (linkPtr != IntPtr.Zero)
+                return new PDFLink(this, linkPtr);
+            return null;
+        }
+
+        public Vector2 DeviceToPage(int startX, int startY, int sizeX, int sizeY, PageRotation rotation, int deviceX, int deviceY)
+        {
+            double pageX;
+            double pageY;
+            NativeMethods.FPDF_DeviceToPage(m_NativePointer, startX, startY, sizeX, sizeY, (int)rotation, deviceX, deviceY, out pageX,
+                out pageY);
+
+            return new Vector2((float)pageX, (float)pageY);
+        }
+
+        public Vector2 PageToDevice(int startX, int startY, int sizeX, int sizeY, PageRotation rotation, int pageX, int pageY)
+        {
+            int deviceX;
+            int deviceY;
+            NativeMethods.FPDF_PageToDevice(m_NativePointer, startX, startY, sizeX, sizeY, (int)rotation, pageX, pageY, out deviceX,
+                out deviceY);
+
+            return new Vector2(deviceX, deviceY);
+        }
+
+        public Vector2 ConvertPagePositionToUnityUIDevicePosition(Vector2 pagePoint, Vector2 devicePageSize)
+        {
+            pagePoint = pagePoint.x / (devicePageSize.y / devicePageSize.x) * Vector2.right + pagePoint.y * Vector2.up;
+
+            int device_x;
+            int device_y;
+
+            NativeMethods.FPDF_PageToDevice(m_NativePointer, 0, 0, (int)devicePageSize.y, (int)devicePageSize.y, 0, pagePoint.x,
+                pagePoint.y, out device_x, out device_y);
+
+            return new Vector2(device_x, device_y);
+        }
+
+        public Rect ConvertPageRectToDeviceRect(Rect pageRect, Vector2 devicePageSize)
+        {
+            Vector2 min = ConvertPagePositionToUnityUIDevicePosition(pageRect.min, devicePageSize);
+            float mx = pageRect.max.x;
+            float my = (pageRect.min - (pageRect.max - pageRect.min)).y;
+            Vector2 max = ConvertPagePositionToUnityUIDevicePosition(new Vector2(mx, my), devicePageSize);
+            Rect rect = new Rect();
+            rect.min = min;
+            rect.max = max;
+            return rect;
+        }
+
+        public Vector2 ConvertUnityUIDevicePositionToPagePosition(Vector2 devicePoint, Vector2 devicePageSize)
+        {
+            devicePoint = devicePoint.x * (devicePageSize.y / devicePageSize.x) * Vector2.right + devicePoint.y * Vector2.up;
+
+            double page_x;
+            double page_y;
+
+            NativeMethods.FPDF_DeviceToPage(m_NativePointer, 0, 0, (int)devicePageSize.y, (int)devicePageSize.y, 0,
+                (int)devicePoint.x, (int)devicePoint.y, out page_x, out page_y);
+
+            return new Vector2((float)page_x, (float)page_y);
+        }
+
+#endif
+        public bool Equals(PDFPage other)
+        {
+            return (m_NativePointer != IntPtr.Zero && m_NativePointer == other.m_NativePointer);
+        }
+
+#if UNITY_WEBGL && !UNITY_EDITOR
+        private class LoadPageParameters
+        {
+            public PDFDocument document;
+            public int pageIndex;
+
+            public LoadPageParameters(PDFDocument document, int pageIndex)
+            {
+                this.document = document;
+                this.pageIndex = pageIndex;
+            }
+        }
+
+        private static IEnumerator LoadPageCoroutine(PDFJS_PromiseCoroutine promiseCoroutine, IPDFJS_Promise promise, object par)
+        {
+            PDFLibrary.Instance.EnsureInitialized();
+            while (!PDFLibrary.Instance.IsInitialized)
+                yield return null;
+
+            PDFJS_Promise<PDFPage> pagePromise = promise as PDFJS_Promise<PDFPage>;
+
+            LoadPageParameters parameters = par as LoadPageParameters;
+
+            NativeMethods.PDFJS_LoadPage(promise.PromiseHandle, parameters.document.NativePointer.ToInt32(), parameters.pageIndex + 1);
+
+            while (!pagePromise.HasReceivedJSResponse)
+                yield return null;
+
+            if (pagePromise.HasSucceeded)
+            {
+                int pageHandle = int.Parse(pagePromise.JSObjectHandle);
+                PDFPage page = new PDFPage(parameters.document, new IntPtr(pageHandle), parameters.pageIndex);
+
+                pagePromise.Result = page;
+                pagePromise.HasFinished = true;
+
+                promiseCoroutine.ExecuteThenAction(true, page);
+            }
+            else
+            {
+                pagePromise.Result = null;
+                pagePromise.HasFinished = true;
+
+                promiseCoroutine.ExecuteThenAction(false, null);
+            }
+        }
+#endif
+    }
+
+    public interface IIPDFPageInternal
+    {
+#if !UNITY_WEBGL
+	    void OnTextPageClose(PDFTextPage textPage);
+#endif
+    }
+}

+ 8 - 0
Assets/RTC/Paroxe/PDFRenderer/API/PDFPage.cs.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: d04a158f90be3ab4383aad4edaeb1338
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 

+ 2784 - 0
Assets/RTC/Paroxe/PDFRenderer/API/PDFViewer.cs

@@ -0,0 +1,2784 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Reflection;
+using Paroxe.PdfRenderer.Internal;
+using Paroxe.PdfRenderer.Internal.Viewer;
+using UnityEngine;
+using UnityEngine.EventSystems;
+using UnityEngine.UI;
+using Paroxe.PdfRenderer.WebGL;
+using System.IO;
+
+namespace Paroxe.PdfRenderer
+{
+    /// <summary>
+    /// PDFViewer is an Unity UI component that allow you to visualize PDF Document.
+    /// </summary>
+    public class PDFViewer : UIBehaviour, IPDFDevice, IPDFColoredRectListProvider
+    {
+        [SerializeField]
+        public PDFViewerInternal m_Internal;
+
+        private IPDFDeviceActionHandler m_BookmarksActionHandler;
+        private IPDFDeviceActionHandler m_LinksActionHandler;
+        private PDFPageRange m_CurrentPageRange;
+        private PDFSearchResult m_CurrentSearchResult;
+        private PDFDocument m_Document;
+#pragma warning disable 414
+        private PDFDocument m_SuppliedDocument;
+#pragma warning restore 414
+        private PDFPageTextureHolder[] m_PageTextureHolders;
+        private int m_CurrentSearchResultIndex;
+        private int m_CurrentSearchResultIndexWithinCurrentPage;
+        private bool m_DelayedOnEnable;
+        private float m_InvalidPasswordMessageDelay;
+#if !UNITY_WEBGL || UNITY_EDITOR
+        private float m_InvalidPasswordMessageDelayBeforeFade = 0.5f;
+        private bool m_DownloadCanceled = false;
+#endif
+        private bool m_InvalidPasswordMessageVisisble;
+        private bool m_IsLoaded;
+        private int m_LoadAtPageIndex;
+        private float OverlayAlpha = 0.50f;
+        private bool OverlayVisible;
+        private int m_PageCount;
+        private float[] m_PageOffsets;
+        private Vector2[] m_PageSizes;
+        private Vector2[] m_NormalPageSizes;
+        private byte[] m_PendingDocumentBuffer;
+        private int m_PreviousMostVisiblePage = -1;
+        private PageFittingType m_PreviousPageFitting;
+        private float m_PreviousZoom;
+        private float m_PreviousZoomToGo;
+        private IList<PDFSearchResult>[] m_SearchResults;
+        private float m_StartZoom;
+        private float m_UpdateChangeDelay;
+        private Vector2 m_ZoomPosition = Vector2.zero;
+        private PDFRenderer m_Renderer;
+        private int m_PreviousTouchCount;
+        private float m_PinchZoomStartZoomFactor;
+        private float m_PinchZoomStartDeltaMag;
+        private Canvas m_Canvas;
+        private GraphicRaycaster m_GraphicRaycaster;
+        private List<Canvas> m_CanvasList = new List<Canvas>();
+
+        /// ...
+        private PDFThumbnailsViewer m_ThumbnailsViewer;
+        private PDFBookmarksViewer m_BookmarksViewer;
+
+        [SerializeField]
+        private bool m_AllowOpenURL = true;
+        [SerializeField]
+        private bool m_ChangeCursorWhenOverURL = true;
+        [SerializeField]
+        private GameObject m_BytesSupplierObject;
+        [SerializeField]
+        private Component m_BytesSupplierComponent;
+        [SerializeField]
+        private string m_BytesSupplierFunctionName;
+        [SerializeField]
+        private string m_FileName = "";
+        [SerializeField]
+        private string m_FilePath = "";
+        [SerializeField]
+        private FileSourceType m_FileSource = FileSourceType.Resources;
+        [SerializeField]
+        private string m_FileURL = "";
+        [SerializeField]
+        private string m_Folder = "";
+        [SerializeField]
+        private bool m_LoadOnEnable = true;
+        [SerializeField]
+        private float m_MaxZoomFactor = 8.0f;
+        [SerializeField]
+        private float m_MaxZoomFactorTextureQuality = 4.0f;
+        [SerializeField]
+        private float m_MinZoomFactor = 0.25f;
+        [SerializeField]
+        private PageFittingType m_PageFitting = PageFittingType.Zoom;
+        [SerializeField]
+        private string m_Password = "";
+        [SerializeField]
+        private PDFAsset m_PDFAsset = null;
+        [SerializeField]
+        private float m_ZoomFactor = 1.0f;
+        [SerializeField]
+        private float m_ZoomStep = 0.25f;
+        [SerializeField]
+        private float m_ZoomToGo;
+        [SerializeField]
+        private float m_VerticalMarginBetweenPages = 20.0f;
+        [SerializeField]
+        private bool m_UnloadOnDisable;
+        [SerializeField]
+        private bool m_ShowVerticalScrollBar = false;
+        [SerializeField]
+        private bool m_ShowBookmarksViewer = true;
+        [SerializeField]
+        private bool m_ShowHorizontalScrollBar = true;
+        [SerializeField]
+        private bool m_ShowThumbnailsViewer = true;
+        [SerializeField]
+        private bool m_ShowTopBar = false;
+        [SerializeField]
+        private float m_ScrollSensitivity = 75.0f;
+        [SerializeField]
+        private Color m_SearchResultColor = new Color(0.0f, 115 / 255.0f, 230 / 255.0f, 125 / 255.0f);
+        [SerializeField]
+        private Vector2 m_SearchResultPadding = new Vector2(2.0f, 4.0f);
+        [SerializeField, Range(0.0f, 1.0f)]
+        private float m_SearchTimeBudgetPerFrame = 0.60f;
+        [SerializeField]
+        private PDFRenderer.RenderSettings m_RenderSettings = new PDFRenderer.RenderSettings();
+        [SerializeField]
+        private float m_DelayAfterZoomingBeforeUpdate = 0.005f;
+        [SerializeField]
+        private float m_ParagraphZoomFactor = 2.0f;
+        [SerializeField]
+        private bool m_ParagraphZoomingEnable = true;
+        [SerializeField]
+        private float m_ParagraphDetectionThreshold = 12.0f;
+        [SerializeField]
+        private Texture2D m_PageTileTexture;
+        [SerializeField]
+        private Color m_PageColor = Color.white;
+
+        public delegate void CancelEventHandler(PDFViewer sender);
+        public delegate void CurrentPageChangedEventHandler(PDFViewer sender, int oldPageIndex, int newPageIndex);
+        public delegate void DocumentChangedEventHandler(PDFViewer sender, PDFDocument document);
+        public delegate void LoadFailEventHandler(PDFViewer sender);
+        public delegate void PDFViewerEventHandler(PDFViewer sender);
+        public delegate void ZoomChangedEventHandler(PDFViewer sender, float oldZoom, float newZoom);
+
+        public event CurrentPageChangedEventHandler OnCurrentPageChanged;
+        public event PDFViewerEventHandler OnDisabled;
+        public event DocumentChangedEventHandler OnDocumentLoaded;
+        public event LoadFailEventHandler OnDocumentLoadFailed;
+        public event DocumentChangedEventHandler OnDocumentUnloaded;
+        public event CancelEventHandler OnDownloadCancelled;
+        public event CancelEventHandler OnPasswordCancelled;
+        public event ZoomChangedEventHandler OnZoomChanged;
+
+        public enum FileSourceType
+        {
+            None,
+            Web,
+            StreamingAssets,
+            Resources,
+            FilePath,
+            Bytes,
+            Asset,
+            DocumentObject,
+            PersistentData
+        }
+
+        public enum PageFittingType
+        {
+            ViewerWidth,
+            ViewerHeight,
+            WholePage,
+            Zoom
+        }
+
+        public enum ViewerModeType
+        {
+            Move,
+            ZoomOut,
+            ZoomIn
+        }
+
+        /// <summary>
+        /// Return parent canvas.
+        /// </summary>
+        public Canvas canvas
+        {
+            get
+            {
+                if (m_Canvas == null)
+                    CacheCanvas();
+                return m_Canvas;
+            }
+        }
+
+        /// <summary>
+        /// Specify if the PDFViewer can open url link with external browser.
+        /// </summary>
+        public bool AllowOpenURL
+        {
+            get { return m_AllowOpenURL; }
+            set { m_AllowOpenURL = value; }
+        }
+
+        /// <summary>
+        /// Specify if the cursor change when over url links.
+        /// </summary>
+        public bool ChangeCursorWhenOverURL
+        {
+            get { return m_ChangeCursorWhenOverURL; }
+            set { m_ChangeCursorWhenOverURL = value; }
+        }
+
+        /// <summary>
+        /// Specify the viewport background color.
+        /// </summary>
+        public Color BackgroundColor
+        {
+            get { return m_Internal.Viewport.GetComponent<Image>().color; }
+            set
+            {
+                if (m_Internal.Viewport.GetComponent<Image>().color != value)
+                    m_Internal.Viewport.GetComponent<Image>().color = value;
+            }
+        }
+
+        /// <summary>
+        /// Specify the relative amount of time is allowed for text search per frame (0.0f to 1.0f).
+        /// </summary>
+        public float SearchTimeBudgetPerFrame
+        {
+            get { return m_SearchTimeBudgetPerFrame; }
+            set { m_SearchTimeBudgetPerFrame = Mathf.Clamp01(value); }
+        }
+
+        /// <summary>
+        /// Specify the action handler for bookmarks.
+        /// </summary>
+        public IPDFDeviceActionHandler BookmarksActionHandler
+        {
+            get { return m_BookmarksActionHandler; }
+            set { m_BookmarksActionHandler = value; }
+        }
+
+        /// <summary>
+        /// Specify the action handler for links.
+        /// </summary>
+        public IPDFDeviceActionHandler LinksActionHandler
+        {
+            get { return m_LinksActionHandler; }
+            set { m_LinksActionHandler = value; }
+        }
+
+        /// <summary>
+        /// This property is intended to be used along side with the bytes file source. (FileSource.Bytes)
+        /// Specify from which component the byte suplier function resides.
+        /// </summary>
+        public Component BytesSupplierComponent
+        {
+            get { return m_BytesSupplierComponent; }
+            set { m_BytesSupplierComponent = value; }
+        }
+
+        /// <summary>
+        /// This property is intended to be used along side with the bytes file source. (FileSource.Bytes)
+        /// Specify the function name whithin the byte supplier component.
+        /// </summary>
+        public string BytesSupplierFunctionName
+        {
+            get { return m_BytesSupplierFunctionName; }
+            set { m_BytesSupplierFunctionName = value; }
+        }
+
+        public int CurrentPageIndex
+        {
+            get { return GetMostVisiblePageIndex(); }
+            set
+            {
+                int mostVisible = GetMostVisiblePageIndex();
+
+                if (value != mostVisible)
+                    GoToPage(value);
+            }
+        }
+
+        public int CurrentSearchResultIndex
+        {
+            get { return m_CurrentSearchResultIndex; }
+        }
+
+        /// <summary>
+        /// Return the byte array of the current loaded pdf document.
+        /// </summary>
+        public byte[] DataBuffer
+        {
+            get
+            {
+                if (Document != null)
+                    return m_Document.DocumentBuffer;
+                return null;
+            }
+        }
+
+        public PDFDocument Document
+        {
+            get { return m_Document; }
+        }
+
+        public string FileName
+        {
+            get { return m_FileName; }
+            set { m_FileName = value != null ? value.Trim() : ""; }
+        }
+
+        public string FilePath
+        {
+            get { return m_FilePath; }
+            set { m_FilePath = value; }
+        }
+
+        public FileSourceType FileSource
+        {
+            get { return m_FileSource; }
+
+            set { m_FileSource = value; }
+        }
+
+        public string FileURL
+        {
+            get { return m_FileURL; }
+            set { m_FileURL = value; }
+        }
+
+        public string Folder
+        {
+            get { return m_Folder; }
+            set { m_Folder = value; }
+        }
+
+        public bool IsLoaded
+        {
+            get { return m_IsLoaded; }
+        }
+
+        public bool LoadOnEnable
+        {
+            get { return m_LoadOnEnable; }
+            set { m_LoadOnEnable = value; }
+        }
+
+        public float MaxZoomFactorTextureQuality
+        {
+            get { return m_MaxZoomFactorTextureQuality; }
+            set
+            {
+                if (Math.Abs(Mathf.Clamp(value, MinZoomFactor, MaxZoomFactor) - m_MaxZoomFactorTextureQuality) > float.Epsilon)
+                {
+                    m_MaxZoomFactorTextureQuality = Mathf.Clamp(value, MinZoomFactor, MaxZoomFactor);
+
+                    m_UpdateChangeDelay = 1.0f;
+                }
+            }
+        }
+
+        public float MinZoomFactor
+        {
+            get { return m_MinZoomFactor; }
+            set
+            {
+                m_MinZoomFactor = value;
+
+                if (m_MinZoomFactor < 0.01f)
+                    m_MinZoomFactor = 0.01f;
+            }
+        }
+
+        public float MaxZoomFactor
+        {
+            get { return m_MaxZoomFactor; }
+            set
+            {
+                m_MaxZoomFactor = value;
+
+                if (m_MaxZoomFactor < m_MinZoomFactor)
+                    m_MaxZoomFactor = m_MinZoomFactor;
+            }
+        }
+
+        public PageFittingType PageFitting
+        {
+            get { return m_PageFitting; }
+            set { m_PageFitting = value; }
+        }
+
+        public string Password
+        {
+            get { return m_Password; }
+            set { m_Password = value; }
+        }
+
+        /// <summary>
+        /// Intended to be used along side the Asset file source (FileSource.Asset)
+        /// </summary>
+        public PDFAsset PDFAsset
+        {
+            get { return m_PDFAsset; }
+            set { m_PDFAsset = value; }
+        }
+
+        public bool RenderAnnotations
+        {
+            get { return m_RenderSettings.renderAnnotations; }
+
+            set
+            {
+                if (m_RenderSettings.renderAnnotations != value)
+                {
+                    m_RenderSettings.renderAnnotations = value;
+
+                    m_UpdateChangeDelay = 0.1f;
+                }
+            }
+        }
+
+        public bool RenderGrayscale
+        {
+            get { return m_RenderSettings.grayscale; }
+
+            set
+            {
+                if (m_RenderSettings.grayscale != value)
+                {
+                    m_RenderSettings.grayscale = value;
+
+                    m_UpdateChangeDelay = 0.1f;
+                }
+            }
+        }
+
+        public float ScrollSensitivity
+        {
+            get { return m_ScrollSensitivity; }
+            set { m_ScrollSensitivity = value; }
+        }
+
+        public Color SearchResultColor
+        {
+            get { return m_SearchResultColor; }
+            set
+            {
+                if (m_SearchResultColor != value)
+                {
+                    m_SearchResultColor = value;
+                    m_UpdateChangeDelay = 0.25f;
+                }
+            }
+        }
+
+        public Vector2 SearchResultPadding
+        {
+            get { return m_SearchResultPadding; }
+            set
+            {
+                if (m_SearchResultPadding != value)
+                {
+                    m_SearchResultPadding = value;
+                    m_UpdateChangeDelay = 0.25f;
+                }
+            }
+        }
+
+        public bool ShowBookmarksViewer
+        {
+            get { return m_ShowBookmarksViewer; }
+            set
+            {
+                if (m_ShowBookmarksViewer != value)
+                {
+                    m_ShowBookmarksViewer = value;
+
+                    UpdateBookmarksViewerVisibility(m_ShowBookmarksViewer);
+                }
+            }
+        }
+
+        private void UpdateBookmarksViewerVisibility(bool visible)
+        {
+            if (visible && m_IsLoaded)
+            {
+#if !UNITY_WEBGL
+                if (m_Document.GetRootBookmark().ChildCount == 0)
+#endif
+                    visible = false;
+            }
+
+            if (m_Internal.LeftPanel != null)
+            {
+                m_Internal.LeftPanel.m_Bookmarks.gameObject.SetActive(visible);
+                m_Internal.LeftPanel.m_BookmarksTab.gameObject.SetActive(visible);
+
+                m_Internal.LeftPanel.SetActive(m_ShowThumbnailsViewer || visible);
+
+                if (!visible && m_ShowThumbnailsViewer)
+                    m_Internal.LeftPanel.OnThumbnailsTabClicked();
+                else if (visible && !m_ShowThumbnailsViewer)
+                    m_Internal.LeftPanel.OnBookmarksTabClicked();
+                else
+                    m_Internal.LeftPanel.OnBookmarksTabClicked();
+            }
+        }
+
+        public bool ShowHorizontalScrollBar
+        {
+            get { return m_ShowHorizontalScrollBar; }
+            set
+            {
+                if (m_ShowHorizontalScrollBar != value)
+                {
+                    m_ShowHorizontalScrollBar = value;
+
+                    UpdateScrollBarVisibility();
+                }
+
+            }
+        }
+
+        public bool ShowThumbnailsViewer
+        {
+            get { return m_ShowThumbnailsViewer; }
+            set
+            {
+                if (m_ShowThumbnailsViewer != value)
+                {
+                    m_ShowThumbnailsViewer = value;
+
+                    if (m_Internal.LeftPanel != null)
+                    {
+                        m_Internal.LeftPanel.m_ThumbnailsViewer.gameObject.SetActive(m_ShowThumbnailsViewer);
+                        m_Internal.LeftPanel.m_ThumbnailsTab.gameObject.SetActive(m_ShowThumbnailsViewer);
+
+                        m_Internal.LeftPanel.SetActive(m_ShowThumbnailsViewer || m_Internal.LeftPanel.m_Bookmarks.gameObject.activeSelf);
+
+                        if (!m_Internal.LeftPanel.m_Bookmarks.gameObject.activeSelf && m_ShowThumbnailsViewer)
+                            m_Internal.LeftPanel.OnThumbnailsTabClicked();
+                        else if (m_Internal.LeftPanel.m_Bookmarks.gameObject.activeSelf && !m_ShowThumbnailsViewer)
+                            m_Internal.LeftPanel.OnBookmarksTabClicked();
+                        else
+                            m_Internal.LeftPanel.OnBookmarksTabClicked();
+                    }
+                }
+            }
+        }
+
+        public bool ShowTopBar
+        {
+            get { return m_ShowTopBar; }
+            set
+            {
+                if (m_ShowTopBar != value)
+                {
+                    m_ShowTopBar = value;
+
+                    if (!m_ShowTopBar)
+                    {
+                        m_Internal.TopPanel.gameObject.SetActive(false);
+                        m_Internal.TopPanel.sizeDelta = new Vector2(0.0f, 0.0f);
+
+                        m_Internal.Viewport.offsetMax = new Vector2(m_Internal.Viewport.offsetMax.x, 0.0f);
+                        m_Internal.VerticalScrollBar.offsetMax =
+                            new Vector2(m_Internal.VerticalScrollBar.offsetMax.x, 0.0f);
+
+                        if (m_Internal.LeftPanel != null)
+                        {
+                            (m_Internal.LeftPanel.transform as RectTransform).sizeDelta =
+                                new Vector2((m_Internal.LeftPanel.transform as RectTransform).sizeDelta.x, 0.0f);
+                        }
+                    }
+                    else
+                    {
+                        m_Internal.TopPanel.gameObject.SetActive(true);
+                        m_Internal.TopPanel.sizeDelta = new Vector2(0.0f, 60.0f);
+
+                        m_Internal.Viewport.offsetMax = new Vector2(m_Internal.Viewport.offsetMax.x, -60.0f);
+                        m_Internal.VerticalScrollBar.offsetMax =
+                            new Vector2(m_Internal.VerticalScrollBar.offsetMax.x, -59.0f);
+
+                        if (m_Internal.LeftPanel != null)
+                        {
+                            (m_Internal.LeftPanel.transform as RectTransform).sizeDelta =
+                                new Vector2((m_Internal.LeftPanel.transform as RectTransform).sizeDelta.x, -59.0f);
+                        }
+                    }
+                }
+            }
+        }
+
+        public bool ShowVerticalScrollBar
+        {
+            get { return m_ShowVerticalScrollBar; }
+            set
+            {
+                if (m_ShowVerticalScrollBar != value)
+                {
+                    m_ShowVerticalScrollBar = value;
+
+                    UpdateScrollBarVisibility();
+                }
+            }
+        }
+
+        public bool UnloadOnDisable
+        {
+            get { return m_UnloadOnDisable; }
+            set { m_UnloadOnDisable = value; }
+        }
+
+        public float VerticalMarginBetweenPages
+        {
+            get { return m_VerticalMarginBetweenPages; }
+            set
+            {
+                if (m_VerticalMarginBetweenPages != value)
+                {
+                    if (value < 0.0f)
+                    {
+                        m_VerticalMarginBetweenPages = 0.0f;
+                    }
+                    else
+                    {
+                        m_VerticalMarginBetweenPages = value;
+                    }
+
+                    if (m_IsLoaded)
+                    {
+                        ComputePageOffsets();
+                        UpdatePagesPlacement();
+                        m_Internal.PageContainer.sizeDelta = GetDocumentSize();
+                        EnsureValidPageContainerPosition();
+                    }
+                }
+            }
+        }
+
+        public float ZoomFactor
+        {
+            get { return m_ZoomToGo; }
+            set
+            {
+                if (Math.Abs(m_ZoomToGo - Mathf.Clamp(value, MinZoomFactor, MaxZoomFactor)) > float.Epsilon)
+                {
+                    m_ZoomToGo = Mathf.Clamp(value, MinZoomFactor, MaxZoomFactor);
+
+                    m_ZoomPosition = new Vector2(0.0f, m_Internal.Viewport.rect.size.y * 0.5f);
+
+                    NotifyZoomChanged(m_PreviousZoomToGo, m_ZoomToGo);
+
+                    m_PageFitting = PageFittingType.Zoom;
+                }
+            }
+        }
+
+        public float ZoomStep
+        {
+            get { return m_ZoomStep; }
+            set { m_ZoomStep = value; }
+        }
+
+        public bool ParagraphZoomingEnable
+        {
+            get { return m_ParagraphZoomingEnable; }
+            set { m_ParagraphZoomingEnable = value; }
+        }
+
+        public float ParagraphZoomFactor
+        {
+            get { return m_ParagraphZoomFactor; }
+            set { m_ParagraphZoomFactor = value; }
+        }
+
+        public float ParagraphDetectionThreshold
+        {
+            get { return m_ParagraphDetectionThreshold; }
+            set { m_ParagraphDetectionThreshold = value; }
+        }
+
+        public Texture2D PageTileTexture
+        {
+            get { return m_PageTileTexture; }
+            set { m_PageTileTexture = value; }
+        }
+
+        public Color PageColor
+        {
+            get { return m_PageColor; }
+            set { m_PageColor = value; }
+        }
+
+        public void LoadDocument(int pageIndex = 0)
+        {
+            if (m_IsLoaded)
+                CleanUp();
+
+            CommonLoad();
+        }
+
+        public void LoadDocument(PDFDocument document, int pageIndex = 0)
+        {
+            LoadDocument(document, null, pageIndex);
+        }
+
+        public void LoadDocument(PDFDocument document, string password, int pageIndex = 0)
+        {
+            m_LoadAtPageIndex = pageIndex;
+
+            if (m_IsLoaded)
+                CleanUp();
+
+            m_FileSource = FileSourceType.DocumentObject;
+
+            m_SuppliedDocument = document;
+            m_Password = password;
+
+            CommonLoad();
+        }
+
+        public void LoadDocumentFromAsset(PDFAsset pdfAsset, int pageIndex = 0)
+        {
+            LoadDocumentFromAsset(pdfAsset, null, pageIndex);
+        }
+
+        public void LoadDocumentFromAsset(PDFAsset pdfAsset, string password, int pageIndex = 0)
+        {
+            m_LoadAtPageIndex = pageIndex;
+
+            if (m_IsLoaded)
+            {
+                CleanUp();
+            }
+
+            m_FileSource = FileSourceType.Asset;
+
+            m_PDFAsset = pdfAsset;
+            m_Password = password;
+
+            CommonLoad(pdfAsset.m_FileContent);
+        }
+
+        public void LoadDocumentFromResources(string folder, string fileName, int pageIndex = 0)
+        {
+            LoadDocumentFromResources(folder, fileName, null, pageIndex);
+        }
+
+        public void LoadDocumentFromResources(string folder, string fileName, string password, int pageIndex = 0)
+        {
+            m_LoadAtPageIndex = pageIndex;
+
+            if (m_IsLoaded)
+                CleanUp();
+
+            m_FileSource = FileSourceType.Resources;
+
+            m_Folder = folder;
+            m_FileName = fileName;
+            m_FilePath = GetFileLocation();
+
+            m_Password = password;
+
+            CommonLoad();
+        }
+
+        public void LoadDocumentFromStreamingAssets(string folder, string fileName, int pageIndex = 0)
+        {
+            LoadDocumentFromStreamingAssets(folder, fileName, null, pageIndex);
+        }
+
+        public void LoadDocumentFromStreamingAssets(string folder, string fileName, string password, int pageIndex = 0)
+        {
+            m_LoadAtPageIndex = pageIndex;
+
+            if (m_IsLoaded)
+                CleanUp();
+
+            m_FileSource = FileSourceType.StreamingAssets;
+
+            m_Folder = folder;
+            m_FileName = fileName;
+            m_FilePath = GetFileLocation();
+
+            m_Password = password;
+
+            CommonLoad();
+        }
+
+        public void LoadDocumentFromPersistentData(string folder, string fileName, int pageIndex = 0)
+        {
+            LoadDocumentFromPersistentData(folder, fileName, null, pageIndex);
+        }
+
+        public void LoadDocumentFromPersistentData(string folder, string fileName, string password, int pageIndex = 0)
+        {
+            m_LoadAtPageIndex = pageIndex;
+
+            if (m_IsLoaded)
+                CleanUp();
+
+            m_FileSource = FileSourceType.PersistentData;
+
+            m_Folder = folder;
+            m_FileName = fileName;
+            m_FilePath = GetFileLocation();
+
+            m_Password = password;
+
+            CommonLoad();
+        }
+
+        public void LoadDocumentFromWeb(string url, int pageIndex = 0)
+        {
+            LoadDocumentFromWeb(url, null, pageIndex);
+        }
+
+        public void LoadDocumentFromWeb(string url, string password, int pageIndex = 0)
+        {
+            m_LoadAtPageIndex = pageIndex;
+
+            if (m_IsLoaded)
+                CleanUp();
+
+            m_FileSource = FileSourceType.Web;
+
+            m_FileURL = url;
+            m_FilePath = GetFileLocation();
+
+            m_Password = password;
+
+            CommonLoad();
+        }
+
+        public void LoadDocumentFromBuffer(byte[] buffer, int pageIndex = 0)
+        {
+            LoadDocumentFromBuffer(buffer, null, pageIndex);
+        }
+
+        public void LoadDocumentFromBuffer(byte[] buffer, string password, int pageIndex = 0)
+        {
+            m_LoadAtPageIndex = pageIndex;
+
+            if (m_IsLoaded)
+                CleanUp();
+
+            m_FileSource = FileSourceType.Bytes;
+
+            m_Password = password;
+
+            CommonLoad(buffer);
+        }
+
+        public void LoadDocumentFromFile(string filePath, int pageIndex = 0)
+        {
+            LoadDocumentFromFile(filePath, null, pageIndex);
+        }
+
+        public void LoadDocumentFromFile(string filePath, string password, int pageIndex = 0)
+        {
+            m_LoadAtPageIndex = pageIndex;
+
+            if (m_IsLoaded)
+                CleanUp();
+
+            m_FileSource = FileSourceType.FilePath;
+
+            m_FilePath = filePath;
+            m_Password = password;
+            m_FilePath = GetFileLocation();
+
+            m_Password = password;
+
+            CommonLoad();
+        }
+
+        public void AdjustZoomToPageFitting(PageFittingType pageFitting, Vector2 referencePageSize)
+        {
+            switch (pageFitting)
+            {
+                case PageFittingType.ViewerWidth:
+                    {
+                        float firstPageWidth = referencePageSize.x;
+                        float viewportWidth = m_Internal.Viewport.rect.size.x;
+                        m_ZoomToGo = viewportWidth / firstPageWidth;
+
+                        break;
+                    }
+                case PageFittingType.ViewerHeight:
+                    {
+                        float firstPageHeight = referencePageSize.y;
+                        float viewportHeight = m_Internal.Viewport.rect.size.y;
+                        m_ZoomToGo = viewportHeight / firstPageHeight;
+
+                        break;
+                    }
+                case PageFittingType.WholePage:
+                    {
+                        float firstPageWidth = referencePageSize.x;
+                        float firstPageHeight = referencePageSize.y + 2.0f * m_VerticalMarginBetweenPages;
+                        float viewportWidth = m_Internal.Viewport.rect.size.x;
+                        float viewportHeight = m_Internal.Viewport.rect.size.y;
+
+                        m_ZoomToGo = Mathf.Min(viewportWidth / firstPageWidth, viewportHeight / firstPageHeight);
+
+                        break;
+                    }
+                case PageFittingType.Zoom:
+                    {
+                        break;
+                    }
+            }
+        }
+
+        public void CloseDocument()
+        {
+            if (m_IsLoaded)
+            {
+                CleanUp();
+            }
+        }
+
+        public string GetFileLocation()
+        {
+            switch (m_FileSource)
+            {
+                case FileSourceType.FilePath:
+                    return m_FilePath;
+
+                case FileSourceType.Resources:
+                    string folder = m_Folder + "/";
+                    if (string.IsNullOrEmpty(m_Folder))
+                        folder = "";
+
+                    return (folder + m_FileName).Replace("//", "/").Replace(@"\\", @"/").Replace(@"\", @"/");
+
+                case FileSourceType.StreamingAssets:
+                    folder = m_Folder + "/";
+                    if (string.IsNullOrEmpty(m_Folder))
+                        folder = "";
+
+                    string location = ("/" + folder + m_FileName).Replace("//", "/")
+                        .Replace(@"\\", @"/")
+                        .Replace(@"\", @"/");
+                    return Application.streamingAssetsPath + location;
+
+                case FileSourceType.PersistentData:
+                    folder = m_Folder + "/";
+                    if (string.IsNullOrEmpty(m_Folder))
+                        folder = "";
+
+                    location = ("/" + folder + m_FileName).Replace("//", "/")
+                        .Replace(@"\\", @"/")
+                        .Replace(@"\", @"/");
+                    return Application.persistentDataPath + location;
+
+                case FileSourceType.Web:
+                    return m_FileURL;
+
+                default:
+                    return "";
+            }
+        }
+
+        public void GoToNextPage()
+        {
+            if (m_Document == null || !m_Document.IsValid)
+                return;
+
+            int mostVisiblePage = GetMostVisiblePageIndex();
+
+            if (mostVisiblePage + 1 < m_PageCount)
+            {
+                GoToPage(mostVisiblePage + 1);
+            }
+            else
+            {
+                m_Internal.PageContainer.anchoredPosition = new Vector2(
+                    m_Internal.PageContainer.anchoredPosition.x,
+                    m_Internal.PageContainer.sizeDelta.y - m_Internal.Viewport.rect.size.y);
+            }
+        }
+
+        public void GoToNextSearchResult()
+        {
+            if (m_Document == null || !m_Document.IsValid)
+                return;
+
+            if (m_SearchResults != null && m_SearchResults.Length > 0)
+            {
+                ++m_CurrentSearchResultIndex;
+                ++m_CurrentSearchResultIndexWithinCurrentPage;
+
+                int oldPageIndex = m_CurrentSearchResult.PageIndex;
+
+                if (m_CurrentSearchResultIndexWithinCurrentPage >= m_SearchResults[m_CurrentSearchResult.PageIndex].Count)
+                {
+                    int nextPage = m_CurrentSearchResult.PageIndex + 1;
+                    while (nextPage < m_PageCount - 1 && m_SearchResults[nextPage].Count == 0)
+                    {
+                        ++nextPage;
+                    }
+
+                    if (nextPage <= m_PageCount - 1 && m_SearchResults[nextPage].Count > 0)
+                    {
+                        m_CurrentSearchResultIndexWithinCurrentPage = 0;
+
+                        m_CurrentSearchResult = m_SearchResults[nextPage][0];
+
+                        if (oldPageIndex != nextPage)
+                        {
+                            GoToPage(nextPage);
+                        }
+
+                    }
+                    else
+                    {
+                        --m_CurrentSearchResultIndexWithinCurrentPage;
+                        --m_CurrentSearchResultIndex;
+
+                        if (!m_CurrentPageRange.ContainsPage(m_CurrentSearchResult.PageIndex))
+                            GoToPage(m_CurrentSearchResult.PageIndex);
+                    }
+                }
+                else
+                {
+                    m_CurrentSearchResult =
+                        m_SearchResults[m_CurrentSearchResult.PageIndex][m_CurrentSearchResultIndexWithinCurrentPage];
+
+                    if (!m_CurrentPageRange.ContainsPage(m_CurrentSearchResult.PageIndex))
+                        GoToPage(m_CurrentSearchResult.PageIndex);
+                }
+            }
+        }
+
+        public void GoToPage(int pageIndex)
+        {
+            if (m_Document == null || !m_Document.IsValid)
+                return;
+
+            if (pageIndex < 0)
+            {
+                pageIndex = 0;
+            }
+            else if (pageIndex > m_PageCount - 1)
+            {
+                pageIndex = m_PageCount - 1;
+            }
+
+            m_Internal.PageInputField.text = (pageIndex + 1).ToString();
+            m_Internal.PageContainer.anchoredPosition = new Vector2(m_Internal.PageContainer.anchoredPosition.x,
+                m_PageOffsets[pageIndex] - m_PageSizes[pageIndex].y * 0.5f);
+            m_Internal.PageContainer.anchoredPosition -= m_VerticalMarginBetweenPages * Vector2.up;
+
+            SetPageCountLabel(pageIndex, m_PageCount);
+
+            EnsureValidPageContainerPosition();
+        }
+
+        public void GoToPreviousPage()
+        {
+            if (m_Document == null || !m_Document.IsValid)
+                return;
+
+            int mostVisiblePage = GetMostVisiblePageIndex();
+
+            if (mostVisiblePage - 1 >= 0)
+            {
+                GoToPage(mostVisiblePage - 1);
+            }
+            else
+            {
+                m_Internal.PageContainer.anchoredPosition = Vector2.zero;
+            }
+        }
+
+        public void GoToPreviousSearchResult()
+        {
+            if (m_Document == null || !m_Document.IsValid)
+                return;
+
+            if (m_SearchResults != null && m_SearchResults.Length > 0 && m_CurrentSearchResultIndex > 0)
+            {
+                --m_CurrentSearchResultIndex;
+                --m_CurrentSearchResultIndexWithinCurrentPage;
+
+                int oldPageIndex = m_CurrentSearchResult.PageIndex;
+
+                if (m_CurrentSearchResultIndexWithinCurrentPage < 0)
+                {
+                    int prevPage = m_CurrentSearchResult.PageIndex - 1;
+                    while (prevPage >= 0 && m_SearchResults[prevPage].Count == 0)
+                    {
+                        --prevPage;
+                    }
+
+                    if (prevPage >= 0 && m_SearchResults[prevPage].Count > 0)
+                    {
+                        m_CurrentSearchResultIndexWithinCurrentPage = m_SearchResults[prevPage].Count - 1;
+                        m_CurrentSearchResult = m_SearchResults[prevPage][m_SearchResults[prevPage].Count - 1];
+
+                        if (oldPageIndex != prevPage)
+                        {
+                            GoToPage(prevPage);
+                        }
+                    }
+                    else
+                    {
+                        ++m_CurrentSearchResultIndexWithinCurrentPage;
+                        ++m_CurrentSearchResultIndex;
+
+                    }
+                }
+                else
+                {
+                    m_CurrentSearchResult =
+                        m_SearchResults[m_CurrentSearchResult.PageIndex][m_CurrentSearchResultIndexWithinCurrentPage];
+
+                    if (!m_CurrentPageRange.ContainsPage(m_CurrentSearchResult.PageIndex))
+                        GoToPage(m_CurrentSearchResult.PageIndex);
+                }
+            }
+        }
+
+        public void CancelDownload()
+        {
+#if !UNITY_WEBGL || UNITY_EDITOR
+            StopCoroutine(DownloadFileFromWWW());
+
+            m_Internal.DownloadDialog.gameObject.SetActive(false);
+
+            m_DownloadCanceled = true;
+
+            NotifyDownloadCancelled();
+#endif
+        }
+
+        public void OnPageEditEnd()
+        {
+            if (m_Document == null || !m_Document.IsValid)
+                return;
+
+            if (string.IsNullOrEmpty(m_Internal.PageInputField.text))
+                return;
+
+            int pageIndex = int.Parse(m_Internal.PageInputField.text) - 1;
+
+            GoToPage(pageIndex);
+        }
+
+        public void OnPasswordDialogCancelButtonClicked()
+        {
+            m_InvalidPasswordMessageVisisble = false;
+            m_Internal.InvalidPasswordImage.gameObject.SetActive(false);
+            m_Internal.InvalidPasswordImage.GetComponent<CanvasGroup>().alpha = 1.0f;
+
+            NotifyPasswordCancelled();
+
+            CleanUp();
+        }
+
+        public void OnPasswordDialogOkButtonClicked()
+        {
+#if !UNITY_WEBGL || UNITY_EDITOR
+            m_Password = m_Internal.PasswordInputField.text;
+
+            if (TryLoadDocumentWithBuffer(m_PendingDocumentBuffer, m_Password))
+            {
+                m_Internal.PasswordDialog.gameObject.SetActive(false);
+
+                m_InvalidPasswordMessageVisisble = false;
+                m_Internal.InvalidPasswordImage.gameObject.SetActive(false);
+                m_Internal.InvalidPasswordImage.GetComponent<CanvasGroup>().alpha = 1.0f;
+
+                m_Internal.PasswordInputField.text = "";
+            }
+            else
+            {
+                m_InvalidPasswordMessageVisisble = true;
+                m_Internal.InvalidPasswordImage.gameObject.SetActive(true);
+                m_Internal.InvalidPasswordImage.GetComponent<CanvasGroup>().alpha = 1.0f;
+                m_InvalidPasswordMessageDelay = m_InvalidPasswordMessageDelayBeforeFade;
+
+                m_Internal.PasswordInputField.Select();
+            }
+#endif
+        }
+
+        public void ReloadDocument(int pageIndex = 0)
+        {
+            LoadDocument(pageIndex);
+        }
+
+        public bool SaveDocumentAsFile(string path)
+        {
+            if (m_Document == null || m_Document.DocumentBuffer == null)
+            {
+                Debug.LogError("Error while saving document: there is no document loaded.");
+                return false;
+            }
+
+            if (!new Uri(path).IsWellFormedOriginalString())
+            {
+                Debug.LogError("Error while saving document: the path is not well formed => " + path);
+                return false;
+            }
+
+            try
+            {
+                FileStream stream = new FileStream(path, FileMode.Create, FileAccess.Write);
+                stream.Write(m_Document.DocumentBuffer, 0, m_Document.DocumentBuffer.Length);
+                stream.Close();
+
+                return true;
+            }
+            catch (Exception ex)
+            {
+                Debug.LogError("Exception while saving document: " + ex);
+            }
+
+            return false;
+        }
+
+        public void SetSearchResults(IList<PDFSearchResult>[] searchResults)
+        {
+            m_SearchResults = searchResults;
+
+            if (m_SearchResults != null && m_SearchResults.Length > 0)
+            {
+                m_CurrentSearchResultIndex = 0;
+                m_CurrentSearchResultIndexWithinCurrentPage = 0;
+
+                for (int i = 0; i < m_PageCount; ++i)
+                {
+                    if (m_SearchResults[i] != null && m_SearchResults[i].Count > 0)
+                    {
+                        m_CurrentSearchResult = m_SearchResults[i][0];
+                        break;
+                    }
+                }
+            }
+            else
+            {
+
+                m_CurrentSearchResult = new PDFSearchResult(-1, 0, 0);
+                m_CurrentSearchResultIndex = 0;
+            }
+
+            AdjustCurrentSearchResultDisplayed();
+
+            m_UpdateChangeDelay = 0.25f;
+        }
+
+        public void UnloadDocument()
+        {
+            if (m_IsLoaded)
+                CleanUp();
+        }
+
+        public void ZoomIn()
+        {
+            if (m_Document == null || !m_Document.IsValid)
+                return;
+
+            ZoomCommon(new Vector2(0.0f, m_Internal.Viewport.rect.size.y * 0.5f), true);
+        }
+
+        public void ZoomOut()
+        {
+            if (m_Document == null || !m_Document.IsValid)
+                return;
+
+            ZoomCommon(new Vector2(0.0f, m_Internal.Viewport.rect.size.y * 0.5f), false);
+        }
+
+        private void AdjustCurrentSearchResultDisplayed()
+        {
+            if (m_SearchResults != null && m_SearchResults.Length > 0)
+            {
+                if (!m_CurrentPageRange.ContainsPage(m_CurrentSearchResult.PageIndex))
+                {
+                    int minPage = m_CurrentPageRange.m_From;
+                    int maxPage = m_CurrentPageRange.m_To;
+
+                    bool minFound = false;
+                    bool maxFound = false;
+
+                    for (int i = minPage; i >= 0; --i)
+                    {
+                        if (m_SearchResults[i] != null && m_SearchResults[i].Count > 0)
+                        {
+                            minFound = true;
+                            minPage = i;
+                            break;
+                        }
+                    }
+
+                    for (int i = maxPage; i < m_PageCount; ++i)
+                    {
+                        if (m_SearchResults[i] != null && m_SearchResults[i].Count > 0)
+                        {
+                            maxFound = true;
+                            maxPage = i;
+                            break;
+                        }
+                    }
+
+                    int disMinPage = Math.Abs(m_CurrentPageRange.m_From - minPage);
+                    int disMaxPage = Math.Abs(maxPage - m_CurrentPageRange.m_To);
+
+                    int nearestPage = -1;
+
+                    if (disMinPage <= disMaxPage)
+                    {
+                        if (minFound)
+                        {
+                            nearestPage = minPage;
+                        }
+                        else if (maxFound)
+                        {
+                            nearestPage = maxPage;
+                        }
+                    }
+                    else
+                    {
+                        if (maxFound)
+                        {
+                            nearestPage = maxPage;
+                        }
+                        else if (minFound)
+                        {
+                            nearestPage = minPage;
+                        }
+                    }
+
+                    int count = 0;
+
+                    for (int i = 0; i < nearestPage; ++i)
+                    {
+                        count += m_SearchResults[i].Count;
+                    }
+
+                    if (minFound || maxFound)
+                    {
+                        if (m_CurrentPageRange.ContainsPage(nearestPage)
+                            || nearestPage >= m_CurrentPageRange.m_To)
+                        {
+                            m_CurrentSearchResult = m_SearchResults[nearestPage][0];
+                            m_CurrentSearchResultIndex = count;
+                            m_CurrentSearchResultIndexWithinCurrentPage = 0;
+                        }
+                        else
+                        {
+                            m_CurrentSearchResult = m_SearchResults[nearestPage][m_SearchResults[nearestPage].Count - 1];
+                            m_CurrentSearchResultIndex = count + m_SearchResults[nearestPage].Count - 1;
+                            m_CurrentSearchResultIndexWithinCurrentPage = m_SearchResults[nearestPage].Count - 1;
+                        }
+                    }
+                }
+            }
+        }
+
+        private void CleanUp()
+        {
+            if (m_Document != null)
+                NotifyDocumentUnloaded(m_Document);
+
+            m_Document = null;
+
+            if (m_PageTextureHolders != null)
+            {
+                foreach (PDFPageTextureHolder holder in m_PageTextureHolders)
+                {
+                    if (holder.Texture != null)
+                    {
+                        Texture2D tex = holder.Texture;
+                        holder.Texture = null;
+
+                        Destroy(tex);
+                    }
+
+                    if (holder.m_Page.name != "Page")
+                    {
+                        Destroy(holder.m_Page);
+                    }
+                    else
+                    {
+	                    holder.m_Page.GetComponent<PDFViewerPage>().ClearCache();
+                    }
+                }
+            }
+
+#if !UNITY_WEBGL
+            m_Internal.SearchPanel.GetComponent<PDFSearchPanel>().Close();
+#endif
+
+            m_IsLoaded = false;
+
+            m_Internal.PageContainer.anchoredPosition = Vector2.zero;
+            m_Internal.PageContainer.sizeDelta = Vector2.zero;
+            UpdateScrollBarVisibility();
+            EnsureValidPageContainerPosition();
+
+            m_ZoomToGo = m_StartZoom;
+            m_PageSizes = null;
+            m_NormalPageSizes = null;
+            m_PageOffsets = null;
+            m_PageCount = 0;
+            m_PreviousZoom = 0.0f;
+            m_PreviousZoomToGo = 0.0f;
+            m_PageTextureHolders = null;
+            m_CurrentPageRange = null;
+            m_PreviousMostVisiblePage = -1;
+
+            OverlayVisible = false;
+            m_InvalidPasswordMessageVisisble = false;
+            m_Internal.Overlay.gameObject.SetActive(false);
+            m_Internal.PasswordDialog.gameObject.SetActive(false);
+            m_Internal.DownloadDialog.gameObject.SetActive(false);
+
+            m_Internal.PageCountLabel.text = "";
+            m_Internal.PageZoomLabel.text = "";
+            m_Internal.PageInputField.text = "";
+        }
+
+        private void CommonLoad(byte[] specifiedBuffer = null)
+        {
+            UpdateScrollBarVisibility();
+
+            m_IsLoaded = false;
+
+            if (m_FileSource == FileSourceType.None)
+            {
+                OverlayVisible = true;
+                m_Internal.Overlay.gameObject.SetActive(true);
+                m_Internal.Overlay.GetComponent<CanvasGroup>().alpha = 1.0f;
+                return;
+            }
+
+#if UNITY_WEBGL && !UNITY_EDITOR
+            StartCoroutine(LoadDocument_WebGL(specifiedBuffer));
+            return;
+#else
+            byte[] buffer = specifiedBuffer;
+
+            if (m_FileSource != FileSourceType.DocumentObject)
+                m_SuppliedDocument = null;
+
+            if (m_FileSource == FileSourceType.DocumentObject)
+            {
+                TryLoadWithSpecifiedDocument(m_SuppliedDocument);
+            }
+            else if (m_FileSource == FileSourceType.FilePath)
+            {
+                buffer = File.ReadAllBytes(GetFileLocation());
+                OnLoadingBufferFinished(buffer);
+            }
+            else if (m_FileSource == FileSourceType.Resources)
+            {
+                buffer = LoadAssetBytesFromResources(GetFileLocation());
+                OnLoadingBufferFinished(buffer);
+            }
+            else if (m_FileSource == FileSourceType.StreamingAssets)
+            {
+
+#if UNITY_ANDROID && !UNITY_EDITOR
+                StartCoroutine(DownloadFileFromWWW());
+#else
+                string location = GetFileLocation();
+                if (File.Exists(location))
+                    buffer = File.ReadAllBytes(location);
+                OnLoadingBufferFinished(buffer);
+#endif
+            }
+            else if (m_FileSource == FileSourceType.PersistentData)
+            {
+                string location = GetFileLocation();
+                if (File.Exists(location))
+                    buffer = File.ReadAllBytes(location);
+                OnLoadingBufferFinished(buffer);
+            }
+            else if (m_FileSource == FileSourceType.Web)
+            {
+                StartCoroutine(DownloadFileFromWWW());
+            }
+            else if (m_FileSource == FileSourceType.Bytes)
+            {
+                if (buffer != null)
+                {
+                    OnLoadingBufferFinished(buffer);
+                }
+                else if (BytesSupplierComponent != null)
+                {
+                    MethodInfo methodInfo = BytesSupplierComponent.GetType().GetMethod(BytesSupplierFunctionName);
+
+                    if (methodInfo != null)
+                    {
+                        buffer = (byte[])methodInfo.Invoke(BytesSupplierComponent, null);
+                    }
+
+                    if (buffer != null)
+                    {
+                        OnLoadingBufferFinished(buffer);
+                    }
+                }
+
+                if (buffer == null)
+                {
+                    NotifyDocumentLoadFailed();
+                }
+            }
+            else if (m_FileSource == FileSourceType.Asset)
+            {
+                if (m_PDFAsset != null && m_PDFAsset.m_FileContent != null && m_PDFAsset.m_FileContent.Length > 0)
+                {
+                    OnLoadingBufferFinished(m_PDFAsset.m_FileContent);
+                }
+                else
+                {
+                    NotifyDocumentLoadFailed();
+                }
+            }
+#endif
+        }
+
+        private void ComputePageOffsets()
+        {
+            float totalOffset = m_VerticalMarginBetweenPages;
+
+            m_PageOffsets = new float[m_PageCount];
+
+            for (int i = 0; i < m_PageCount; ++i)
+            {
+                m_PageOffsets[i] = totalOffset + m_PageSizes[i].y * 0.5f;
+
+                totalOffset += m_VerticalMarginBetweenPages + m_PageSizes[i].y;
+            }
+        }
+
+        private void ComputePageSizes()
+        {
+            m_PageCount = m_Document.GetPageCount();
+
+            m_PageSizes = new Vector2[m_PageCount];
+
+            for (int i = 0; i < m_PageCount; ++i)
+            {
+#if UNITY_WEBGL && !UNITY_EDITOR
+                m_PageSizes[i] = m_NormalPageSizes[i] * m_ZoomFactor;
+#else
+                float w = m_Document.GetPageWidth(i) * m_ZoomFactor;
+                float h = m_Document.GetPageHeight(i) * m_ZoomFactor;
+
+                m_PageSizes[i] = new Vector2(w, h);
+#endif
+            }
+        }
+
+#if UNITY_WEBGL && !UNITY_EDITOR
+        IEnumerator LoadDocument_WebGL(byte[] specifiedBuffer = null)
+        {
+            PDFJS_Promise<PDFDocument> documentPromise = null;
+
+            byte[] buffer = specifiedBuffer;
+
+            bool fromUrl = false;
+            
+            switch (m_FileSource)
+            {
+                case FileSourceType.Asset:
+                    if (m_PDFAsset.m_FileContent == null || m_PDFAsset.m_FileContent.Length == 0)
+                        yield break;
+
+                    documentPromise = PDFDocument.LoadDocumentFromBytesAsync(m_PDFAsset.m_FileContent);
+                    break;
+                case FileSourceType.Bytes:
+                    if (buffer != null)
+                    {
+                        documentPromise = PDFDocument.LoadDocumentFromBytesAsync(buffer);
+                    }
+                    else if (BytesSupplierComponent != null)
+                    {
+                        MethodInfo methodInfo = BytesSupplierComponent.GetType().GetMethod(BytesSupplierFunctionName);
+                        
+                        if (methodInfo != null)
+                            buffer = (byte[])methodInfo.Invoke(BytesSupplierComponent, null);
+
+                        if (buffer != null)
+                            documentPromise = PDFDocument.LoadDocumentFromBytesAsync(buffer);
+                    }
+
+                    if (buffer == null)
+                        yield break;
+                    break;
+                case FileSourceType.Resources:
+                    buffer = LoadAssetBytesFromResources(GetFileLocation());
+
+                    if (buffer != null)
+                        documentPromise = PDFDocument.LoadDocumentFromBytesAsync(buffer);
+                    else
+                        yield break;
+                    break;
+                case FileSourceType.Web:
+                case FileSourceType.FilePath:
+                case FileSourceType.StreamingAssets:
+                case FileSourceType.PersistentData:
+                    documentPromise = PDFDocument.LoadDocumentFromUrlAsync(GetFileLocation());
+                    fromUrl = true;
+                    
+                    break;
+            }
+             
+            if (!fromUrl)
+            {
+                while (!documentPromise.HasFinished)
+                    yield return null;
+            }
+            else
+            {
+                OverlayVisible = true;
+                m_Internal.Overlay.gameObject.SetActive(true);
+                m_Internal.Overlay.GetComponent<CanvasGroup>().alpha = 0.0f;
+
+                m_Internal.DownloadDialog.gameObject.SetActive(true);
+
+                m_Internal.DownloadSourceLabel.text = GetFileLocation();
+
+                m_Internal.ProgressRect.sizeDelta = new Vector2(0.0f, m_Internal.ProgressRect.sizeDelta.y);
+                m_Internal.ProgressLabel.text = "0%";
+
+                while (!documentPromise.HasFinished)
+                {
+                    SetProgress(documentPromise.Progress);
+
+                    yield return null;
+                }
+
+                m_Internal.DownloadDialog.gameObject.SetActive(false);
+            }
+
+            if (documentPromise.HasSucceeded)
+            {
+                m_Document = documentPromise.Result;
+
+                m_NormalPageSizes = new Vector2[m_Document.GetPageCount()];
+
+                for (int i = 0; i < m_NormalPageSizes.Length; ++i)
+                {
+                    PDFJS_Promise<PDFPage> pagePromise = m_Document.GetPageAsync(i);
+
+                    while (!pagePromise.HasFinished)
+                        yield return null;
+
+                    if (pagePromise.HasSucceeded)
+                    {
+                        PDFPage page = pagePromise.Result;
+
+                        m_NormalPageSizes[i] = page.GetPageSize(1.0f);
+                    }
+                    else
+                    {
+                        NotifyDocumentLoadFailed();
+                        yield break;
+                    }
+                }
+
+                TryLoadWithSpecifiedDocument(m_Document);
+            }
+            else
+            {
+                NotifyDocumentLoadFailed();
+                yield break;
+            }
+        }
+#endif
+
+#if !UNITY_WEBGL || UNITY_EDITOR
+        private IEnumerator DownloadFileFromWWW()
+        {
+            OverlayVisible = true;
+            m_Internal.Overlay.gameObject.SetActive(true);
+            m_Internal.Overlay.GetComponent<CanvasGroup>().alpha = 0.0f;
+
+            m_Internal.DownloadDialog.gameObject.SetActive(true);
+
+            if (m_FileSource == FileSourceType.Web)
+            {
+                m_Internal.DownloadSourceLabel.text = GetFileLocation();
+            }
+            else
+            {
+                m_Internal.DownloadSourceLabel.text = "";
+            }
+
+            m_Internal.ProgressRect.sizeDelta = new Vector2(0.0f, m_Internal.ProgressRect.sizeDelta.y);
+            m_Internal.ProgressLabel.text = "0%";
+
+            PDFWebRequest www = new PDFWebRequest(GetFileLocation());
+            www.SendWebRequest();
+
+            m_DownloadCanceled = false;
+
+            while (!www.isDone && !m_DownloadCanceled)
+            {
+                SetProgress(www.progress);
+                yield return null;
+            }
+            
+            if (!m_DownloadCanceled && string.IsNullOrEmpty(www.error) && www.isDone)
+            {
+                SetProgress(1.0f);
+
+                OnLoadingBufferFinished(www.bytes);
+            }
+            else if (m_DownloadCanceled || !string.IsNullOrEmpty(www.error))
+            {
+                NotifyDocumentLoadFailed();
+            }
+
+            www.Dispose();
+            www = null;
+
+            m_Internal.DownloadDialog.gameObject.SetActive(false);
+        }
+#endif
+
+        private void EnsureValidPageContainerPosition()
+        {
+            if (m_PageSizes == null || GetDocumentSize().x <= m_Internal.Viewport.rect.size.x)
+            {
+                m_Internal.PageContainer.anchoredPosition = new Vector2(0.0f,
+                    m_Internal.PageContainer.anchoredPosition.y);
+            }
+
+            if (m_Internal.PageContainer.anchoredPosition.y >
+                m_Internal.PageContainer.sizeDelta.y - m_Internal.Viewport.rect.size.y)
+            {
+                m_Internal.PageContainer.anchoredPosition = new Vector2(
+                    m_Internal.PageContainer.anchoredPosition.x,
+                    m_Internal.PageContainer.sizeDelta.y - m_Internal.Viewport.rect.size.y);
+            }
+
+            if (m_Internal.PageContainer.anchoredPosition.y < 0.0f)
+            {
+                m_Internal.PageContainer.anchoredPosition = new Vector2(
+                    m_Internal.PageContainer.anchoredPosition.x, 0.0f);
+            }
+        }
+
+        private Vector2 GetDocumentSize()
+        {
+            Vector2 size = new Vector2(0.0f, 0.0f);
+
+            foreach (Vector2 s in m_PageSizes)
+            {
+                if (s.x > size.x)
+                {
+                    size.x = s.x;
+                }
+            }
+
+            size.y = m_PageOffsets[m_PageCount - 1] + m_PageSizes[m_PageCount - 1].y * 0.5f;
+
+            size.x += 0.0f * m_VerticalMarginBetweenPages;
+            size.y += 1.0f * m_VerticalMarginBetweenPages;
+
+            return size;
+        }
+
+        private int GetMostVisiblePageIndex()
+        {
+            int mostVisibleIndex = -1;
+            float mostVisibleArea = 0.0f;
+
+            for (int i = m_CurrentPageRange.m_From; i < m_CurrentPageRange.m_To; ++i)
+            {
+                RectTransform page = m_Internal.PageContainer.GetChild(i) as RectTransform;
+                float area = PDFInternalUtils.CalculateRectTransformIntersectArea(page, m_Internal.Viewport);
+
+                if (area > page.sizeDelta.x * page.sizeDelta.y * 0.4f)
+                    return i;
+
+                if (area > mostVisibleArea)
+                {
+                    mostVisibleIndex = i;
+                    mostVisibleArea = area;
+                }
+            }
+
+            return mostVisibleIndex;
+        }
+
+        private static bool Intersect(Rect box0, Rect box1)
+        {
+            if (box0.xMax < box1.xMin || box0.xMin > box1.xMax)
+                return false;
+            if (box0.yMax < box1.yMin || box0.yMin > box1.yMax)
+                return false;
+
+            return true;
+        }
+
+        private PDFPageRange GetVisiblePageRange()
+        {
+            if (m_PageCount == 0)
+                throw new Exception("There is no document loaded.");
+
+            PDFPageRange pageRange = new PDFPageRange();
+
+            for (int i = 0; i < m_PageCount; ++i)
+            {
+                RectTransform rt = m_Internal.PageContainer.GetChild(i) as RectTransform;
+
+                Rect pageRect = new Rect(-m_Internal.PageContainer.anchoredPosition - rt.anchoredPosition, rt.rect.size);
+                Rect viewportRect = new Rect(new Vector2(0.0f, m_Internal.Viewport.rect.size.y * 0.5f), m_Internal.Viewport.rect.size);
+
+                pageRect.position = Vector2.zero;
+                viewportRect.position = Vector2.zero;
+
+                pageRect.center = -m_Internal.PageContainer.anchoredPosition - rt.anchoredPosition;
+                viewportRect.center = new Vector2(0.0f, m_Internal.Viewport.rect.size.y * 0.5f);
+
+                if (Intersect(pageRect, viewportRect))
+
+                {
+                    if (pageRange.m_From == -1)
+                    {
+                        pageRange.m_From = i;
+                    }
+                    else
+                    {
+                        pageRange.m_To = i + 1;
+                    }
+                }
+                else if (pageRange.m_From != -1)
+                {
+                    break;
+                }
+            }
+
+            if (pageRange.m_From != -1 && pageRange.m_To == -1)
+            {
+                pageRange.m_To = pageRange.m_From + 1;
+            }
+
+            return pageRange;
+        }
+
+        private void InstantiatePageTextureHolders()
+        {
+            if (m_PageTextureHolders == null)
+            {
+                m_PageTextureHolders = new PDFPageTextureHolder[m_PageCount];
+
+                for (int i = 0; i < m_PageCount; ++i)
+                {
+                    m_PageTextureHolders[i] = new PDFPageTextureHolder();
+
+                    GameObject page = null;
+                    if (i == 0)
+                        page = m_Internal.PageSample.gameObject;
+                    else
+                        page = (GameObject)Instantiate(m_Internal.PageSample.gameObject);
+
+                    page.transform.SetParent(m_Internal.PageSample.transform.parent, false);
+                    page.transform.localScale = Vector3.one;
+                    page.transform.localRotation = Quaternion.identity;
+
+                    m_PageTextureHolders[i].m_PageIndex = i;
+                    m_PageTextureHolders[i].m_Page = page;
+                    m_PageTextureHolders[i].m_PDFViewer = this;
+                    m_PageTextureHolders[i].Texture = null;
+                }
+            }
+        }
+
+        private void Update()
+        {
+            if (m_DelayedOnEnable)
+            {
+                m_DelayedOnEnable = false;
+
+                if (m_LoadOnEnable && !m_IsLoaded)
+                {
+                    LoadDocument();
+                }
+                else
+                {
+                    OverlayVisible = true;
+                    m_Internal.Overlay.gameObject.SetActive(true);
+                    m_Internal.Overlay.GetComponent<CanvasGroup>().alpha = 1.0f;
+                }
+            }
+
+            ProcessPinchZoom();
+        }
+
+        private void ProcessPinchZoom()
+        {
+            if (m_GraphicRaycaster == null)
+            {
+                if (m_Canvas == null)
+                    CacheCanvas();
+
+                if (m_GraphicRaycaster == null)
+                    return;
+            }
+            
+            int validTouchCount = 0;
+
+            if (Input.touchCount >= 1)
+            {
+                foreach (Touch touch in Input.touches)
+                {
+                    if (EventSystem.current.IsPointerOverGameObject(touch.fingerId))
+                    {
+                        PointerEventData ped = new PointerEventData(null);
+                        ped.position = touch.position;
+                        List<RaycastResult> results = new List<RaycastResult>();
+                        m_GraphicRaycaster.Raycast(ped, results);
+
+                        foreach (RaycastResult result in results)
+                        {
+                            if (result.gameObject.GetComponentInParent<PDFViewer>() == this)
+                            {
+                                ++validTouchCount;
+
+                                break;
+                            }
+                        }
+                    }
+                }
+            }
+
+            if (validTouchCount >= 2)
+            {
+                if (m_PreviousTouchCount < 2)
+                {
+                    m_PinchZoomStartZoomFactor = ZoomFactor;
+
+                    ScrollRect scrollRect = m_Internal.Viewport.GetComponent<ScrollRect>();
+
+                    scrollRect.inertia = false;
+                    scrollRect.horizontal = false;
+                    scrollRect.vertical = false;
+
+                    StopCoroutine(DelayedUnlockScrollRect());
+                }
+
+                Touch touchZero = Input.GetTouch(0);
+                Touch touchOne = Input.GetTouch(1);
+
+                float touchDeltaMag = (touchZero.position - touchOne.position).magnitude;
+
+                if (m_PreviousTouchCount < 2)
+                    m_PinchZoomStartDeltaMag = touchDeltaMag;
+                else
+                    ZoomFactor = m_PinchZoomStartZoomFactor / (m_PinchZoomStartDeltaMag / touchDeltaMag);
+            }
+            else if (m_PreviousTouchCount >= 2)
+                StartCoroutine(DelayedUnlockScrollRect());
+
+            m_PreviousTouchCount = validTouchCount;
+        }
+
+        private IEnumerator DelayedUnlockScrollRect()
+        {
+            while (Input.touchCount != 0)
+                yield return null;
+
+            ScrollRect scrollRect = m_Internal.Viewport.GetComponent<ScrollRect>();
+
+            scrollRect.inertia = true;
+            scrollRect.horizontal = true;
+            scrollRect.vertical = true;
+        }
+
+        private byte[] LoadAssetBytesFromResources(string path)
+        {
+            string fixedPath = path.Replace(".bytes", "");
+            if (fixedPath.StartsWith("./"))
+                fixedPath = fixedPath.Substring(2);
+
+            TextAsset pdfAsset = Resources.Load(fixedPath, typeof(TextAsset)) as TextAsset;
+
+            if (pdfAsset != null && pdfAsset.bytes != null && pdfAsset.bytes.Length > 0)
+                return pdfAsset.bytes;
+
+            return null;
+        }
+
+        private void NotifyCurrentPageChanged(int oldPageIndex, int newPageIndex)
+        {
+            if (OnCurrentPageChanged != null)
+                OnCurrentPageChanged(this, oldPageIndex, newPageIndex);
+
+            m_ThumbnailsViewer.OnCurrentPageChanged(newPageIndex);
+        }
+
+        private void NotifyDisabled()
+        {
+            if (OnDisabled != null)
+                OnDisabled(this);
+        }
+
+        private void NotifyDocumentLoaded(PDFDocument document)
+        {
+            EnsureValidPageContainerPosition();
+
+            if (OnDocumentLoaded != null)
+                OnDocumentLoaded(this, document);
+
+            m_ThumbnailsViewer.OnDocumentLoaded(document);
+            m_BookmarksViewer.OnDocumentLoaded(document);
+        }
+
+        private void NotifyDocumentLoadFailed()
+        {
+            if (OnDocumentLoadFailed != null)
+                OnDocumentLoadFailed(this);
+        }
+
+        private void NotifyDocumentUnloaded(PDFDocument document)
+        {
+            if (OnDocumentUnloaded != null)
+                OnDocumentUnloaded(this, document);
+
+            m_ThumbnailsViewer.OnDocumentUnloaded();
+            m_BookmarksViewer.OnDocumentUnloaded();
+        }
+
+        private void NotifyDownloadCancelled()
+        {
+            if (OnDownloadCancelled != null)
+                OnDownloadCancelled(this);
+        }
+
+        private void NotifyPasswordCancelled()
+        {
+            if (OnPasswordCancelled != null)
+                OnPasswordCancelled(this);
+        }
+
+        private void NotifyZoomChanged(float oldZoom, float newZoom)
+        {
+            if (OnZoomChanged != null)
+                OnZoomChanged(this, oldZoom, newZoom);
+        }
+
+        protected override void OnDisable()
+        {
+            base.OnDisable();
+
+            if (m_UnloadOnDisable && m_IsLoaded)
+            {
+                if (m_Renderer != null)
+                    m_Renderer.Dispose();
+                m_Renderer = null;
+
+                CleanUp();
+            }
+
+            NotifyDisabled();
+
+            PDFLibrary.Instance.ForceGabageCollection();
+        }
+
+        protected override void OnEnable()
+        {
+            base.OnEnable();
+
+            m_DelayedOnEnable = true;
+
+            if (m_ThumbnailsViewer == null)
+                m_ThumbnailsViewer = m_Internal.LeftPanel.m_ThumbnailsViewer;
+            if (m_BookmarksViewer == null)
+                m_BookmarksViewer = m_Internal.LeftPanel.m_Bookmarks.GetComponent<PDFBookmarksViewer>();
+
+            if (!m_ShowBookmarksViewer && m_ShowThumbnailsViewer)
+                m_Internal.LeftPanel.OnThumbnailsTabClicked();
+            else if (m_ShowBookmarksViewer && !m_ShowThumbnailsViewer)
+                m_Internal.LeftPanel.OnBookmarksTabClicked();
+            else
+                m_Internal.LeftPanel.OnBookmarksTabClicked();
+
+            m_ThumbnailsViewer.DoOnEnable();
+            m_BookmarksViewer.DoOnEnable();
+
+#if UNITY_WEBGL
+            m_Internal.SearchPanel.gameObject.SetActive(false);
+
+            int c = m_Internal.TopPanel.childCount;
+            for (int i = 0; i < c; ++i)
+            {
+                Transform t = m_Internal.TopPanel.GetChild(i);
+                if (t.name == "_SearchButton")
+                    t.gameObject.SetActive(false);
+            }
+#endif
+        }
+
+#if !UNITY_WEBGL || UNITY_EDITOR
+        private void OnLoadingBufferFinished(byte[] buffer)
+        {
+            m_PendingDocumentBuffer = buffer;
+
+            if (m_PendingDocumentBuffer != null && m_PendingDocumentBuffer.Length > 0)
+            {
+                if (!TryLoadDocumentWithBuffer(m_PendingDocumentBuffer, m_Password))
+                {
+                    if (m_FileSource == FileSourceType.Asset)
+                    {
+                        if (!TryLoadDocumentWithBuffer(m_PendingDocumentBuffer, m_PDFAsset.m_Password))
+                        {
+                            ShowPasswordDialog();
+                        }
+                    }
+                    else
+                        ShowPasswordDialog();
+                }
+            }
+            else
+            {
+                OverlayVisible = true;
+                m_Internal.Overlay.gameObject.SetActive(true);
+                m_Internal.Overlay.GetComponent<CanvasGroup>().alpha = 1.0f;
+            }
+        }
+#endif
+
+        private void SetPageCountLabel(int pageIndex, int pageCount)
+        {
+            m_Internal.PageCountLabel.text = "(" + pageIndex + " of " + pageCount + ")";
+        }
+
+        private void SetProgress(float progress)
+        {
+            var rectTransform = m_Internal.ProgressRect.parent.transform as RectTransform;
+            if (rectTransform != null)
+            {
+                m_Internal.ProgressRect.sizeDelta = new Vector2(Mathf.Clamp01(progress) * rectTransform.sizeDelta.x,
+                    m_Internal.ProgressRect.sizeDelta.y);
+            }
+            m_Internal.ProgressLabel.text = (int)(Mathf.Clamp01(progress) * 100) + "%";
+        }
+
+        private void SetZoomLabel()
+        {
+            m_Internal.PageZoomLabel.text = "(" + (int)Mathf.Round(m_ZoomFactor * 100.0f) + "%)";
+        }
+
+        private void ShowPasswordDialog()
+        {
+            OverlayVisible = true;
+            m_Internal.Overlay.gameObject.SetActive(true);
+            m_Internal.Overlay.GetComponent<CanvasGroup>().alpha = 0.0f;
+
+            m_Internal.PasswordDialog.gameObject.SetActive(true);
+        }
+
+        protected override void Start()
+        {
+            m_StartZoom = m_ZoomToGo;
+
+            m_LinksActionHandler = m_LinksActionHandler ?? new PDFViewerDefaultActionHandler();
+            m_BookmarksActionHandler = m_BookmarksActionHandler ?? new PDFViewerDefaultActionHandler();
+        }
+
+#if !UNITY_WEBGL || UNITY_EDITOR
+        private bool TryLoadDocumentWithBuffer(byte[] buffer, string password)
+        {
+            m_Document = new PDFDocument(buffer, password);
+
+            return TryLoadWithSpecifiedDocument(m_Document);
+        }
+#endif
+
+        private bool TryLoadWithSpecifiedDocument(PDFDocument document)
+        {
+            m_Document = document;
+
+            if (m_Document != null && m_Document.IsValid)
+            {
+                m_CurrentPageRange = new PDFPageRange();
+
+                m_PageCount = m_Document.GetPageCount();
+
+#if !UNITY_WEBGL || UNITY_EDITOR
+                m_NormalPageSizes = new Vector2[m_PageCount];
+
+                for (int i = 0; i < m_NormalPageSizes.Length; ++i)
+                    m_NormalPageSizes[i] = m_Document.GetPageSize(i);
+#endif
+
+                m_Internal.ScrollRect.scrollSensitivity = m_ScrollSensitivity;
+
+                m_PreviousPageFitting = m_PageFitting;
+                AdjustZoomToPageFitting(m_PageFitting, m_NormalPageSizes[0]);
+                m_ZoomFactor = m_ZoomToGo;
+
+                ComputePageSizes();
+                ComputePageOffsets();
+
+                InstantiatePageTextureHolders();
+
+                m_Internal.PageContainer.sizeDelta = GetDocumentSize();
+
+                SetPageCountLabel(1, m_PageCount);
+                SetZoomLabel();
+
+                m_Internal.PageContainer.anchoredPosition = Vector2.zero;
+
+                m_IsLoaded = true;
+
+                UpdatePagesPlacement();
+
+                UpdateScrollBarVisibility();
+                EnsureValidPageContainerPosition();
+
+                GoToPage(m_LoadAtPageIndex);
+
+                m_LoadAtPageIndex = 0;
+
+                NotifyDocumentLoaded(m_Document);
+
+                UpdateBookmarksViewerVisibility(m_ShowBookmarksViewer);
+
+                return true;
+            }
+            else
+            {
+                OverlayVisible = true;
+                m_Internal.Overlay.gameObject.SetActive(true);
+                m_Internal.Overlay.GetComponent<CanvasGroup>().alpha = 1.0f;
+            }
+
+            m_IsLoaded = false;
+
+            NotifyDocumentLoadFailed();
+
+            return false;
+        }
+
+        private void LateUpdate()
+        {
+            if (m_InvalidPasswordMessageVisisble && m_InvalidPasswordMessageDelay >= 0.0f)
+            {
+                m_InvalidPasswordMessageDelay = m_InvalidPasswordMessageDelay - Time.deltaTime;
+
+                if (m_InvalidPasswordMessageDelay < 0.0f)
+                    m_InvalidPasswordMessageDelay = 0.0f;
+
+                CanvasGroup messageCanvas = m_Internal.InvalidPasswordImage.GetComponent<CanvasGroup>();
+
+                if (m_InvalidPasswordMessageDelay <= 0.0f)
+                    messageCanvas.alpha = Mathf.Clamp01(messageCanvas.alpha - Time.deltaTime);
+
+                if (messageCanvas.alpha <= 0.0f)
+                {
+                    m_InvalidPasswordMessageVisisble = false;
+                    messageCanvas.alpha = 1.0f;
+                    m_Internal.InvalidPasswordImage.gameObject.SetActive(false);
+                }
+            }
+
+            if (OverlayVisible && !m_IsLoaded)
+            {
+                CanvasGroup overlayCanvas = m_Internal.Overlay.GetComponent<CanvasGroup>();
+
+                overlayCanvas.alpha = Mathf.Clamp01(overlayCanvas.alpha + Time.deltaTime * 2.0f);
+
+                if (overlayCanvas.alpha > OverlayAlpha)
+                    overlayCanvas.alpha = OverlayAlpha;
+            }
+            else if (OverlayVisible && m_IsLoaded)
+            {
+                CanvasGroup overlayCanvas = m_Internal.Overlay.GetComponent<CanvasGroup>();
+
+                overlayCanvas.alpha = Mathf.Clamp01(overlayCanvas.alpha - Time.deltaTime * 2.0f);
+
+                if (overlayCanvas.alpha == 0.0f)
+                {
+                    OverlayVisible = false;
+                    m_Internal.Overlay.gameObject.SetActive(false);
+                }
+            }
+
+            if (m_Internal.PasswordDialog.gameObject.activeInHierarchy
+                && m_Internal.PasswordInputField.text != ""
+                && Input.GetKeyDown("enter"))
+            {
+                OnPasswordDialogOkButtonClicked();
+            }
+
+            if (m_Document == null || !m_Document.IsValid || !m_IsLoaded)
+                return;
+
+            UpdateScrollBarVisibility();
+            EnsureValidPageContainerPosition();
+
+            if (m_PageFitting != m_PreviousPageFitting)
+                AdjustZoomToPageFitting(m_PageFitting, m_NormalPageSizes[0]);
+
+            if (Math.Abs(m_ZoomFactor - m_ZoomToGo) > 0.001f)
+            {
+	            m_ZoomToGo = Mathf.Clamp(m_ZoomToGo, m_MinZoomFactor, m_MaxZoomFactor);
+	            m_ZoomFactor = Mathf.Lerp(m_ZoomFactor, m_ZoomToGo, Time.deltaTime * 15.0f);
+
+                m_UpdateChangeDelay = m_DelayAfterZoomingBeforeUpdate;
+            }
+            else
+            {
+	            m_ZoomFactor = m_ZoomToGo;
+            }
+
+            bool zoomHasChanged = m_PreviousZoom != 0.0f && Math.Abs(m_PreviousZoom - m_ZoomFactor) > float.Epsilon;
+
+            if (m_PreviousZoom == 0.0f)
+            {
+                UpdateScrollBarVisibility();
+                EnsureValidPageContainerPosition();
+            }
+
+            if (zoomHasChanged)
+            {
+                Vector2 oldDocumentSize = GetDocumentSize();
+
+                ComputePageSizes();
+                ComputePageOffsets();
+                UpdatePagesPlacement();
+
+                m_Internal.PageContainer.sizeDelta = GetDocumentSize();
+
+                float newDocumentWidthRatio = m_Internal.PageContainer.sizeDelta.x / oldDocumentSize.x;
+                float newDocumentHeightRatio = m_Internal.PageContainer.sizeDelta.y / oldDocumentSize.y;
+
+                float deltaOffsetY = (m_Internal.PageContainer.anchoredPosition.y + m_ZoomPosition.y) *
+                                     newDocumentHeightRatio - m_Internal.PageContainer.anchoredPosition.y - m_ZoomPosition.y;
+
+                float deltaOffsetX = (m_Internal.PageContainer.anchoredPosition.x + m_ZoomPosition.x) *
+                                     newDocumentWidthRatio - m_Internal.PageContainer.anchoredPosition.x - m_ZoomPosition.x;
+
+                m_Internal.PageContainer.anchoredPosition += Vector2.up * deltaOffsetY + Vector2.right * deltaOffsetX;
+
+                UpdateScrollBarVisibility();
+
+                SetZoomLabel();
+            }
+            else if (Input.touchCount < 2)
+            {
+                EnsureValidPageContainerPosition();
+            }
+
+            PDFPageRange oldPageRange = m_CurrentPageRange;
+
+            m_CurrentPageRange = GetVisiblePageRange();
+
+            if (!m_Internal.PageInputField.isFocused)
+            {
+                int p = GetMostVisiblePageIndex() + 1;
+                m_Internal.PageInputField.text = p.ToString();
+
+                SetPageCountLabel(p, m_PageCount);
+            }
+
+            if (!oldPageRange.Equals(m_CurrentPageRange) && m_CurrentPageRange.IsValid
+                || zoomHasChanged && m_CurrentPageRange.IsValid)
+            {
+                float scale = Mathf.Min(m_ZoomToGo, m_MaxZoomFactorTextureQuality);
+
+                PDFPageRange.UpdatePageAgainstRanges(oldPageRange, m_CurrentPageRange, m_Document, m_PageTextureHolders, m_RenderSettings, scale, this, m_NormalPageSizes);
+            }
+
+            int mostVisible = GetMostVisiblePageIndex();
+
+            if (m_PreviousMostVisiblePage != mostVisible)
+            {
+                NotifyCurrentPageChanged(m_PreviousMostVisiblePage, mostVisible);
+
+                m_PreviousMostVisiblePage = GetMostVisiblePageIndex();
+            }
+
+            if (!oldPageRange.Equals(m_CurrentPageRange))
+            {
+                AdjustCurrentSearchResultDisplayed();
+            }
+
+            if (Math.Abs(m_PreviousZoomToGo - m_ZoomToGo) > float.Epsilon)
+            {
+                NotifyZoomChanged(m_PreviousZoomToGo, m_ZoomToGo);
+            }
+
+            if (m_UpdateChangeDelay != 0.0f && !zoomHasChanged)
+            {
+                m_UpdateChangeDelay -= Time.deltaTime;
+
+                if (m_UpdateChangeDelay <= 0.0f)
+                {
+                    m_UpdateChangeDelay = 0.0f;
+
+                    for (int i = m_CurrentPageRange.m_From; i < m_CurrentPageRange.m_To; ++i)
+                    {
+#if UNITY_WEBGL
+                        m_PageTextureHolders[i].m_Visible = true;
+
+                        if (m_PageTextureHolders[i].m_RenderingStarted)
+                            continue;
+
+                        int w = (int)(m_NormalPageSizes[i].x * Mathf.Min(m_ZoomToGo, m_MaxZoomFactorTextureQuality));
+                        int h = (int)(m_NormalPageSizes[i].y * Mathf.Min(m_ZoomToGo, m_MaxZoomFactorTextureQuality));
+
+                        m_PageTextureHolders[i].m_RenderingStarted = true;
+
+                        StartCoroutine(UpdatePageRangeTextures(i, w, h));
+#else
+                        if (m_PageTextureHolders[i].Texture != null)
+                        {
+                            Texture2D tex = m_PageTextureHolders[i].Texture;
+                            m_PageTextureHolders[i].Texture = null;
+
+                            Destroy(tex);
+                        }
+
+                        int w = (int)(m_Document.GetPageWidth(i) * Mathf.Min(m_ZoomToGo, m_MaxZoomFactorTextureQuality));
+                        int h = (int)(m_Document.GetPageHeight(i) * Mathf.Min(m_ZoomToGo, m_MaxZoomFactorTextureQuality));
+
+                        if (m_Renderer == null)
+                            m_Renderer = new PDFRenderer();
+                        Texture2D newTex = m_Renderer.RenderPageToTexture(m_Document.GetPage(i), w, h, this, m_RenderSettings);
+
+                        m_PageTextureHolders[i].Texture = newTex;
+#endif
+                    }
+                }
+            }
+
+            m_PreviousZoom = m_ZoomFactor;
+            m_PreviousZoomToGo = m_ZoomToGo;
+            m_PreviousPageFitting = m_PageFitting;
+
+
+            if (m_ThumbnailsViewer.gameObject.activeInHierarchy)
+                m_ThumbnailsViewer.DoUpdate();
+            if (m_BookmarksViewer.gameObject.activeInHierarchy)
+                m_BookmarksViewer.DoUpdate();
+        }
+
+#if UNITY_WEBGL
+        private IEnumerator UpdatePageRangeTextures(int pageIndex, int w, int h)
+        {
+            PDFJS_Promise<PDFPage> pagePromise = m_Document.GetPageAsync(pageIndex);
+
+            while (!pagePromise.HasFinished)
+                yield return null;
+
+            if (pagePromise.HasSucceeded)
+            {
+                PDFJS_Promise<Texture2D> renderPromise = PDFRenderer.RenderPageToTextureAsync(pagePromise.Result, w, h);
+
+                m_PageTextureHolders[pageIndex].m_RenderingPromise = renderPromise;
+
+                while (!renderPromise.HasFinished)
+                    yield return null;
+
+                m_PageTextureHolders[pageIndex].m_RenderingPromise = null;
+                m_PageTextureHolders[pageIndex].m_RenderingStarted = false;
+
+                if (renderPromise.HasSucceeded)
+                {
+                    if (m_PageTextureHolders[pageIndex].Texture != null && m_PageTextureHolders[pageIndex].Texture != renderPromise.Result)
+                    {
+                        Destroy(m_PageTextureHolders[pageIndex].Texture);
+                        m_PageTextureHolders[pageIndex].Texture = null;
+                    }
+
+                    if (m_PageTextureHolders[pageIndex].m_Visible)
+                    {
+                        m_PageTextureHolders[pageIndex].Texture = renderPromise.Result;
+                    }
+                    else
+                    {
+                        Destroy(renderPromise.Result);
+                        renderPromise.Result = null;
+                    }
+                }
+            }
+            else
+            {
+                m_PageTextureHolders[pageIndex].m_RenderingPromise = null;
+                m_PageTextureHolders[pageIndex].m_RenderingStarted = false;
+            }
+        }
+#endif
+
+        public Vector2[] GetCachedNormalPageSizes()
+        {
+            return m_NormalPageSizes;
+        }
+
+        private void UpdatePagesPlacement()
+        {
+            if (m_PageTextureHolders == null || m_PageSizes == null)
+                return;
+
+            foreach (PDFPageTextureHolder holder in m_PageTextureHolders)
+            {
+                RectTransform holderRectTransform = (RectTransform)holder.m_Page.transform;
+
+                holderRectTransform.sizeDelta = m_PageSizes[holder.m_PageIndex];
+                holder.RefreshTexture();
+
+                Vector3 newPosition = holderRectTransform.anchoredPosition3D;
+                newPosition.x = 0;
+                newPosition.y = -m_PageOffsets[holder.m_PageIndex];
+                newPosition.z = 0;
+                holderRectTransform.anchoredPosition3D = newPosition;
+            }
+        }
+
+        private void UpdateScrollBarVisibility()
+        {
+            bool vScrollVisible = true;
+            bool hScrollVisible = true;
+
+            if (Application.isPlaying)
+            {
+                vScrollVisible = m_Internal.PageContainer.sizeDelta.y > m_Internal.Viewport.rect.size.y;
+                hScrollVisible = m_Internal.PageContainer.sizeDelta.x > m_Internal.Viewport.rect.size.x;
+            }
+
+            vScrollVisible = vScrollVisible && m_ShowVerticalScrollBar;
+            hScrollVisible = hScrollVisible && m_ShowHorizontalScrollBar;
+
+            if (!hScrollVisible)
+            {
+                m_Internal.Viewport.offsetMin = new Vector2(m_Internal.Viewport.offsetMin.x, 0.0f);
+
+                m_Internal.Viewport.GetComponent<ScrollRect>().horizontalScrollbar = null;
+                m_Internal.HorizontalScrollBar.gameObject.SetActive(false);
+            }
+            else
+            {
+                m_Internal.Viewport.offsetMin = new Vector2(m_Internal.Viewport.offsetMin.x, 20.0f);
+
+                m_Internal.Viewport.GetComponent<ScrollRect>().horizontalScrollbar = m_Internal.HorizontalScrollBar.GetComponent<Scrollbar>();
+                m_Internal.HorizontalScrollBar.gameObject.SetActive(true);
+            }
+
+            if (!vScrollVisible)
+            {
+                m_Internal.Viewport.offsetMax = new Vector2(0.0f, m_Internal.Viewport.offsetMax.y);
+
+                m_Internal.Viewport.GetComponent<ScrollRect>().verticalScrollbar = null;
+                m_Internal.VerticalScrollBar.gameObject.SetActive(false);
+            }
+            else
+            {
+                m_Internal.Viewport.offsetMax = new Vector2(-20.0f, m_Internal.Viewport.offsetMax.y);
+
+                m_Internal.Viewport.GetComponent<ScrollRect>().verticalScrollbar = m_Internal.VerticalScrollBar.GetComponent<Scrollbar>();
+                m_Internal.VerticalScrollBar.gameObject.SetActive(true);
+            }
+
+            if (hScrollVisible && vScrollVisible)
+            {
+                m_Internal.VerticalScrollBar.offsetMin = new Vector2(m_Internal.VerticalScrollBar.offsetMin.x, 19.0f);
+                m_Internal.HorizontalScrollBar.offsetMax = new Vector2(-19.0f,
+                    m_Internal.HorizontalScrollBar.offsetMax.y);
+
+                if (!m_Internal.ScrollCorner.gameObject.activeInHierarchy)
+                    m_Internal.ScrollCorner.gameObject.SetActive(true);
+            }
+            else if (!hScrollVisible)
+            {
+                m_Internal.VerticalScrollBar.offsetMin = new Vector2(m_Internal.VerticalScrollBar.offsetMin.x, 0.0f);
+
+                if (m_Internal.ScrollCorner.gameObject.activeInHierarchy)
+                    m_Internal.ScrollCorner.gameObject.SetActive(false);
+            }
+            else
+            {
+                m_Internal.HorizontalScrollBar.offsetMax = new Vector2(0.0f,
+                    m_Internal.HorizontalScrollBar.offsetMax.y);
+
+                if (m_Internal.ScrollCorner.gameObject.activeInHierarchy)
+                    m_Internal.ScrollCorner.gameObject.SetActive(false);
+            }
+        }
+
+        private void ZoomCommon(Vector2 zoomPosition, bool zoomIn, bool useSpecificZoom = false, float specificZoom = 1.0f)
+        {
+            if (m_Document == null || !m_Document.IsValid)
+                return;
+
+            m_ZoomPosition = zoomPosition;
+
+            if (useSpecificZoom)
+            {
+                m_ZoomToGo = specificZoom;
+            }
+            else
+            {
+                float step = m_ZoomStep;
+
+                if (m_ZoomToGo >= 2.0f)
+                    step *= 2.0f;
+
+                if (m_ZoomToGo >= 4.0f)
+                    step *= 2.0f;
+
+                float epsilon = m_ZoomStep * 0.125f;
+
+                if (zoomIn)
+                {
+                    if (!Mathf.Approximately(Mathf.Floor(m_ZoomToGo * (1 / step)), m_ZoomToGo * (1 / step))
+                        && m_ZoomToGo * (1 / step) <= Mathf.Floor(m_ZoomToGo * (1 / step)))
+                    {
+                        m_ZoomToGo = Mathf.Floor(m_ZoomToGo * (1 / step)) * step;
+                    }
+
+                    m_ZoomToGo = Mathf.Clamp(Mathf.Floor((m_ZoomToGo + step) * (1 / step) + epsilon) * step, m_MinZoomFactor, m_MaxZoomFactor);
+                }
+                else
+                {
+                    if (!Mathf.Approximately(Mathf.Floor(m_ZoomToGo * (1 / step)), m_ZoomToGo * (1 / step))
+                        && m_ZoomToGo * (1 / step) >= Mathf.Floor(m_ZoomToGo * (1 / step)))
+                    {
+                        m_ZoomToGo = Mathf.Floor(m_ZoomToGo * (1 / step)) * step;
+                    }
+
+                    m_ZoomToGo = Mathf.Clamp(Mathf.Floor((m_ZoomToGo - step) * (1 / step) + epsilon) * step, m_MinZoomFactor, m_MaxZoomFactor);
+                }
+            }
+
+            m_PageFitting = PageFittingType.Zoom;
+        }
+
+        public Vector2 GetDevicePageSize(int pageIndex)
+        {
+            return m_PageSizes[pageIndex];
+        }
+
+        public IPDFDeviceActionHandler GetBookmarksActionHandler()
+        {
+#if UNITY_WEBGL && !UNITY_EDITOR
+            return null;
+#else
+            return m_BookmarksActionHandler;
+#endif
+        }
+
+        public IPDFDeviceActionHandler GetLinksActionHandler()
+        {
+#if UNITY_WEBGL && !UNITY_EDITOR
+            return null;
+#else
+            return m_LinksActionHandler;
+#endif
+        }
+
+        public IList<PDFColoredRect> GetBackgroundColoredRectList(PDFPage page)
+        {
+#if !UNITY_WEBGL
+            if (m_SearchResults != null && m_SearchResults[page.PageIndex] != null &&
+                m_SearchResults[page.PageIndex].Count > 0)
+            {
+                using (PDFTextPage textPage = page.GetTextPage())
+                {
+                    List<PDFColoredRect> coloredRectList = new List<PDFColoredRect>();
+
+                    foreach (PDFSearchResult result in m_SearchResults[page.PageIndex])
+                    {
+                        int pageRectCount = textPage.CountRects(result.StartIndex, result.Count);
+
+                        for (int j = 0; j < pageRectCount; ++j)
+                        {
+                            Rect rect = textPage.GetRect(j);
+                            rect = new Rect(
+                                rect.xMin - m_SearchResultPadding.x,
+                                rect.yMin + m_SearchResultPadding.y,
+                                rect.width + 2 * m_SearchResultPadding.x,
+                                rect.height + 2 * m_SearchResultPadding.y);
+                            coloredRectList.Add(new PDFColoredRect(rect, m_SearchResultColor));
+                        }
+                    }
+
+                    return coloredRectList;
+                }
+            }
+#endif
+
+            return null;
+        }
+
+        public void ZoomOnParagraph(PDFViewerPage viewerPage, Rect pageRect)
+        {
+            if (m_Document == null || !m_Document.IsValid)
+                return;
+
+#if !UNITY_WEBGL
+            Vector3[] pageCorners = new Vector3[4];
+
+            (viewerPage.transform as RectTransform).GetWorldCorners(pageCorners);
+            Vector2 min = pageCorners[0];
+            Vector2 max = pageCorners[0];
+            for (int i = 1; i < 4; ++i)
+            {
+                if (pageCorners[i].x < min.x)
+                    min.x = pageCorners[i].x;
+                if (pageCorners[i].y < min.y)
+                    min.y = pageCorners[i].y;
+                if (pageCorners[i].x > max.x)
+                    max.x = pageCorners[i].x;
+                if (pageCorners[i].y > max.y)
+                    max.y = pageCorners[i].y;
+            }
+
+            Vector2 devicePageSize = (viewerPage.transform as RectTransform).sizeDelta;
+            Rect deviceRect = viewerPage.m_Page.ConvertPageRectToDeviceRect(pageRect, devicePageSize);
+
+            float deviceRectCenterPosition = deviceRect.max.y + (deviceRect.min - deviceRect.max).y * 0.5f;
+
+            m_Internal.PageContainer.anchoredPosition = new Vector2(
+                m_Internal.PageContainer.anchoredPosition.x,
+                m_PageOffsets[viewerPage.m_Page.PageIndex]
+                - m_PageSizes[viewerPage.m_Page.PageIndex].y * 0.5f
+                + (m_PageSizes[viewerPage.m_Page.PageIndex].y - deviceRectCenterPosition)
+                - m_Internal.Viewport.rect.size.y * 0.5f);
+
+            if (m_ZoomToGo < m_ParagraphZoomFactor)
+                ZoomCommon(new Vector2(0.0f, m_Internal.Viewport.rect.size.y * 0.5f), true, true, m_ParagraphZoomFactor);
+#endif
+        }
+
+        protected override void OnTransformParentChanged()
+        {
+            base.OnTransformParentChanged();
+
+            if (gameObject != null)
+                m_Canvas = null;
+        }
+
+        private void CacheCanvas()
+        {
+            if (gameObject == null)
+                return;
+
+            gameObject.GetComponentsInParent(false, m_CanvasList);
+
+            if (m_CanvasList.Count > 0)
+            {
+                // Find the first active and enabled canvas.
+                for (int i = 0; i < m_CanvasList.Count; ++i)
+                {
+                    if (m_CanvasList[i].isActiveAndEnabled)
+                    {
+                        m_Canvas = m_CanvasList[i];
+                        m_GraphicRaycaster = m_Canvas.GetComponent<GraphicRaycaster>();
+                        break;
+                    }
+                }
+            }
+            else
+            {
+                m_Canvas = null;
+                m_GraphicRaycaster = null;
+            }
+
+            m_CanvasList.Clear();
+        }
+    }
+}

+ 8 - 0
Assets/RTC/Paroxe/PDFRenderer/API/PDFViewer.cs.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 19dc9f9e53a9c6a4b984db3c8176ed0b
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 

+ 116 - 0
Assets/RTC/Paroxe/PDFRenderer/API/PDFWebRequest.cs

@@ -0,0 +1,116 @@
+#if UNITY_2018_3_OR_NEWER
+#define USE_UNITYWEBREQUEST
+#endif
+
+#if USE_UNITYWEBREQUEST
+using UnityEngine.Networking;
+#else
+using UnityEngine;
+#endif
+
+using System;
+using System.Collections;
+
+namespace Paroxe.PdfRenderer
+{
+    /// <summary>
+    /// WWW is deprecated in recent version of Unity but it's not available on older version like Unity 5.3
+    /// This class only acts like a shim supporting the right implementation depending on which version of 
+    /// Unity being use.
+    /// </summary>
+    public sealed class PDFWebRequest
+#if USE_UNITYWEBREQUEST
+        : UnityWebRequest, IEnumerator
+#else
+        : IDisposable, IEnumerator
+#endif
+    {
+#if !USE_UNITYWEBREQUEST
+        private WWW m_WWW;
+#endif
+
+        public PDFWebRequest(string url)
+#if USE_UNITYWEBREQUEST
+            : base(url)
+#endif
+        {
+#if USE_UNITYWEBREQUEST
+            downloadHandler = new DownloadHandlerBuffer();
+            disposeDownloadHandlerOnDispose = true;
+#else
+            m_WWW = new WWW(url);
+#endif
+        }
+
+#if USE_UNITYWEBREQUEST
+        public float progress
+        {
+            get { return downloadProgress; }
+        }
+
+        public byte[] bytes
+        {
+            get { return downloadHandler.data; }
+        }
+
+        object IEnumerator.Current
+        {
+            get { return null; }
+        }
+
+        bool IEnumerator.MoveNext()
+        {
+            return !isDone;
+        }
+
+        void IEnumerator.Reset()
+        {
+            throw new NotImplementedException();
+        }
+#else
+        public float progress
+        {
+            get { return m_WWW.progress; }
+        }
+
+        public byte[] bytes
+        {
+            get { return m_WWW.bytes; }
+        }
+
+        public string error
+        {
+            get { return m_WWW.error; }
+        }
+
+        public bool isDone
+        {
+            get { return m_WWW.isDone; }
+        }
+
+        object IEnumerator.Current
+        {
+            get { return null; }
+        }
+
+        bool IEnumerator.MoveNext()
+        {
+            return !isDone;
+        }
+
+        void IEnumerator.Reset()
+        {
+            throw new NotImplementedException();
+        }
+#endif
+
+#if !USE_UNITYWEBREQUEST
+        public void SendWebRequest() { }
+
+        public void Dispose()
+        {
+            m_WWW.Dispose();
+        }
+#endif
+    }
+}

+ 11 - 0
Assets/RTC/Paroxe/PDFRenderer/API/PDFWebRequest.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c73f512bc1249264dbe0559fb3151193
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 5 - 0
Assets/RTC/Paroxe/PDFRenderer/API/Rendering.meta

@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: 9af9fde6ae454ad4a89a160b1a12d9b0
+folderAsset: yes
+DefaultImporter:
+  userData: 

+ 13 - 0
Assets/RTC/Paroxe/PDFRenderer/API/Rendering/IPDFColoredRectListProvider.cs

@@ -0,0 +1,13 @@
+using System.Collections.Generic;
+
+namespace Paroxe.PdfRenderer
+{
+    /// <summary>
+    /// This interface allow to implement a custome colorec rects provider. For example, PDFViewer inherits
+    /// this class and implements it to provide colorect rects during a search session to the renderer.
+    /// </summary>
+    public interface IPDFColoredRectListProvider
+    {
+        IList<PDFColoredRect> GetBackgroundColoredRectList(PDFPage page);
+    }
+}

+ 8 - 0
Assets/RTC/Paroxe/PDFRenderer/API/Rendering/IPDFColoredRectListProvider.cs.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 6038f4b5ef6558748bc4b4187b18311f
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 

+ 21 - 0
Assets/RTC/Paroxe/PDFRenderer/API/Rendering/PDFColoredRect.cs

@@ -0,0 +1,21 @@
+using UnityEngine;
+
+namespace Paroxe.PdfRenderer
+{
+    /// <summary>
+    /// Represent a colored rect within a page. This class is used mainly
+    /// for search results highlightment. Will maybe used for text selection in
+    /// the future.
+    /// </summary>
+    public struct PDFColoredRect
+    {
+        public Rect PageRect;
+        public Color Color;
+
+        public PDFColoredRect(Rect pageRect, Color color)
+        {
+            PageRect = pageRect;
+            Color = color;
+        }
+    }
+}

+ 8 - 0
Assets/RTC/Paroxe/PDFRenderer/API/Rendering/PDFColoredRect.cs.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 28d50b7c2f7ec4f409cf1087e383a7fc
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 

+ 865 - 0
Assets/RTC/Paroxe/PDFRenderer/API/Rendering/PDFRenderer.cs

@@ -0,0 +1,865 @@
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+using Paroxe.PdfRenderer.Internal;
+using UnityEngine;
+using Paroxe.PdfRenderer.WebGL;
+using System.Collections; // For WebGL
+
+namespace Paroxe.PdfRenderer
+{
+	/// <summary>
+	/// This class allow the application to render pages into textures.
+	/// </summary>
+	public class PDFRenderer : IDisposable
+	{
+		private bool m_Disposed;
+#if !UNITY_WEBGL || UNITY_EDITOR
+		private PDFBitmap m_Bitmap;
+		private byte[] m_IntermediateBuffer;
+#endif
+
+		public PDFRenderer()
+		{
+			PDFLibrary.AddRef("PDFRenderer");
+		}
+
+		~PDFRenderer()
+		{
+			Dispose(false);
+		}
+
+		public void Dispose()
+		{
+			Dispose(true);
+			GC.SuppressFinalize(this);
+		}
+
+		protected virtual void Dispose(bool disposing)
+		{
+			if (!m_Disposed)
+			{
+				if (disposing)
+				{
+#if !UNITY_WEBGL || UNITY_EDITOR
+					m_Bitmap.Dispose();
+					m_Bitmap = null;
+#endif
+				}
+
+				PDFLibrary.RemoveRef("PDFRenderer");
+
+				m_Disposed = true;
+			}
+		}
+
+#if UNITY_WEBGL
+        public class RenderPageParameters
+        {
+            public IntPtr pageHandle;
+            public Texture2D existingTexture;
+            public Vector2 newTextureSize;
+
+
+            public RenderPageParameters(IntPtr pageHandle, Texture2D existingTexture, Vector2 newTextureSize)
+            {
+                this.pageHandle = pageHandle;
+                this.existingTexture = existingTexture;
+                this.newTextureSize = newTextureSize;
+            }
+        }
+#endif
+
+		public static PDFJS_Promise<Texture2D> RenderPageToExistingTextureAsync(PDFPage page, Texture2D tex)
+		{
+			PDFJS_Promise<Texture2D> renderPromise = new PDFJS_Promise<Texture2D>();
+
+#if !UNITY_WEBGL || UNITY_EDITOR
+			using (PDFRenderer renderer = new PDFRenderer())
+			{
+				renderPromise.HasFinished = true;
+				renderPromise.HasSucceeded = true;
+				renderPromise.HasReceivedJSResponse = true;
+				renderer.RenderPageToExistingTexture(page, tex);
+				renderPromise.Result = tex;
+			}
+#else
+
+            RenderPageParameters parameters = new RenderPageParameters(page.NativePointer, tex, new Vector2(tex.width, tex.height));
+
+            PDFJS_Library.Instance.PreparePromiseCoroutine(RenderPageCoroutine, renderPromise, parameters).Start();
+#endif
+
+			return renderPromise;
+		}
+
+		public static PDFJS_Promise<Texture2D> RenderPageToTextureAsync(PDFPage page, int width, int height)
+		{
+			return RenderPageToTextureAsync(page, new Vector2(width, height));
+		}
+
+		public static PDFJS_Promise<Texture2D> RenderPageToTextureAsync(PDFPage page, Vector2 size)
+		{
+			PDFJS_Promise<Texture2D> renderPromise = new PDFJS_Promise<Texture2D>();
+
+#if !UNITY_WEBGL || UNITY_EDITOR
+			using (PDFRenderer renderer = new PDFRenderer())
+			{
+				renderPromise.HasFinished = true;
+				renderPromise.HasSucceeded = true;
+				renderPromise.HasReceivedJSResponse = true;
+				renderPromise.Result = renderer.RenderPageToTexture(page, (int)size.x, (int)size.y);
+			}
+#else
+            RenderPageParameters parameters = new RenderPageParameters(page.NativePointer, null, size);
+
+            PDFJS_Library.Instance.PreparePromiseCoroutine(RenderPageCoroutine, renderPromise, parameters).Start();
+
+#endif
+			return renderPromise;
+		}
+
+		public static PDFJS_Promise<Texture2D> RenderPageToTextureAsync(PDFPage page, float scale = 1.0f)
+		{
+			PDFJS_Promise<Texture2D> renderPromise = new PDFJS_Promise<Texture2D>();
+
+#if !UNITY_WEBGL || UNITY_EDITOR
+			using (PDFRenderer renderer = new PDFRenderer())
+			{
+				renderPromise.HasFinished = true;
+				renderPromise.HasSucceeded = true;
+				renderPromise.HasReceivedJSResponse = true;
+				Vector2 size = page.GetPageSize(scale);
+				renderPromise.Result = renderer.RenderPageToTexture(page, (int)size.x, (int)size.y);
+			}
+#else
+
+            RenderPageParameters parameters = new RenderPageParameters(page.NativePointer, null, page.GetPageSize(scale));
+
+            PDFJS_Library.Instance.PreparePromiseCoroutine(RenderPageCoroutine, renderPromise, parameters).Start();
+#endif
+
+			return renderPromise;
+		}
+
+#if UNITY_WEBGL && !UNITY_EDITOR
+        private static IEnumerator RenderPageCoroutine(PDFJS_PromiseCoroutine promiseCoroutine, IPDFJS_Promise promise, object parameters)
+        {
+            PDFJS_Promise<PDFJS_WebGLCanvas> renderToCanvasPromise = new PDFJS_Promise<PDFJS_WebGLCanvas>();
+
+            PDFJS_Library.Instance.PreparePromiseCoroutine(null, renderToCanvasPromise, null);
+
+            IntPtr pageHandle = ((RenderPageParameters)parameters).pageHandle;
+            Texture2D texture = ((RenderPageParameters)parameters).existingTexture;
+            Vector2 newtextureSize = ((RenderPageParameters)parameters).newTextureSize;
+
+            Vector2 pageSize = PDFPage.GetPageSize(pageHandle, 1.0f);
+
+            float scale = 1.0f;
+            float width = 0.0f;
+            float height = 0.0f;
+
+            if (texture != null)
+            {
+                float wf = pageSize.x / texture.width;
+                float hf = pageSize.y / texture.height;
+
+                width = texture.width;
+                height = texture.height;
+
+                scale = 1.0f / Mathf.Max(wf, hf);
+            }
+            else
+            {
+                float wf = pageSize.x / newtextureSize.x;
+                float hf = pageSize.y / newtextureSize.y;
+
+                width = newtextureSize.x;
+                height = newtextureSize.y;
+
+                scale = 1.0f / Mathf.Max(wf, hf);
+            }
+
+            NativeMethods.PDFJS_RenderPageIntoCanvas(renderToCanvasPromise.PromiseHandle, pageHandle.ToInt32(), scale, width, height);
+
+            while (!renderToCanvasPromise.HasReceivedJSResponse)
+                yield return null;
+
+            if (renderToCanvasPromise.HasSucceeded)
+            {
+                int canvasHandle = int.Parse(renderToCanvasPromise.JSObjectHandle);
+
+                using (PDFJS_WebGLCanvas canvas = new PDFJS_WebGLCanvas(new IntPtr(canvasHandle)))
+                {
+                    PDFJS_Promise<Texture2D> renderToTexturePromise = promise as PDFJS_Promise<Texture2D>;
+
+                    if (texture == null)
+                    {
+                        texture = new Texture2D((int)newtextureSize.x, (int)newtextureSize.y, TextureFormat.ARGB32, false);
+                        texture.filterMode = FilterMode.Bilinear;
+                        texture.Apply();
+                    }
+
+                    NativeMethods.PDFJS_RenderCanvasIntoTexture(canvasHandle, texture.GetNativeTexturePtr().ToInt32());
+
+                    renderToTexturePromise.Result = texture;
+                    renderToTexturePromise.HasSucceeded = true;
+                    renderToTexturePromise.HasFinished = true;
+
+                    promiseCoroutine.ExecuteThenAction(true, texture);
+                }
+            }
+            else
+            {
+                PDFJS_Promise<Texture2D> renderToTexturePromise = promise as PDFJS_Promise<Texture2D>;
+
+                renderToTexturePromise.Result = null;
+                renderToTexturePromise.HasSucceeded = false;
+                renderToTexturePromise.HasFinished = true;
+
+                promiseCoroutine.ExecuteThenAction(false, null);
+            }
+        }
+#endif
+
+#if !UNITY_WEBGL || UNITY_EDITOR
+        /// <summary>
+        /// Render page into a new byte array.
+        /// </summary>
+        /// <param name="page"></param>
+        /// <returns></returns>
+#if !UNITY_WEBGL
+		public
+#else
+        private
+#endif
+        byte[] RenderPageToByteArray(PDFPage page)
+		{
+			return RenderPageToByteArray(page, (int)page.GetPageSize().x, (int)page.GetPageSize().y, null,
+				RenderSettings.defaultRenderSettings);
+		}
+
+		/// <summary>
+		/// Render page into a new byte array.
+		/// </summary>
+		/// <param name="page"></param>
+		/// <param name="width"></param>
+		/// <param name="height"></param>
+		/// <returns></returns>
+#if !UNITY_WEBGL
+		public
+#else
+        private
+#endif
+		byte[] RenderPageToByteArray(PDFPage page, int width, int height)
+		{
+			return RenderPageToByteArray(page, width, height, null, RenderSettings.defaultRenderSettings);
+		}
+
+		/// <summary>
+		/// Render page into a new byte array.
+		/// </summary>
+		/// <param name="page"></param>
+		/// <param name="width"></param>
+		/// <param name="height"></param>
+		/// <param name="rectsProvider"></param>
+		/// <returns></returns>
+#if !UNITY_WEBGL
+		public
+#else
+        private
+#endif
+		byte[] RenderPageToByteArray(PDFPage page, int width, int height,
+			IPDFColoredRectListProvider rectsProvider)
+		{
+			return RenderPageToByteArray(page, width, height, rectsProvider, RenderSettings.defaultRenderSettings);
+		}
+
+		/// <summary>
+		/// Render page into a new byte array.
+		/// </summary>
+		/// <param name="page"></param>
+		/// <param name="width"></param>
+		/// <param name="height"></param>
+		/// <param name="rectsProvider"></param>
+		/// <param name="settings"></param>
+		/// <returns></returns>
+#if !UNITY_WEBGL
+		public
+#else
+        private
+#endif
+		byte[] RenderPageToByteArray(PDFPage page, int width, int height,
+			IPDFColoredRectListProvider rectsProvider, RenderSettings settings)
+		{
+			if (settings == null)
+				settings = RenderSettings.defaultRenderSettings;
+
+			if (m_Bitmap == null || m_Bitmap.UseAlphaChannel != settings.transparentBackground || !m_Bitmap.HasSameSize(width, height))
+			{
+				if (m_Bitmap != null)
+					m_Bitmap.Dispose();
+
+				m_Bitmap = new PDFBitmap(width, height, settings.transparentBackground);
+			}
+
+			m_Bitmap.FillRect(0, 0, width, height, settings.transparentBackground ? 0x00000000 : int.MaxValue);
+
+			int flags = settings == null
+				? RenderSettings.defaultRenderSettings.ComputeRenderingFlags()
+				: settings.ComputeRenderingFlags();
+
+			float scale = width / page.GetPageSize(1.0f).x;
+
+			PDFRect clipping = new PDFRect(width, height);
+			PDFMatrix matrix = PDFMatrix.Identity;
+			matrix.Scale(scale, -scale);
+			matrix.Translate(0.0f, height);
+
+			NativeMethods.FPDF_RenderPageBitmapWithMatrix(m_Bitmap.NativePointer, page.NativePointer, ref matrix, ref clipping, flags);
+
+			IntPtr bufferPtr = m_Bitmap.GetBuffer();
+
+			if (bufferPtr == IntPtr.Zero)
+				return null;
+
+			int length = width * height * 4;
+
+			if (m_IntermediateBuffer == null || m_IntermediateBuffer.Length < length)
+				m_IntermediateBuffer = new byte[width * height * 4];
+
+			Marshal.Copy(bufferPtr, m_IntermediateBuffer, 0, width * height * 4);
+
+#if !UNITY_WEBGL
+
+			IList<PDFColoredRect> coloredRects = rectsProvider != null
+				? rectsProvider.GetBackgroundColoredRectList(page)
+				: null;
+
+			if (coloredRects != null && coloredRects.Count > 0)
+			{
+				foreach (PDFColoredRect coloredRect in coloredRects)
+				{
+					var r = (int)(coloredRect.Color.r * 255) & 0xFF;
+					var g = (int)(coloredRect.Color.g * 255) & 0xFF;
+					var b = (int)(coloredRect.Color.b * 255) & 0xFF;
+					var a = (int)(coloredRect.Color.a * 255) & 0xFF;
+
+					float alpha = (a / (float)255);
+					float reverseAlpha = 1.0f - alpha;
+
+					Rect deviceRect = page.ConvertPageRectToDeviceRect(coloredRect.PageRect, new Vector2(width, height));
+
+					if (deviceRect.x >= 0.0f
+					    && deviceRect.y >= 0.0f
+					    && deviceRect.x + deviceRect.width <= width
+					    && deviceRect.y + deviceRect.height <= height)
+					{
+						for (int y = 0; y < (int)deviceRect.height; ++y)
+						{
+							for (int x = 0; x < (int)deviceRect.width; ++x)
+							{
+								int s = (((height - (int)deviceRect.y) - y) * width + (int)deviceRect.x + x) * 4;
+
+								var sr = m_IntermediateBuffer[s];
+								var sg = m_IntermediateBuffer[s + 1];
+								var sb = m_IntermediateBuffer[s + 2];
+
+								m_IntermediateBuffer[s] = (byte)Mathf.Clamp(alpha * r + (reverseAlpha * sr), 0, 255);
+								m_IntermediateBuffer[s + 1] = (byte)Mathf.Clamp(alpha * g + (reverseAlpha * sg), 0, 255);
+								m_IntermediateBuffer[s + 2] = (byte)Mathf.Clamp(alpha * b + (reverseAlpha * sb), 0, 255);
+								m_IntermediateBuffer[s + 3] = 0xFF;
+							}
+						}
+					}
+				}
+			}
+#endif
+			return m_IntermediateBuffer;
+		}
+
+		[StructLayout(LayoutKind.Sequential)]
+		public struct PDFMatrix
+		{
+			public static PDFMatrix Identity
+			{
+				get { return new PDFMatrix { a = 1, b = 0, c = 0, d = 1, e = 0, f = 0 }; }
+			}
+
+			public float a;
+			public float b;
+			public float c;
+			public float d;
+			public float e;
+			public float f;
+
+			public PDFMatrix(float[] n)
+			{
+				if (n == null)
+					throw new ArgumentNullException("n");
+				if (n.Length != 6)
+					throw new ArgumentException("n must have 6 elements", "n");
+
+				a = n[0];
+				b = n[1];
+				c = n[2];
+				d = n[3];
+				e = n[4];
+				f = n[5];
+			}
+
+			public PDFMatrix(float a, float b, float c, float d, float e, float f)
+			{
+				this.a = a;
+				this.b = b;
+				this.c = c;
+				this.d = d;
+				this.e = e;
+				this.f = f;
+			}
+
+			public void SetIdentity()
+			{
+				a = 1;
+				b = 0;
+				c = 0;
+				d = 1;
+				e = 0;
+				f = 0;
+			}
+
+			public void Scale(float sx, float sy, bool prepended = false)
+			{
+				a *= sx;
+				d *= sy;
+				if (prepended)
+				{
+					b *= sx;
+					c *= sy;
+					return;
+				}
+
+				b *= sy;
+				c *= sx;
+				e *= sx;
+				f *= sy;
+			}
+
+			public void Translate(float x, float y, bool prepended = false)
+			{
+				if (prepended)
+				{
+					e += x * a + y * c;
+					f += y * d + x * b;
+					return;
+				}
+				e += x;
+				f += y;
+			}
+
+			public void Rotate(float radian, bool prepended = false)
+			{
+				float cosValue = Mathf.Cos(radian);
+				float sinValue = Mathf.Sin(radian);
+				ConcatInternal(new PDFMatrix(cosValue, sinValue, -sinValue, cosValue, 0, 0), prepended);
+			}
+
+			public void RotateAt(float fRadian, float dx, float dy, bool prepended = false)
+			{
+				Translate(dx, dy, prepended);
+				Rotate(fRadian, prepended);
+				Translate(-dx, -dy, prepended);
+			}
+
+			private void ConcatInternal(PDFMatrix other, bool prepend)
+			{
+				PDFMatrix left;
+				PDFMatrix right;
+
+				if (prepend)
+				{
+					left = other;
+					right = this;
+				}
+				else
+				{
+					left = this;
+					right = other;
+				}
+
+				a = left.a * right.a + left.b * right.c;
+				b = left.a * right.b + left.b * right.d;
+				c = left.c * right.a + left.d * right.c;
+				d = left.c * right.b + left.d * right.d;
+				e = left.e * right.a + left.f * right.c + right.e;
+				f = left.e * right.b + left.f * right.d + right.f;
+			}
+
+			public float this[int index]
+			{
+				get
+				{
+					float num;
+					switch (index)
+					{
+						case 0:
+							{
+								num = a;
+								break;
+							}
+						case 1:
+							{
+								num = b;
+								break;
+							}
+						case 2:
+							{
+								num = c;
+								break;
+							}
+						case 3:
+							{
+								num = d;
+								break;
+							}
+						case 4:
+							{
+								num = e;
+								break;
+							}
+						case 5:
+							{
+								num = f;
+								break;
+							}
+						default:
+							{
+								throw new IndexOutOfRangeException(string.Format("Invalid PDFMatrix index addressed: {0}!", new object[] { index }));
+							}
+					}
+					return num;
+				}
+				set
+				{
+					switch (index)
+					{
+						case 0:
+							{
+								a = value;
+								break;
+							}
+						case 1:
+							{
+								b = value;
+								break;
+							}
+						case 2:
+							{
+								c = value;
+								break;
+							}
+						case 3:
+							{
+								d = value;
+								break;
+							}
+						case 4:
+							{
+								e = value;
+								break;
+							}
+						case 5:
+							{
+								f = value;
+								break;
+							}
+						default:
+							{
+								throw new IndexOutOfRangeException(string.Format("Invalid PDFMatrix index addressed: {0}!", new object[] { index }));
+							}
+					}
+				}
+			}
+
+			public override bool Equals(object other)
+			{
+				return (other is PDFMatrix ? this == (PDFMatrix)other : false);
+			}
+
+			public static bool operator ==(PDFMatrix lhs, PDFMatrix rhs)
+			{
+				return (lhs.a != rhs.a || lhs.b != rhs.b || lhs.c != rhs.c || lhs.d != rhs.d || lhs.e != rhs.e ? false : lhs.f == rhs.f);
+			}
+
+			public static bool operator !=(PDFMatrix lhs, PDFMatrix rhs)
+			{
+				return !(lhs == rhs);
+			}
+
+			public override int GetHashCode()
+			{
+				unchecked
+				{
+					int hashCode = this.a.GetHashCode();
+					hashCode = hashCode * 23 + b.GetHashCode();
+					hashCode = hashCode * 23 + c.GetHashCode();
+					hashCode = hashCode * 23 + d.GetHashCode();
+					hashCode = hashCode * 23 + e.GetHashCode();
+					hashCode = hashCode * 23 + f.GetHashCode();
+					return hashCode;
+				}
+			}
+		}
+
+		[StructLayout(LayoutKind.Sequential)]
+		public struct PDFRect
+		{
+			public float left;
+			public float top;
+			public float right;
+			public float bottom;
+
+			public PDFRect(float left, float top, float right, float bottom)
+			{
+				this.left = left;
+				this.top = top;
+				this.right = right;
+				this.bottom = bottom;
+			}
+
+			public PDFRect(float width, float height)
+			{
+				left = 0;
+				top = 0;
+				right = width;
+				bottom = height;
+			}
+
+			public override bool Equals(object other)
+			{
+				return (other is PDFRect ? this == (PDFRect)other : false);
+			}
+
+			public static bool operator ==(PDFRect lhs, PDFRect rhs)
+			{
+				return (lhs.left != rhs.left || lhs.top != rhs.top || lhs.right != rhs.right ? false : lhs.bottom == rhs.bottom);
+			}
+
+			public static bool operator !=(PDFRect lhs, PDFRect rhs)
+			{
+				return !(lhs == rhs);
+			}
+
+			public override int GetHashCode()
+			{
+				unchecked
+				{
+					int hashCode = this.left.GetHashCode();
+					hashCode = hashCode * 23 + top.GetHashCode();
+					hashCode = hashCode * 23 + right.GetHashCode();
+					hashCode = hashCode * 23 + bottom.GetHashCode();
+					return hashCode;
+				}
+			}
+		}
+
+		/// <summary>
+		/// Render page into a new Texture2D.
+		/// </summary>
+		/// <param name="page"></param>
+		/// <returns></returns>
+#if !UNITY_WEBGL
+		public
+#else
+        private
+#endif
+		Texture2D RenderPageToTexture(PDFPage page)
+		{
+			return RenderPageToTexture(page, (int)page.GetPageSize().x, (int)page.GetPageSize().y, null,
+				RenderSettings.defaultRenderSettings);
+		}
+
+		/// <summary>
+		/// Render page into a new Texture2D.
+		/// </summary>
+		/// <param name="page"></param>
+		/// <param name="width"></param>
+		/// <param name="height"></param>
+		/// <returns></returns>
+#if !UNITY_WEBGL
+		public
+#else
+        private
+#endif
+		Texture2D RenderPageToTexture(PDFPage page, int width, int height)
+		{
+			return RenderPageToTexture(page, width, height, null, RenderSettings.defaultRenderSettings);
+		}
+
+		/// <summary>
+		/// Render page into a new Texture2D.
+		/// </summary>
+		/// <param name="page"></param>
+		/// <param name="width"></param>
+		/// <param name="height"></param>
+		/// <param name="rectsProvider"></param>
+		/// <returns></returns>
+#if !UNITY_WEBGL
+		public
+#else
+        private
+#endif
+		Texture2D RenderPageToTexture(PDFPage page, int width, int height,
+			IPDFColoredRectListProvider rectsProvider)
+		{
+			return RenderPageToTexture(page, width, height, rectsProvider, RenderSettings.defaultRenderSettings);
+		}
+
+		/// <summary>
+		/// Render page into a new Texture2D.
+		/// </summary>
+		/// <param name="page"></param>
+		/// <param name="width"></param>
+		/// <param name="height"></param>
+		/// <param name="rectsProvider"></param>
+		/// <param name="settings"></param>
+		/// <returns></returns>
+#if !UNITY_WEBGL
+		public
+#else
+        private
+#endif
+		Texture2D RenderPageToTexture(PDFPage page, int width, int height,
+			IPDFColoredRectListProvider rectsProvider, RenderSettings settings)
+		{
+			Texture2D newTex = new Texture2D(width, height, TextureFormat.RGBA32, false);
+
+			RenderPageToExistingTexture(page, newTex, rectsProvider, settings);
+
+			return newTex;
+		}
+
+		/// <summary>
+		/// Render page into an existing Texture2D.
+		/// </summary>
+		/// <param name="page"></param>
+		/// <param name="texture"></param>
+#if !UNITY_WEBGL
+		public
+#else
+        private
+#endif
+		void RenderPageToExistingTexture(PDFPage page, Texture2D texture)
+		{
+			RenderPageToExistingTexture(page, texture, null, RenderSettings.defaultRenderSettings);
+		}
+
+		/// <summary>
+		/// Render page into an existing Texture2D.
+		/// </summary>
+		/// <param name="page"></param>
+		/// <param name="texture"></param>
+		/// <param name="rectsProvider"></param>
+#if !UNITY_WEBGL
+		public
+#else
+        private
+#endif
+		void RenderPageToExistingTexture(PDFPage page, Texture2D texture,
+			IPDFColoredRectListProvider rectsProvider)
+		{
+			RenderPageToExistingTexture(page, texture, rectsProvider, RenderSettings.defaultRenderSettings);
+		}
+
+		/// <summary>
+		/// Render page into an existing Texture2D.
+		/// </summary>
+		/// <param name="page"></param>
+		/// <param name="texture"></param>
+		/// <param name="rectsProvider"></param>
+		/// <param name="settings"></param>
+#if !UNITY_WEBGL
+		public
+#else
+        private
+#endif
+		void RenderPageToExistingTexture(PDFPage page, Texture2D texture,
+			IPDFColoredRectListProvider rectsProvider, RenderSettings settings)
+		{
+			byte[] byteArray = RenderPageToByteArray(page, texture.width, texture.height, rectsProvider, settings);
+
+			if (byteArray != null)
+			{
+				texture.wrapMode = TextureWrapMode.Clamp;
+
+				if ((texture.format != TextureFormat.RGBA32
+					 && texture.format != TextureFormat.ARGB32
+					 && texture.format != TextureFormat.BGRA32
+					 && texture.format != (TextureFormat)37) || texture.mipmapCount > 1)
+				{
+					Color32[] pixels = new Color32[texture.width * texture.height];
+
+					for (int i = 0; i < pixels.Length; ++i)
+						pixels[i] = new Color32(
+							byteArray[i * 4],
+							byteArray[i * 4 + 1],
+							byteArray[i * 4 + 2],
+							byteArray[i * 4 + 3]);
+
+					texture.SetPixels32(pixels);
+					texture.Apply();
+				}
+				else
+				{
+					texture.LoadRawTextureData(byteArray);
+					texture.Apply();
+				}
+			}
+		}
+
+#endif
+
+		/// <summary>
+		/// Allows the application to specify render settings.
+		/// </summary>
+		[Serializable]
+		public class RenderSettings
+		{
+			public bool disableSmoothPath = false;
+			public bool disableSmoothText = false;
+			public bool disableSmoothImage = false;
+			public bool grayscale = false;
+			public bool optimizeTextForLCDDisplay = false;
+			public bool renderAnnotations = false;
+			public bool renderForPrinting = false;
+			public bool transparentBackground = false;
+
+			public static RenderSettings defaultRenderSettings
+			{
+				get { return new RenderSettings(); }
+			}
+
+			public int ComputeRenderingFlags()
+			{
+				int flags = 0x10;
+
+				if (renderAnnotations)
+					flags |= 0x01;
+				if (optimizeTextForLCDDisplay)
+					flags |= 0x02;
+				if (grayscale)
+					flags |= 0x08;
+				if (renderForPrinting)
+					flags |= 0x800;
+				if (disableSmoothText)
+					flags |= 0x1000;
+				if (disableSmoothImage)
+					flags |= 0x2000;
+				if (disableSmoothPath)
+					flags |= 0x4000;
+
+				return flags;
+			}
+		}
+	}
+}

+ 8 - 0
Assets/RTC/Paroxe/PDFRenderer/API/Rendering/PDFRenderer.cs.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 304adca07b7f11243acb682c81f711ec
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 

+ 5 - 0
Assets/RTC/Paroxe/PDFRenderer/API/Text.meta

@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: 065f47264f953b54c8771d4b73645267
+folderAsset: yes
+DefaultImporter:
+  userData: 

+ 186 - 0
Assets/RTC/Paroxe/PDFRenderer/API/Text/PDFProgressiveSearch.cs

@@ -0,0 +1,186 @@
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Text;
+using UnityEngine;
+using UnityEngine.EventSystems;
+
+namespace Paroxe.PdfRenderer
+{
+#if !UNITY_WEBGL
+    /// <summary>
+    /// Don't instantiate this class directly. Use the static method instead PDFProgressiveSearch.CreateSearch
+    /// </summary>
+    public class PDFProgressiveSearch : UIBehaviour
+    {
+        private bool m_AbortRequested;
+        private int m_CurrentPage;
+        private PDFDocument m_Document;
+        private PDFSearchHandle.MatchOption m_Flags;
+        private bool m_NewSearchRequested;
+        private int m_PageCount;
+        private byte[] m_Search;
+        private IList<PDFSearchResult>[] m_SearchResults;
+        private bool m_SearchStarted;
+        private float m_TimeBudget = 0.50f;
+        private int m_Total;
+
+        public delegate void ProgressEventHandler(PDFProgressiveSearch sender, int total);
+
+        public delegate void SearchFinishedEventHandler(PDFProgressiveSearch sender, IList<PDFSearchResult>[] searchResults);
+
+        public event ProgressEventHandler OnProgressChanged;
+
+        public event SearchFinishedEventHandler OnSearchFinished;
+
+        /// <summary>
+        /// Create a progressive search object within the scene.
+        /// </summary>
+        /// <param name="document"></param>
+        /// <param name="timeBudget">Time budget per frame. The value must be metween 0.0f and 1.0f</param>
+        /// <returns></returns>
+        public static PDFProgressiveSearch CreateSearch(PDFDocument document, float timeBudget)
+        {
+            GameObject searchObject = new GameObject();
+            searchObject.name = "PDFProgressiveSearch";
+
+            PDFProgressiveSearch progressiveSearch = searchObject.AddComponent<PDFProgressiveSearch>();
+            progressiveSearch.m_Document = document;
+            progressiveSearch.m_TimeBudget = Mathf.Clamp01(timeBudget);
+
+            return progressiveSearch;
+        }
+
+        /// <summary>
+        /// Stop the current search request.
+        /// </summary>
+        public void Abort()
+        {
+            m_AbortRequested = true;
+        }
+
+        /// <summary>
+        /// Start a new search and if a search is already started this method will stop it.
+        /// </summary>
+        /// <param name="search"></param>
+        /// <param name="flags">PDFSearchHandle.MATCH_CASE, (PDFSearchHandle.MATCH_WHOLE_WORD or PDFSearchHandle.MATCH_CASE | PDFSearchHandle.MATCH_WHOLE_WORD)</param>
+        public void StartSearch(string search, PDFSearchHandle.MatchOption flags)
+        {
+            if (string.IsNullOrEmpty(search.Trim()))
+                m_Search = null;
+            else
+                m_Search = PDFLibrary.Encoding.GetBytes(search.Trim() + "\0");
+
+            m_Flags = flags;
+
+            m_PageCount = m_Document.GetPageCount();
+
+            m_NewSearchRequested = true;
+        }
+
+        private void LateUpdate()
+        {
+            if (!m_SearchStarted && m_NewSearchRequested)
+            {
+                m_CurrentPage = 0;
+                m_SearchResults = new IList<PDFSearchResult>[m_PageCount];
+
+                m_NewSearchRequested = false;
+                m_SearchStarted = true;
+
+                m_AbortRequested = false;
+
+                m_Total = 0;
+            }
+
+            if (m_SearchStarted)
+            {
+                if (m_AbortRequested)
+                {
+                    m_SearchStarted = false;
+                    m_NewSearchRequested = false;
+
+                    m_AbortRequested = false;
+
+                    m_Total = 0;
+                    return;
+                }
+                if (m_NewSearchRequested)
+                {
+                    m_CurrentPage = 0;
+                    m_SearchResults = new IList<PDFSearchResult>[m_PageCount];
+
+                    m_NewSearchRequested = false;
+
+                    m_Total = 0;
+                }
+
+                if (m_Search == null || m_Search.Length == 0)
+                {
+                    m_SearchStarted = false;
+
+                    if (OnProgressChanged != null)
+                    {
+                        OnProgressChanged(this, 0);
+                    }
+
+                    var handler = OnSearchFinished;
+                    if (handler != null)
+                    {
+                        handler(this, null);
+                    }
+                }
+                else
+                {
+                    Stopwatch timer = Stopwatch.StartNew();
+
+                    for (int i = m_CurrentPage; i < m_PageCount; ++i)
+                    {
+                        using (PDFTextPage textPage = m_Document.GetPage(i).GetTextPage())
+                        {
+                            IList<PDFSearchResult> searchResults = textPage.Search(m_Search, m_Flags);
+
+                            m_SearchResults[i] = searchResults;
+
+                            m_Total += searchResults.Count;
+
+                            ++m_CurrentPage;
+
+                            if (timer.ElapsedMilliseconds >=
+                                m_TimeBudget * 1000.0f * (1.0f / Mathf.Max(Application.targetFrameRate, 1.0f / Time.deltaTime)))
+                            {
+                                if (OnProgressChanged != null)
+                                {
+                                    OnProgressChanged(this, m_Total);
+                                }
+
+                                break;
+                            }
+                        }
+                    }
+
+                    if (m_CurrentPage + 1 > m_PageCount)
+                    {
+                        m_SearchStarted = false;
+
+                        if (OnProgressChanged != null)
+                        {
+                            OnProgressChanged(this, m_Total);
+                        }
+
+                        var handler = OnSearchFinished;
+                        if (handler != null)
+                        {
+                            handler(this, m_SearchResults);
+                        }
+
+                        if (OnProgressChanged != null)
+                        {
+                            OnProgressChanged(this, m_Total);
+                        }
+                    }
+                }
+            }
+        }
+    }
+#endif
+}

+ 8 - 0
Assets/RTC/Paroxe/PDFRenderer/API/Text/PDFProgressiveSearch.cs.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 5e92dbe79c64914468ee28150fd8f537
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 

+ 137 - 0
Assets/RTC/Paroxe/PDFRenderer/API/Text/PDFSearchHandle.cs

@@ -0,0 +1,137 @@
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+using Paroxe.PdfRenderer.Internal;
+
+namespace Paroxe.PdfRenderer
+{
+#if !UNITY_WEBGL
+    /// <summary>
+    /// Represent a search session within a specific page. To search in entire document use PDFTextPage.Search
+    /// </summary>
+    public class PDFSearchHandle : IDisposable
+    {
+        public enum MatchOption
+        {
+            NONE = 0x00000000,
+            MATCH_CASE = 0x00000001,
+            MATCH_WHOLE_WORD = 0x00000002,
+            MATCH_CASE_AND_WHOLE_WORD = 0x00000003
+        }
+
+        private bool m_Disposed;
+        private IntPtr m_NativePointer;
+        private PDFTextPage m_TextPage;
+
+        public PDFSearchHandle(PDFTextPage textPage, byte[] findWhatUnicode, int startIndex,
+            MatchOption flags = MatchOption.NONE)
+        {
+            if (textPage == null)
+                throw new NullReferenceException();
+            if (startIndex < 0)
+                throw new ArgumentOutOfRangeException();
+
+            PDFLibrary.AddRef("PDFSearchHandle");
+
+            m_TextPage = textPage;
+
+			IntPtr unmanagedPointer = Marshal.AllocHGlobal(findWhatUnicode.Length);
+            Marshal.Copy(findWhatUnicode, 0, unmanagedPointer, findWhatUnicode.Length);
+
+            m_NativePointer = NativeMethods.FPDFText_FindStart(textPage.NativePointer, unmanagedPointer, (uint)flags, startIndex);
+
+            Marshal.FreeHGlobal(unmanagedPointer);
+        }
+
+        ~PDFSearchHandle()
+        {
+            Dispose(false);
+        }
+
+        public void Dispose()
+        {
+            Dispose(true);
+            GC.SuppressFinalize(this);
+        }
+
+        protected virtual void Dispose(bool disposing)
+        {
+            if (!m_Disposed)
+            {
+                lock (PDFLibrary.nativeLock)
+                {
+                    if (m_NativePointer != IntPtr.Zero)
+                    {
+	                    NativeMethods.FPDFText_FindClose(m_NativePointer);
+                        m_NativePointer = IntPtr.Zero;
+                    }
+                }
+
+                PDFLibrary.RemoveRef("PDFSearchHandle");
+
+                m_Disposed = true;
+            }
+        }
+
+        public IntPtr NativePointer
+        {
+            get { return m_NativePointer; }
+        }
+
+        /// <summary>
+        /// Return an array containing all the searchResults. If there is no result, this function return null.
+        /// </summary>
+        /// <returns></returns>
+        public IList<PDFSearchResult> GetResults()
+        {
+            List<PDFSearchResult> results = new List<PDFSearchResult>();
+
+            foreach (PDFSearchResult result in EnumerateSearchResults())
+            {
+                results.Add(result);
+            }
+
+            return results;
+        }
+
+        /// <summary>
+        /// Enumerate search results.
+        /// </summary>
+        /// <returns></returns>
+        public IEnumerable<PDFSearchResult> EnumerateSearchResults()
+        {
+            if (m_NativePointer != IntPtr.Zero)
+            {
+                while (NativeMethods.FPDFText_FindNext(m_NativePointer))
+                    yield return new PDFSearchResult(
+                        m_TextPage.PageIndex, NativeMethods.FPDFText_GetSchResultIndex(m_NativePointer), NativeMethods.FPDFText_GetSchCount(m_NativePointer));
+            }
+        }
+
+        /// <summary>
+        /// Get the next search result. If there is no other result, the function returns an invalid searchResult (validate it with PDFSearchResult.IsValid)
+        /// </summary>
+        /// <returns></returns>
+        public PDFSearchResult FindNext()
+        {
+            if (NativeMethods.FPDFText_FindNext(m_NativePointer))
+                return new PDFSearchResult(
+                    m_TextPage.PageIndex, NativeMethods.FPDFText_GetSchResultIndex(m_NativePointer), NativeMethods.FPDFText_GetSchCount(m_NativePointer));
+            return new PDFSearchResult(-1, -1, -1);
+        }
+
+        /// <summary>
+        /// Get the previous search result. If there is no other result, the function returns an invalid searchResult (validate it with PDFSearchResult.IsValid)
+        /// </summary>
+        /// <returns></returns>
+        public PDFSearchResult FindPrevious()
+        {
+            if (NativeMethods.FPDFText_FindPrev(m_NativePointer))
+                return new PDFSearchResult(
+                    m_TextPage.PageIndex, NativeMethods.FPDFText_GetSchResultIndex(m_NativePointer), NativeMethods.FPDFText_GetSchCount(m_NativePointer));
+            return new PDFSearchResult(-1, -1, -1);
+        }
+    }
+
+#endif
+}

+ 8 - 0
Assets/RTC/Paroxe/PDFRenderer/API/Text/PDFSearchHandle.cs.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: a584234d21075644bbe8d23974457532
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 

+ 52 - 0
Assets/RTC/Paroxe/PDFRenderer/API/Text/PDFSearchResult.cs

@@ -0,0 +1,52 @@
+
+namespace Paroxe.PdfRenderer
+{
+    /// <summary>
+    /// Reprensent a search result. To result location is describe with index of the first char and the length of the result.
+    /// </summary>
+    public struct PDFSearchResult
+    {
+        private readonly int m_PageIndex;
+        private readonly int m_StartIndex; // index of the first character
+        private readonly int m_Count; // number of characters
+
+        public PDFSearchResult(int pageIndex, int startIndex, int count)
+        {
+            m_PageIndex = pageIndex;
+            m_StartIndex = startIndex;
+            m_Count = count;
+        }
+
+        /// <summary>
+        /// Indicate whether the result is valid or invalid.
+        /// </summary>
+        public bool IsValid
+        {
+            get { return m_PageIndex != -1; }
+        }
+
+        /// <summary>
+        /// The pageIndex of the result.
+        /// </summary>
+        public int PageIndex
+        {
+            get { return m_PageIndex; }
+        }
+
+        /// <summary>
+        /// The index of the first character of the result within the page.
+        /// </summary>
+        public int StartIndex
+        {
+            get { return m_StartIndex; }
+        }
+
+        /// <summary>
+        /// The length of the result within the page.
+        /// </summary>
+        public int Count
+        {
+            get { return m_Count; }
+        }
+    }
+}

+ 8 - 0
Assets/RTC/Paroxe/PDFRenderer/API/Text/PDFSearchResult.cs.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 40cba166ca41f0342805a978d44c8c47
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 

+ 253 - 0
Assets/RTC/Paroxe/PDFRenderer/API/Text/PDFTextPage.cs

@@ -0,0 +1,253 @@
+using System;
+using System.Collections.Generic;
+using Paroxe.PdfRenderer.Internal;
+using UnityEngine;
+
+namespace Paroxe.PdfRenderer
+{
+#if !UNITY_WEBGL
+    /// <summary>
+    /// This class allow to access the text of a page.
+    /// </summary>
+    public class PDFTextPage : IDisposable, IEquatable<PDFTextPage>
+    {
+        private bool m_Disposed;
+        private IntPtr m_NativePointer;
+        private PDFPage m_Page;
+        private static Dictionary<IntPtr, int> s_InstanceMap = new Dictionary<IntPtr, int>();
+
+        public PDFTextPage(PDFPage page)
+        {
+            if (page == null)
+                throw new NullReferenceException();
+
+            PDFLibrary.AddRef("PDFTextPage");
+
+            m_Page = page;
+            m_NativePointer = NativeMethods.FPDFText_LoadPage(m_Page.NativePointer);
+
+            if (m_NativePointer != IntPtr.Zero)
+            {
+                if (s_InstanceMap.ContainsKey(m_NativePointer))
+                {
+                    s_InstanceMap[m_NativePointer] = s_InstanceMap[m_NativePointer] + 1;
+                }
+                else
+                    s_InstanceMap[m_NativePointer] = 1;
+            }
+        }
+
+        ~PDFTextPage()
+        {
+            Dispose(false);
+        }
+
+        public void Dispose()
+        {
+            Dispose(true);
+            GC.SuppressFinalize(this);
+        }
+
+        protected virtual void Dispose(bool _)
+        {
+            if (!m_Disposed)
+            {
+                lock (PDFLibrary.nativeLock)
+                {
+                    if (m_NativePointer != IntPtr.Zero)
+                    {
+                        s_InstanceMap[m_NativePointer] = s_InstanceMap[m_NativePointer] - 1;
+
+                        if (s_InstanceMap[m_NativePointer] == 0)
+                        {
+                            ((IIPDFPageInternal)m_Page).OnTextPageClose(this);
+
+                            NativeMethods.FPDFText_ClosePage(m_NativePointer);
+
+                            s_InstanceMap.Remove(m_NativePointer);
+                            m_NativePointer = IntPtr.Zero;
+                        }
+                    }
+                }
+
+                PDFLibrary.RemoveRef("PDFTextPage");
+
+                m_Disposed = true;
+            }
+        }
+
+        public IntPtr NativePointer
+        {
+            get { return m_NativePointer; }
+        }
+
+        /// <summary>
+        /// Return a refence to the page.
+        /// </summary>
+        public PDFPage Page
+        {
+            get { return m_Page; }
+        }
+
+        /// <summary>
+        /// Return the page index of the text.
+        /// </summary>
+        public int PageIndex
+        {
+            get { return m_Page.PageIndex; }
+        }
+
+        /// <summary>
+        /// Return the number of character in the page.
+        /// </summary>
+        /// <returns></returns>
+        public int CountChars()
+        {
+            return NativeMethods.FPDFText_CountChars(m_NativePointer);
+        }
+
+        /// <summary>
+        /// Count number of rectangular areas occupied by a segment of texts.
+        /// </summary>
+        /// <param name="startIndex"></param>
+        /// <param name="count"></param>
+        /// <returns></returns>
+        public int CountRects(int startIndex, int count)
+        {
+            return NativeMethods.FPDFText_CountRects(m_NativePointer, startIndex, count);
+        }
+
+        /// <summary>
+        /// Extract text within a rectangular boundary on the page.
+        /// </summary>
+        /// <param name="left"></param>
+        /// <param name="top"></param>
+        /// <param name="right"></param>
+        /// <param name="bottom"></param>
+        /// <param name="charCount"></param>
+        /// <returns></returns>
+        public string GetBoundedText(float left, float top, float right, float bottom, int charCount)
+        {
+            byte[] textBuffer = new byte[(charCount + 1) * 2];
+            NativeMethods.FPDFText_GetBoundedText(m_NativePointer, left, top, right, bottom, textBuffer, textBuffer.Length);
+            return PDFLibrary.Encoding.GetString(textBuffer);
+        }
+
+        /// <summary>
+        /// Get bounding box of a particular character.
+        /// </summary>
+        /// <param name="charIndex"></param>
+        /// <returns></returns>
+        public Rect GetCharBox(int charIndex)
+        {
+            double left;
+            double right;
+            double bottom;
+            double top;
+
+            NativeMethods.FPDFText_GetCharBox(m_NativePointer, charIndex, out left, out right, out bottom, out top);
+
+            return new Rect((float)left, (float)top, Mathf.Abs((float)right - (float)left),
+                Mathf.Abs((float)bottom - (float)top));
+        }
+
+        /// <summary>
+        /// Get the index of a character at or nearby a certain position on the page.
+        /// </summary>
+        /// <param name="pos"></param>
+        /// <param name="tolerance"></param>
+        /// <returns></returns>
+        public int GetCharIndexAtPos(Vector2 pos, Vector2 tolerance)
+        {
+            /*Vector2 pagePos = m_Page.ConvertUnityUIDevicePositionToPagePosition(pos,
+                m_Page.Document.GetPageSize(m_Page.PageIndex));*/
+
+            return NativeMethods.FPDFText_GetCharIndexAtPos(m_NativePointer, pos.x, pos.y, tolerance.x, tolerance.y);
+        }
+
+        /// <summary>
+        /// Get the font size of a particular character.
+        /// </summary>
+        /// <param name="charIndex"></param>
+        /// <returns></returns>
+        public double GetFontSize(int charIndex)
+        {
+            return NativeMethods.FPDFText_GetFontSize(m_NativePointer, charIndex);
+        }
+
+        /// <summary>
+        /// Get a rectangular area from the result generated by CountRects
+        /// </summary>
+        /// <param name="rectIndex"></param>
+        /// <returns></returns>
+        public Rect GetRect(int rectIndex)
+        {
+            double left;
+            double right;
+            double bottom;
+            double top;
+
+            NativeMethods.FPDFText_GetRect(m_NativePointer, rectIndex, out left, out top, out right, out bottom);
+
+            return new Rect((float)left, (float)top, Mathf.Abs((float)right - (float)left),
+                Mathf.Abs((float)bottom - (float)top));
+        }
+
+        /// <summary>
+        /// Extract text string from the page.
+        /// </summary>
+        /// <param name="startIndex"></param>
+        /// <param name="count"></param>
+        /// <returns></returns>
+        public string GetText(int startIndex, int count)
+        {
+            byte[] textBuffer = new byte[(count + 1) * 2];
+            NativeMethods.FPDFText_GetText(m_NativePointer, startIndex, count, textBuffer);
+            return PDFLibrary.Encoding.GetString(textBuffer);
+        }
+
+        /// <summary>
+        /// Get a character in the page.
+        /// </summary>
+        /// <param name="charIndex"></param>
+        /// <returns></returns>
+        public string GetChar(int charIndex)
+        {
+            return char.ConvertFromUtf32((int) NativeMethods.FPDFText_GetUnicode(m_NativePointer, charIndex));
+        }
+
+        public IList<PDFSearchResult> Search(string findWhat,
+            PDFSearchHandle.MatchOption flags = PDFSearchHandle.MatchOption.NONE, int startIndex = 0)
+        {
+            if (string.IsNullOrEmpty(findWhat.Trim()))
+                return new List<PDFSearchResult>();
+
+            return Search(PDFLibrary.Encoding.GetBytes(findWhat.Trim() + "\0"), flags, startIndex);
+        }
+
+        public IList<PDFSearchResult> Search(byte[] findWhatUnicode,
+            PDFSearchHandle.MatchOption flags = PDFSearchHandle.MatchOption.NONE, int startIndex = 0)
+        {
+            List<PDFSearchResult> searchResults = new List<PDFSearchResult>();
+
+            if (findWhatUnicode == null)
+                return searchResults;
+
+            using (PDFSearchHandle searchHandle = new PDFSearchHandle(this, findWhatUnicode, startIndex, flags))
+            {
+                foreach (PDFSearchResult result in searchHandle.EnumerateSearchResults())
+                {
+                    searchResults.Add(result);
+                }
+            }
+
+            return searchResults;
+        }
+
+        public bool Equals(PDFTextPage other)
+        {
+            return (m_NativePointer != IntPtr.Zero && m_NativePointer == other.m_NativePointer);
+        }
+    }
+#endif
+}

+ 8 - 0
Assets/RTC/Paroxe/PDFRenderer/API/Text/PDFTextPage.cs.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 38fd7cdcd1221a848afb4f7de97c7c8f
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 

+ 9 - 0
Assets/RTC/Paroxe/PDFRenderer/API/WebGL.meta

@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 0a6a5731e64d51544b8d1abd70374dd5
+folderAsset: yes
+timeCreated: 1456802878
+licenseType: Store
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 47 - 0
Assets/RTC/Paroxe/PDFRenderer/API/WebGL/IPDFJS_Promise.cs

@@ -0,0 +1,47 @@
+
+namespace Paroxe.PdfRenderer.WebGL
+{
+    public interface IPDFJS_Promise
+    {
+        string PromiseHandle
+        {
+            get;
+        }
+
+        bool HasFinished
+        {
+            get;
+            set;
+        }
+
+        bool HasSucceeded
+        {
+            get;
+            set;
+        }
+
+        bool HasBeenCancelled
+        {
+            get;
+            set;
+        }
+
+        string JSObjectHandle
+        {
+            get;
+            set;
+        }
+
+        bool HasReceivedJSResponse
+        {
+            get;
+            set;
+        }
+
+        float Progress
+        {
+            get;
+            set;
+        }
+    }
+}

+ 12 - 0
Assets/RTC/Paroxe/PDFRenderer/API/WebGL/IPDFJS_Promise.cs.meta

@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 8474c19790b112e4a8dd474d7c0824ff
+timeCreated: 1456777670
+licenseType: Store
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 135 - 0
Assets/RTC/Paroxe/PDFRenderer/API/WebGL/PDFJS_Library.cs

@@ -0,0 +1,135 @@
+using UnityEngine;
+using System.Runtime.InteropServices;
+using System;
+using System.Collections;
+using Paroxe.PdfRenderer;
+using Paroxe.PdfRenderer.Internal;
+
+namespace Paroxe.PdfRenderer.WebGL
+{
+    public class PDFJS_Library : MonoBehaviour
+    {
+        private Hashtable m_PromiseCoroutineMap = new Hashtable();
+        private bool m_IsInitialized;
+
+        private static PDFJS_Library s_Instance;
+
+        public static PDFJS_Library Instance
+        {
+            get
+            {
+                if (s_Instance == null)
+                    s_Instance = FindObjectOfType<PDFJS_Library>();
+                if (s_Instance == null)
+                    s_Instance = new GameObject("WebGL_JSRuntime").AddComponent<PDFJS_Library>();
+                return s_Instance;
+            }
+        }
+
+        public PDFJS_PromiseCoroutine PreparePromiseCoroutine(
+            Func<PDFJS_PromiseCoroutine, IPDFJS_Promise, object, IEnumerator> coroutine, IPDFJS_Promise promise, object parameters)
+        {
+            m_PromiseCoroutineMap[promise.PromiseHandle] = new PDFJS_PromiseCoroutine(this, promise, coroutine, parameters);
+            return (PDFJS_PromiseCoroutine)m_PromiseCoroutineMap[promise.PromiseHandle];
+        }
+
+        private void Awake()
+        {
+            DontDestroyOnLoad(gameObject);
+        }
+
+        private string GetMessagePromiseHandle(string message)
+        {
+            string promiseHandle = message.Substring(message.IndexOf('{'));
+            return promiseHandle.Substring(0, promiseHandle.IndexOf('}') + 1).Trim();
+        }
+
+        private string GetMessageObjectHandle(string message)
+        {
+            return message.Substring(message.IndexOf("objectHandle:")).Replace("objectHandle:", "").Trim();
+        }
+
+        private string GetMessageProgress(string message)
+        {
+            return message.Substring(message.IndexOf("progress:")).Replace("progress:", "").Trim();
+
+        }
+
+        private void OnPromiseProgress(string message)
+        {
+            string promiseHandle = GetMessagePromiseHandle(message);
+            string progress = GetMessageProgress(message);
+
+            if (m_PromiseCoroutineMap.Contains(promiseHandle))
+            {
+                PDFJS_PromiseCoroutine promiseCoroutine = (PDFJS_PromiseCoroutine)m_PromiseCoroutineMap[promiseHandle];
+
+                promiseCoroutine.Promise.Progress = float.Parse(progress);
+            }
+        }
+
+        private void OnPromiseThen(string message)
+        {
+            string promiseHandle = GetMessagePromiseHandle(message);
+            string objectHandle = GetMessageObjectHandle(message);
+
+            if (m_PromiseCoroutineMap.Contains(promiseHandle))
+            {
+                PDFJS_PromiseCoroutine promiseCoroutine = (PDFJS_PromiseCoroutine)m_PromiseCoroutineMap[promiseHandle];
+
+                promiseCoroutine.Promise.JSObjectHandle = objectHandle;
+                promiseCoroutine.Promise.HasSucceeded = true;
+                promiseCoroutine.Promise.HasReceivedJSResponse = true;
+
+                m_PromiseCoroutineMap.Remove(promiseHandle);
+            }
+        }
+
+        private void OnPromiseCatch(string message)
+        {
+            string promiseHandle = GetMessagePromiseHandle(message);
+            string objectHandle = GetMessageObjectHandle(message);
+
+            if (m_PromiseCoroutineMap.Contains(promiseHandle))
+            {
+                PDFJS_PromiseCoroutine promiseCoroutine = (PDFJS_PromiseCoroutine)m_PromiseCoroutineMap[promiseHandle];
+
+                promiseCoroutine.Promise.JSObjectHandle = objectHandle;
+                promiseCoroutine.Promise.HasSucceeded = false;
+                promiseCoroutine.Promise.HasReceivedJSResponse = true;
+
+                m_PromiseCoroutineMap.Remove(promiseHandle);
+            }
+        }
+
+        private void OnPromiseCancel(string message)
+        {
+            string promiseHandle = GetMessagePromiseHandle(message);
+            string objectHandle = GetMessageObjectHandle(message);
+
+            if (m_PromiseCoroutineMap.Contains(promiseHandle))
+            {
+                PDFJS_PromiseCoroutine promiseCoroutine = (PDFJS_PromiseCoroutine)m_PromiseCoroutineMap[promiseHandle];
+
+                promiseCoroutine.Promise.JSObjectHandle = objectHandle;
+                promiseCoroutine.Promise.HasBeenCancelled = true;
+                promiseCoroutine.Promise.HasSucceeded = false;
+                promiseCoroutine.Promise.HasReceivedJSResponse = true;
+
+                m_PromiseCoroutineMap.Remove(promiseHandle);
+            }
+        }
+
+        public void OnLibraryInitialized(string message)
+        {
+            PDFLibrary.Instance.IsInitialized = true;
+        }
+
+        public void TryTerminateRenderingWorker(string promiseHandle)
+        {
+#if UNITY_WEBGL && !UNITY_EDITOR
+            NativeMethods.PDFJS_TryTerminateRenderWorker(promiseHandle);
+#endif
+        }
+    }
+}

+ 12 - 0
Assets/RTC/Paroxe/PDFRenderer/API/WebGL/PDFJS_Library.cs.meta

@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: c07809b0a69258449a53e52c0ba36a2b
+timeCreated: 1455341901
+licenseType: Store
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 90 - 0
Assets/RTC/Paroxe/PDFRenderer/API/WebGL/PDFJS_Promise.cs

@@ -0,0 +1,90 @@
+using System;
+
+namespace Paroxe.PdfRenderer.WebGL
+{
+    public class PDFJS_Promise<T> : IPDFJS_Promise
+    {
+        private string m_PromiseHandle;
+        private bool m_HasResult;
+        private bool m_HasSucceeded;
+        private bool m_HasFinished;
+        private bool m_HasReceivedJSResponse;
+        private bool m_HasBeenCancelled;
+        private string m_ObjectHandle;
+        private T m_Result;
+        private float m_Progress;
+
+        public string PromiseHandle
+        {
+            get { return m_PromiseHandle; }
+        }
+
+        public T Result
+        {
+            get { return m_Result; }
+            set { m_Result = value; }
+        }
+
+        public string JSObjectHandle
+        {
+            get { return m_ObjectHandle; }
+            set
+            {
+                if (m_ObjectHandle != value)
+                    m_ObjectHandle = value;
+            }
+        }
+
+        public bool HasSucceeded
+        {
+            get { return m_HasSucceeded; }
+            set
+            {
+                if (m_HasSucceeded != value)
+                    m_HasSucceeded = value;
+            }
+        }
+
+        public bool HasFinished
+        {
+            get { return m_HasFinished; }
+            set
+            {
+                if (m_HasFinished != value)
+                    m_HasFinished = value;
+            }
+        }
+
+        public bool HasReceivedJSResponse
+        {
+            get { return m_HasReceivedJSResponse; }
+            set
+            {
+                if (m_HasReceivedJSResponse != value)
+                    m_HasReceivedJSResponse = value;
+            }
+        }
+
+        public bool HasBeenCancelled
+        {
+            get { return m_HasBeenCancelled; }
+            set { m_HasBeenCancelled = value; }
+        }
+
+        public float Progress
+        {
+            get { return m_Progress; }
+            set { m_Progress = value; }
+        }
+
+        public PDFJS_Promise()
+        {
+            m_PromiseHandle = CreateGUID();
+        }
+
+        private string CreateGUID()
+        {
+            return "{" + Guid.NewGuid().ToString() + "}";
+        }
+    }
+}

+ 12 - 0
Assets/RTC/Paroxe/PDFRenderer/API/WebGL/PDFJS_Promise.cs.meta

@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 3e18e4a9de629664dac84ec0b1ddbcdc
+timeCreated: 1455341901
+licenseType: Store
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

二進制
Assets/RTC/Paroxe/PDFRenderer/ApiDocumentation.chm


+ 4 - 0
Assets/RTC/Paroxe/PDFRenderer/ApiDocumentation.chm.meta

@@ -0,0 +1,4 @@
+fileFormatVersion: 2
+guid: ca5ab37a5be839d42a4dd82eacf64ce8
+DefaultImporter:
+  userData: 

二進制
Assets/RTC/Paroxe/PDFRenderer/Documentation.pdf


+ 8 - 0
Assets/RTC/Paroxe/PDFRenderer/Documentation.pdf.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 35f98da763af1064db68db7be9fdb37e
+timeCreated: 1549656648
+licenseType: Store
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 5 - 0
Assets/RTC/Paroxe/PDFRenderer/Examples.meta

@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: df14505c98e48b8409953fc0b5d23ba7
+folderAsset: yes
+DefaultImporter:
+  userData: 

+ 190 - 0
Assets/RTC/Paroxe/PDFRenderer/Examples/API_Usage.unity

@@ -0,0 +1,190 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!29 &1
+SceneSettings:
+  m_ObjectHideFlags: 0
+  m_PVSData: 
+  m_PVSObjectsArray: []
+  m_PVSPortalsArray: []
+  m_OcclusionBakeSettings:
+    smallestOccluder: 5
+    smallestHole: 0.25
+    backfaceThreshold: 100
+--- !u!104 &2
+RenderSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 6
+  m_Fog: 0
+  m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
+  m_FogMode: 3
+  m_FogDensity: 0.01
+  m_LinearFogStart: 0
+  m_LinearFogEnd: 300
+  m_AmbientSkyColor: {r: 0.2, g: 0.2, b: 0.2, a: 1}
+  m_AmbientEquatorColor: {r: 0.2, g: 0.2, b: 0.2, a: 1}
+  m_AmbientGroundColor: {r: 0.2, g: 0.2, b: 0.2, a: 1}
+  m_AmbientIntensity: 1
+  m_AmbientMode: 3
+  m_SkyboxMaterial: {fileID: 0}
+  m_HaloStrength: 0.5
+  m_FlareStrength: 1
+  m_FlareFadeSpeed: 3
+  m_HaloTexture: {fileID: 0}
+  m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
+  m_DefaultReflectionMode: 0
+  m_DefaultReflectionResolution: 128
+  m_ReflectionBounces: 1
+  m_ReflectionIntensity: 1
+  m_CustomReflection: {fileID: 0}
+  m_Sun: {fileID: 0}
+--- !u!157 &4
+LightmapSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 6
+  m_GIWorkflowMode: 1
+  m_LightmapsMode: 1
+  m_GISettings:
+    serializedVersion: 2
+    m_BounceScale: 1
+    m_IndirectOutputScale: 1
+    m_AlbedoBoost: 1
+    m_TemporalCoherenceThreshold: 1
+    m_EnvironmentLightingMode: 0
+    m_EnableBakedLightmaps: 1
+    m_EnableRealtimeLightmaps: 0
+  m_LightmapEditorSettings:
+    serializedVersion: 3
+    m_Resolution: 1
+    m_BakeResolution: 50
+    m_TextureWidth: 1024
+    m_TextureHeight: 1024
+    m_AOMaxDistance: 1
+    m_Padding: 2
+    m_CompAOExponent: 0
+    m_LightmapParameters: {fileID: 0}
+    m_TextureCompression: 0
+    m_FinalGather: 0
+    m_FinalGatherRayCount: 1024
+    m_ReflectionCompression: 2
+  m_LightingDataAsset: {fileID: 0}
+  m_RuntimeCPUUsage: 25
+--- !u!196 &5
+NavMeshSettings:
+  serializedVersion: 2
+  m_ObjectHideFlags: 0
+  m_BuildSettings:
+    serializedVersion: 2
+    agentRadius: 0.5
+    agentHeight: 2
+    agentSlope: 45
+    agentClimb: 0.4
+    ledgeDropHeight: 0
+    maxJumpAcrossDistance: 0
+    accuratePlacement: 0
+    minRegionArea: 2
+    cellSize: 0.16666666
+    manualCellSize: 0
+  m_NavMeshData: {fileID: 0}
+--- !u!1 &238878644
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  serializedVersion: 4
+  m_Component:
+  - 4: {fileID: 238878645}
+  - 114: {fileID: 238878646}
+  m_Layer: 0
+  m_Name: API_Usage
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &238878645
+Transform:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 238878644}
+  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_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 1
+--- !u!114 &238878646
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 238878644}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: b70b1cac9c2c5434b9810aa223640942, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+--- !u!1 &1305517326
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  serializedVersion: 4
+  m_Component:
+  - 4: {fileID: 1305517331}
+  - 20: {fileID: 1305517330}
+  m_Layer: 0
+  m_Name: Main Camera
+  m_TagString: MainCamera
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!20 &1305517330
+Camera:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 1305517326}
+  m_Enabled: 1
+  serializedVersion: 2
+  m_ClearFlags: 1
+  m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844}
+  m_NormalizedViewPortRect:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 1
+    height: 1
+  near clip plane: 0.3
+  far clip plane: 1000
+  field of view: 60
+  orthographic: 0
+  orthographic size: 5
+  m_Depth: -1
+  m_CullingMask:
+    serializedVersion: 2
+    m_Bits: 4294967295
+  m_RenderingPath: -1
+  m_TargetTexture: {fileID: 0}
+  m_TargetDisplay: 0
+  m_TargetEye: 3
+  m_HDR: 0
+  m_OcclusionCulling: 1
+  m_StereoConvergence: 10
+  m_StereoSeparation: 0.022
+  m_StereoMirrorMode: 0
+--- !u!4 &1305517331
+Transform:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 1305517326}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 1, z: -10}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 0

+ 6 - 0
Assets/RTC/Paroxe/PDFRenderer/Examples/API_Usage.unity.meta

@@ -0,0 +1,6 @@
+fileFormatVersion: 2
+guid: d4f9edd32b8b80846b8f52b8021a2aa1
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 9 - 0
Assets/RTC/Paroxe/PDFRenderer/Examples/Assets.meta

@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 70d7c7dfe867cbf42b6f3e09785b39b9
+folderAsset: yes
+timeCreated: 1487275891
+licenseType: Store
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

二進制
Assets/RTC/Paroxe/PDFRenderer/Examples/Assets/NextButton.png


+ 91 - 0
Assets/RTC/Paroxe/PDFRenderer/Examples/Assets/NextButton.png.meta

@@ -0,0 +1,91 @@
+fileFormatVersion: 2
+guid: f67de81da5794164d9d53ab43c2739e2
+TextureImporter:
+  internalIDToNameTable: []
+  externalObjects: {}
+  serializedVersion: 10
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 1
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: -3
+  maxTextureSize: 1024
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: 16
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 3
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 1024
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 1
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 5e97eb03825dee720800000000000000
+    internalID: 0
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+    secondaryTextures: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 157 - 0
Assets/RTC/Paroxe/PDFRenderer/Examples/Assets/PDFPlaneMaterial.mat

@@ -0,0 +1,157 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+  serializedVersion: 6
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_Name: PDFPlaneMaterial
+  m_Shader: {fileID: 7, guid: 0000000000000000f000000000000000, type: 0}
+  m_ShaderKeywords: 
+  m_LightmapFlags: 5
+  m_CustomRenderQueue: -1
+  stringTagMap: {}
+  m_SavedProperties:
+    serializedVersion: 2
+    m_TexEnvs:
+      data:
+        first:
+          name: _MainTex
+        second:
+          m_Texture: {fileID: 0}
+          m_Scale: {x: 1, y: 1}
+          m_Offset: {x: 0, y: 0}
+      data:
+        first:
+          name: _BumpMap
+        second:
+          m_Texture: {fileID: 0}
+          m_Scale: {x: 1, y: 1}
+          m_Offset: {x: 0, y: 0}
+      data:
+        first:
+          name: _DetailNormalMap
+        second:
+          m_Texture: {fileID: 0}
+          m_Scale: {x: 1, y: 1}
+          m_Offset: {x: 0, y: 0}
+      data:
+        first:
+          name: _ParallaxMap
+        second:
+          m_Texture: {fileID: 0}
+          m_Scale: {x: 1, y: 1}
+          m_Offset: {x: 0, y: 0}
+      data:
+        first:
+          name: _OcclusionMap
+        second:
+          m_Texture: {fileID: 0}
+          m_Scale: {x: 1, y: 1}
+          m_Offset: {x: 0, y: 0}
+      data:
+        first:
+          name: _EmissionMap
+        second:
+          m_Texture: {fileID: 0}
+          m_Scale: {x: 1, y: 1}
+          m_Offset: {x: 0, y: 0}
+      data:
+        first:
+          name: _DetailMask
+        second:
+          m_Texture: {fileID: 0}
+          m_Scale: {x: 1, y: 1}
+          m_Offset: {x: 0, y: 0}
+      data:
+        first:
+          name: _DetailAlbedoMap
+        second:
+          m_Texture: {fileID: 0}
+          m_Scale: {x: 1, y: 1}
+          m_Offset: {x: 0, y: 0}
+      data:
+        first:
+          name: _MetallicGlossMap
+        second:
+          m_Texture: {fileID: 0}
+          m_Scale: {x: 1, y: 1}
+          m_Offset: {x: 0, y: 0}
+      data:
+        first:
+          name: _SpecGlossMap
+        second:
+          m_Texture: {fileID: 0}
+          m_Scale: {x: 1, y: 1}
+          m_Offset: {x: 0, y: 0}
+    m_Floats:
+      data:
+        first:
+          name: _SrcBlend
+        second: 1
+      data:
+        first:
+          name: _DstBlend
+        second: 0
+      data:
+        first:
+          name: _Cutoff
+        second: 0.5
+      data:
+        first:
+          name: _Parallax
+        second: 0.02
+      data:
+        first:
+          name: _ZWrite
+        second: 1
+      data:
+        first:
+          name: _Glossiness
+        second: 0.5
+      data:
+        first:
+          name: _BumpScale
+        second: 1
+      data:
+        first:
+          name: _OcclusionStrength
+        second: 1
+      data:
+        first:
+          name: _DetailNormalMapScale
+        second: 1
+      data:
+        first:
+          name: _UVSec
+        second: 0
+      data:
+        first:
+          name: _Mode
+        second: 0
+      data:
+        first:
+          name: _Metallic
+        second: 0
+      data:
+        first:
+          name: _EmissionScaleUI
+        second: 0
+    m_Colors:
+      data:
+        first:
+          name: _EmissionColor
+        second: {r: 0, g: 0, b: 0, a: 1}
+      data:
+        first:
+          name: _Color
+        second: {r: 1, g: 1, b: 1, a: 1}
+      data:
+        first:
+          name: _SpecColor
+        second: {r: 0.2, g: 0.2, b: 0.2, a: 1}
+      data:
+        first:
+          name: _EmissionColorUI
+        second: {r: 1, g: 1, b: 1, a: 1}

+ 6 - 0
Assets/RTC/Paroxe/PDFRenderer/Examples/Assets/PDFPlaneMaterial.mat.meta

@@ -0,0 +1,6 @@
+fileFormatVersion: 2
+guid: 2df8a6b0019cd6d44b0cefc551deaa8a
+NativeFormatImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

二進制
Assets/RTC/Paroxe/PDFRenderer/Examples/Assets/Previous.png


+ 91 - 0
Assets/RTC/Paroxe/PDFRenderer/Examples/Assets/Previous.png.meta

@@ -0,0 +1,91 @@
+fileFormatVersion: 2
+guid: 8573848b2515c9f4c9d3a81f1972e2e8
+TextureImporter:
+  internalIDToNameTable: []
+  externalObjects: {}
+  serializedVersion: 10
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 1
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: -3
+  maxTextureSize: 1024
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: 16
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 3
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 1024
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 1
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 5e97eb03825dee720800000000000000
+    internalID: 0
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+    secondaryTextures: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

文件差異過大導致無法顯示
+ 13 - 0
Assets/RTC/Paroxe/PDFRenderer/Examples/Assets/pdf-sample.asset


+ 6 - 0
Assets/RTC/Paroxe/PDFRenderer/Examples/Assets/pdf-sample.asset.meta

@@ -0,0 +1,6 @@
+fileFormatVersion: 2
+guid: 486cc9297fbba88488cf04e6e256de63
+NativeFormatImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

二進制
Assets/RTC/Paroxe/PDFRenderer/Examples/Assets/pdf-sample.pdf


+ 6 - 0
Assets/RTC/Paroxe/PDFRenderer/Examples/Assets/pdf-sample.pdf.meta

@@ -0,0 +1,6 @@
+fileFormatVersion: 2
+guid: c32291f71534b154d93346d742416e07
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 390 - 0
Assets/RTC/Paroxe/PDFRenderer/Examples/PDFDocument_Render.unity

@@ -0,0 +1,390 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!29 &1
+SceneSettings:
+  m_ObjectHideFlags: 0
+  m_PVSData: 
+  m_PVSObjectsArray: []
+  m_PVSPortalsArray: []
+  m_OcclusionBakeSettings:
+    smallestOccluder: 5
+    smallestHole: 0.25
+    backfaceThreshold: 100
+--- !u!104 &2
+RenderSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 6
+  m_Fog: 0
+  m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
+  m_FogMode: 3
+  m_FogDensity: 0.01
+  m_LinearFogStart: 0
+  m_LinearFogEnd: 300
+  m_AmbientSkyColor: {r: 0.2, g: 0.2, b: 0.2, a: 1}
+  m_AmbientEquatorColor: {r: 0.2, g: 0.2, b: 0.2, a: 1}
+  m_AmbientGroundColor: {r: 0.2, g: 0.2, b: 0.2, a: 1}
+  m_AmbientIntensity: 1
+  m_AmbientMode: 3
+  m_SkyboxMaterial: {fileID: 0}
+  m_HaloStrength: 0.5
+  m_FlareStrength: 1
+  m_FlareFadeSpeed: 3
+  m_HaloTexture: {fileID: 0}
+  m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
+  m_DefaultReflectionMode: 0
+  m_DefaultReflectionResolution: 128
+  m_ReflectionBounces: 1
+  m_ReflectionIntensity: 1
+  m_CustomReflection: {fileID: 0}
+  m_Sun: {fileID: 0}
+--- !u!157 &4
+LightmapSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 6
+  m_GIWorkflowMode: 1
+  m_LightmapsMode: 1
+  m_GISettings:
+    serializedVersion: 2
+    m_BounceScale: 1
+    m_IndirectOutputScale: 1
+    m_AlbedoBoost: 1
+    m_TemporalCoherenceThreshold: 1
+    m_EnvironmentLightingMode: 0
+    m_EnableBakedLightmaps: 1
+    m_EnableRealtimeLightmaps: 0
+  m_LightmapEditorSettings:
+    serializedVersion: 3
+    m_Resolution: 1
+    m_BakeResolution: 50
+    m_TextureWidth: 1024
+    m_TextureHeight: 1024
+    m_AOMaxDistance: 1
+    m_Padding: 2
+    m_CompAOExponent: 0
+    m_LightmapParameters: {fileID: 0}
+    m_TextureCompression: 0
+    m_FinalGather: 0
+    m_FinalGatherRayCount: 1024
+    m_ReflectionCompression: 2
+  m_LightingDataAsset: {fileID: 0}
+  m_RuntimeCPUUsage: 25
+--- !u!196 &5
+NavMeshSettings:
+  serializedVersion: 2
+  m_ObjectHideFlags: 0
+  m_BuildSettings:
+    serializedVersion: 2
+    agentRadius: 0.5
+    agentHeight: 2
+    agentSlope: 45
+    agentClimb: 0.4
+    ledgeDropHeight: 0
+    maxJumpAcrossDistance: 0
+    accuratePlacement: 0
+    minRegionArea: 2
+    cellSize: 0.16666666
+    manualCellSize: 0
+  m_NavMeshData: {fileID: 0}
+--- !u!1 &140573128
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  serializedVersion: 4
+  m_Component:
+  - 4: {fileID: 140573130}
+  - 108: {fileID: 140573129}
+  m_Layer: 0
+  m_Name: Directional light
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!108 &140573129
+Light:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 140573128}
+  m_Enabled: 1
+  serializedVersion: 6
+  m_Type: 1
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Intensity: 1
+  m_Range: 10
+  m_SpotAngle: 30
+  m_CookieSize: 10
+  m_Shadows:
+    m_Type: 0
+    m_Resolution: -1
+    m_Strength: 1
+    m_Bias: 0.05
+    m_NormalBias: 0.4
+    m_NearPlane: 0.2
+  m_Cookie: {fileID: 0}
+  m_DrawHalo: 0
+  m_Flare: {fileID: 0}
+  m_RenderMode: 0
+  m_CullingMask:
+    serializedVersion: 2
+    m_Bits: 4294967295
+  m_Lightmapping: 1
+  m_BounceIntensity: 1
+  m_ShadowRadius: 0
+  m_ShadowAngle: 0
+  m_AreaSize: {x: 1, y: 1}
+--- !u!4 &140573130
+Transform:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 140573128}
+  m_LocalRotation: {x: 0.6576592, y: -0.21057338, z: -0.028399944, w: 0.7227287}
+  m_LocalPosition: {x: -10.86, y: 9.36, z: -3.74}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 3
+--- !u!1 &788069085
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  serializedVersion: 4
+  m_Component:
+  - 4: {fileID: 788069090}
+  - 20: {fileID: 788069089}
+  m_Layer: 0
+  m_Name: Main Camera
+  m_TagString: MainCamera
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!20 &788069089
+Camera:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 788069085}
+  m_Enabled: 1
+  serializedVersion: 2
+  m_ClearFlags: 1
+  m_BackGroundColor: {r: 0.11764705, g: 0.11764705, b: 0.11764705, a: 0.019607844}
+  m_NormalizedViewPortRect:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 1
+    height: 1
+  near clip plane: 0.3
+  far clip plane: 1000
+  field of view: 60
+  orthographic: 0
+  orthographic size: 5
+  m_Depth: -1
+  m_CullingMask:
+    serializedVersion: 2
+    m_Bits: 4294967295
+  m_RenderingPath: -1
+  m_TargetTexture: {fileID: 0}
+  m_TargetDisplay: 0
+  m_TargetEye: 3
+  m_HDR: 0
+  m_OcclusionCulling: 1
+  m_StereoConvergence: 10
+  m_StereoSeparation: 0.022
+  m_StereoMirrorMode: 0
+--- !u!4 &788069090
+Transform:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 788069085}
+  m_LocalRotation: {x: 0.17505243, y: -0.7298235, z: 0.20316367, w: 0.6288393}
+  m_LocalPosition: {x: 1.43, y: 0.71, z: -1.84}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_LocalEulerAnglesHint: {x: 31.111599, y: -98.501495, z: 0}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+--- !u!1 &1135408898
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  serializedVersion: 4
+  m_Component:
+  - 4: {fileID: 1135408903}
+  - 33: {fileID: 1135408902}
+  - 65: {fileID: 1135408901}
+  - 23: {fileID: 1135408900}
+  - 114: {fileID: 1135408899}
+  m_Layer: 0
+  m_Name: Cube
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &1135408899
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 1135408898}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 740373b9e5443bf4aa985b873a0dc46d, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Page: 0
+--- !u!23 &1135408900
+MeshRenderer:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 1135408898}
+  m_Enabled: 1
+  m_CastShadows: 1
+  m_ReceiveShadows: 1
+  m_Materials:
+  - {fileID: 10302, guid: 0000000000000000f000000000000000, type: 0}
+  m_SubsetIndices: 
+  m_StaticBatchRoot: {fileID: 0}
+  m_UseLightProbes: 0
+  m_ReflectionProbeUsage: 1
+  m_ProbeAnchor: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: 0
+  m_SortingOrder: 0
+--- !u!65 &1135408901
+BoxCollider:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 1135408898}
+  m_Material: {fileID: 0}
+  m_IsTrigger: 0
+  m_Enabled: 1
+  serializedVersion: 2
+  m_Size: {x: 1, y: 1, z: 1}
+  m_Center: {x: 0, y: 0, z: 0}
+--- !u!33 &1135408902
+MeshFilter:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 1135408898}
+  m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!4 &1135408903
+Transform:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 1135408898}
+  m_LocalRotation: {x: -0.9138716, y: -0.01951934, z: 0.2954371, w: -0.2778034}
+  m_LocalPosition: {x: 0, y: 0, z: -2.677}
+  m_LocalScale: {x: 1, y: 0.98, z: 0.37925544}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 2
+--- !u!1 &2117026263
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  serializedVersion: 4
+  m_Component:
+  - 4: {fileID: 2117026268}
+  - 33: {fileID: 2117026267}
+  - 65: {fileID: 2117026266}
+  - 23: {fileID: 2117026265}
+  - 114: {fileID: 2117026264}
+  m_Layer: 0
+  m_Name: Cube
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &2117026264
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 2117026263}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 740373b9e5443bf4aa985b873a0dc46d, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Page: 4
+--- !u!23 &2117026265
+MeshRenderer:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 2117026263}
+  m_Enabled: 1
+  m_CastShadows: 1
+  m_ReceiveShadows: 1
+  m_Materials:
+  - {fileID: 10302, guid: 0000000000000000f000000000000000, type: 0}
+  m_SubsetIndices: 
+  m_StaticBatchRoot: {fileID: 0}
+  m_UseLightProbes: 0
+  m_ReflectionProbeUsage: 1
+  m_ProbeAnchor: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: 0
+  m_SortingOrder: 0
+--- !u!65 &2117026266
+BoxCollider:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 2117026263}
+  m_Material: {fileID: 0}
+  m_IsTrigger: 0
+  m_Enabled: 1
+  serializedVersion: 2
+  m_Size: {x: 1, y: 1, z: 1}
+  m_Center: {x: 0, y: 0, z: 0}
+--- !u!33 &2117026267
+MeshFilter:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 2117026263}
+  m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!4 &2117026268
+Transform:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 2117026263}
+  m_LocalRotation: {x: 0.36496726, y: 0.26151288, z: -0.89327794, w: -0.021553332}
+  m_LocalPosition: {x: 0, y: 0, z: -1.315}
+  m_LocalScale: {x: 1, y: 0.98, z: 0.37925547}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 1

+ 6 - 0
Assets/RTC/Paroxe/PDFRenderer/Examples/PDFDocument_Render.unity.meta

@@ -0,0 +1,6 @@
+fileFormatVersion: 2
+guid: e3a24f7698b24bc4fb8592be2cf0ec45
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 615 - 0
Assets/RTC/Paroxe/PDFRenderer/Examples/PDFViewer_API_Usage.unity

@@ -0,0 +1,615 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!29 &1
+SceneSettings:
+  m_ObjectHideFlags: 0
+  m_PVSData: 
+  m_PVSObjectsArray: []
+  m_PVSPortalsArray: []
+  m_OcclusionBakeSettings:
+    smallestOccluder: 5
+    smallestHole: 0.25
+    backfaceThreshold: 100
+--- !u!104 &2
+RenderSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 6
+  m_Fog: 0
+  m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
+  m_FogMode: 3
+  m_FogDensity: 0.01
+  m_LinearFogStart: 0
+  m_LinearFogEnd: 300
+  m_AmbientSkyColor: {r: 0.2, g: 0.2, b: 0.2, a: 1}
+  m_AmbientEquatorColor: {r: 0.2, g: 0.2, b: 0.2, a: 1}
+  m_AmbientGroundColor: {r: 0.2, g: 0.2, b: 0.2, a: 1}
+  m_AmbientIntensity: 1
+  m_AmbientMode: 3
+  m_SkyboxMaterial: {fileID: 0}
+  m_HaloStrength: 0.5
+  m_FlareStrength: 1
+  m_FlareFadeSpeed: 3
+  m_HaloTexture: {fileID: 0}
+  m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
+  m_DefaultReflectionMode: 0
+  m_DefaultReflectionResolution: 128
+  m_ReflectionBounces: 1
+  m_ReflectionIntensity: 1
+  m_CustomReflection: {fileID: 0}
+  m_Sun: {fileID: 0}
+--- !u!157 &4
+LightmapSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 6
+  m_GIWorkflowMode: 1
+  m_LightmapsMode: 1
+  m_GISettings:
+    serializedVersion: 2
+    m_BounceScale: 1
+    m_IndirectOutputScale: 1
+    m_AlbedoBoost: 1
+    m_TemporalCoherenceThreshold: 1
+    m_EnvironmentLightingMode: 0
+    m_EnableBakedLightmaps: 1
+    m_EnableRealtimeLightmaps: 0
+  m_LightmapEditorSettings:
+    serializedVersion: 3
+    m_Resolution: 1
+    m_BakeResolution: 50
+    m_TextureWidth: 1024
+    m_TextureHeight: 1024
+    m_AOMaxDistance: 1
+    m_Padding: 2
+    m_CompAOExponent: 0
+    m_LightmapParameters: {fileID: 0}
+    m_TextureCompression: 0
+    m_FinalGather: 0
+    m_FinalGatherRayCount: 1024
+    m_ReflectionCompression: 2
+  m_LightingDataAsset: {fileID: 0}
+  m_RuntimeCPUUsage: 25
+--- !u!196 &5
+NavMeshSettings:
+  serializedVersion: 2
+  m_ObjectHideFlags: 0
+  m_BuildSettings:
+    serializedVersion: 2
+    agentRadius: 0.5
+    agentHeight: 2
+    agentSlope: 45
+    agentClimb: 0.4
+    ledgeDropHeight: 0
+    maxJumpAcrossDistance: 0
+    accuratePlacement: 0
+    minRegionArea: 2
+    cellSize: 0.16666666
+    manualCellSize: 0
+  m_NavMeshData: {fileID: 0}
+--- !u!1 &656497
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  serializedVersion: 4
+  m_Component:
+  - 224: {fileID: 656498}
+  - 223: {fileID: 656501}
+  - 114: {fileID: 656500}
+  - 114: {fileID: 656499}
+  m_Layer: 5
+  m_Name: Canvas
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &656498
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 656497}
+  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_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_Children:
+  - {fileID: 417469201}
+  - {fileID: 385824573}
+  m_Father: {fileID: 0}
+  m_RootOrder: 1
+  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!114 &656499
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 656497}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1301386320, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_IgnoreReversedGraphics: 1
+  m_BlockingObjects: 0
+  m_BlockingMask:
+    serializedVersion: 2
+    m_Bits: 4294967295
+--- !u!114 &656500
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 656497}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1980459831, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_UiScaleMode: 0
+  m_ReferencePixelsPerUnit: 100
+  m_ScaleFactor: 1
+  m_ReferenceResolution: {x: 800, y: 600}
+  m_ScreenMatchMode: 0
+  m_MatchWidthOrHeight: 0
+  m_PhysicalUnit: 3
+  m_FallbackScreenDPI: 96
+  m_DefaultSpriteDPI: 96
+  m_DynamicPixelsPerUnit: 1
+--- !u!223 &656501
+Canvas:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 656497}
+  m_Enabled: 1
+  serializedVersion: 2
+  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_SortingLayerID: 0
+  m_SortingOrder: 0
+  m_TargetDisplay: 0
+--- !u!1 &255984866
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  serializedVersion: 4
+  m_Component:
+  - 4: {fileID: 255984870}
+  - 114: {fileID: 255984869}
+  - 114: {fileID: 255984868}
+  - 114: {fileID: 255984867}
+  m_Layer: 0
+  m_Name: EventSystem
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &255984867
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 255984866}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1997211142, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_ForceModuleActive: 0
+--- !u!114 &255984868
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 255984866}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1077351063, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_HorizontalAxis: Horizontal
+  m_VerticalAxis: Vertical
+  m_SubmitButton: Submit
+  m_CancelButton: Cancel
+  m_InputActionsPerSecond: 10
+  m_RepeatDelay: 0.5
+  m_ForceModuleActive: 0
+--- !u!114 &255984869
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 255984866}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -619905303, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_FirstSelected: {fileID: 0}
+  m_sendNavigationEvents: 1
+  m_DragThreshold: 5
+--- !u!4 &255984870
+Transform:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 255984866}
+  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_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 2
+--- !u!224 &385824573 stripped
+RectTransform:
+  m_PrefabParentObject: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708,
+    type: 2}
+  m_PrefabInternal: {fileID: 1898125591}
+--- !u!114 &385824574 stripped
+MonoBehaviour:
+  m_PrefabParentObject: {fileID: 11456696, guid: f10f8c4f3a820d44c9e68a31a19f6708,
+    type: 2}
+  m_PrefabInternal: {fileID: 1898125591}
+  m_Script: {fileID: 11500000, guid: 19dc9f9e53a9c6a4b984db3c8176ed0b, type: 3}
+--- !u!1 &417469200
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  serializedVersion: 4
+  m_Component:
+  - 224: {fileID: 417469201}
+  - 114: {fileID: 417469202}
+  m_Layer: 5
+  m_Name: API_Usage
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &417469201
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 417469200}
+  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_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_Children: []
+  m_Father: {fileID: 656498}
+  m_RootOrder: 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: 100, y: 100}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &417469202
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 417469200}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 9b0d54e48c996bb4eaf877eea8bfa518, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Viewer: {fileID: 385824574}
+  m_PDFAsset: {fileID: 11400000, guid: 486cc9297fbba88488cf04e6e256de63, type: 2}
+--- !u!1 &569028801
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  serializedVersion: 4
+  m_Component:
+  - 4: {fileID: 569028806}
+  - 20: {fileID: 569028805}
+  m_Layer: 0
+  m_Name: Main Camera
+  m_TagString: MainCamera
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!20 &569028805
+Camera:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 569028801}
+  m_Enabled: 1
+  serializedVersion: 2
+  m_ClearFlags: 1
+  m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844}
+  m_NormalizedViewPortRect:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 1
+    height: 1
+  near clip plane: 0.3
+  far clip plane: 1000
+  field of view: 60
+  orthographic: 0
+  orthographic size: 5
+  m_Depth: -1
+  m_CullingMask:
+    serializedVersion: 2
+    m_Bits: 4294967295
+  m_RenderingPath: -1
+  m_TargetTexture: {fileID: 0}
+  m_TargetDisplay: 0
+  m_TargetEye: 3
+  m_HDR: 0
+  m_OcclusionCulling: 1
+  m_StereoConvergence: 10
+  m_StereoSeparation: 0.022
+  m_StereoMirrorMode: 0
+--- !u!4 &569028806
+Transform:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 569028801}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 1, z: -10}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+--- !u!1001 &1898125591
+Prefab:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 656498}
+    m_Modifications:
+    - target: {fileID: 22472218, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22472218, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22472218, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_SizeDelta.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_LocalPosition.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_RootOrder
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchoredPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchoredPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_SizeDelta.x
+      value: -40
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_SizeDelta.y
+      value: -40
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMin.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMin.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_Pivot.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_Pivot.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 22450450, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22450450, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22447322, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22447322, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22423310, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22423310, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22401140, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22401140, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22472218, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_SizeDelta.x
+      value: -101
+      objectReference: {fileID: 0}
+    - target: {fileID: 22469680, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMin.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22469680, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22469680, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchoredPosition.x
+      value: 118.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 22469680, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchoredPosition.y
+      value: -30
+      objectReference: {fileID: 0}
+    - target: {fileID: 22469680, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_SizeDelta.x
+      value: 237
+      objectReference: {fileID: 0}
+    - target: {fileID: 22469680, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_SizeDelta.y
+      value: 80
+      objectReference: {fileID: 0}
+    - target: {fileID: 22435232, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_SizeDelta.y
+      value: -373
+      objectReference: {fileID: 0}
+    - target: {fileID: 22432766, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMin.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22432766, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22432766, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_SizeDelta.x
+      value: 296
+      objectReference: {fileID: 0}
+    - target: {fileID: 22432766, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_SizeDelta.y
+      value: 180
+      objectReference: {fileID: 0}
+    - target: {fileID: 22407928, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_SizeDelta.y
+      value: -303
+      objectReference: {fileID: 0}
+    - target: {fileID: 22414192, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMin.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22414192, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22414192, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchoredPosition.x
+      value: 6
+      objectReference: {fileID: 0}
+    - target: {fileID: 22414192, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchoredPosition.y
+      value: -48
+      objectReference: {fileID: 0}
+    - target: {fileID: 22414192, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_SizeDelta.x
+      value: 112
+      objectReference: {fileID: 0}
+    - target: {fileID: 22414192, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_SizeDelta.y
+      value: 42
+      objectReference: {fileID: 0}
+    - target: {fileID: 22477172, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMin.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22477172, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22477172, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchoredPosition.x
+      value: 124
+      objectReference: {fileID: 0}
+    - target: {fileID: 22477172, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchoredPosition.y
+      value: -48
+      objectReference: {fileID: 0}
+    - target: {fileID: 22477172, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_SizeDelta.x
+      value: 112
+      objectReference: {fileID: 0}
+    - target: {fileID: 22477172, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_SizeDelta.y
+      value: 42
+      objectReference: {fileID: 0}
+    - target: {fileID: 11456696, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_LoadOnEnable
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 11456696, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_UnloadOnDisable
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 158538, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_IsActive
+      value: 0
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+  m_ParentPrefab: {fileID: 100100000, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+  m_IsPrefabParent: 0

+ 6 - 0
Assets/RTC/Paroxe/PDFRenderer/Examples/PDFViewer_API_Usage.unity.meta

@@ -0,0 +1,6 @@
+fileFormatVersion: 2
+guid: 82003c4e5d905874b826f1785f531202
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 483 - 0
Assets/RTC/Paroxe/PDFRenderer/Examples/PDFViewer_Asset.unity

@@ -0,0 +1,483 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!29 &1
+SceneSettings:
+  m_ObjectHideFlags: 0
+  m_PVSData: 
+  m_PVSObjectsArray: []
+  m_PVSPortalsArray: []
+  m_OcclusionBakeSettings:
+    smallestOccluder: 5
+    smallestHole: 0.25
+    backfaceThreshold: 100
+--- !u!104 &2
+RenderSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 6
+  m_Fog: 0
+  m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
+  m_FogMode: 3
+  m_FogDensity: 0.01
+  m_LinearFogStart: 0
+  m_LinearFogEnd: 300
+  m_AmbientSkyColor: {r: 0.2, g: 0.2, b: 0.2, a: 1}
+  m_AmbientEquatorColor: {r: 0.2, g: 0.2, b: 0.2, a: 1}
+  m_AmbientGroundColor: {r: 0.2, g: 0.2, b: 0.2, a: 1}
+  m_AmbientIntensity: 1
+  m_AmbientMode: 3
+  m_SkyboxMaterial: {fileID: 0}
+  m_HaloStrength: 0.5
+  m_FlareStrength: 1
+  m_FlareFadeSpeed: 3
+  m_HaloTexture: {fileID: 0}
+  m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
+  m_DefaultReflectionMode: 0
+  m_DefaultReflectionResolution: 128
+  m_ReflectionBounces: 1
+  m_ReflectionIntensity: 1
+  m_CustomReflection: {fileID: 0}
+  m_Sun: {fileID: 0}
+--- !u!157 &4
+LightmapSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 6
+  m_GIWorkflowMode: 1
+  m_LightmapsMode: 1
+  m_GISettings:
+    serializedVersion: 2
+    m_BounceScale: 1
+    m_IndirectOutputScale: 1
+    m_AlbedoBoost: 1
+    m_TemporalCoherenceThreshold: 1
+    m_EnvironmentLightingMode: 0
+    m_EnableBakedLightmaps: 1
+    m_EnableRealtimeLightmaps: 0
+  m_LightmapEditorSettings:
+    serializedVersion: 3
+    m_Resolution: 1
+    m_BakeResolution: 50
+    m_TextureWidth: 1024
+    m_TextureHeight: 1024
+    m_AOMaxDistance: 1
+    m_Padding: 2
+    m_CompAOExponent: 0
+    m_LightmapParameters: {fileID: 0}
+    m_TextureCompression: 0
+    m_FinalGather: 0
+    m_FinalGatherRayCount: 1024
+    m_ReflectionCompression: 2
+  m_LightingDataAsset: {fileID: 0}
+  m_RuntimeCPUUsage: 25
+--- !u!196 &5
+NavMeshSettings:
+  serializedVersion: 2
+  m_ObjectHideFlags: 0
+  m_BuildSettings:
+    serializedVersion: 2
+    agentRadius: 0.5
+    agentHeight: 2
+    agentSlope: 45
+    agentClimb: 0.4
+    ledgeDropHeight: 0
+    maxJumpAcrossDistance: 0
+    accuratePlacement: 0
+    minRegionArea: 2
+    cellSize: 0.16666666
+    manualCellSize: 0
+  m_NavMeshData: {fileID: 0}
+--- !u!224 &241597468 stripped
+RectTransform:
+  m_PrefabParentObject: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708,
+    type: 2}
+  m_PrefabInternal: {fileID: 286054479}
+--- !u!1001 &286054479
+Prefab:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 1860069253}
+    m_Modifications:
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_LocalPosition.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_RootOrder
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchoredPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchoredPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_SizeDelta.x
+      value: -40
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_SizeDelta.y
+      value: -40
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMin.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMin.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_Pivot.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_Pivot.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 22472218, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22472218, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22472218, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_SizeDelta.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22450450, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22450450, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22401140, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22401140, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22447322, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22447322, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22423310, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22423310, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22472218, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_SizeDelta.x
+      value: -101
+      objectReference: {fileID: 0}
+    - target: {fileID: 22469680, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMin.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22469680, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22469680, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchoredPosition.x
+      value: 118.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 22469680, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchoredPosition.y
+      value: -30
+      objectReference: {fileID: 0}
+    - target: {fileID: 22469680, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_SizeDelta.x
+      value: 237
+      objectReference: {fileID: 0}
+    - target: {fileID: 22469680, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_SizeDelta.y
+      value: 80
+      objectReference: {fileID: 0}
+    - target: {fileID: 22435232, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_SizeDelta.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22432766, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMin.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22432766, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22432766, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_SizeDelta.x
+      value: 296
+      objectReference: {fileID: 0}
+    - target: {fileID: 22432766, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_SizeDelta.y
+      value: 180
+      objectReference: {fileID: 0}
+    - target: {fileID: 22407928, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_SizeDelta.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 11456696, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_FileSource
+      value: 6
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+  m_ParentPrefab: {fileID: 100100000, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+  m_IsPrefabParent: 0
+--- !u!1 &730281540
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  serializedVersion: 4
+  m_Component:
+  - 4: {fileID: 730281544}
+  - 114: {fileID: 730281543}
+  - 114: {fileID: 730281542}
+  - 114: {fileID: 730281541}
+  m_Layer: 0
+  m_Name: EventSystem
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &730281541
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 730281540}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1997211142, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_ForceModuleActive: 0
+--- !u!114 &730281542
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 730281540}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1077351063, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_HorizontalAxis: Horizontal
+  m_VerticalAxis: Vertical
+  m_SubmitButton: Submit
+  m_CancelButton: Cancel
+  m_InputActionsPerSecond: 10
+  m_RepeatDelay: 0.5
+  m_ForceModuleActive: 0
+--- !u!114 &730281543
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 730281540}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -619905303, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_FirstSelected: {fileID: 0}
+  m_sendNavigationEvents: 1
+  m_DragThreshold: 5
+--- !u!4 &730281544
+Transform:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 730281540}
+  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_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 2
+--- !u!1 &753893362
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  serializedVersion: 4
+  m_Component:
+  - 4: {fileID: 753893367}
+  - 20: {fileID: 753893366}
+  m_Layer: 0
+  m_Name: Main Camera
+  m_TagString: MainCamera
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!20 &753893366
+Camera:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 753893362}
+  m_Enabled: 1
+  serializedVersion: 2
+  m_ClearFlags: 1
+  m_BackGroundColor: {r: 0.19204153, g: 0.49325842, b: 0.7058823, a: 0.019607844}
+  m_NormalizedViewPortRect:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 1
+    height: 1
+  near clip plane: 0.3
+  far clip plane: 1000
+  field of view: 60
+  orthographic: 0
+  orthographic size: 5
+  m_Depth: -1
+  m_CullingMask:
+    serializedVersion: 2
+    m_Bits: 4294967295
+  m_RenderingPath: -1
+  m_TargetTexture: {fileID: 0}
+  m_TargetDisplay: 0
+  m_TargetEye: 3
+  m_HDR: 0
+  m_OcclusionCulling: 1
+  m_StereoConvergence: 10
+  m_StereoSeparation: 0.022
+  m_StereoMirrorMode: 0
+--- !u!4 &753893367
+Transform:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 753893362}
+  m_LocalRotation: {x: -0.10434537, y: -0.1897412, z: 0.020284185, w: -0.97606295}
+  m_LocalPosition: {x: -506.26202, y: 778.07886, z: -1516.1158}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_LocalEulerAnglesHint: {x: 12.2039995, y: 22.0016, z: 0}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+--- !u!1 &1860069252
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  serializedVersion: 4
+  m_Component:
+  - 224: {fileID: 1860069253}
+  - 223: {fileID: 1860069256}
+  - 114: {fileID: 1860069254}
+  m_Layer: 5
+  m_Name: Canvas
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &1860069253
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 1860069252}
+  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_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_Children:
+  - {fileID: 241597468}
+  m_Father: {fileID: 0}
+  m_RootOrder: 1
+  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!114 &1860069254
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 1860069252}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1301386320, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_IgnoreReversedGraphics: 1
+  m_BlockingObjects: 0
+  m_BlockingMask:
+    serializedVersion: 2
+    m_Bits: 4294967295
+--- !u!223 &1860069256
+Canvas:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 1860069252}
+  m_Enabled: 1
+  serializedVersion: 2
+  m_RenderMode: 0
+  m_Camera: {fileID: 753893366}
+  m_PlaneDistance: 100
+  m_PixelPerfect: 0
+  m_ReceivesEvents: 1
+  m_OverrideSorting: 0
+  m_OverridePixelPerfect: 0
+  m_SortingBucketNormalizedSize: 0
+  m_SortingLayerID: 0
+  m_SortingOrder: 0
+  m_TargetDisplay: 0

+ 6 - 0
Assets/RTC/Paroxe/PDFRenderer/Examples/PDFViewer_Asset.unity.meta

@@ -0,0 +1,6 @@
+fileFormatVersion: 2
+guid: 4f4a923385356ae42af80130f936f65a
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 605 - 0
Assets/RTC/Paroxe/PDFRenderer/Examples/PDFViewer_Bytes.unity

@@ -0,0 +1,605 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!29 &1
+SceneSettings:
+  m_ObjectHideFlags: 0
+  m_PVSData: 
+  m_PVSObjectsArray: []
+  m_PVSPortalsArray: []
+  m_OcclusionBakeSettings:
+    smallestOccluder: 5
+    smallestHole: 0.25
+    backfaceThreshold: 100
+--- !u!104 &2
+RenderSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 6
+  m_Fog: 0
+  m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
+  m_FogMode: 3
+  m_FogDensity: 0.01
+  m_LinearFogStart: 0
+  m_LinearFogEnd: 300
+  m_AmbientSkyColor: {r: 0.2, g: 0.2, b: 0.2, a: 1}
+  m_AmbientEquatorColor: {r: 0.2, g: 0.2, b: 0.2, a: 1}
+  m_AmbientGroundColor: {r: 0.2, g: 0.2, b: 0.2, a: 1}
+  m_AmbientIntensity: 1
+  m_AmbientMode: 3
+  m_SkyboxMaterial: {fileID: 0}
+  m_HaloStrength: 0.5
+  m_FlareStrength: 1
+  m_FlareFadeSpeed: 3
+  m_HaloTexture: {fileID: 0}
+  m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
+  m_DefaultReflectionMode: 0
+  m_DefaultReflectionResolution: 128
+  m_ReflectionBounces: 1
+  m_ReflectionIntensity: 1
+  m_CustomReflection: {fileID: 0}
+  m_Sun: {fileID: 0}
+--- !u!157 &4
+LightmapSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 6
+  m_GIWorkflowMode: 1
+  m_LightmapsMode: 1
+  m_GISettings:
+    serializedVersion: 2
+    m_BounceScale: 1
+    m_IndirectOutputScale: 1
+    m_AlbedoBoost: 1
+    m_TemporalCoherenceThreshold: 1
+    m_EnvironmentLightingMode: 0
+    m_EnableBakedLightmaps: 1
+    m_EnableRealtimeLightmaps: 0
+  m_LightmapEditorSettings:
+    serializedVersion: 3
+    m_Resolution: 1
+    m_BakeResolution: 50
+    m_TextureWidth: 1024
+    m_TextureHeight: 1024
+    m_AOMaxDistance: 1
+    m_Padding: 2
+    m_CompAOExponent: 0
+    m_LightmapParameters: {fileID: 0}
+    m_TextureCompression: 0
+    m_FinalGather: 0
+    m_FinalGatherRayCount: 1024
+    m_ReflectionCompression: 2
+  m_LightingDataAsset: {fileID: 0}
+  m_RuntimeCPUUsage: 25
+--- !u!196 &5
+NavMeshSettings:
+  serializedVersion: 2
+  m_ObjectHideFlags: 0
+  m_BuildSettings:
+    serializedVersion: 2
+    agentRadius: 0.5
+    agentHeight: 2
+    agentSlope: 45
+    agentClimb: 0.4
+    ledgeDropHeight: 0
+    maxJumpAcrossDistance: 0
+    accuratePlacement: 0
+    minRegionArea: 2
+    cellSize: 0.16666666
+    manualCellSize: 0
+  m_NavMeshData: {fileID: 0}
+--- !u!1001 &96036363
+Prefab:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 1860069253}
+    m_Modifications:
+    - target: {fileID: 22472218, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22472218, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22472218, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_SizeDelta.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_LocalPosition.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_RootOrder
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchoredPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchoredPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_SizeDelta.x
+      value: -40
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_SizeDelta.y
+      value: -40
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMin.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMin.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_Pivot.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_Pivot.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 22450450, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22450450, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22447322, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22447322, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22423310, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22423310, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22401140, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22401140, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22472218, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_SizeDelta.x
+      value: -101
+      objectReference: {fileID: 0}
+    - target: {fileID: 22469680, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMin.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22469680, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22469680, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchoredPosition.x
+      value: 118.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 22469680, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchoredPosition.y
+      value: -30
+      objectReference: {fileID: 0}
+    - target: {fileID: 22469680, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_SizeDelta.x
+      value: 237
+      objectReference: {fileID: 0}
+    - target: {fileID: 22469680, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_SizeDelta.y
+      value: 80
+      objectReference: {fileID: 0}
+    - target: {fileID: 22435232, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_SizeDelta.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22432766, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMin.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22432766, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22432766, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_SizeDelta.x
+      value: 296
+      objectReference: {fileID: 0}
+    - target: {fileID: 22432766, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_SizeDelta.y
+      value: 180
+      objectReference: {fileID: 0}
+    - target: {fileID: 22407928, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_SizeDelta.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22414192, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMin.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22414192, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22414192, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchoredPosition.x
+      value: 6
+      objectReference: {fileID: 0}
+    - target: {fileID: 22414192, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchoredPosition.y
+      value: -48
+      objectReference: {fileID: 0}
+    - target: {fileID: 22414192, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_SizeDelta.x
+      value: 112
+      objectReference: {fileID: 0}
+    - target: {fileID: 22414192, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_SizeDelta.y
+      value: 42
+      objectReference: {fileID: 0}
+    - target: {fileID: 22477172, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMin.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22477172, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchorMax.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22477172, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchoredPosition.x
+      value: 124
+      objectReference: {fileID: 0}
+    - target: {fileID: 22477172, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_AnchoredPosition.y
+      value: -48
+      objectReference: {fileID: 0}
+    - target: {fileID: 22477172, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_SizeDelta.x
+      value: 112
+      objectReference: {fileID: 0}
+    - target: {fileID: 22477172, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_SizeDelta.y
+      value: 42
+      objectReference: {fileID: 0}
+    - target: {fileID: 11456696, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_FileSource
+      value: 5
+      objectReference: {fileID: 0}
+    - target: {fileID: 11456696, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_BytesSupplierObject
+      value: 
+      objectReference: {fileID: 2014237035}
+    - target: {fileID: 11456696, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_BytesSupplierComponent
+      value: 
+      objectReference: {fileID: 2014237036}
+    - target: {fileID: 11456696, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+      propertyPath: m_BytesSupplierFunctionName
+      value: GetPDFDataBytes
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+  m_ParentPrefab: {fileID: 100100000, guid: f10f8c4f3a820d44c9e68a31a19f6708, type: 2}
+  m_IsPrefabParent: 0
+--- !u!224 &96036364 stripped
+RectTransform:
+  m_PrefabParentObject: {fileID: 22439850, guid: f10f8c4f3a820d44c9e68a31a19f6708,
+    type: 2}
+  m_PrefabInternal: {fileID: 96036363}
+--- !u!1 &730281540
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  serializedVersion: 4
+  m_Component:
+  - 4: {fileID: 730281544}
+  - 114: {fileID: 730281543}
+  - 114: {fileID: 730281542}
+  - 114: {fileID: 730281541}
+  m_Layer: 0
+  m_Name: EventSystem
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &730281541
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 730281540}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1997211142, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_ForceModuleActive: 0
+--- !u!114 &730281542
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 730281540}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1077351063, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_HorizontalAxis: Horizontal
+  m_VerticalAxis: Vertical
+  m_SubmitButton: Submit
+  m_CancelButton: Cancel
+  m_InputActionsPerSecond: 10
+  m_RepeatDelay: 0.5
+  m_ForceModuleActive: 0
+--- !u!114 &730281543
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 730281540}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -619905303, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_FirstSelected: {fileID: 0}
+  m_sendNavigationEvents: 1
+  m_DragThreshold: 5
+--- !u!4 &730281544
+Transform:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 730281540}
+  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_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 2
+--- !u!1 &753893362
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  serializedVersion: 4
+  m_Component:
+  - 4: {fileID: 753893367}
+  - 20: {fileID: 753893366}
+  m_Layer: 0
+  m_Name: Main Camera
+  m_TagString: MainCamera
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!20 &753893366
+Camera:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 753893362}
+  m_Enabled: 1
+  serializedVersion: 2
+  m_ClearFlags: 1
+  m_BackGroundColor: {r: 0.19204153, g: 0.49325842, b: 0.7058823, a: 0.019607844}
+  m_NormalizedViewPortRect:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 1
+    height: 1
+  near clip plane: 0.3
+  far clip plane: 1000
+  field of view: 60
+  orthographic: 0
+  orthographic size: 5
+  m_Depth: -1
+  m_CullingMask:
+    serializedVersion: 2
+    m_Bits: 4294967295
+  m_RenderingPath: -1
+  m_TargetTexture: {fileID: 0}
+  m_TargetDisplay: 0
+  m_TargetEye: 3
+  m_HDR: 0
+  m_OcclusionCulling: 1
+  m_StereoConvergence: 10
+  m_StereoSeparation: 0.022
+  m_StereoMirrorMode: 0
+--- !u!4 &753893367
+Transform:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 753893362}
+  m_LocalRotation: {x: -0.10434537, y: -0.1897412, z: 0.020284185, w: -0.97606295}
+  m_LocalPosition: {x: -506.26202, y: 778.07886, z: -1516.1158}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_LocalEulerAnglesHint: {x: 12.2039995, y: 22.0016, z: 0}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+--- !u!1 &1860069252
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  serializedVersion: 4
+  m_Component:
+  - 224: {fileID: 1860069253}
+  - 223: {fileID: 1860069256}
+  - 114: {fileID: 1860069255}
+  - 114: {fileID: 1860069254}
+  m_Layer: 5
+  m_Name: Canvas
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &1860069253
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 1860069252}
+  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_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_Children:
+  - {fileID: 96036364}
+  m_Father: {fileID: 0}
+  m_RootOrder: 1
+  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!114 &1860069254
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 1860069252}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1301386320, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_IgnoreReversedGraphics: 1
+  m_BlockingObjects: 0
+  m_BlockingMask:
+    serializedVersion: 2
+    m_Bits: 4294967295
+--- !u!114 &1860069255
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 1860069252}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1980459831, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_UiScaleMode: 0
+  m_ReferencePixelsPerUnit: 100
+  m_ScaleFactor: 1
+  m_ReferenceResolution: {x: 960, y: 540}
+  m_ScreenMatchMode: 0
+  m_MatchWidthOrHeight: 1
+  m_PhysicalUnit: 3
+  m_FallbackScreenDPI: 96
+  m_DefaultSpriteDPI: 96
+  m_DynamicPixelsPerUnit: 1
+--- !u!223 &1860069256
+Canvas:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 1860069252}
+  m_Enabled: 1
+  serializedVersion: 2
+  m_RenderMode: 0
+  m_Camera: {fileID: 753893366}
+  m_PlaneDistance: 100
+  m_PixelPerfect: 0
+  m_ReceivesEvents: 1
+  m_OverrideSorting: 0
+  m_OverridePixelPerfect: 0
+  m_SortingBucketNormalizedSize: 0
+  m_SortingLayerID: 0
+  m_SortingOrder: 0
+  m_TargetDisplay: 0
+--- !u!1 &2014237035
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  serializedVersion: 4
+  m_Component:
+  - 4: {fileID: 2014237037}
+  - 114: {fileID: 2014237036}
+  m_Layer: 0
+  m_Name: PDFBytesSupplier
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &2014237036
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 2014237035}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: d10854429e865bb4daf9cf7f543de04f, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+--- !u!4 &2014237037
+Transform:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 2014237035}
+  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_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 3

+ 6 - 0
Assets/RTC/Paroxe/PDFRenderer/Examples/PDFViewer_Bytes.unity.meta

@@ -0,0 +1,6 @@
+fileFormatVersion: 2
+guid: d69a150c7ef98c64a92ccfd988ea853a
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

部分文件因文件數量過多而無法顯示