임준일 임준일 2024-06-07
Save 20240607
@f9ea3e2a6255772c70de7811c5caf7da9531f29a
VRTK/Assets/00.MAINSTREAM/Scripts/Manager/PlayInstructorManager.cs
--- VRTK/Assets/00.MAINSTREAM/Scripts/Manager/PlayInstructorManager.cs
+++ VRTK/Assets/00.MAINSTREAM/Scripts/Manager/PlayInstructorManager.cs
@@ -26,8 +26,8 @@
         get { return isOut; }
     }
 
-    [SerializeField] private Vector3 clickPos;
-    [SerializeField] private float scrollRectPosX = 0f;
+    [SerializeField] private Vector3 clickPos;                      // 클릭 위치 포인터
+    [SerializeField] private float scrollRectPosX = 0f;             // 강사 위치 틀 처음 위치
 
 
 
VRTK/Assets/00.MAINSTREAM/Scripts/Manager/PlayVRUIManager.cs
--- VRTK/Assets/00.MAINSTREAM/Scripts/Manager/PlayVRUIManager.cs
+++ VRTK/Assets/00.MAINSTREAM/Scripts/Manager/PlayVRUIManager.cs
@@ -8,6 +8,10 @@
 using System;
 using System.Collections;
 using System.Collections.Generic;
+using System.Drawing.Text;
+using System.IO;
+using Unity.VisualScripting;
+using UnityEditor.Localization.Plugins.XLIFF.V20;
 using UnityEngine;
 using UnityEngine.InputSystem;
 
@@ -34,7 +38,7 @@
     [SerializeField] private UIMainView nowUIMainView;
     [SerializeField] private InputActionProperty backMenuButton;
 
-
+    private bool isDown = false;
     [SerializeField] private int nowSelectId;                   // 선택된 id
     public int NowSelectId{
         get{ return nowSelectId; }
@@ -65,6 +69,7 @@
 
     private List<GameObject> createInstructorObjs;              // 만들어진 코치 오브젝트를 전부 보관하는 리스트
 
+    private List<AnimationClip> tkAnimClips;
 
     #region 00.Content
     [Header("00.Content")]
@@ -182,6 +187,7 @@
         nowContent = Contents.None;         // 아무것도 선택되지 않은 상태
         popUp = transform.Find("Popup").gameObject;
         instructorObjs = new List<GameObject>();
+        tkAnimClips = new List<AnimationClip>();
         UserDataRepo.Instance.VRUIManager = this;
     }
 
@@ -218,13 +224,20 @@
         UserDataRepo.Instance.VRAnimController.ChangeAnimState(selectMode);
         UserDataRepo.Instance.VRAnimController.IsEffect = false;
 
-        //StartCoroutine(GetVRAssetBundle(NowSelectBundleName, NowSelectAnim));
+        StartCoroutine(GetVRAssetInstructor(NowSelectBundleName));
     }   // SetTkPlay
 
-    // bundleName은 모델명 이름이다
-    IEnumerator GetVRAssetBundle(string bundleName, string clipName)
+
+    /// <summary>
+    ///     강사 에셋번들을 가져오는 코루틴
+    /// </summary>
+    /// <param name="bundleName"></param>
+    /// <returns></returns>
+    IEnumerator GetVRAssetInstructor(string bundleName)
     {
         yield return null;
+        DebugTxtCall.Instance.CallDebug("GetVRAssetInstructor IN");
+
         if(0 < instructorObjs.Count) {
             foreach(var obj in instructorObjs) {
                 obj.SetActive(false);
@@ -234,122 +247,89 @@
             instructorObjs.Clear();
         }
 
-
-        AnimationClip tempClip_ = null;
+        
+        string tempBundleName_ = MakeBundleName(bundleName, false);
 
 
-        string tempBundleName_ = string.Empty;
-        // { 현재 컨텐츠를 확인하고 관련 에셋번들 리스트 위치 번호를 가져오는 과정
-        int tempContentNum_ = -1;
+        // 먼저 로컬에 강사 파일이 있는지 확인 후 없으면 다운
+        if(File.Exists(MMDefine.FULL_FILE_PATH + tempBundleName_)){
+            // 로드 된게 있는지 확인
+            if(AssetBundleRepo.Instance.GetAssetBundleList(NowContentInt()).Find(x => x.name == tempBundleName_)){
+                StartCoroutine(GetVRAnim(NowSelectBundleName));
+            }
+            else{
+                //yield return StartCoroutine(MMHelper.AsyncLoader(tempBundleName_));
 
-        if(nowContent == Contents.Taekwondo){
-            tempContentNum_ = MMDefine.VRTAEKWONDO;
+                LoadVRAssetInstructor();
+            }
+
         }
-        else if(nowContent == Contents.Taichi){
+        else{
+
+            // 관련 파일이 없어 에셋번들을 다운받아야할 경우
+            yield return StartCoroutine(MMHelper.DownloadAssetFile(tempBundleName_, LoadVRAssetInstructor));  
+
         }
-        else if(nowContent == Contents.KPop){
-        }
-        else if(nowContent == Contents.Modern){
-        }
+    }        
 
-        tempBundleName_ += MMHelper.GetAssetBundleName(tempContentNum_) + $"{bundleName.ToLower()}clip";
+    private void LoadVRAssetInstructor(){
+        StartCoroutine(LoadInstructor(NowSelectBundleName));
+    }
 
-        // 이름 규칙에 맞게 여기서 만들기?
+    /// <summary>
+    ///     에셋번들 로드
+    /// </summary>
+    /// <param name="bundleName"></param>
+    private IEnumerator LoadInstructor(string bundleName) {
+        // 에셋번들 로드하고 리스트에 넣어두고
+        yield return StartCoroutine(MMHelper.AsyncLoader(bundleName));
+
+        // 클립 로드하러 간다.
+        StartCoroutine(GetVRAnim(NowSelectBundleName));
+    }
+
+    private IEnumerator GetVRAnim(string bundleName){
+        string tempBundleName_ = MakeBundleName(bundleName, true);
 
 
+        // 먼저 로컬에 강사 애니메이션 클립 파일이 있는지 확인 후 없으면 다운
+        if(File.Exists(MMDefine.FULL_FILE_PATH + tempBundleName_)){
+            // 로드 된게 있는지 확인
+            if(AssetBundleRepo.Instance.GetAssetBundleList(NowContentInt()).Find(x => x.name == tempBundleName_)){
 
-        //클립 번들이 있는지 확인
-        if(AssetBundleRepo.Instance.GetAssetBundleList(tempContentNum_).Find(x => x.name == tempBundleName_)){
-            // 관련 파일이 있을 경우
+            }
+            else{
+                LoadVRAssetAnim();
+            }
         }
         else{
             // 관련 파일이 없어 에셋번들을 다운받아야할 경우
-            //MMHelper.DownloadAssetFile(tempBundleName_);
+            yield return StartCoroutine(MMHelper.DownloadAssetFile(tempBundleName_, LoadVRAssetAnim));  
         }
+    }
 
 
+    private void LoadVRAssetAnim(){
+        StartCoroutine(LoadAnim(NowSelectBundleName, NowSelectAnim));
+    }
 
-        // if (AssetBundleDataManager.Instance.vrtaekwondoBundles.Find(x => x.name == $"vrtaekwondo/{bundleName.ToLower()}clip"))
-        // {
-        //     // 여기서 따로 저장된 클립이 있다면 가져온다 
-        //     if (tkAnimClips.ContainsKey($"vrtaekwondo/{bundleName.ToLower()}{clipName.ToLower()}"))
-        //     {
-        //         tempClip_ = tkAnimClips[$"vrtaekwondo/{bundleName.ToLower()}{clipName.ToLower()}"];
-        //     }
-        //     else
-        //     {
-        //         // 필요한 파일을 꺼낸다.
-        //         yield return StartCoroutine(AssetBundleDataManager.Instance.GetAssetBundleClip($"vrtaekwondo/{bundleName.ToLower()}clip", clipName, clip =>
-        //         {
-        //             tempClip_ = clip;
-        //         }));
-        //     }
+    private IEnumerator LoadAnim(string bundleName, string clipName)
+    {
+        yield return StartCoroutine(MMHelper.AsyncLoader(bundleName + "clip"));
 
-        //     // 필요한 파일을 꺼낸다.
-        //     yield return StartCoroutine(AssetBundleDataManager.Instance.GetAssetBundleClip($"vrtaekwondo/{coachName.ToLower()}clip", clipName, clip =>
-        //     {
-        //        tempClip_ = clip;
-        //     }));
-        // }
-        // else
-        // {
-        //     yield return StartCoroutine(NetworkManager.Instance.GetAssetBundleAnim($"vrtaekwondo/{bundleName.ToLower()}clip", clipName, clip =>
-        //     {
-        //         tempClip_ = clip;
-        //     }));
-        // }
+        // 강사 클립 둘다 로드했으니 이제 꺼내자
+        GameObject tempInstructor_ = null;
+        AnimationClip tempAnimClip_ = null;
 
-        // // 새로운 클립을 Dict에 넣어준다 / {코치 이름} + {클립 이름} 키값으로
-        // if (!tkAnimClips.ContainsKey($"vrtaekwondo/{coachName.ToLower()}{clipName.ToLower()}"))
-        // {
-        //     tkAnimClips.Add($"vrtaekwondo/{coachName.ToLower()}{clipName.ToLower()}", tempClip_);
-        // }
+        yield return StartCoroutine(MMHelper.GetAssetObjAsync<GameObject>("vrtaekwondo", NowSelectBundleName, callback => {
+            tempInstructor_ = callback;
+        }));
 
-        // // 코치 오브젝트 생성
-        // GameObject tempCoach_ = null;
+        yield return StartCoroutine(MMHelper.GetAssetObjAsync<AnimationClip>("vrtaekwondo", NowSelectBundleName + "clip", callback => {
+            tempAnimClip_ = callback;
+        }));
 
-
-        // if(AssetBundleDataManager.Instance.vrtaekwondoBundles.Find(x => x.name == $"vrtaekwondo/{coachName.ToLower()}"))            
-        // {
-        //     if(tkCreateCoachObjs.Find(x => x.name == $"{coachName}"))
-        //     {
-        //         int tempIndex_ = tkCreateCoachObjs.FindIndex(x => x.name == $"{coachName}");
-
-        //         tkCoachObjs.Clear();
-        //         // 4회 반복한다.
-        //         for(int i = 0; i < 4; i++)
-        //         {
-        //             tkCoachObjs.Add(tkCreateCoachObjs[tempIndex_]);
-        //             tkCreateCoachObjs.Remove(tkCreateCoachObjs[tempIndex_]);                    
-        //         }
-
-        //         tempCoach_ = tkCoachObjs[0];
-        //     }
-        //     else
-        //     {
-        //         // 필요한 파일을 꺼낸다.
-        //         yield return StartCoroutine(AssetBundleDataManager.Instance.GetAssetObj<GameObject>("vrtaekwondo", coachName, bundle =>
-        //         {
-        //             tempCoach_ = (GameObject)bundle;
-        //         }));
-        //     }
-
-
-        // }
-        // else
-        // {
-        //     yield return StartCoroutine(NetworkManager.Instance.GetAssetBundleObj<GameObject>(coachName, coach =>
-        //     {
-        //         tempCoach_ = coach;
-        //     }));
-
-        // }
-
-        // // [Junil] 24/03/28 - PlayMap 추가
-        // uiManager.mapChange.ChangePlayMap(string.Empty);
-        // uiManager.mapChange.AllOffMapLobby();
-
-        // ShowVRTkAnim(tempCoach_, tempClip_);
+        ShowVRTkAnim(tempInstructor_, tempAnimClip_);
     }
 
 
@@ -442,6 +422,42 @@
         ChangeMainUI(false);
     }
 
+    private int NowContentInt() {
+        int tempContentNum_ = -1;
+
+        if(nowContent == Contents.Taekwondo){
+            tempContentNum_ = MMDefine.VRTAEKWONDO;
+        }
+        else if(nowContent == Contents.Taichi){
+        }
+        else if(nowContent == Contents.KPop){
+        }
+        else if(nowContent == Contents.Modern){
+        }
+
+        return tempContentNum_;
+    }
+
+    /// <summary>
+    ///     번들 이름을 보내면 에셋번들 이름을 만들어서 반환해주는 함수
+    /// </summary>
+    /// <param name="bundleName"></param>
+    /// <param name="isAnim"> true면 clip이 추가로 붙고, false면 패스 </param>
+    /// <returns></returns>
+    private string MakeBundleName(string bundleName, bool isAnim){
+        
+        string tempBundleName_ = string.Empty;
+        // { 현재 컨텐츠를 확인하고 관련 에셋번들 리스트 위치 번호를 가져오는 과정        
+
+        tempBundleName_ = MMHelper.GetAssetBundleName(NowContentInt()) + $"_{bundleName.ToLower()}";
+
+        if(isAnim){
+            tempBundleName_ += "clip";
+        }
+
+        return tempBundleName_;
+    }
+
     public void SetInputKey(InputActionProperty backBtn)
     {
         backMenuButton = backBtn;
VRTK/Assets/00.MAINSTREAM/Scripts/Utils/MMHelper.cs
--- VRTK/Assets/00.MAINSTREAM/Scripts/Utils/MMHelper.cs
+++ VRTK/Assets/00.MAINSTREAM/Scripts/Utils/MMHelper.cs
@@ -1,9 +1,11 @@
 using System;
 using System.Collections;
+using System.IO;
 using Oculus.Platform;
 using Oculus.Platform.Models;
 using Unity.VisualScripting;
 using UnityEngine;
+using UnityEngine.Events;
 using UnityEngine.SceneManagement;
 using UnityEngine.U2D;
 using UnityEngine.UI;
@@ -63,7 +65,7 @@
     /// <param name="useObjName"></param>
     /// <param name="callback"></param>
     /// <returns></returns>
-    public static IEnumerator GetAssetObjAsync<T>(string bundleName, string useObjName, Action<GameObject> callback)
+    public static IEnumerator GetAssetObjAsync<T>(string bundleName, string useObjName, Action<T> callback)
     {
         int tempCaseNum_ = 0;
         int tempNumber_ = 0;
@@ -102,11 +104,21 @@
         yield return reqAsset_.isDone;
         Debug.LogError(reqAsset_.asset);
 
-        GameObject tempObj_ = (GameObject)reqAsset_.asset;
+        T tempObj_ = reqAsset_.asset.GetComponent<T>();
+
 #if UNITY_EDITOR
-        AssetBundleEditorUtil.FixShadersForEditor(tempObj_);
-#endif
+        // tempObj_가 GameObject 형식인지 확인하고 반환
+        GameObject tempCheck_ = tempObj_ as GameObject;
+        if(tempCheck_ != null) {
+            AssetBundleEditorUtil.FixShadersForEditor(tempCheck_);
+
+            tempObj_ = tempCheck_.GetComponent<T>();
+
+            callback(tempObj_);
+        }
+#else
         callback(tempObj_);
+#endif
 
     }
 
@@ -116,20 +128,20 @@
     ///     파일 이름을 받아서 해당 파일 에셋을 다운로드 처리
     /// </summary>
     /// <param name="fileName"> 다운로드 받을 파일명 </param>
-    public static IEnumerator DownloadAssetFile(string fileName, Action<AnimationClip> callback)
+    public static IEnumerator DownloadAssetFile(string fileName, Action callss)
     {
         int tempAssetIndex_ = AppDataRepo.Instance.GetAssetFileList().FindIndex(a => a.fileName == fileName);
-
-        yield return AssetFile.DownloadById(AppDataRepo.Instance.GetAssetFileList()[tempAssetIndex_].assetId).OnComplete(callback =>{
-            if (callback.IsError) {
-            return;
+        
+        yield return AssetFile.DownloadById(AppDataRepo.Instance.GetAssetFileList()[tempAssetIndex_].assetId).OnComplete( callback =>{
+            if (callback.IsError)
+            {
+                return;
             }
 
             // 에셋 파일의 다운로드 진행 사황을 나타내기 위해서 사용
             AssetFile.SetDownloadUpdateNotificationCallback(call =>
             {
                 AssetFileDownloadUpdate downloadUpdate = call.GetAssetFileDownloadUpdate();
-
 
                 if (downloadUpdate != null)
                 {
@@ -139,26 +151,78 @@
                     if (downloadUpdate.Completed)
                     {
                         // 경로에 파일이 생겼으니 로드하여 사용한다.
-                                                
+                        if(File.Exists(callback.GetAssetFileDownloadResult().Filepath)){
+                            DebugTxtCall.Instance.CallDebug($"{callback.GetAssetFileDownloadResult().Filepath} 있다!");
+                        }
+                        else{
+                            DebugTxtCall.Instance.CallDebug($"{callback.GetAssetFileDownloadResult().Filepath} 없어!!");
+                        }
+
+                        callss();
+                        //AssetFileDownloadResult assetInfo_ = msg.GetAssetFileDownloadResult();
+                        //debugTxt.text += $"DownloadAsset : {assetInfo_.Filepath} {assetInfo_.AssetId}" +
+                        //$" AssetFileDownloadResult : {File.Exists(assetInfo_.Filepath)}" +
+                        //$" path : {File.Exists(Define.FULL_FILE_PATH + AppDataRepo.Instance.assetBundleDataList.Find(x => x.fileName == "TAEKWONDO_initList_DLC.json").fileName)}\n";
                     }
                 }
                 else
                 {
-                    //debugTxt.text += "SetDownloadUpdateNotificationCallback null";
+                        //debugTxt.text += "SetDownloadUpdateNotificationCallback null";
                 }
             });
-
-
+            
         });
-        
+
+        if(File.Exists(MMDefine.FULL_FILE_PATH + fileName)){
+            Debug.Log("있다");
+        }
+
+
+
+        // yield return AssetFile.DownloadById(AppDataRepo.Instance.GetAssetFileList()[tempAssetIndex_].assetId).OnComplete(msg => {
+        //     if (msg.IsError)
+        //     {
+        //         return;
+        //     }
+
+        //     // 에셋 파일의 다운로드 진행 사황을 나타내기 위해서 사용
+        //     AssetFile.SetDownloadUpdateNotificationCallback(call =>
+        //     {
+        //         AssetFileDownloadUpdate downloadUpdate = call.GetAssetFileDownloadUpdate();
+
+
+        //         if (downloadUpdate != null)
+        //         {
+        //             //debugTxt.text += $"{downloadUpdate.AssetId} trans {downloadUpdate.BytesTransferred} total {downloadUpdate.BytesTotal}";
+
+        //             // 에셋 파일의 다운로드가 완료되었다면 실행
+        //             if (downloadUpdate.Completed)
+        //             {
+        //                 // 경로에 파일이 생겼으니 로드하여 사용한다.
+        //                 //callback();
+
+        //                 //AssetFileDownloadResult assetInfo_ = msg.GetAssetFileDownloadResult();
+        //                 //debugTxt.text += $"DownloadAsset : {assetInfo_.Filepath} {assetInfo_.AssetId}" +
+        //                 //$" AssetFileDownloadResult : {File.Exists(assetInfo_.Filepath)}" +
+        //                 //$" path : {File.Exists(Define.FULL_FILE_PATH + AppDataRepo.Instance.assetBundleDataList.Find(x => x.fileName == "TAEKWONDO_initList_DLC.json").fileName)}\n";
+        //             }
+        //         }
+        //         else
+        //         {
+        //             //debugTxt.text += "SetDownloadUpdateNotificationCallback null";
+        //         }
+        //     });
+        // });
+
 
     }
+
 
     /// <summary>
     ///     message를 받아서 관련 에셋 파일을 다운받는 함수
     /// </summary>
     /// <param name="msg"> 콜백 메세지 </param>
-    private static void GetDownloadByIdCallBack(Message<AssetFileDownloadResult> msg)
+    private static void GetDownloadByIdCallBack(Message<AssetFileDownloadResult> msg, Action callback)
     {
         if (msg.IsError)
         {
@@ -179,6 +243,8 @@
                 if (downloadUpdate.Completed)
                 {
                     // 경로에 파일이 생겼으니 로드하여 사용한다.
+
+
 
                     //AssetFileDownloadResult assetInfo_ = msg.GetAssetFileDownloadResult();
                     //debugTxt.text += $"DownloadAsset : {assetInfo_.Filepath} {assetInfo_.AssetId}" +
@@ -280,6 +346,5 @@
         if(assetBundleNum == MMDefine.PARTICLE) { return "ptcl"; }
         return null;
     }
-
 
 }
VRTK/Assets/01.Junil/Scenes/00.ModelIkTest.unity
--- VRTK/Assets/01.Junil/Scenes/00.ModelIkTest.unity
+++ VRTK/Assets/01.Junil/Scenes/00.ModelIkTest.unity
@@ -124,7 +124,7 @@
     debug:
       m_Flags: 0
   m_NavMeshData: {fileID: 0}
---- !u!21 &11960495
+--- !u!21 &44350371
 Material:
   serializedVersion: 8
   m_ObjectHideFlags: 0
@@ -161,7 +161,7 @@
     - _StencilWriteMask: 255
     - _UseUIAlphaClip: 0
     m_Colors:
-    - _WidthHeightRadius: {r: 40, g: 20, b: 8, a: 0}
+    - _WidthHeightRadius: {r: 24, g: 10, b: 4, a: 0}
   m_BuildTextureStacks: []
 --- !u!1 &52320011
 GameObject:
@@ -240,46 +240,7 @@
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 52320011}
   m_CullTransparentMesh: 1
---- !u!21 &81467375
-Material:
-  serializedVersion: 8
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_Name: UI/RoundedCorners/RoundedCorners
-  m_Shader: {fileID: 4800000, guid: 0bd2ec5d73751e34a814274a454bec41, type: 3}
-  m_Parent: {fileID: 0}
-  m_ModifiedSerializedProperties: 0
-  m_ValidKeywords: []
-  m_InvalidKeywords: []
-  m_LightmapFlags: 4
-  m_EnableInstancingVariants: 0
-  m_DoubleSidedGI: 0
-  m_CustomRenderQueue: -1
-  stringTagMap: {}
-  disabledShaderPasses: []
-  m_LockedProperties: 
-  m_SavedProperties:
-    serializedVersion: 3
-    m_TexEnvs:
-    - _MainTex:
-        m_Texture: {fileID: 0}
-        m_Scale: {x: 1, y: 1}
-        m_Offset: {x: 0, y: 0}
-    m_Ints: []
-    m_Floats:
-    - _ColorMask: 15
-    - _Stencil: 0
-    - _StencilComp: 8
-    - _StencilOp: 0
-    - _StencilReadMask: 255
-    - _StencilWriteMask: 255
-    - _UseUIAlphaClip: 0
-    m_Colors:
-    - _WidthHeightRadius: {r: 50, g: 20, b: 8, a: 0}
-  m_BuildTextureStacks: []
---- !u!21 &422238552
+--- !u!21 &195577173
 Material:
   serializedVersion: 8
   m_ObjectHideFlags: 0
@@ -470,7 +431,46 @@
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 481761039}
   m_CullTransparentMesh: 1
---- !u!21 &495101009
+--- !u!21 &496267222
+Material:
+  serializedVersion: 8
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: UI/RoundedCorners/RoundedCorners
+  m_Shader: {fileID: 4800000, guid: 0bd2ec5d73751e34a814274a454bec41, type: 3}
+  m_Parent: {fileID: 0}
+  m_ModifiedSerializedProperties: 0
+  m_ValidKeywords: []
+  m_InvalidKeywords: []
+  m_LightmapFlags: 4
+  m_EnableInstancingVariants: 0
+  m_DoubleSidedGI: 0
+  m_CustomRenderQueue: -1
+  stringTagMap: {}
+  disabledShaderPasses: []
+  m_LockedProperties: 
+  m_SavedProperties:
+    serializedVersion: 3
+    m_TexEnvs:
+    - _MainTex:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    m_Ints: []
+    m_Floats:
+    - _ColorMask: 15
+    - _Stencil: 0
+    - _StencilComp: 8
+    - _StencilOp: 0
+    - _StencilReadMask: 255
+    - _StencilWriteMask: 255
+    - _UseUIAlphaClip: 0
+    m_Colors:
+    - _WidthHeightRadius: {r: 50, g: 20, b: 8, a: 0}
+  m_BuildTextureStacks: []
+--- !u!21 &514692571
 Material:
   serializedVersion: 8
   m_ObjectHideFlags: 0
@@ -509,7 +509,7 @@
     m_Colors:
     - _WidthHeightRadius: {r: 55, g: 20, b: 8, a: 0}
   m_BuildTextureStacks: []
---- !u!21 &556651564
+--- !u!21 &557629876
 Material:
   serializedVersion: 8
   m_ObjectHideFlags: 0
@@ -546,7 +546,7 @@
     - _StencilWriteMask: 255
     - _UseUIAlphaClip: 0
     m_Colors:
-    - _WidthHeightRadius: {r: 40, g: 20, b: 8, a: 0}
+    - _WidthHeightRadius: {r: 24, g: 10, b: 4, a: 0}
   m_BuildTextureStacks: []
 --- !u!1001 &652386251
 PrefabInstance:
@@ -647,84 +647,6 @@
   m_Children: []
   m_Father: {fileID: 0}
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!21 &671286112
-Material:
-  serializedVersion: 8
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_Name: UI/RoundedCorners/RoundedCorners
-  m_Shader: {fileID: 4800000, guid: 0bd2ec5d73751e34a814274a454bec41, type: 3}
-  m_Parent: {fileID: 0}
-  m_ModifiedSerializedProperties: 0
-  m_ValidKeywords: []
-  m_InvalidKeywords: []
-  m_LightmapFlags: 4
-  m_EnableInstancingVariants: 0
-  m_DoubleSidedGI: 0
-  m_CustomRenderQueue: -1
-  stringTagMap: {}
-  disabledShaderPasses: []
-  m_LockedProperties: 
-  m_SavedProperties:
-    serializedVersion: 3
-    m_TexEnvs:
-    - _MainTex:
-        m_Texture: {fileID: 0}
-        m_Scale: {x: 1, y: 1}
-        m_Offset: {x: 0, y: 0}
-    m_Ints: []
-    m_Floats:
-    - _ColorMask: 15
-    - _Stencil: 0
-    - _StencilComp: 8
-    - _StencilOp: 0
-    - _StencilReadMask: 255
-    - _StencilWriteMask: 255
-    - _UseUIAlphaClip: 0
-    m_Colors:
-    - _WidthHeightRadius: {r: 24, g: 10, b: 4, a: 0}
-  m_BuildTextureStacks: []
---- !u!21 &672532294
-Material:
-  serializedVersion: 8
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_Name: UI/RoundedCorners/RoundedCorners
-  m_Shader: {fileID: 4800000, guid: 0bd2ec5d73751e34a814274a454bec41, type: 3}
-  m_Parent: {fileID: 0}
-  m_ModifiedSerializedProperties: 0
-  m_ValidKeywords: []
-  m_InvalidKeywords: []
-  m_LightmapFlags: 4
-  m_EnableInstancingVariants: 0
-  m_DoubleSidedGI: 0
-  m_CustomRenderQueue: -1
-  stringTagMap: {}
-  disabledShaderPasses: []
-  m_LockedProperties: 
-  m_SavedProperties:
-    serializedVersion: 3
-    m_TexEnvs:
-    - _MainTex:
-        m_Texture: {fileID: 0}
-        m_Scale: {x: 1, y: 1}
-        m_Offset: {x: 0, y: 0}
-    m_Ints: []
-    m_Floats:
-    - _ColorMask: 15
-    - _Stencil: 0
-    - _StencilComp: 8
-    - _StencilOp: 0
-    - _StencilReadMask: 255
-    - _StencilWriteMask: 255
-    - _UseUIAlphaClip: 0
-    m_Colors:
-    - _WidthHeightRadius: {r: 50, g: 20, b: 8, a: 0}
-  m_BuildTextureStacks: []
 --- !u!1 &820939528
 GameObject:
   m_ObjectHideFlags: 0
@@ -803,7 +725,7 @@
   m_EditorClassIdentifier: 
   m_HorizontalFit: 0
   m_VerticalFit: 2
---- !u!21 &888347671
+--- !u!21 &880964246
 Material:
   serializedVersion: 8
   m_ObjectHideFlags: 0
@@ -932,6 +854,45 @@
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 978790871}
   m_CullTransparentMesh: 1
+--- !u!21 &986363492
+Material:
+  serializedVersion: 8
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: UI/RoundedCorners/RoundedCorners
+  m_Shader: {fileID: 4800000, guid: 0bd2ec5d73751e34a814274a454bec41, type: 3}
+  m_Parent: {fileID: 0}
+  m_ModifiedSerializedProperties: 0
+  m_ValidKeywords: []
+  m_InvalidKeywords: []
+  m_LightmapFlags: 4
+  m_EnableInstancingVariants: 0
+  m_DoubleSidedGI: 0
+  m_CustomRenderQueue: -1
+  stringTagMap: {}
+  disabledShaderPasses: []
+  m_LockedProperties: 
+  m_SavedProperties:
+    serializedVersion: 3
+    m_TexEnvs:
+    - _MainTex:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    m_Ints: []
+    m_Floats:
+    - _ColorMask: 15
+    - _Stencil: 0
+    - _StencilComp: 8
+    - _StencilOp: 0
+    - _StencilReadMask: 255
+    - _StencilWriteMask: 255
+    - _UseUIAlphaClip: 0
+    m_Colors:
+    - _WidthHeightRadius: {r: 40, g: 20, b: 8, a: 0}
+  m_BuildTextureStacks: []
 --- !u!1 &1023990068
 GameObject:
   m_ObjectHideFlags: 0
@@ -1037,45 +998,6 @@
   m_Children: []
   m_Father: {fileID: 0}
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!21 &1106052782
-Material:
-  serializedVersion: 8
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_Name: UI/RoundedCorners/RoundedCorners
-  m_Shader: {fileID: 4800000, guid: 0bd2ec5d73751e34a814274a454bec41, type: 3}
-  m_Parent: {fileID: 0}
-  m_ModifiedSerializedProperties: 0
-  m_ValidKeywords: []
-  m_InvalidKeywords: []
-  m_LightmapFlags: 4
-  m_EnableInstancingVariants: 0
-  m_DoubleSidedGI: 0
-  m_CustomRenderQueue: -1
-  stringTagMap: {}
-  disabledShaderPasses: []
-  m_LockedProperties: 
-  m_SavedProperties:
-    serializedVersion: 3
-    m_TexEnvs:
-    - _MainTex:
-        m_Texture: {fileID: 0}
-        m_Scale: {x: 1, y: 1}
-        m_Offset: {x: 0, y: 0}
-    m_Ints: []
-    m_Floats:
-    - _ColorMask: 15
-    - _Stencil: 0
-    - _StencilComp: 8
-    - _StencilOp: 0
-    - _StencilReadMask: 255
-    - _StencilWriteMask: 255
-    - _UseUIAlphaClip: 0
-    m_Colors:
-    - _WidthHeightRadius: {r: 24, g: 10, b: 4, a: 0}
-  m_BuildTextureStacks: []
 --- !u!1 &1139436975
 GameObject:
   m_ObjectHideFlags: 0
@@ -1194,45 +1116,6 @@
   m_LightCookieSize: {x: 1, y: 1}
   m_LightCookieOffset: {x: 0, y: 0}
   m_SoftShadowQuality: 0
---- !u!21 &1208821483
-Material:
-  serializedVersion: 8
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_Name: UI/RoundedCorners/RoundedCorners
-  m_Shader: {fileID: 4800000, guid: 0bd2ec5d73751e34a814274a454bec41, type: 3}
-  m_Parent: {fileID: 0}
-  m_ModifiedSerializedProperties: 0
-  m_ValidKeywords: []
-  m_InvalidKeywords: []
-  m_LightmapFlags: 4
-  m_EnableInstancingVariants: 0
-  m_DoubleSidedGI: 0
-  m_CustomRenderQueue: -1
-  stringTagMap: {}
-  disabledShaderPasses: []
-  m_LockedProperties: 
-  m_SavedProperties:
-    serializedVersion: 3
-    m_TexEnvs:
-    - _MainTex:
-        m_Texture: {fileID: 0}
-        m_Scale: {x: 1, y: 1}
-        m_Offset: {x: 0, y: 0}
-    m_Ints: []
-    m_Floats:
-    - _ColorMask: 15
-    - _Stencil: 0
-    - _StencilComp: 8
-    - _StencilOp: 0
-    - _StencilReadMask: 255
-    - _StencilWriteMask: 255
-    - _UseUIAlphaClip: 0
-    m_Colors:
-    - _WidthHeightRadius: {r: 40, g: 20, b: 8, a: 0}
-  m_BuildTextureStacks: []
 --- !u!1 &1260657658
 GameObject:
   m_ObjectHideFlags: 0
@@ -1242,7 +1125,7 @@
   serializedVersion: 6
   m_Component:
   - component: {fileID: 1260657660}
-  - component: {fileID: 1260657659}
+  - component: {fileID: 1260657661}
   m_Layer: 0
   m_Name: Test
   m_TagString: Untagged
@@ -1250,38 +1133,6 @@
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
   m_IsActive: 1
---- !u!114 &1260657659
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 1260657658}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: fd48fae9c48cc83499aed28fecb2a6e8, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  metamotionUI: {fileID: 0}
-  appLoginUI: {fileID: 0}
-  pressTxtObj: {fileID: 0}
-  isNoUpdate: 0
-  isOnClick: 0
-  testTxt: {fileID: 1490548137}
-  anyKeyInput:
-    m_UseReference: 0
-    m_Action:
-      m_Name: Any Key Input
-      m_Type: 0
-      m_ExpectedControlType: 
-      m_Id: 69c89bf9-fc8a-4ee4-8b51-c0d8c394b22b
-      m_Processors: 
-      m_Interactions: 
-      m_SingletonActionBindings: []
-      m_Flags: 0
-    m_Reference: {fileID: 0}
-  loadingManager: {fileID: 0}
-  obbFilePath: /sdcard/Android/obb/com.MetaMotion.VRTk/mqdhtest
 --- !u!4 &1260657660
 Transform:
   m_ObjectHideFlags: 0
@@ -1297,7 +1148,38 @@
   m_Children: []
   m_Father: {fileID: 0}
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!21 &1281979911
+--- !u!114 &1260657661
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1260657658}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 913aca583fb622d40b40c84ebce91f47, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  nowContent: 0
+  particalObj: {fileID: 0}
+  effectObj: {fileID: 0}
+  test:
+  - m_UseReference: 1
+    m_Action:
+      m_Name: Element 0
+      m_Type: 0
+      m_ExpectedControlType: 
+      m_Id: d968f27a-7c89-4683-8b3e-84f67aab7e11
+      m_Processors: 
+      m_Interactions: 
+      m_SingletonActionBindings: []
+      m_Flags: 0
+    m_Reference: {fileID: 4860515764186564299, guid: e39f4b35a6db18348b41eb0262520e69,
+      type: 3}
+  spriteAtlas: {fileID: 0}
+  image: {fileID: 0}
+  isDownloaded: 0
+--- !u!21 &1289620507
 Material:
   serializedVersion: 8
   m_ObjectHideFlags: 0
@@ -1336,7 +1218,7 @@
     m_Colors:
     - _WidthHeightRadius: {r: 40, g: 20, b: 8, a: 0}
   m_BuildTextureStacks: []
---- !u!21 &1354315661
+--- !u!21 &1311389571
 Material:
   serializedVersion: 8
   m_ObjectHideFlags: 0
@@ -1373,7 +1255,7 @@
     - _StencilWriteMask: 255
     - _UseUIAlphaClip: 0
     m_Colors:
-    - _WidthHeightRadius: {r: 40, g: 20, b: 8, a: 0}
+    - _WidthHeightRadius: {r: 24, g: 10, b: 4, a: 0}
   m_BuildTextureStacks: []
 --- !u!1 &1375304115
 GameObject:
@@ -1406,7 +1288,7 @@
   m_Children: []
   m_Father: {fileID: 0}
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!21 &1412182438
+--- !u!21 &1397594885
 Material:
   serializedVersion: 8
   m_ObjectHideFlags: 0
@@ -1443,7 +1325,46 @@
     - _StencilWriteMask: 255
     - _UseUIAlphaClip: 0
     m_Colors:
-    - _WidthHeightRadius: {r: 55, g: 20, b: 8, a: 0}
+    - _WidthHeightRadius: {r: 40, g: 20, b: 8, a: 0}
+  m_BuildTextureStacks: []
+--- !u!21 &1406648269
+Material:
+  serializedVersion: 8
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: UI/RoundedCorners/RoundedCorners
+  m_Shader: {fileID: 4800000, guid: 0bd2ec5d73751e34a814274a454bec41, type: 3}
+  m_Parent: {fileID: 0}
+  m_ModifiedSerializedProperties: 0
+  m_ValidKeywords: []
+  m_InvalidKeywords: []
+  m_LightmapFlags: 4
+  m_EnableInstancingVariants: 0
+  m_DoubleSidedGI: 0
+  m_CustomRenderQueue: -1
+  stringTagMap: {}
+  disabledShaderPasses: []
+  m_LockedProperties: 
+  m_SavedProperties:
+    serializedVersion: 3
+    m_TexEnvs:
+    - _MainTex:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    m_Ints: []
+    m_Floats:
+    - _ColorMask: 15
+    - _Stencil: 0
+    - _StencilComp: 8
+    - _StencilOp: 0
+    - _StencilReadMask: 255
+    - _StencilWriteMask: 255
+    - _UseUIAlphaClip: 0
+    m_Colors:
+    - _WidthHeightRadius: {r: 40, g: 20, b: 8, a: 0}
   m_BuildTextureStacks: []
 --- !u!1 &1459327236
 GameObject:
@@ -1454,8 +1375,8 @@
   serializedVersion: 6
   m_Component:
   - component: {fileID: 1459327237}
-  - component: {fileID: 1459327239}
   - component: {fileID: 1459327238}
+  - component: {fileID: 1459327240}
   m_Layer: 5
   m_Name: Content
   m_TagString: Untagged
@@ -1496,10 +1417,10 @@
   m_Name: 
   m_EditorClassIdentifier: 
   m_Padding:
-    m_Left: 10
-    m_Right: 10
-    m_Top: 10
-    m_Bottom: 10
+    m_Left: 0
+    m_Right: 0
+    m_Top: 0
+    m_Bottom: 0
   m_ChildAlignment: 0
   m_Spacing: 0
   m_ChildForceExpandWidth: 1
@@ -1509,7 +1430,7 @@
   m_ChildScaleWidth: 0
   m_ChildScaleHeight: 0
   m_ReverseArrangement: 0
---- !u!114 &1459327239
+--- !u!114 &1459327240
 MonoBehaviour:
   m_ObjectHideFlags: 0
   m_CorrespondingSourceObject: {fileID: 0}
@@ -1523,45 +1444,6 @@
   m_EditorClassIdentifier: 
   m_HorizontalFit: 0
   m_VerticalFit: 2
---- !u!21 &1477554418
-Material:
-  serializedVersion: 8
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_Name: UI/RoundedCorners/RoundedCorners
-  m_Shader: {fileID: 4800000, guid: 0bd2ec5d73751e34a814274a454bec41, type: 3}
-  m_Parent: {fileID: 0}
-  m_ModifiedSerializedProperties: 0
-  m_ValidKeywords: []
-  m_InvalidKeywords: []
-  m_LightmapFlags: 4
-  m_EnableInstancingVariants: 0
-  m_DoubleSidedGI: 0
-  m_CustomRenderQueue: -1
-  stringTagMap: {}
-  disabledShaderPasses: []
-  m_LockedProperties: 
-  m_SavedProperties:
-    serializedVersion: 3
-    m_TexEnvs:
-    - _MainTex:
-        m_Texture: {fileID: 0}
-        m_Scale: {x: 1, y: 1}
-        m_Offset: {x: 0, y: 0}
-    m_Ints: []
-    m_Floats:
-    - _ColorMask: 15
-    - _Stencil: 0
-    - _StencilComp: 8
-    - _StencilOp: 0
-    - _StencilReadMask: 255
-    - _StencilWriteMask: 255
-    - _UseUIAlphaClip: 0
-    m_Colors:
-    - _WidthHeightRadius: {r: 24, g: 10, b: 4, a: 0}
-  m_BuildTextureStacks: []
 --- !u!1 &1490548134
 GameObject:
   m_ObjectHideFlags: 0
@@ -1791,6 +1673,128 @@
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1492874939}
   m_CullTransparentMesh: 1
+--- !u!21 &1514506780
+Material:
+  serializedVersion: 8
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: UI/RoundedCorners/RoundedCorners
+  m_Shader: {fileID: 4800000, guid: 0bd2ec5d73751e34a814274a454bec41, type: 3}
+  m_Parent: {fileID: 0}
+  m_ModifiedSerializedProperties: 0
+  m_ValidKeywords: []
+  m_InvalidKeywords: []
+  m_LightmapFlags: 4
+  m_EnableInstancingVariants: 0
+  m_DoubleSidedGI: 0
+  m_CustomRenderQueue: -1
+  stringTagMap: {}
+  disabledShaderPasses: []
+  m_LockedProperties: 
+  m_SavedProperties:
+    serializedVersion: 3
+    m_TexEnvs:
+    - _MainTex:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    m_Ints: []
+    m_Floats:
+    - _ColorMask: 15
+    - _Stencil: 0
+    - _StencilComp: 8
+    - _StencilOp: 0
+    - _StencilReadMask: 255
+    - _StencilWriteMask: 255
+    - _UseUIAlphaClip: 0
+    m_Colors:
+    - _WidthHeightRadius: {r: 40, g: 20, b: 8, a: 0}
+  m_BuildTextureStacks: []
+--- !u!1 &1564624327
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1564624329}
+  - component: {fileID: 1564624328}
+  m_Layer: 0
+  m_Name: Entitlement
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &1564624328
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1564624327}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: f0f8f3cde43c25b4abe357598ec48a4a, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+--- !u!4 &1564624329
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1564624327}
+  serializedVersion: 2
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!21 &1597992833
+Material:
+  serializedVersion: 8
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: UI/RoundedCorners/RoundedCorners
+  m_Shader: {fileID: 4800000, guid: 0bd2ec5d73751e34a814274a454bec41, type: 3}
+  m_Parent: {fileID: 0}
+  m_ModifiedSerializedProperties: 0
+  m_ValidKeywords: []
+  m_InvalidKeywords: []
+  m_LightmapFlags: 4
+  m_EnableInstancingVariants: 0
+  m_DoubleSidedGI: 0
+  m_CustomRenderQueue: -1
+  stringTagMap: {}
+  disabledShaderPasses: []
+  m_LockedProperties: 
+  m_SavedProperties:
+    serializedVersion: 3
+    m_TexEnvs:
+    - _MainTex:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    m_Ints: []
+    m_Floats:
+    - _ColorMask: 15
+    - _Stencil: 0
+    - _StencilComp: 8
+    - _StencilOp: 0
+    - _StencilReadMask: 255
+    - _StencilWriteMask: 255
+    - _UseUIAlphaClip: 0
+    m_Colors:
+    - _WidthHeightRadius: {r: 24, g: 10, b: 4, a: 0}
+  m_BuildTextureStacks: []
 --- !u!1 &1686366219
 GameObject:
   m_ObjectHideFlags: 0
@@ -2125,6 +2129,45 @@
   m_Children: []
   m_Father: {fileID: 0}
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!21 &1820346284
+Material:
+  serializedVersion: 8
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: UI/RoundedCorners/RoundedCorners
+  m_Shader: {fileID: 4800000, guid: 0bd2ec5d73751e34a814274a454bec41, type: 3}
+  m_Parent: {fileID: 0}
+  m_ModifiedSerializedProperties: 0
+  m_ValidKeywords: []
+  m_InvalidKeywords: []
+  m_LightmapFlags: 4
+  m_EnableInstancingVariants: 0
+  m_DoubleSidedGI: 0
+  m_CustomRenderQueue: -1
+  stringTagMap: {}
+  disabledShaderPasses: []
+  m_LockedProperties: 
+  m_SavedProperties:
+    serializedVersion: 3
+    m_TexEnvs:
+    - _MainTex:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    m_Ints: []
+    m_Floats:
+    - _ColorMask: 15
+    - _Stencil: 0
+    - _StencilComp: 8
+    - _StencilOp: 0
+    - _StencilReadMask: 255
+    - _StencilWriteMask: 255
+    - _UseUIAlphaClip: 0
+    m_Colors:
+    - _WidthHeightRadius: {r: 55, g: 20, b: 8, a: 0}
+  m_BuildTextureStacks: []
 --- !u!1 &1843438519
 GameObject:
   m_ObjectHideFlags: 0
@@ -2371,7 +2414,7 @@
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1861891630}
   m_CullTransparentMesh: 1
---- !u!21 &1949174212
+--- !u!21 &1887308933
 Material:
   serializedVersion: 8
   m_ObjectHideFlags: 0
@@ -2408,7 +2451,7 @@
     - _StencilWriteMask: 255
     - _UseUIAlphaClip: 0
     m_Colors:
-    - _WidthHeightRadius: {r: 24, g: 10, b: 4, a: 0}
+    - _WidthHeightRadius: {r: 50, g: 20, b: 8, a: 0}
   m_BuildTextureStacks: []
 --- !u!1 &1951601262
 GameObject:
@@ -2438,7 +2481,7 @@
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1951601262}
-  m_Enabled: 0
+  m_Enabled: 1
   m_EditorHideFlags: 0
   m_Script: {fileID: 11500000, guid: 1fc2a484125ad9c45977fdae7a8f3838, type: 3}
   m_Name: 
@@ -2828,3 +2871,4 @@
   - {fileID: 5975180139057207256}
   - {fileID: 1260657660}
   - {fileID: 1951601268}
+  - {fileID: 1564624329}
VRTK/Assets/01.Junil/Script/DebugTxtCall.cs
--- VRTK/Assets/01.Junil/Script/DebugTxtCall.cs
+++ VRTK/Assets/01.Junil/Script/DebugTxtCall.cs
@@ -59,7 +59,7 @@
 
             return;
         }
-        debugTxt.text = debug;
+        debugTxt.text += debug + "\n";
     }
 
     public void CallDebugTwo(string debug)
VRTK/Assets/01.Junil/Script/Test/TestScrpit.cs
--- VRTK/Assets/01.Junil/Script/Test/TestScrpit.cs
+++ VRTK/Assets/01.Junil/Script/Test/TestScrpit.cs
@@ -1,8 +1,11 @@
 
 using I2.Loc;
+using Oculus.Platform;
+using Oculus.Platform.Models;
 using System;
 using System.Collections;
 using System.Collections.Generic;
+using System.IO;
 using TMPro;
 using UnityEngine;
 using UnityEngine.InputSystem;
@@ -11,6 +14,17 @@
 
 public class TestScrpit : MonoBehaviour
 {
+
+    public enum Contents{
+        None,
+        Taekwondo,
+        Taichi,
+        KPop,
+        Modern
+    }
+
+    [SerializeField] private Contents nowContent;
+
     [Header("Effect")]
     public GameObject particalObj;
     public GameObject effectObj;
@@ -20,31 +34,38 @@
     public SpriteAtlas spriteAtlas;
     public Image image;
 
+    public bool isDownloaded = false;
 
     // Start is called before the first frame update
-    void Start()
+    void Awake()
     {
+        AppDataRepo.Instance.Builder();
+        nowContent = Contents.Taekwondo;
 
-        spriteAtlas = Resources.Load<SpriteAtlas>("Atlas/VRSpriteAtlas");
-        image.sprite = spriteAtlas.GetSprite("poomsae5");
+    }
+    private void Start() {
+        isDownloaded = false;
+        AssetFile.GetList().OnComplete(GetAssetBundleCallBack);
+        DebugTxtCall.Instance.CallDebug("AssetFile IN");
     }
 
     private void Update()
     {
         if (test[0].action.WasPressedThisFrame())
         {
-            DebugTxtCall.Instance.CallDebug("menu");
+            StartCoroutine(GetVRAssetBundle("go0003"));
+
         }
 
-        if (test[1].action.WasPressedThisFrame())
-        {
-            DebugTxtCall.Instance.CallDebug("menuBtn");
-        }
+        // if (test[1].action.WasPressedThisFrame())
+        // {
+        //     DebugTxtCall.Instance.CallDebug("menuBtn");
+        // }
 
-        if (test[2].action.WasPressedThisFrame())
-        {
-            DebugTxtCall.Instance.CallDebug("mod");
-        }
+        // if (test[2].action.WasPressedThisFrame())
+        // {
+        //     DebugTxtCall.Instance.CallDebug("mod");
+        // }
 
     }
 
@@ -56,5 +77,136 @@
 
     }   // SetCurrentTimeUI
 
-    
+    public void EndDownload(){
+        isDownloaded = true;
+
+        if(File.Exists(MMDefine.FULL_FILE_PATH + "vrtaekwondo_go0003")){
+            DebugTxtCall.Instance.CallDebug($"vrtaekwondo_go0003 EndDownload 있다");
+        }
+        else{
+            DebugTxtCall.Instance.CallDebug($"vrtaekwondo_go0003 EndDownload 없다");
+        }
+    }
+
+
+
+
+/// <summary>
+    ///     앱의 에셋파일 리스트를 각각 파싱하여 파일명을 찾고, AppDataRepo의 assetFileList 구성
+    /// </summary>
+    /// <param name="msg"></param>
+    private void GetAssetBundleCallBack(Message<AssetDetailsList> msg)
+    {
+        if (msg.IsError)
+        {
+            return;
+        }
+
+        string[] units;
+        string fileName;
+        int crucialIdx, i;
+
+        foreach (var ad in msg.GetAssetDetailsList())
+        {
+            units = ad.Filepath.Split("/");
+            fileName = "";
+            crucialIdx = i = 0;
+            for (i = 0; i < units.Length; i++)
+            {
+                if (units[i].CompareTo(MMDefine.PACKAGE_PATH) == 0)
+                {
+                    crucialIdx = i + 1;
+                    break;
+                }
+            }
+            if (crucialIdx < units.Length)
+            {
+                fileName += units[crucialIdx];
+            }
+            for (i = crucialIdx + 1; i < units.Length; i++)
+            {
+                fileName += "/";
+                fileName += units[i];
+            }
+            AppDataRepo.Instance.AddAssetFileUnit(new AssetFileUnitForm(ad.AssetId, fileName, ad.IapStatus, ad.DownloadStatus));
+        }
+
+        DebugTxtCall.Instance.CallDebug("AssetFileList End");
+
+        AppDataRepo.Instance.AssetFileListLoadComplete();
+    }
+
+
+    IEnumerator GetVRAssetBundle(string bundleName)
+    {
+        yield return null;
+        DebugTxtCall.Instance.CallDebug("GetVRAssetBundle IN");
+
+
+        GameObject tempInstructor_ = null;
+        AnimationClip tempClip_ = null;
+
+
+        string tempBundleName_ = string.Empty;
+        // { 현재 컨텐츠를 확인하고 관련 에셋번들 리스트 위치 번호를 가져오는 과정
+        int tempContentNum_ = -1;
+
+        if(nowContent == Contents.Taekwondo){
+            tempContentNum_ = MMDefine.VRTAEKWONDO;
+        }
+        else if(nowContent == Contents.Taichi){
+        }
+        else if(nowContent == Contents.KPop){
+        }
+        else if(nowContent == Contents.Modern){
+        }
+
+        // 이름 규칙에 맞게 여기서 만들기?
+        tempBundleName_ = MMHelper.GetAssetBundleName(tempContentNum_) + $"_{bundleName.ToLower()}";
+        DebugTxtCall.Instance.CallDebug(tempBundleName_);
+
+        if(File.Exists(MMDefine.FULL_FILE_PATH + "vrui_animplay")){
+            DebugTxtCall.Instance.CallDebug("vrui_animplay 파일이 있다");
+
+
+        }
+        if(File.Exists(MMDefine.FULL_FILE_PATH + "vrmap_lobby01")){
+            DebugTxtCall.Instance.CallDebug("vrmap_lobby01 파일이 있다");
+
+
+        }
+        
+        // 먼저 로컬에 강사 파일이 있는지 확인 후 없으면 다운
+        if(File.Exists(MMDefine.FULL_FILE_PATH + tempBundleName_)){
+            DebugTxtCall.Instance.CallDebug("파일이 있다?");
+
+
+        }
+        else{
+            DebugTxtCall.Instance.CallDebug("파일이 없다 당연");
+
+            DebugTxtCall.Instance.CallDebug("코루틴 시작"+ DateTime.Now);
+
+            // 관련 파일이 없어 에셋번들을 다운받아야할 경우
+            yield return StartCoroutine(MMHelper.DownloadAssetFile(tempBundleName_, EndDownload));
+            DebugTxtCall.Instance.CallDebug("코루틴 끝" + DateTime.Now);
+
+            // yield return isDownloaded == true;
+            // isDownloaded = false;
+
+            //yield return StartCoroutine(MMHelper.AsyncLoader(tempBundleName_));        
+
+        }
+
+       
+
+        // string[] tempName_ = tempBundleName_.Split("_");
+
+        // yield return StartCoroutine(MMHelper.GetAssetObjAsync<GameObject>(tempName_[0], tempName_[tempName_.Length - 1],
+        //     callBack => {
+        //         tempInstructor_ = callBack;
+        // }));  
+
+
+    }
 }
VRTK/Assets/VRRes/VRUI/00.Prefab/VRUI_KPop.prefab.meta
--- VRTK/Assets/VRRes/VRUI/00.Prefab/VRUI_KPop.prefab.meta
+++ VRTK/Assets/VRRes/VRUI/00.Prefab/VRUI_KPop.prefab.meta
@@ -3,5 +3,5 @@
 PrefabImporter:
   externalObjects: {}
   userData: 
-  assetBundleName: vrui/vrui_kpop
+  assetBundleName: 
   assetBundleVariant: 
VRTK/Assets/VRRes/VRUI/00.Prefab/vrui.prefab
--- VRTK/Assets/VRRes/VRUI/00.Prefab/vrui.prefab
+++ VRTK/Assets/VRRes/VRUI/00.Prefab/vrui.prefab
This diff is too big to display.
VRTK/ProjectSettings/EditorBuildSettings.asset
--- VRTK/ProjectSettings/EditorBuildSettings.asset
+++ VRTK/ProjectSettings/EditorBuildSettings.asset
@@ -5,13 +5,13 @@
   m_ObjectHideFlags: 0
   serializedVersion: 2
   m_Scenes:
-  - enabled: 1
+  - enabled: 0
     path: Assets/00.MAINSTREAM/Scenes/InitScene.unity
     guid: 5f4f9138efe79d1448dc037a021875be
-  - enabled: 1
+  - enabled: 0
     path: Assets/00.MAINSTREAM/Scenes/PlayScene.unity
     guid: 14ff1613d7e77bb4baa1d0c0a984254f
-  - enabled: 0
+  - enabled: 1
     path: Assets/01.Junil/Scenes/00.ModelIkTest.unity
     guid: dbe716d95baf0b1479d449c3ff9538fc
   - enabled: 0
VRTK/ProjectSettings/ProjectSettings.asset
--- VRTK/ProjectSettings/ProjectSettings.asset
+++ VRTK/ProjectSettings/ProjectSettings.asset
@@ -225,7 +225,7 @@
     iPhone: 0
     tvOS: 0
   overrideDefaultApplicationIdentifier: 1
-  AndroidBundleVersionCode: 167
+  AndroidBundleVersionCode: 181
   AndroidMinSdkVersion: 29
   AndroidTargetSdkVersion: 32
   AndroidPreferredInstallLocation: 0
Add a comment
List