Unity

UI Template 사용법

Dean83 2022. 3. 24. 22:33

* 기존 UI 탬플릿에서 범용기능을 포함한 DefaultPakage 형태로 변경함
    UI prefab뿐 아니라 범용으로 사용되는 스크립트들도 포함함

* 기본 설치항목 (textmeshpro) 설치 유무 검사 방법 찾아보기. (required는 using으로 아는데..)

* 추가된 태그 유지되는지 알아보기

1. 설명

    - 신규 프로젝트 생성시 UI 구성을 보다 빠르게 하기 위해 기본 UI들을 Prefab 화 하는 프로젝트 생성
    - 기본 UI들을 asset으로 묶어, 신규 프로젝트에서는 import 하여 사용
    - 각 UI 마다 태그명을 달리하여, 추후 일괄관리가 용이하도록함.
    - OpenSource 업로드 보다는, 우리가 사용하기 편하도록 개발
    - UI 뿐이 아니라, 전반적인 편의를 위한 Util 등도 추가. 
    - OVR, GVR, PVR에 관계없이, 범용적으로 사용할 수 있도록 개발
       => 즉 기본 raycaster 나 input module이 설정되어 있음.
       => 미리 설정할 수 없는 이유는, 프로젝트별로 OVR만 사용하더라도, PVR등을 모두
             import 해야만 하기에 불필요함.

* 필수 사항 : TextMesh Pro 가 설치되어 있어야 함

* 주의 사항 : TextMesh Pro를 미리 프로젝트에 추가 후 이 어셋을 추가할것.
                     
                    - 면접의신 에서 사용중인 LogManager 및 Utilities.cs 를 이미 추가한 경우
                       이 어셋을 import시, 두 항목을 제외하고 import 할것 (이 패키지에 포함되어 있음)
                    - EasyMovieTexture Asset을 미리 import 한 경우, 이 Asset 추가시 제외하고 import 할것
                       (이 패키지에 포함되어 있음)
                    - Font/Spoqa Han Sans Regular SDF.asset 이 이미 있는경우, 이 Asset import시
                       제외하고 import 할 것. (이 패키지에 포함되어 있음)

2. Asset 구조
    
- Resources -> Mint_DefaultPackage 에 하위폴더로 존재
    - Prefabs
       - 각 Prefab용도에 맟게 폴더 생성 후 배치
          => 예 : UI 폴더 하위에 UI 관련 Prefab 배치
          => 예 : Popup 폴더 하위에 Popup Prefab 배치
    - Scripts
       - 각 Prefab에 사용되는 스크립트들을 폴더별로 관리
          => 예 : UI 폴더 하위에, UI에서 사용하는 스크립트 추가
    - Sprites
       - 각 Prefab에 사용되는 Sprite 들을 폴더별로 관리
          => 예 :  UI 폴더 하위에 UI에서 사용하는 몇몇 Sprite 이미지들 위치

3. 구성 기능 및 각 기능별 사용법 (업데이트 필요)
     3.1. UI

            3.1.1. Grid_LayoutGroup : Grid Layout 

            3.1.2. TextMesh Body : TextMesh 중 본문 내용 

            3.1.3. TextMesh Header : TextMesh 중 제목

            3.1.4. UI BackButton : 취소 버튼 대응 (파란색 버튼)
                      => (면접의신 : 로그인 버튼과 비슷)

            3.1.5. UI CheckBox : 체크박스 버튼. 아이콘, text 포함
                      => (면접의신 : 자동로그인 체크박스와 비슷)

            3.1.6. UI CommonButton : 일반 버튼. 배경은 검은색 

            3.1.7. UI TopIconButton : 위 아이콘, 하단부 Text로 구성된 버튼
                      => (면접의신 : 학과 버튼과 비슷)

            3.1.8. UI InputFieldButton : 로그인 입력 필드 처럼, 아이콘 + textmesh 로 구성된 버튼
                      => (면접의신 : 로그인 입력필드 비슷)

            3.1.9. UI LeftIconButton : 좌측에 아이콘, 우측에 texhmesh로 구성된 버튼 

            3.1.10. UI MainBox : 검은색 배경을 가진, 가운데 페이지 느낌의 박스
                        => (면접의신 : 로그인 페이지와 비슷)

            3.1.11. UI OKButton : 주황색 배경을 가진 확인 대응 버튼
                        => (면접의신 : 버퍼링 창 종료버튼과 비슷)

            3.1.12. UI TopIconSubTextButton : 위 아이콘, 중단부 header text, 하단부 text로 구성된 버튼
                        => (면접의신 : NIPA 메인버튼인 면접강의 버튼과 비슷)

            3.1.13. UI RadioButton : 라디오 버튼 + Text 로 구성된 버튼. UIRadioButton 스크립트를 통해
                                                 다양한 제어가 가능. 

                        3.1.13.1. UIRadioButton 스크립트
                                       - SetSelectionDelegate : 선택, 미선택시 delegate 연결
                                       - ChangeSelection : 선택, 미선택을 강제로 적용
                                       - OnClick : 미리 prefab에 연결된 클릭이벤트 함수. 선택, 미선택 동작함

    3.2. Popup
           - 공용으로 사용할 팝업 prefab. 아이콘 변경 및 감춤, 버튼 표시 및 본문 text 변경 등 가능
           3.2.1. 구성
                     - no animation 아이콘, animation 아이콘 (UI circle)
                     - 본문 text
                     - 닫기버튼, 확인, 취소 버튼

           3.2.2. 사용 유의사항
                     InitializePopup 함수를 호출하여 팝업 세부 설정 가능하며, 각 기능별 세팅 함수 별도 존재
                        확인 취소등 버튼의 경우, delegate 함수 설정필요함. 


    3.3.  Keyboard
            - 공용 키보드 Prefab.                     - 

    3.4. Login
           - 회원가입, 로그인, 비밀번호 찾기, 자동로그인, 개인정보 동의가 있는 로그인 Prefab
           3.4.1. 구성
                     3.4.1.1. 로그인
                                  - 아이디 입력 필드
                                  - 비밀번호 입력 필드
                                  - 자동로그인 체크박스
                                  - 로그인 버튼
                                  - 회원가입 버튼
                                  - 비밀번호 찾기 버튼
                                  - 오류 메세지 표시 Text

                        3.4.1.1.1. 기능
                                        - 로그인 버튼 클릭시, 아이디 (이메일) 입력 검증 및 비밀번호 입력 여부 판단
                                        - 비밀번호 찾기/회원가입 각 버튼 클릭시 해당 UI 표시
                                        - 오류 발생시 붉은 글씨의 에러 메세지 출력
                                        - 자동로그인 체크박스 체크/체크해제 표시 기능 

                        3.4.1.1.2. 사용 유의사항
                                       - 자동로그인 체크박스 유무는 LoginManager 스크립트 -> IsAutoLoginChecked
                                        - 로그인 버튼의 클릭 이벤트 함수 연결을 추가로 해주어야 함

  
                     3.4.1.2. 비밀번호 찾기
                                  - 아이디 입력 필드
                                  - 찾기 버튼
                                  - 닫기 버튼
                                  - 오류 메세지 표시 Text

                        3.4.1.2.1. 기능
                                        - 찾기 버튼 클릭시 아이디 (이메일) 입력 검증
                                        - 오류 발생시 붉은 글씨의 에러 메세지 출력
                                        - X 버튼 클릭시 닫음
                                        - 찾기버튼 클릭시, 오류가 없다면 이메일 전송 안내 팝업창 표시 후 닫기
                                           => 주석처리 되어있음. 실제 서버 연동 코드 추가 작성시 개발필요

                        3.4.1.2.2. 사용 유의사항
                                        - 찾기 버튼의 클릭 이벤트 함수 연결을 추가로 해주어야 함

                     3.4.1.3. 회원가입
                                  - 아이디 입력 필드
                                  - 비밀번호 입력 필드
                                  - 비밀번호 확인 입력 필드
                                  - 회원가입 버튼
                                  - 닫기 버튼
                                  - 오류 메세지 표시 Text

                        3.4.1.3.1. 기능
                                        - 회원가입 버튼 클릭시 아이디 (이메일), 비밀번호, 비밀번호 일치 입력 검증
                                        - 오류 발생시 붉은 글씨의 에러 메세지 출력
                                        - X 버튼 클릭시 닫음
                                        - 회원가입 버튼 클릭시, 오류가 없다면 환영메세지 팝업창 표시 후 닫기
                                           => 주석처리 되어있음. 실제 서버 연동 코드 추가 작성시 개발필요

                        3.4.1.3.2. 사용 유의사항
                                        - 회원가입 버튼의 클릭 이벤트 함수 연결을 추가로 해주어야 함

    3.5. Log모듈
           - 면접의 신에서 사용중인 로그모듈
            
           3.5.1. 사용 유의사항
                     - 로그 작성전, 프로그램 진입부에서 Initialize 함수 호출 필요 (로그 저장위치 설정)

    3.6. Utilities
           - 면접의 신에서 사용중인 유틸 기능중 일부

    3.7. PrivacyPopup 
           - 이용약관 선택 팝업창

           3.7.1. 사용 방법
                     동의, 동의안함 결과는 PrivacyPopupCanvas -> Privacy Inspector에 있는
                         PrivacyManager의 IsAgree 변수로 알 수 있음

                      - 이용약관 창 뒤의 오브젝트 클릭방지를 위해, m_pagecanvasAlpha 에 CanvasGroup 설정필요

                      - 창을 닫을경우 이전에 표시한 object를 다시 켜기 위해, PrivacyManager
                         m_beforeObject 에 코드로 값을 배정해야함 (옵션)

                      - 표시될 글자 내용을 추가, 삭제하기 위해서는, PrivacyPopupCanvas -> Privacy
                         ->Scroll View -> Viewport -> Rect 안에 있는 textmesh 추가, 삭제필요

                      - 스크롤 속도 조절 : PrivacyPopupCanvas -> Privacy ->Scroll View
                                                   -> Scrollbar Vertical 의 Inspector 최하단
                                                   -> Scroll View Controller의 Scroll Speed 설정


    3.8. Zenject_and_Service  
           - Zenject 및 범용적으로 사용가능한 서비스 모음 (arr 파일, dll 파일들 포함)
           - https://mintpot.synology.me:30000/boards/2/topics/265 참조
           3.8.1. 구성
                      3.8.1.1. Android Directory Service : 안드로이드 경로 관련
                      3.8.1.2. AudioDataManager : 음성인식, 녹음 관련
                      3.8.1.3. AWSUploaderService : AWS 업로드 서비스 관련.
                      3.8.1.4. FadeEffectService : fade 효과
                      3.8.1.5. SqliteDatabaseService : DB 접속 관련 서비스 (로컬)
                      3.8.1.6. AndroidBinderService : 안드로이드 내부 정보를 가져오기 위한 서비스
                      3.8.1.7. WifiCheckService : 인터넷 연결유무 체크 서비스. 3.10. 참조
                      3.8.1.8. SharedDataService : 기존 DataContainerService 처럼, 스크립트에 관계없이
                                                                 공용으로 사용할 Data 저장 및 활용
                                                                 - 현재는 녹음파일 list 변수만 있음

                                  3.8.1.8.1. GetRecordingFilePath : 녹음된 파일 리스트에서 원하는 index의
                                                                                   위치 리턴. 안드로이드의 경우 앞에 file://을 붙임

           3.8.2. 사용 유의 사항
                     Zenject 사용을 위해 각씬 Hierarchy -> 마우스 우클릭 -> Zenject -> Scene Context 추가
                      - 어플리케이션의 Project -> Assets -> Resources -> ProjectContext.prefab이 있어야 함

                      - 그외 각 서비스 사용법은 코드 참조 혹은 면접의신 참조
                      - 서비스 중 pico sdk를 사용하는 경우는 주석처리하였음 (AndroidBinderService)
                      - 3.8.1.2. AudioDataManager 의 무음구간 체크 유무를 설정할 수 있음. 체크하지 않을경우,
                                      Decibel 값만 갱신함


    3.9. MintDefaultOption
           - 기존 MintOption 중, 범용적으로 사용가능한 옵션만 추가한 버전

           3.9.1. 구성

                     3.9.1.1. 빌드옵션
                                  - Use Wifi 체크박스 : wifi 사용여부 체크박스
                                     * 실제 사용을 위해서는 해당 변수를 통한 코드 구현 필요
                                  - Script Missing 체크 버튼 : 각 씬별 스크립트 missing 부분 체크

                     3.9.1.2. 로그옵션
                                  - Console Enable 체크박스 : 로그내용을 console에 작성여부
                                  - Current Log Level : Common / Error / No write로, 로그 작성 레벨 설정
                                  - Save File Period : Day / Hour / Minute / Second로 로그 파일 작성 주기

                     3.9.1.3. STT옵션
                                  - Use Naver STT : 네이버 STT 사용여부
                                  - Naver App ID : 네이버 STT 아이디
                                  - Google STT Info : 구글 STT 서버 주소

                     3.9.1.4. AWS옵션
                                  - 기존 면접의 신과 동일

    3.10. Wifi 연결 (인터넷 연결 체크) 서비스
             - 기존 면접의신 기능인 wifi 체크 기능을 서비스로 추출. while문을 통해 무한으로 wifi 체크를 함
            
 - wifi 연결 체크 및 ping 체크 (To google)을 진행함   

             3.10.1. 사용법  
                         - 사용할 스크립트에서 Inject를 통해 IWifiCheckService를 Injection 받아야 함
                         - Awake 함수 등에서 IWifiCheckService의 이벤트 등록 필요
                            - m_wifiErrorEventHandler : wifi 연결 실패시, string 매개변수와 함께 이벤트 발생
                               -> 이벤트가 한번 발생했다면, 연결 성공이 이루어질때까지 다시 발생치 않음
                            - m_wifiConnectedEventHandler : wifi 연결 성공시 이벤트 발생

                         - Initialize 함수 인자값으로 MonoBehaviour 전달
                         - StartWifiCheck 함수 호출
                            - wifi 연결 체크 기능 켜기
                            - 인자값으로 체크 주기 시간, 타임아웃 시간 설정가능 (기본 1초)
                         - StopWifiCheck 호출 (Scene 이동시, 중지를 원할시)
                            - wifi 연결 체크 기능 끄기

    3.11. 영상재생 컨트롤 팝업창
             - 기존 면접의신에서 사용하던 영상 팝업창 및 seek bar 기능이 추가된 팝업창 구현
             - 기존 팝업창, Seek Bar 팝업창을 골라서 띄울수 있음 (동시도 가능)
                - VideoControlPopupManager -> SetPopupType를 통해 설정가능
                    - COMMON_MENU : 기존 팝업창
                    - SEEKBAR_MENU : SeekBar 팝업창
                    - ALL_MENU : 위의 두가지 팝업창 동시

             3.11.1. 기존 팝업창 : 상호작용 콘텐츠에 적합
                         - 타이머 : 기존 면접의신 답변 타이머 UI
                         - 마이크 : 기존 면접의신 데시벨에 따른 목소리 입력 UI
                         - 볼륨 Up : 기기 볼륨 증가. pico의 경우 별도 코드 수정필요
                         - 볼륨 Down : 기기 볼륨 감소. pico의 경우 별도 코드 수정 필요
                         - 다시듣기 : 영상 처음부터 다시 재생. 부가 기능은 코드 구현 필요
                         - 홈으로 : 홈으로 이동 
                         - 뒤로가기 : 뒤로가기 이동
                         - Header Text : 표시할 텍스트 

                  3.11.1.1. 사용법
                                 - 홈으로 와 뒤로가기는 하나만 사용하면 되므로, 실제 사용시 UI 감춤, 배경길이 조절등 필요
                                 - 타이머, 마이크 UI는 쓰지 않을경우 UI 감춤 및 배경 크기 조절 필요
                                 - 실제 사용처에서 팝업창 on, off 구현필요. 3.12 영상재생 기능에는 구현되어 있음
                                 - 팝업창에서 시선이 밖으로 나갈경우, 팝업창 자동 꺼짐 기능 있음
                                 - 버튼 Delegation 등록을 통해 각 버튼 클릭시 콜백함수 등록 가능
 
             3.11.2. SeekBar 팝업창 : 시청형 콘텐츠에 적합
                         - 10초 뒤로 : 영상 10초 뒤로 이동 재생
                         - 재생/일시정지 : 영상 재생/일시정지
                         - 멈춤 : 영상 재생 중지
                         - 10초 앞으로 : 영상 10초 앞으로 이동 재생
                         - Seek Bar 클릭 : 클릭동작을 통해 원하는 위치로 이동하여 영상재생
                         - 영상재생 시간 표시 : 현재 재생중인 시간 표시
                         - Header Text : 표시할 텍스트

                  3.11.2.1. 사용법
                                 - 버튼 Delegation 등록을 통해 각 버튼 클릭시 콜백함수 등록 가능
                                 - 영상 재생 시작시, max seek value 설정 필요
                                 - 영상 재생중, seek value 변경을 주기적으로 할필요 있음
                                 - 10초 이동은, 10초 뿐 아니라 원하는 시간으로 변경 가능
                                    (텍스트 변경 및 해당 버튼 클릭 이벤트에 인자값 수정 필요)
                                 - 실제 사용처에서 팝업창 on, off 구현필요. 3.12 영상재생 기능에는 구현되어 있음
                                 - 팝업창에서 시선이 밖으로 나갈경우, 팝업창 자동 꺼짐 기능 있음
                                 - 사용하지 않는 버튼의 경우 UI 및 길이 조절 필요

    3.12. 영상재생 기능 (2D, VR영상) 
              - 2D 영상과 VR 영상 재생기능, 음성 녹음기능, 버퍼링 팝업창 표시 포함
              - 임의로 구현된 VideoPropertyModel 클래스의 맴버변수 항목을 이용하여 영상재생
              - 따라서 시나리오에 따라, 코드가 대폭 수정될 가능성이 있음. 
                 (영상 재생 위치 가져오는 부분들)
              - 2D, VR 영상재생 스크립트의 공통기능은 부모 스크립트인 ParentVideoPlayer에 기능구현 되어 있음
              - 녹음시, 마이크, 답변타이머 UI 동작여부, 무음구간 체크 유무 설정 가능함.
              - ParentVideoPlayer 스크립트에서, 대부분의 기능 동작함.

              3.12.1. VideoPropertyModel
                          - 영상재생에 필요한 정보를 담은 클래스로, 임의로 구성함
                          - 재생 시나리오 및 DB 설계등이 변경될 시, 2D, VR 영상 재생 스크립트 수정 필요함. 
                          - List<VideoPropertyModel> ChildVideoList : 꼬리물기 자식 영상 리스트
                          - VideoFullPath : 영상 재생 full path
                          - SeekTime : 영상 재생 후, 일정시간동안 대기를 위한 SeekTime. 설정 안해도 무방함
                          - VideoPlayType : 영상 재생 후 대기에 대한 타입 설정
                             - NO_WAIT : 영상재생 후 바로 다음동작 진행
                             - WAIT_SEEKTIME : 위의 SeekTime 만큼 대기 후 다음동작 진행
                             - WAIT_PLAY_END : 영상재생이 종료 된 후 다음동작 진행
                          - RecordingType : 해당 영상의 녹음 타입 설정
                             - NO_RECORD : 음성녹음 진행치 않음
                             - NO_STT_RECORD : STT 가 아닌 일반 녹음 진행
                             - STT_RECORD : STT 녹음 진행
                          - List<string> STT_KeywordList : STT 녹음에 사용될 키워드 모음
                             - 부모 영상 : 자식영상의 모든 키워드 포함
                             - 자식 영상 : 부모 영상의 키워드 중, 본인에 해당하는 키워드만 포함
                          - IsNeedToPlayChildVideo : STT 결과후, 매칭되는 자식영상 재생여부 설정
                             - 면접의 신은 자식영상을 재생, SK 직무교육은 재생치 않으므로 둘다 만족하기 위함. 

                    3.12.1.1. 사용법 
                                    - 이 클래스의 세팅을 통해 다양한 영상재생 프로세스 구현가능
                                    - 기존 면접의 신과 다르게, 각 영상별 녹음 여부 설정 가능
                                    - 각 영상별 꼬리물기 자 질문 영상 재생여부 설정가능

              3.12.2. 2D
                           
- TwoDVideo_Example 스크립트 참조
                          - List에 담긴 영상 갯수만큼 재생
                          - VideoPropertyModel 맴버변수 설정에 따라, 녹음 진행 여부, STT 사용여부 등 동작
                          - 버퍼링 팝업창 연동 되어 있음. (단, 녹음중 버퍼링 발생 여부 판단은 하지 않음)
                          - VideoPropertyModel 맴버변수에 설정된 꼬리물기 자 질문 영상 재생 가능
                          - 영상 종료시, VideoFinishedType 에 따른 종료 형식 설정함
                             - ALL_VIDEO_PLAYED : 모든비디오 재생 후 정상종료
                             - BUFFERING_FINISH : 버퍼링 창 -> 확인버튼 클릭으로 인한 종료
                             - BACKBUTTON_FINISH : 영상 팝업창 뒤로가기 클릭 후 종료
                             - GOHOME_FINISH : 영상 찹업창 홈으로 클릭 후 종료

              3.12.3. VR (듣기 영상 재생 기능 추가 2020.06.24 댓글에 내용 추가)
                           
- ThreeDVideo_Example 스크립트 참조
                          - 2D 영상 기능 구현 + @ 로 구성되어 있음
                          - 버퍼링 감소를 위한 다음영상 미리 로딩 기능 구현 (2D 영상은 해당기능 없음) 
                          - 영상 전환시, 디졸브 효과 구현됨 (2D 영상은 디졸브 없음)

              * 녹음파일의 경우, 3.8.1.8. 에 명시한 SharedDataService의 녹음파일
                 List에 항목을 담음. (ParentVideoPlayer->RecordingFinished함수)
                          

    3.13. 버튼 강조효과 (sprite 변경 필요 - 가로 직사각형
              - 일반적인 버튼 강조효과
              - ButtonEmphasis 스크립트를 활용하여, 각 버튼 이벤트 연결하여 사용
              - 버튼의 위치, 크기를 파악하여, 강조효과 이미지(테두리)를 배치함.
              - 정사각형, 가로 직사각형, 세로 직사각형 sprite가 있음
                 - 가로 직사각형 Sprite 교체 필요. 현재는 가로형 이미지가 없이, 정사각형을
                    옆으로 늘린 형태라 사이즈가 맞지 않음.

              3.13.1. 함수 구성
                          - OnButtonPointerEnter_ChangeFontSize
                             - 버튼의 PointEnter 에 연결
                             - 인자값 : TextMeshProUGUI
                             - PointEnter시 폰트 사이즈 2 증가
                             - 인자값으로 받은 TextMeshProUGUI를 내부 list 변수에 add

                          - OnButtonPointerExit_ChangeFontSize
                             - 버튼의 PointExit 에 연결
                             - 인자값 : TextMeshProUGUI
                             - PointExit시 폰트 사이즈 2 감소
                             - 내부 list 변수에서 인자값으로 받은 TextMeshProUGUI를 remove

                          - OnButtonPointerEnter_ChangeIconSize
                             - 버튼의 PointEnter 에 연결
                             - 인자값 : 버튼의 아이콘 Image
                             - PointEnter시 이미지 사이즈 2 증가
                             - 인자값으로 받은 Image를 내부 list 변수에 add

                          - OnButtonPointerExit_ChangeIconSize
                             - 버튼의 PointExit 에 연결
                             - 인자값 : 버튼의 아이콘 Image
                             - PointEnter시 이미지 사이즈 2 감소
                             - 인자값으로 받은 Image를 내부 list 변수에서 remove

                          - OnSquareButtonPointerEnter_Emphasis
                             - 정사각형 버튼 PointEnter 에 연결
                             - 인자값 : 적용할 버튼 GameObject
                             - PointEnter시, 적용할 버튼의 위치, 사이즈를 고려하여
                                정사각형 흰 테두리를 보여줌

                          - OnHorizonLongButtonPointerEnter_Emphasis
                             - 가로 직사각형 버튼 PointEnter 에 연결
                             - 인자값 : 적용할 버튼 GameObject
                             - PointEnter시, 적용할 버튼의 위치, 사이즈를 고려하여
                                가로 직사각형 흰 테두리를 보여줌

                          - OnVerticalLongButtonPointerEnter_Emphasis
                             - 세로 직사각형 버튼 PointEnter 에 연결
                             - 인자값 : 적용할 버튼 GameObject
                             - PointEnter시, 적용할 버튼의 위치, 사이즈를 고려하여
                                세로 직사각형 흰 테두리를 보여줌

                          - OnButtonPointerExit_Emphasis
                             - 정사각형, 세로 직사각형, 가로 직사각형 테두리를 감춤

                          ResetAllEmphasis
                             - text 크기, 아이콘 크기를 전체 초기화 하는 함수
                             - 보통 point enter 후 pointer exit가 호출되기에 초기화가 진행됨
                             - 그러나 컨트롤러 뒤로가기 등으로 인해 pointer exit가 진행되지 않고 
                                다음동작을 할 경우, text나 아이콘 크기가 커진 상태로 남게됨.
                             - 따라서 뒤로가기 함수등에서 이 함수를 호출하여 전체 초기화 진행필요.

    3.14. PPT 뷰어 기능
              - SK 직무교육에서 사용하던 PPT 뷰어 기능
              
             3.14.1. 기능
                         - 좌, 우 페이지 이동버튼 기능 추가
                         - 기존처럼 마우스 클릭을 통해 페이지 탐색 가능
                         - 위의 두 기능은 택1 하여 동작 가능
                            - 좌, 우 페이지 이동버튼 사용시, 단순 클릭을 통한 페이지 이동은 안됨
                            - 클릭을 통한 페이지 탐색의 경우, 좌, 우 페이지 이동버튼이 감춰짐
                         - 기본적으로 PPT Index를 현재페이지 index / 전체페이지 index로 표시하나,
                           사용하지 않을경우, Text UI를 감출 필요가 있음

             3.14.2. 사용법
                         - PPTImageViewer->Initialize 호출하여, 페이지 넘김 이동 타입 설정
                         - PPTImageViewer->SetPPTImages 에 표시할 PPT Sprite 리스트 넘김
                         - 상황에 맞게 PPTImageViewer->PPTImage_VisibleControl 을 통해 보임/감춤 조절
                         - 필요시,  PPTImageViewer->GetCurrentPPTIndex를 통해 현재 PPT index를 알수 있음
                         - 마우스 클릭으로 페이지 이동시, 사용 SDK에 따라 PPTImageViewer->Update 함수 코드 수정 필요

    3.15. 배터리 정보 표시 기능
              - prefab을 Scene에 추가시, Scene이 로딩되면 자동실행됨
                - Coroutine을 통해 배터리 정보를 1분 단위로 갱신
              - 해당 Object가 꺼질경우 (OnDisable) 배터리 정보 취득 중지함

    3.16. Focus 데이터 
              - 면접의 신 시선처리 기능
              - Object UI 개수를 늘리면, 추적하는 Object도 증가하며, 계산됨
              
              3.16.1. 사용법 : FocusDataManager 스크립트
                          - StartSearchingFocusData : 시선처리 데이터 분석 시작
                          - EndSearchingFocusData : 시선처리 데이터 분석 종료
                          - GetPercentData : float[] 으로 구성된 결과데이터
                             => * 100 을 해야 퍼센트가 되며, 배열 갯수는 시선처리 object 개수임
                          - GetOutOfFocusTimer : 시선처리가 벗어난 시간
                          - SetResetOutOfFocusTimer : 시선처리가 벗어난 시간 초기화
                          - GetCurrentFocusObjectName : 현재 시선이 가있는 object 이름

    3.17. 목소리 크기 및 타이머 UI 
              - 면접의 신 목소리 크기 및 타이머 UI

             3.17.1. 사용법 : AudioRecordingUI 스크립트
                         - UpdateDecibelDataGraph : 데시벨을 입력받아, 목소리 크기 UI 깜박임 조절 
                         - DecibelDataGraphVisibleControl : 목소리 크기 UI 보임/감춤
                         - UpdateAnswerTimer : 타이머 UI 표시 변경
                            - 인자값으로 현재 초 전달필요 (예 : 1, 2.....)
                            - Text에는 90초, 89초 ... 식으로 역카운트 됨
                         - AnswerTimerVisibleControl 타이머 UI 보임/감춤
                         - SetAnswerTimerText : 답변 타이머 UI의 Text를 임의로 변경. 단, 
                            UpdateAnswerTimer 호출시 자동으로 x초 로 변경됨
                         - ChangeUIColor : 답변시간 타이머, 목소리크기 배경색 변경 (회색/핑크색)

    3.18. EffectSound 
              - 클릭, Point Enter, Send, Back 항목에 대한 EffectSound 출력
              - 필요하다면 추가 필요. 

             3.18.1. 사용법
                         - UI 추가 후 각 이벤트 별 콜백함수 등록 (예 : 클릭, PointEnter..)
                         - EffectSoundManager->PlayEffectSound 함수 호출하여 원하는 효과음 재생
                            -> 인자값 : - EffectSoundType
                                               - SOUND_CLICK 
                                               - SOUND_BACK 
                                               - SOUND_POINT_ENTER 
                                               - SOUND_SEND
                                             - volumn : 재생 볼륨. 기본값 0.3

    3.19. PlayAudioFile 
              - 녹음파일 재생 스크립트. 사실상 소리 파일 재생 기능 담당
              - PlayAudioFileManager 스크립트 사용

             3.19.1. 설명
                         - Initialize : 재생 Audio 완료시 호출할 delegate 설정 및 초기화
                         - PlayAudioFile : 파일 fullpath 인자값을 받아, 재생함.
                         - PauseAudioFile : 재생중인 Audio 일시정지
                         - ResumeAudioFile : 일시정지 중인 Audio 이어 재생
                         - StopAudioFile : 재생중인 Audio 정지

             3.19.2. 사용법
                         - Initialize 함수 호출하여, Audio 재생완료시 delegate 등록 및 초기화
                         - PlayAudioFile 인자값에 재생할 audio fullpath 입력시 재생됨
                         - 필요에 따라 (예 : 버퍼링시) Pause, Resume, StopAudioFile 호출
                         - Audio 재생 완료 후 호출되는 delegate 함수에서 후속 동작

             * 기존에 없던 pause, resume 등을 넣은 이유
                 - 영상 버퍼링등 필요에 따라 음성 또한 pause, resume 가능토록 구현

* 필요에 따라 UI 및 기능 추가 필요. 

4. 전반적인 사용방법
    - 첨부파일의 Mint_DefaultPackage.unitypackage 를 다운로드
    - 프로젝트에서, Import
    - 사용할 SDK에 맞는 카메라, input module 등 설정 필요
    - 버튼의 경우 이벤트를 필요에 따라 추가 또는 연결   
    - 배경색을 바꾸길 원할경우, Sprite에서 변경시, 
      => 기본 버튼색상 일괄변경 가능
      => 기본 background 색상 일괄변경 가능

 

 

'Unity' 카테고리의 다른 글

Zenject Service 사용법  (0) 2022.03.24
Zenject Factory 사용법  (0) 2022.03.24
코드난독화 어셋 사용법  (0) 2022.03.24
StopCoroutine, StartCoroutine 관련  (0) 2022.03.24
Pico VR 기기 컨트롤러 UI 연동  (0) 2022.03.24