2019년 9월 23일 월요일

Unity - Firebase 연동 (Analytics, AdMob)

버전 : firebase_unity_sdk_6.5.0.zip

게임에서 통계 측정 및 광고 추적을 위해 Firebase 을 연동한다.
앞서 [Unity - GPGS 와 Admob 연동 및 배포 준비 작업] 연동 이후에 작업을 진행 한다.

유니티에 Firebase를 연결하는 정보는 다음 사이트에 정리되어 있다.
https://firebase.google.com/docs/unity/setup?hl=ko#available_libraries
- ADmob 연동은 별도의 unitypackage 설치 없이 웹 연결을 통해 진행 된다.


1. Firebase 패키지 추가

1-1. 프로젝트 생성

  • 홈페이지 접속
  • [프로젝트 만들기] 버튼을 선택해 생성 시도
  • 생성되어 있는 프로젝트 중 연동에 필요한 프로젝트 선택
  • 약관 선택 후 [계속]
  • "Google 애널리틱스" 사용 설정은 On 으로 지정
    - 애널리틱스 위치 : 대한 민국
    - 약관 설정
  • [계속] 버튼을 선택하면 프로젝트가 생성 됨

1-2. 앱을 추가하여 시작

  • 좌측 [Project Overview] 선택 해 Home 으로 이동
  • 유니티 아이콘을 선택해 "앱을 추가하여 시작" 진행
  • Unity 앱에 Firebase 추가 시작
    - iOS와 Android 동시 출시의 경우 둘다 등록 해야 됨
    - Register as Android app 체크
    - 패키지 이름 : 설정한 패키지 이름 작성
    - 앱 닉네임 : 게임 이름 작성
  • [다음] 버튼으로 설정 이동

1-3. 구성파일 다운로드

  • google-services.json 파일을 다운로드
  • 다운로드 한 파일을 unity 프로젝트 Asset폴더 Root로 이동
    (Assets 폴더 내의 원하는 위치에 Firebase 구성 파일을 배치 가능)
  • [다음] 버튼으로 설정 이동

1-4. Firebase SDK 추가

  • 유니티 패키지를 다운받음
  • firebase_unity_sdk_6.5.0.zip 버젼을 다운로드하여 진행
  • [다음] 버튼으로 설정 이동

1-5. 완료 단계

  • 설정이 완료 됨.
  • "콘솔로 이동" 을 선택해 설정을 종료

1-6. Project Overview 정보 

  • 페이지의 앱 설정에서 등록된 앱 정보가 유니티가 아닌 안드로이드로 표시 된다. 
  • 정보를 확인 하면 통신을 대기 하는 상태가 표시 된다.
  • 이 표시는 Analytics SDK를 추가해 빌드를 한 뒤 실행을 한 번 해야 처리 된다.
  • 정상 처리 시 - "앱에 Firebase를 추가했습니다." 라고 표시된다.
  • 우선은 현 상태로 유지하고 아래 항목을 진행 한다.

1-7. SHA-1 인증서(번외, 필요시)

  • 안드로이드 앱 등록 시 SHA-1 디버그 인증서를 요구 한다. 
  • 디버그는 인증서는 debug.keystore 파일을 의미하고, 보통 C:\Users\user\.android 폴더에 위치한다. 
  • 명령어 프롬프트를 이용해 자바가 설치된 bin 폴더로 이동 
  • keytool -exportcert -list -v -alias androiddebugkey -keystore %USERPROFILE%\.android\debug.keystore 명령어를 입력하면 값을 얻을 수 있다.
    (디버그에는 password가 없으므로 Enter 키 입력)
  • 실제 SHA 인증서 지문 = GooglePlayConsole에서 업로드 증명서의 SHA-1 값을 사용 하면 된다. 


2. 사전 준비

2-1. 데이터 준비

  • SDK 다운로드 : URL
  • 유니티의 .Net 버전을 4.x 로 설정
  • 다운로드한 SDK에서 dotnet4 폴더 unitypackage 를 확인
  • 애널리틱스를 사용하기 위해 FirebaseAnalytics.unitypackage 파일 저장

2-2. Unity 프로젝트에 Firebase 추가

  • 정보 : https://firebase.google.com/docs/unity/setup?hl=ko
  • 1~4단계는 진행한 "Firebase 패키지 추가"와 동일한 내용
  • 5단계 부터 진행한다.
  • FirebaseAnalytics.unitypackage 파일 import 진행
    (무언가 확인 윈도우가 뜰 때 yes 했음)

2-3. Google Play 서비스 버전 요구사항 확인

        Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => {
            var dependencyStatus = task.Result;
            if (dependencyStatus == Firebase.DependencyStatus.Available)
            {
                // Create and hold a reference to your FirebaseApp, 
                // FirebaseApp에 대한 참조를 작성하고 유지하십시오.
                // where app is a Firebase.FirebaseApp property of your application class.
                // 여기서 app은 애플리케이션 클래스의 Firebase.FirebaseApp 속성입니다.

                //   app = Firebase.FirebaseApp.DefaultInstance;

                // Set a flag here to indicate whether Firebase is ready to use by your app.
                // Firebase를 앱에서 사용할 준비가되었는지 표시하려면 여기에 플래그를 설정하십시오.
                Debug.Log("Firebase 초기화 완료");
            }
            else
            {
                UnityEngine.Debug.LogError(System.String.Format(
                  "Could not resolve all Firebase dependencies: {0}", dependencyStatus));
                // Firebase Unity SDK is not safe to use here.
            }
        });
  • 앱 시작 시 AnalyticsManager를 생성하고 "Start()" 에 코드 추가


3. Analytics 추가

3-1. 유니티 설정

  • 이벤트 로그 등에 대한 내용 작성이 필요
  • >>>작성중<<<


4. ADMob 연동

4-1. 연동 방법

  • Firebase 페이지 이동
  • 연결하려는 프로젝트를 선택해 페이지 이동
  • 좌측 상단의 Project Overview 우측에 있는 "톱니바퀴"(설정) 버튼 선택
  • 프로젝트 Settings 화면에서 [통합] 페이지를 선택
  • ADmob 의 앱 설정에 firebase 연결 버튼이 없다.
    (현재 위 설정을 적용 못하고 있음)



2019년 9월 19일 목요일

국비 교육 : 게임 프로그래밍 131일

131일 차 교육 내용 메모를 옮겨 본다.
게임 엔진 유니티를 이용한 VR 포트폴리오 작업을 진행했다.


싱글턴을 이용한 매니저 제작
- 데이터 관리를 위한 table loader
- Scene 이동을 위한 Scene controller


이전과 마찬가지로 교육 시간에 포트폴리오 작업을 진행한 것 같다.
메모 내용으로 보아 관리 클래스를 제작한 것으로 보인다.

국비 교육 : 게임 프로그래밍 130일

130일 차 교육 내용 메모를 옮겨 본다.
게임 엔진 유니티를 이용한 VR 포트폴리오 작업을 진행했다.


네비매쉬 에이젼트의 SetDestination은 한번 지정하면 지정된 이동 값으로 목표 지점까지 이동한다.
즉 apdote에 넣을 필요가 없다. 1회 입력 시 저장해두고 이동

네비매쉬 에이젼트를 isStopped = false / true 로 끄고 켤 수 있다.


교육 시간에 포트폴리오 작업을 진행한 것 같다.
메모 내용으로 보아 네비매쉬를 이용한 Monster 이동 처리 작업을 진행한 것 같다.

2019년 9월 18일 수요일

국비 교육 : 게임 프로그래밍 129일

129일 차 교육 내용 메모를 옮겨 본다.
게임 엔진 유니티를 이용한 VR 포트폴리오 작업이 진행됐다.


UI 정보 출력
- 몬스터 머리 위 UI 띄우기
- 월드 좌표를 이용해 UI Scale 되도록 캔버스를 구성해 화면에 띄운다.


메모 내용으로 보아 별도의 교육 없이 VR 포트폴리오 작업을 진행한 것 같다.
UI를 이용해 몬스터 이름 생성하기 기능을 구현한 것 같다.

국비 교육 : 게임 프로그래밍 128일

128일 차 교육 내용 메모를 옮겨 본다.
게임 엔진 유니티를 이용한 VR 포트폴리오 작업이 진행됐다.


포트폴리오 작업
- 피격 시 처리, 공격 행동 등에 대한 개인 작업 진행.


이외 작성된 교육과 관련된 메모는 없는 것으로 보아서, 온종일 포트폴리오 작업을 진행한 하루였던 것 같다.

2019년 9월 17일 화요일

국비 교육 : 게임 프로그래밍 127일

127일 차 교육 내용 메모를 옮겨 본다.
게임 엔진 유니티의 오디오 믹서에 대한 내용이 메모로 작성되어 있다.


오디오 믹서의 FindMatchingGroups(" ~ ");
- " ~ "에 작성된 오디오 그룹의 본체 및 하위를 배열화한다.
- ~ 에는 group의 name이 작성되며, 작성된 group을 기준으로 하위 그룹을 배열로 만드는 식이다.

사운드 믹서에서의 변수 등록을 주의하자


ToString("0,##"); 형태로 표시되는 정보를 제어할 수 있다.


이처럼 사운드 믹서에 대한 짧은 내용과 String 처리에 대한 내용이 메모로 작성되어 있었다.
별도로 작성된 Sample 프로젝트도 없는 것으로 보아 남은 시간 VR 포트폴리오를 진행하지 않았나 싶다.

국비 교육 : 게임 프로그래밍 126일

126일 차 교육 내용 메모를 옮겨 본다.
교육은 했지만, 작성된 메모 내용이 없다.


아마도 VR 포트폴리오 작업을 진행했을 것 같다.

메모와 샘플 프로젝트가 없는 것으로 보아 각자 포트폴리오를 작업하는 것으로 교육을 진행한 것으로 생각된다.


국비 교육 : 게임 프로그래밍 125일

125일 차 교육 내용 메모를 옮겨 본다.
게임 엔진 유니티를 이용한 VR 포트폴리오 작업이 진행됐다.


바라보는 방향으로 회전하며 이동

    float vertical = Input.GetAxisRaw("Vertical");
    float horizontal = Input.GetAxisRaw("Horizontal ");

    vector3 lookDir = vertical * Vector3.forward + horizontal * Vector3.right;

    this.transform.rotation = Quaternion.LookRotation(lookDir);
    this.transform.Translate(Vector3.forward * moveSpeed * Time.Deltatime);


메모로 보아 VR 포트폴리오를 진행하면서 필요한 기능에 대해서 강사가 설명한 내용이 작성되어 있었던 것 같다.

국비 교육 : 게임 프로그래밍 124일

124일 차 교육 내용 메모를 옮겨 본다.
게임 엔진 유니티를 이용한 VR 포트폴리오 작업이 진행됐다.


유니티의 모든 class는 포인터로 작동한다.
주소, 값, 참조이기에 잘못 작동 시 에러가 발생할 수 있다.
항시 new로 생성하고 해제 null을 습관화해야 한다.

DataMNG myDataMNG = new DataMNG();
- 형식으로 신규 생성을 하면 관리에 문제가 없다.

DataMNG myDataMNG;
myDataMNG = 변수;
- 형식으로 선언을 하면 포인터 복사가 이루어진다.
- 원하는 구성이 안 될 수 있다.


개별적으로 VR 포트폴리오를 진행하고, 유니티에서의 class 복사에 대한 간단 설명이 진행된 것 같다.

2019년 9월 16일 월요일

국비 교육 : 게임 프로그래밍 123일

123일 차 교육 내용 메모를 옮겨 본다.
게임 엔진 유니티의 사운드 처리에 대한 교육이 진행됐다.


사운드 리스터
- 카메라에 달려 있음.
- 듣는 개체의 위치

사운드 소스
- 발생하는 개체에 달려 있음

이슈
1. 각 개체별 사운드 소스를 가지고 있어 관리가 힘듦
2. 일정 거리 이상일 경우 Mute 처리와 같은 공간 처리의 최적화 문제
3. 이를 관리하기 위해서는 사운드 매니저 형식의 기능 구현이 필요
 개체별 Getcomponent<audiosource>().play();


오디오 믹서를 이용한 사운드 제어
- snap shot : 설정된 세팅 값
- group : master 하위로 설정되는 sub 사운드
     크게 BG, Fx, Voice등을 그룹으로 지정해 볼륨을 설정한다.
     이 항목은 hierarchy에 등록되어 하위로 등록된다.

inspector의 제어하고 싶은 항목(예:Fx)을 우클릭하면 script로 참조할 수 있도록 변수를 만들 수 있다.

group은 오디오 소스에 등록해 group을 지을 수 있다.


이처럼 유니티 엔진에서의 사운드 및 사운드 믹서 기능에 대해 교육이 진행됐다.




국비 교육 : 게임 프로그래밍 122일

122일 차 교육 내용 메모를 옮겨 본다.
게임 엔진 유니티의 애니메이션 기능과 VR 포트폴리오 작업이 진행됐다.


animator에서 현재 플레이 중인 animation의 이름 얻는 방법
- this.Getcomponent<Animator>().GetcurrentAnimatorStateInfo(0).fullPathhash;

Animator.StringToHash("Base Layer.Idle");
- StringToHash 에 전달하는 인자는 "레이어 이름.스테이트 이름"
 또는 "레이어 이름.서브 스테이트 이름.스테이트 이름" 형태로 접근 가능하다


스폰 영역 설정
- Random.isidleUnitCircle 를 하면 vector2로 원안의 랜덤한 값이 나온다.
- 이를 x, z 좌표와 영역 크기로 곱해서 좌표를 지정 할 수 있다.

몬스터등의 스폰 시 바라보는 방향의 제어는 Lookat을 이용할 수 있다.
- var monster = Instantiate(오브젝트, 포지션, Quaternion.identity);

목표지점의 y값 맞추기
- endpoint.transform.position.set(~ , 몬스터 Y , ~);
- monster.transform.LookAt(endpoint의 포지션);


네비매쉬를 생성할 때는 지형 오브젝트의 static을 Navigation Static으로 설정을 해야 된다.


이처럼 애니메이션과 관련된 스크립트에 대해 학습하고, VR 포트폴리오를 진행했다.

국비 교육 : 게임 프로그래밍 121일

121일 차 교육 내용 메모를 옮겨 본다.
게임 엔진 유니티의 애니메이션 기능과 VR 포트폴리오 작업이 진행됐다.


animation "blend tree" 개념
- 애니와 애니 사이의 전환 시 animator에 inspector의 탈출 시간을 이용하는 것이 아닌 애니간 전환 방법

blend tree
- 설정된 값에 따라 move(속도 값)에 따라 walk와 run을 왔다 갔다 할 수 있도록 하는 전환 기능
- animator에서 state 생성 시 blend tree를 선택해 생성
- 단일 값 전환 2차원(조이스틱) 값에 대한 전환


VR 포트폴리오를 진행하고, 유니티의 animation과 관련된 기능을 학습했다.

2019년 9월 15일 일요일

국비 교육 : 게임 프로그래밍 120일

120일 차 교육 내용 메모를 옮겨 본다.
게임 엔진 유니티의 애니메이션 기능과 VR 포트폴리오 작업이 진행됐다.


애니메이션 - 이벤트
- animation 창에서 add event 버튼 또는 우클릭을 해 지정한다.
- 한 구간에 이벤트를 복수로 넣을 수 있지만, 화면 정보는 작게 표시된다.
- 애니메이션 윈도우에서 이벤트 선택 시 inspector에 함수를 지정할 수 있도록 화면이 전환된다. (단 연결된 스크립트 한정)
- 직접 애니메이션 데이터를 수정할 수 있다.

read only fbx 애니메이션 리소스 시
- inspector의 animation 탭에 있는 event 항목을 통해 제어 가능
- event 추가 시 표시되는 게이지는 비율로 표시됨
- event 추가 시 함수명을 적는다. (public이 아니어도 된다.)

event 설정 시 1개의 변수를 지정할 수는 있으며, 이는 함수가 받도록 준비되어야 한다.


sendmessage의 방식
- 타겟 오브젝트.sendmessage("함수명", 인자); 형태로 설정된다.
- 타겟 오브젝트에 설정된 모든 컴퍼넌트에 "함수명"을 실행 하라고 전달한다.


OnTrigger 함수는 두 개체 중 하나라도 트리거이면 인식이 가능하다.


이처럼 유니티의 애니메이션 기능과 VR 포트폴리오 작업이 진행됐다.

국비 교육 : 게임 프로그래밍 119일

119일 차 교육 내용 메모를 옮겨 본다.
게임 엔진 유니티를 이용한 VR 포트폴리오 작업이 진행됐다.


애니메이션, 메카님
- 유니티/애니메이션/시간 흐름에 따른 정보변화, 이중 개체나 이미지의 변환

애니메이션을 만들 때 hierarchy에서 선택을 해야 됨

2D Sprite는 이미지 타입(Texture Type)과, Sprite 모드(Sprite Mode)를 제어해서 사용가능
- Single : 단일 Sprite
- Multiple : 1개의 이미지에 복수 Sprite


애니메이션에서  inspector를 통해 수정하는 경우 녹화 버튼을 눌러야 함
- 애니메이션 내 값 수정으로 제어할 수도 있음

애니메이터에서 parameter를 추가해 상태를 제어할 수 있음


유니티의 Animation과 Animator에 대한 설명이 진행됐다.
그리고 남은 시간 동안 VR 포트폴리오 작업이 진행됐다.

국비 교육 : 게임 프로그래밍 118일

118일 차 교육 내용 메모를 옮겨 본다.
게임 엔진 유니티를 이용한 VR 포트폴리오 작업이 진행됐다.


LocalPosition은 부모의 Scale값에 영향을 받아 좌표가 실측에서의 계산 시 틀어질 수 있다.


VR 포트폴리오에서 사용한 기능을 샘플링해 보는 시간으로 교육이 진행된 것 같다.
메모의 내용이 적은 것은 아마도 프로젝트 작업을 진행하느라 작성된 메모가 없는 것으로 생각된다.

국비 교육 : 게임 프로그래밍 117일

117일 차 교육 내용 메모를 옮겨 본다.
게임 엔진 유니티를 이용한 VR 포트폴리오 작업이 진행됐다.


컨트롤러를 이용한 Object의 잡기/던기지에 대한 샘플 작업 진행
- FixedJoint에 대한 내용을 자습
- Throwing 처리에 대한 처리 방식 자습


VR 포트폴리오에서 사용한 기능을 샘플링해 보는 시간으로 교육이 진행된 것 같다.

2019년 9월 14일 토요일

국비 교육 : 게임 프로그래밍 116일

116일 차 교육 내용 메모를 옮겨 본다.
게임 엔진 유니티를 이용한 네트워크 연결에 대해 교육했다.


hash 테이블, photon network의 Lobby 구조
- hash테이블 : key , value 을 이용한 자료구조

매치메이킹 기능이 있다.
- 입장 시 제어된다.
- 프로퍼티가 있으면, 입력된 값으로 입장 / 없으면 랜덤 입장


이처럼 포톤네트워크에 대한 교육과 실습이 이루어진 것 같다.

국비 교육 : 게임 프로그래밍 115일

115일 차 교육 내용 메모를 옮겨 본다.
게임 엔진 유니티를 이용한 네트워크 연결에 대해 교육했다.


메모로 작성된 내용이 없음


포톤네트워크를 이용해 Bone이 있는 캐릭터의 animation 동기화 처리에 대한 교육이 진행된 것 같다.
대부분의 내용이 수업 중 작성한 샘플 프로젝트의 주석에 작성된 것으로 보인다.

국비 교육 : 게임 프로그래밍 114일

114일 차 교육 내용 메모를 옮겨 본다.
게임 엔진 유니티를 이용한 네트워크 연결에 대해 교육했다.


포톤네트워크 예제를 정리
- 클라이언트 간 transform 정보 통신 진행

photon view.photon transform view를 개체로 사용
-on observed components

photon animator view
- synchronize parameters
- discrete : 1초에 10회
- continus : 프레임 별로


유니티 컴파일 순서
- standard asset → plug in 포톤뷰 → ...
- standard asset(폴더 이름 기준)을 제어하려면 script 위치를 변경해 주어야 한다.


동기화 RPC , photon view의 observed components를 통해 이루어진다.
- animation, transform


이처럼 유니티와 포톤네트워크를 이용해 복수의 클라이언트 간 좌표와 애니메이션 정보의 동기화에 대한 샘플 작업이 진행된 것으로 보인다.
정리되지 않은 메모 내용으로 보아 상세한 설명은 샘플 작업 프로젝트 파일 내 주석으로 작성된 것 같다.

국비 교육 : 게임 프로그래밍 113일

113일 차 교육 내용 메모를 옮겨 본다.
게임 엔진 유니티를 이용해 VR 포트폴리오를 진행했다.


메모 내용으로 보아 각자 교육 시간에 VR 포트폴리오 작업을 진행한 것으로 생각된다.

유니티 애니메이션 리소스 > inspector 에서
- motion - root motion node 를 <Root Transform>으로 설정
- 이러면 애니메이션상에서 이동이 설정되어 있어도 좌표 변동이 이루어지지 않는다.
- <None>으로 설정하면 애니에 따라 이동한다.


네비매쉬 에이전트 클래스를 사용
- using UnityEngine.AI; 를 추가해야 된다.


글로벌 조작에서 이벤트 발생 시 동시 발생을 막기 위해 if(~) 항목으로 묶어 관리한다.


이처럼 네트워크 교육을 안 하고 각자 VR 포트폴리오 작업이 진행된 것 같다.
작성된 내용 외 네트워크에 대한 메모는 확인할 수 없다.

국비 교육 : 게임 프로그래밍 112일

112일 차 교육 내용 메모를 옮겨 본다.
게임 엔진 유니티를 이용한 네트워크 연결에 대해 교육했다.


포톤네트워크
- 에셋스토어>photon unity network ~ 를 설치
- Photon 홈페이지의 photon cloud 관리화면, 애플리케이션 ID 확인
- 설치한 에셋의 Resource/photon server setting의 inspector에 가입된 ID를 입력

스크립트로 photon network 클래스를 이용해 접속에 관련된 세팅을 진행

monobehaviour가 아닌 photon.punbehaviour를 상속받아서 사용
- override용 함수를 통해 제어

Remote Procedure Call RPC를 이용해 정보를 전달할 수 있다.


이처럼 유니티 엔진을 이용한 클라이언트 간 통신에 대한 교육이 진행됐다.
예제 프로젝트를 진행한 뒤 PC로 빌드하여 2개의 클라이언트 간 통신에 대한 예제 프로젝트를 진행한 것으로 생각된다.


2019년 9월 10일 화요일

국비 교육 : 게임 프로그래밍 111일

111일 차 교육 내용 메모를 옮겨 본다.
게임 엔진 유니티를 이용한 VR 프로젝트 진행을 하였다.


포트폴리오 작업 진행
- 포트폴리오에 사용하기 위한 리소스 검색 및 확보 작업
- 작업 예정 문서 작성

메카님에 대한 자습 진행

Fog 처리를 위한 FX 자습 진행


이처럼 VR 포트폴리오를 제작을 진행한 것 같다.
사전 준비라서 그런지 몰라도 두건에 기능에 대해서 자습으로 진행한 것 같다.

국비 교육 : 게임 프로그래밍 110일

110일 차 교육 내용 메모를 옮겨 본다.
게임 엔진 유니티를 이용한 VR 프로젝트 진행을 하였다.


개별 또는 팀으로 나뉘어 포트폴리오에 사용할 VR 프로젝트 작업을 진행했다.

일전 2D 포트폴리오와 마찬가지로, 문서 작성, 리소스 챙기기 등으로 교육 시간을 사용했다.


실습으로 진행된 교육 시간으로 추가적인 내용이 메모로 작성되어 있지 않다.
아마도 위와 같이 포트폴리오 제작과 관련된 내용으로 하루가 진행된 것 같다.

국비 교육 : 게임 프로그래밍 109일

109일 차 교육 내용 메모를 옮겨 본다.
앞으로 진행될 서버 교육과 관련된 설명이 있었던 것 같다.


유니티에서 사용할 수 있는 네트워크
- unet, 포톤 라이브러리, 프라우드 넷

이러한 라이브러리에 대해서 설명하고, 이를 중심으로 교육이 진행된다고 공유 됬다.


그리고 남은 시간은 VR 포트폴리오 프로젝트 제작을 진행한 것으로 생각된다.

2019년 9월 9일 월요일

국비 교육 : 게임 프로그래밍 108일

108일 차 교육 내용 메모를 옮겨 본다.
게임 엔진 유니티에 대한 강의가 진행됐다.


유니티 VR 세팅
- 에셋스토어에서 SteamVR어셋을 import하면 기본 카메라와 컨트롤러가 인식됨
- 예제 씬으로 제공


각자 앞으로 진행할 포톤 라이브러리에 대한 예습 진행


포트폴리오용 VR 프로젝트를 진행해 보기


이처럼 앞으로 진행할 VR 포트폴리오와 포톤 라이브러리에 대한 설명이 이루어진 것 같다.

2019년 9월 8일 일요일

국비 교육 : 게임 프로그래밍 107일

107일 차 교육 내용 메모를 옮겨 본다.
게임 엔진 유니티에 대한 강의가 진행됐다.


VR 기기 및 게임에 대한 설명이 진행되었음.


이외 다른 메모 내용 및 실습 정보는 없는 것 같다.
아마도 VR과 관련된 다양한 이야기가 진행된 것으로 생각된다.

국비 교육 : 게임 프로그래밍 106일

106일 차 교육 내용 메모를 옮겨 본다.
게임 엔진 유니티에 대한 강의가 진행됐다.


UI (유니티의 기본)
- UI는 Canvas 안에 있어야 한다.


Canvas
- canvasRayCaster : UI와의 상호작용을 위한 클릭 기능
- Screen Space - Camera : 뒤로 그려진다.
- World Space : 공간에 그려진다.
- UI Scalemode : Scale With Screen Size 화면 크기에 맞추어 그린다.
- UI는 Hierarchy의 Eventsystem이 존재해야 반응을 한다.

Text
- overflow 옵션으로 가로, 세로의 영역을 무시하고 출력한다.
- Raycast Target 옵션을 보통 해제한다.

Image
- 지정색을 제외하고 다른 색을 빼는 개념이다.
- color에서 white, black 은 블렌딩이 안된다.

RawImage
- 3D에서 2D 그림을 그리는 느낌
- UV를 이용한 수정이 가능하다.
- Texture를 사용한다.

Button
- Image > Image type의 slice 형태를 기본적으로 사용
- Button > Interactable : 비활성 상태를 만들 때 사용

Panel
- 뒷판, 기본판
- Image와 동일하지만 만들 때 기본생성 값이 다름

ScrollView
- ScrollView > ViewPort > Content 에 생성하는 방식
- Content 하위로 Text, Button 등이 설정
- ScrollView의 ScrollRect에서 기본 옵션을 제어 함
- MoveType으로 스크롤 연출을 제어함

재사용 스크롤 뷰
- 미리 스크롤 세트를 만들어 두고, 내용을 코드상에서 교체해 표시


이처럼 유니티의 UI와 관련된 교육이 진행됐다.
메모로 작성된 기능에 대한 실습을 한 것으로 생각된다.

2019년 9월 7일 토요일

국비 교육 : 게임 프로그래밍 105일

105일 차 교육 내용 메모를 옮겨 본다.
게임 엔진 유니티에 대한 강의가 진행됐다.


유니티 가상스틱에 대한 이야기

엔진에서 제공하는 기본 조이스틱 추가
- 플랫폼을 안드로이드로 세팅
- project에서 assets 우클릭 Import Package > CrossPlatformInput 선택
- 설치되면 crossplateInput 폴더 내 prefabs 폴더에 기본 제공 컨트롤러들이 있음

MobileSingleStickControl
- 4방향 스틱 1개와 버튼 1개로 구성된 프리팹
- using UnityStandardAssets.CrossPlatformInput; 선언 필요


이처럼 유니티에서 제공하는 입력 장치에 대한 교육이 진행되었다.
그리고 관련된 실습도 진행한 것으로 생각된다.

국비 교육 : 게임 프로그래밍 104일

104일 차 교육 내용 메모를 옮겨 본다.
게임 엔진 유니티에 대한 강의가 진행됐다.


씬 로딩에 대한 방식이 설명됐다.

현재 Scene -> Load Scene
         └→ 오픈과 동시에 다음 Sync 형태의 오픈
         로딩이 완료되면
         ↓
         open으로 오픈

현재 Scene -> 로딩 Scene -> 다음 Scene

현재 Scene -> 빈 다음 Scene -> 로딩 Scene -> 다음 Scene 데이터 로드


에셋 번들 : 에셋을 다운로드해서 쓸 수 있도록 분리하는 기술


allowSceneActivation 속성을 이용해 Scene을 뒤쪽에서 로딩 시킬 수 있다.


이처럼 Scene 로딩과 관련된 메모가 작성되어 있다.
메모 내용이 너무 단축해 작성되어 메모만으로는 어떤 내용이 강의 됐는지 파악이 잘 안 된다.
아마도 샘플 프로젝트에 방식에 대한 주석이 달려 있지 않을까 생각된다.

엔터키 심볼(Enter_key Symbol)

출처 : https://en.wikipedia.org/wiki/Enter_key
출처 : http://xahlee.info/comp/unicode_computing_symbols.html


윈도우 특수문자에서 찾을 수 없어서 검색 결과를 기록해 둔다.


  • Enter 심볼 : ⏎ 또는 ↵ 를 사용


국비 교육 : 게임 프로그래밍 103일

103일 차 교육 내용 메모를 옮겨 본다.
게임 엔진 유니티에 대한 강의가 진행됐다.


녹스 안드로이드 에뮬레이터와 유니티 연결하기
- 안드로이드 스튜디오의 adb.exe 를 사용한다.
- adb connect 127.0.0.1:62001 ↵
- adb devices ↵

주소와 포트는 녹스의 adb devices를 이용해 확인한다.
녹스 내 옵션에서 개발자 옵션(켜기), USB 디버깅(켜기)을 해두어야 연결된다.

adb를 통해 녹스와 연결이 되면 유니티에서 build&run 으로 즉시 모바일 기기 테스트가 가능해진다.


static 클래스
- static 변수 : 사라지지 않고 계속 계산된다.
- static 함수 : 선언하지 않고 사용할 수 있다.
- static 함수는 클래스명.함수() 로 사용한다.

객체용이 아니는 전역(전용)용이라고 명시하는 방식이다.
내부 변수, 함수는 외부접근을 위해 public으로 선언해야 한다.

싱글톤


Scene 전환 시 데이터 유지
1. 파일 저장 -> 로드
2. dontdestoryobject 선언
3. static 클래스


이처럼 녹스 에뮬레이터와 유니티의 연결을 이용해 빠른 빌드 테스트에 대한 설명이 진행됐다.
그리고 Scene간 데이터 사용에 대한 내용이 설명됐다.

2019년 9월 6일 금요일

국비 교육 : 게임 프로그래밍 102일

102일 차 교육 내용 메모를 옮겨 본다.
게임 엔진 유니티에 대한 강의가 진행됐다.


안드로이드 빌드 세팅
1. 안드로이드 스튜디오 : SDK가 내부에 탑재되어 있음
2. JDK : JDK는 8버전을 설치해야 한다고 한다.

유니티 > edit > preference > external tools 에 SDK와 JDK를 설정
JDK를 깔고 안드로이드 스튜디오 순으로 설치


안드로이드 스튜디오 > 시작 팝업 > configure > SDK Manager 선택

안드로이드 빌드 옵션 > build system > target architectures
- ARM v7 : 일반 모바일 AP
- x86 : 인텔 AP


안드로이드 스튜디오 설치 폴더 내
- platform_tools / adb.exe 을 실행하면 기기 연결 유/무를 체크할 수 있다.

내 컴퓨터(우클릭) > 고급 시스템 설정 > 고급/환경 변수
- 시스템 변수(s)의 Path에 경로 추가
- adb.exe 를 실행하기 위한 작업

adb devices
- USB 디버깅을 설정한 개발자 폰을 인식해 표시한다.


이처럼 안드로이드 빌드를 위한 최소 설정 작업을 진행했다.
작성된 메모의 교육 시점과 현재와 많은 부분이 일치하지 않으며, 그냥 기록으로 남기는 데 의의가 있다.

국비 교육 : 게임 프로그래밍 101일

101일 차 교육 내용 메모를 옮겨 본다.
게임 엔진 유니티에 대한 강의가 진행됐다.


유니티에 안드로이드 빌드를 위한 세팅 작업 진행.


별도의 교육 메모가 없는 것으로 보아, 종일 실습으로 진행한 것 같다.
(실습한 샘플 프로젝트가 없음)

국비 교육 : 게임 프로그래밍 100일

100일 차 교육 내용 메모를 옮겨 본다.
게임 엔진 유니티에 대한 강의가 진행됐다.


델리게이트
- 클래스처럼 자료형이다.
- 함수의 리스트

delegate void sampleD();
sampleD dele1;

대입 : =
추가 : +
제거 : -

C# 미리 선언된 델리게이트 변수
- Func : 반환 값이 있는 델리게이트 Func<반환 값, 매개변수>
- Action : 반환 값이 없는 델리게이트


C# 람다
- 버프, 디버프에서 활용
- 종류는 많지만, 처리는 공용인 구현 항목의 처리에서 유리하다.


이처럼 C#의 델리게이트와 람다 문법과 관련된 교육이 진행됐다.

2019년 9월 5일 목요일

국비 교육 : 게임 프로그래밍 099일

99일 차 교육 내용 메모를 옮겨 본다.
게임 엔진 유니티에 대한 강의가 진행됐다.


UI 캔버스 옵션 3가지
- ScreenSpace - Overlay : 일반 UI
- ScreenSpace - Camera : 특정 카메라에 붙어 가장 나중에 그려짐
- World Space : 3D 좌표계로 위치함


Random.insideUnitCircle
- 반경 1 원안의 랜덤한 x,y 좌표를 반환
- vector2 를 반환


UI에 사용할 Overlay용 캔버스
- 배경에 사용할 Camera용 캔버스 2개를 이용해 화면을 제작할 수 있다.


sendmessage
- 해당 object에 있기만 하면 되는 메소드를 호출해 사용할 수 있음
- 반환 값이 없는 void형의 메소드의 경우 그냥 실행시킬 수 있음


fade In/Out
- UI의 스프라이트와 3D의 Quad를 이용해 터치를 막고 화면전환 연출을 처리 함
- Quad는 카메라 바로 앞에 (z축 0.2~0.3) 위치하도록 조절
- UI 스프라이트는 화면을 모두 덮게 해서 화면 전환 연출을 적용

  while()
  {
    var rate = 1;
    rate -= deltatime / 기준 시간 value;
  }
  코루틴을 통해 정의된 시간 동안 반복시킴


transform.position : 월드 좌표계에서의 위치 설정
transform.localposition : 부모 좌표를 기준으로 위치 설정


이처럼 Unity 엔진을 이용한 교육이 진행되었다.
Fade In/Out 연출에 대한 실습이 진행된 것으로 생각된다.

Unity Canvas Render Mode 설정

UGUI의 Canvas 설정 중 Render Mode 를 정리한다.
이는 2D 게임 개발 중 Canvas > Particle > Canvas 의 출력 순서를 정의하기 위한 복습 자료이다.


  1. 2D 게임을 만들면서 Main Camera가 Orthographic인 설정에서 Screen Space - Camera 모드로 설정한 Canvas를 복수로 설정하는 것이 좋다. 
  2. 이는 Canvas의 Sorting Layer와 Sort Order의 설정을 통해 Depth를 지정 한다. 
  3. 그리고 Particle System의 Renderer 항목의 Sorting Layer와 Sort Order의 설정을  Canvas 사이로 설정해 Particle 출력의 효과를 발생시킬 수 있다. 


Screen Space - Overlay 모드 

  • 캔버스가 씬 내부의 어느 곳에 있더라도 화면 전체를 덮는 모습으로 렌더링 된다.
  • Pixel Perfect
    - On으로 지정하면 UI의 픽셀의 색 그대로 표현하도록 렌더링 함
    - 경계면이 명확히 표현할 수 있음(안티 앨리어싱 없이 렌더링)
    - 다양한 UI 연출로 인한 퍼포먼스를 위해서는 Off로 사용하기를 권장
  • Sort Order
    - 렌더링 되는 순서를 수치로 설정
    - 값이 작을수록 안쪽에 렌더링 됨 


Screen Space - Camera 모드 

  • 지정된 카메라와 일정한 거리만큼 떨어진 앞쪽에 위치 
  • 카메라의 Projection 속성이 Perspective로 지정된 경우 UI 요소는 원근감이 느껴지도록 렌더링 됨 (원근감의 정도는 Field of View 속성값에 의해 결정)
  • Pixel Perfect
    - On으로 지정하면 UI의 픽셀의 색 그대로 표현하도록 렌더링 함
  • Render Camera
    - 캔버스를 렌더링할 카메라를 지정
  • Plane Distance
    - 카메라에서 캔버스까지의 거리를 설정
  • Sorting Layer
    - 캔버스의 소팅 레이어(Sorting Layer)를 지정.
    - 소팅 레이어란 2D 스프라이트를 포함한 2D 그래픽을 렌더링하는 순서를 제어하는 기능
    - Z좌표와 관계없이 렌더링 순서를 제어 할 수 있음
  • Sort Order
    - 렌더링 되는 순서를 수치로 설정


World Space 모드 

  • 설정된 Canvas는 씬에 있는 다른 게임 오브젝트와 동일한 자격으로 취급
  • Canvas의 크기는 Rect Transform 컴포넌트에 따라 정의
  • UI 요소는 씬에 있는 다른 GameObject와 함께 3D 공간에서의 위치 관계대로 렌더링 됨
  • UI요소를 씬의 일부로 다룰 때 이용하면 좋음
  • Event Camera
    - 이벤트를 처리하기 위한 카메라를 지정
    - OnClickButton()과 같은 UI 이벤트 리스너를 통해 발생 되는 결과가 적용될 대상
  • Sorting Layer
    - 캔버스의 소팅 레이어(Sorting Layer)를 지정.
  • Sort Order
    - 렌더링 되는 순서를 수치로 설정





국비 교육 : 게임 프로그래밍 098일

98일 차 교육 내용 메모를 옮겨 본다.
게임 엔진 유니티에 대한 강의가 진행됐다.


화면을 클릭한 위치로 오브젝트 날리기
- ray와 출동한 오브젝트를 보고 행동을 취함
- 화면 기준의 Ray 쏘기

    Ray ray = Camera.main.ScreenPointtoRay(Input.mousePosition);
    Vector3 worldDir = ray.direction;
    GameObject.GetComponent<--------->().shoot(worldDir.normalize * 200);

RaycastHit 충돌된 정보
- Raycast : ray에 닿은 것 중 가장 가까운 오브젝트
- Raycastall : ray에 닿은 모든 오브젝트

    var ray = Camera.main.ScreenPointtoRay(Input.mousePosition);

    Raycasthit hit;
    
    if(Physics.Raycast(ray, out hit))
    {
        print(hit.collider.GameObject.name);       // 이름 출력
        print(hit.point);                          // 좌표 출력
    }     


데이터 저장

playerPrefab
- 쉽게 제어된다.
- 저장 타입, 저장량의 한계가 있다.
- PlayerPrefab.Getint("키", 값);  ,  PlayerPrefab.Setint("키", 값);

utf-8
- "\r \n" 과 "\n" 으로 라인을 자를 수 있다.
- 가장 앞쪽 구분 값을 key로 두고, 값을 index 수치로 넣는 방식이 있다.
 Index │ -------- Field --------
     │    Data 
- m_csv = new Dictionary<string, Dictionary<string, object>();
             index      field, data



이처럼 world에서 ray를 이용하는 방법과 데이터 저장과 관련된 내용이 교육되었다.
데이터 저장 중 csv 데이터를 읽는 예제를 제작한 것으로 생각된다.


2019년 9월 4일 수요일

Unity 비동기 로딩(LoadLevelAsync) 일시 정지(Pause)

유니티의 백그라운드에서 비동기적으로 레벨을 로드하는 동안 로딩바를 표시하는 기능과 로딩 완료 시 Play 버튼이 발생해 다른 Scene로 전환되는 기능에 대한 요약 정리



예제

  1. 더미 값을 통해 로딩이 진행 되는 과정 표시
  2. 씬 로딩 완료 후 Start 버튼 표시
  3. 버튼 선택 시 지정된 Scene로 이동

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;  // 씬 이동 처리를 위한 선언
using UnityEngine.UI;               // 게이지 이동 처리를 위한 선언

public class LoadLevelAsyncCode : MonoBehaviour
{
    // 화면에 표시되는 LoadingBar 리소스 연결
    public Slider sliderUI;
    // 화면에 표시되는 toPlay 버튼 리소스 연결
    public GameObject toPlayButtonUI;

    // 더미 시간의 설정 Min Max 값
    float dummyTimeRange_Min;
    float dummyTimeRange_Max;

    // 최초 게이지가 증가되는 더미 시간 -> 이후 본 로딩 시작
    float dummyTime;

    // 로딩 이후 시작 버튼 처리 
    bool toPlayButton;

    void Awake()
    {
        dummyTimeRange_Min = 0.8f;
        dummyTimeRange_Max = 1.5f;
        dummyTime = 0;

        // 버튼의 상태를 초기화 한다.
        toPlayButton = false;
    }

    void Start()
    {
        // UI를 처리 한다.
        sliderUI.gameObject.SetActive(true);
        toPlayButtonUI.SetActive(false);

        // 로딩을 즉시 실행
        StartCoroutine(LoadAsynchronously(1));
    }

    IEnumerator LoadAsynchronously(int _sceneIndex)
    {
        // 더미 타이머로 진행할 값을 설정
        dummyTime = Random.Range(dummyTimeRange_Min, dummyTimeRange_Max);

        // 게이지로 표현되는 loading 값 변수들
        float loadingTime = 0.0f;   // 시간 계산 용
        float progress = 0.0f;      // 게이지 용


        // 타이머 게이지 처리 
        while (loadingTime <= dummyTime)
        {
            // 프레임 당 시간을 증가 
            loadingTime += Time.deltaTime;

            // AsyncOperation 를 통한 추가 로딩 처리를 위해 0.9 값 을 백분율화 
            // 이후 opertaion.progress 는 0.9 까치 처리 되고 완료 된다.
            progress = Mathf.Clamp01(loadingTime / (0.9f + dummyTime));

            // 슬라이더바의 값 증가 처리
            sliderUI.value = progress;
            
            yield return null;
        }

        // "AsyncOperation"라는 "비동기적인 연산을 위한 코루틴을 제공"
        AsyncOperation operation = SceneManager.LoadSceneAsync(_sceneIndex);

        // 로딩 후 스타트 버튼 처리를 위한 선언
        // 이 항목이 없으면 바로 로딩 후 Scene 이동이 처리 됨
        operation.allowSceneActivation = false;

        // 로딩이 종료되기 전까지의 로딩창 게이지 처리
        while (!operation.isDone)
        {
            // 비동기 로딩 진행에 따른 게이지 처리
            progress = Mathf.Clamp01((operation.progress + loadingTime) / (0.9f + dummyTime));

            // 슬라이더 증가 처리
            sliderUI.value = progress;

            yield return null;

            // 로딩 이후의 처리 , 버튼을 누르면 씬 이동이 처리 된다.
            // UI를 반전 처리 한다.
            //sliderUI.gameObject.SetActive(false);
            toPlayButtonUI.SetActive(true);
            Debug.Log("toPlayButtonUI.SetActive(true) - Line");
            // toPlayButton 입력을 대기 한다.
            if (toPlayButton)
            {
                operation.allowSceneActivation = true;
            }

            yield return null;

        }
               
    }

    // 버튼을 입력 한다.
    public void ToPlayButton()
    {
        toPlayButton = true;
    }

}

youtube 홍보 활용 정리 자료

홍보로 이용하기 위한 유튜브 개설과 관련한 내용을 정리한다.

유튜브 채널 생성

  • 브랜드 채널로 생성을 해야 차후 검색엔진 최적화에 유리하다.
  • 새 채널 만들기 -> "브랜드 계정" 생성


채널 키워드 챙기기

  • 크리에이터 스튜디오 내 고급 항목에 위치
  • 크리에이터 스튜디오 > 설정 > 채널 > 기본 > 키워드
  • 최대 3개의 핵심 단어를 넣어 둔다.
  • indiegame, gameplay, freegames


업로드 기본 설정

  • 업로드 시 제목 및 내용의 기본 내용이 자동으로 채워지도록 사전에 문구를 넣어 둘 수 있다.
  • 크리에이터 스튜디오 > 설정 > 업로드 기본 설정


업로드 

  • "비공개"로 업로드하고 최종 확인이 끝난 이후에 "공개" 또는 "예약"으로 변경하는 게 좋다. 
  • [맞춤 미리 보기] 를 클릭해 업로드 한다.



종료 화면의 구독 기능

  • 영상마다 수동으로 설정해야 됨
  • 크리에이터 스튜디오 > 동영상 관리자 > 동영상 > 수정 - 최종화면에서 요소 추가로 넣을 수 있음
  • 템플릿을 만들어 두고 사용할 수 있다.
  • 이런 기능을 위해 영상의 후반부에는 10~20초가량의 나머지 시간이 필요하다.
    (종료 화면 배경으로 추가 정보가 표시될 구간용의 추가 시간)
  • 또는 배경용 전용 정지 화면 동영상을 제작해 후반에 붙여서 하는 방법도 있다.


영어/한글로 된 번역을 이용해라

  • 제목/설명을 번역해 넣어 두어라.
  • 어떻게든 검색에 걸리도록 해야 한다.


제목에 채널 이름 넣기

  • 게임 브랜드가 중요하니 채널이 아니라 게임명을 넣어야 한다.


영상 제목

  • 글자 수 : 55~60자가 표시됨
  • 가장 중요한 것은 앞의 10글자 (핵심 내용을 넣어야 한다.)
  • 키워드로 가능 한 많이 넣는다.
  • 동일 키워드를 중복하지 않는다.
  • 추천 : 20~27자, 메인 키워드는 앞쪽 10~15자
  • 설명에 태그가 있으면 제목 위로 가장 앞쪽 3개가 표시된다.


영상 설명

  • 내용이 많을수록 검색에 걸릴 확률이 높다.
  • 제목에 쓰인 키워드를 한 번 더 넣어 작성하면 메타 데이터의 정확도가 높아진다.
  • 설명문은 5000자 최대한 다 채워 넣는다.
  • 주요 키워드를 많이 반복하면 안 된다.
  • 설명에는 태그를 쓸 수 있다. 


영상 태그

  • 영상에 설정하는 태그는 표시되지 않는다. 
  • 내 채널명부터 넣을 수 있는 것은 최대한 넣지만, 중복되거나 관련되지 않는 키워드를 넣지는 말자 
  • 허위 키워드나 유인 키워드를 설정하는 경우 클릭률이 낮아질 수 있다.


영상 설명 템플릿

  • 동영상 개요
    - 채널 구독 URL
    - 동영상의 제목 및 접속률을 모으고 싶은 사이트의 URL
    - 동영상에 대한 최대한 많은 설명 (중복 단어 없음)
  • 관련 동영상
    - 제목 / URL의 조합으로 관련성이 있는 영상 정보
  • 태그
    - 태그에 채널 ID를 넣는다.
    - 내게 관련된 동영상으로 나올 수 있다.
    - 관련성 있는 3~5개의 태그를 선정해 사용한다.
    - 너무 많은 태그는 스팸으로 처리될 수 있다.


맞춤 미리보기 - 썸네일(thumbnail)

  • 유튜브 재생 목록에서 바로 확인할 수 있는 이미지
  • 형식 : 1280 x 720, PNG, 2MB, 16 : 9
  • 썸네일을 강조하면 영상의 클릭률을 높일 수 있다.
    1. 이미지로 시선을 끄는 형식
    2. 궁금증을 만드는 형식
    > 핵심 단어 또는 질문형의 문구를 사용


채널 홈 관리

  • 구독이 가장 많이 이루어지는 장소
  • 채널의 매력을 최대한 어필하는 것이 필요하다.
  • 색상, 로고, 캐릭터 등을 활용해 각인되는 컨셉팅을 해야 된다.
  • 채널 아트
    - [내 채널] > [채널 맞춤설정] 에서 수정
  • 채널 아트 맞춤링크
    - [내 채널] > [채널 맞춤설정] > [정보] > [링크]에서 추가
    - 아이콘은 자동으로 추가됨


순환 구조

  • 자신의 사이트에 링크 걸기 : 외부에서 링크를 걸어두어라
  • 재생목록을 만들어 관리하자


키워드 수집

  • 구글 에드워즈 가입 -> 도구 -> 키워드 플래너
  • "검색량 데이터와 동향 알아보기"
  • 예시 문장(단어) 입력 후 "검색량 보기"를 통해 추천 입찰가를 확인해 볼 수 있다.
  • 금액이 많을수록 애드센스 수익도 높다.
  • 키워드를 높은 단어 위주로 글을 작성한다.
  • 이런 키워드 단어의 입찰가를 엑셀로 정리해 두어 관리 한다.
  • 내 채널의 "분석" 정보 중 "검색 키워드"를 확인해 관리하자.
    (크리에이터 스튜디오 > 분석 > 트래픽 소스)


유입 경로

  • 탐색 기능
    - 유튜브 홈 화면, 유튜브 구독 화면에서 발생한 트래픽
    - 탐색 기능은 유튜브의 홈, 인기, 구독 화면에서 발생한 트래픽을 의미
  • 추천 동영상
    - 추천 동영상으로 발생한 트래픽
    - 추천 동영상은 유튜브 알고리즘에 의해 자동으로 제안됨
  • YouTube 검색
    - 유튜브 검색 결과로 발생한 트래픽
    - 현재 내 조건에서 가장 집중해야 하는 유입 경로


알고리즘

  • 알고리즘에 영향을 미치는 6가지 요소
    - 조회 수, 시청 시간, 정기 업로드, 구독자, 메타 정보, 공유
  • 조회 수
     : 동영상의 화제성을 평가하는 지표
  • 시청 시간
     : 동영상을 얼마나 길게 시청하는지의 지표
  • 정기 업로드
     : 유튜브의 '순간 트래픽'(짧은 시간 동안의 시청자 유입)에 영향
  • 구독자
     : 구독자를 통한 순간 트래픽, 시청 시간의 연관 효과가 중요
  • 메타 정보
     : 제목, 설명, 태그를 기반으로 동영상을 활용
  • 공유
     : 외부 SNS 공유를 통한 유입



파일 관리

  • 영상별 폴더를 만들어 관리한다.
  • [업로드 영상 폴더] - [원본 리소스 폴더] - 편집 프로젝트 파일
                       - 동영상 원본(mp4)
                       - 썸네일 원본(psd)
             - 최종본 영상 파일(mp4)
             - 최종본 썸네일(png)
  • 폴더 네이밍에 날짜와 업로드 index를 함께 작성해 관리 한다.
    (예 : 폴더명 - [190802_1] 어쩌고 영상)


저작권 확인

  • 사용하는 음악, 폰트 등의 저작권 형태의 확인이 필요
  • 게임 영상의 경우 제작자가 원저작자임에 따라 권리 행사를 할 수 있음
  • Creative Commons License의 네 가지 이용허락 조건 확인이 필요
  • CCL 기반의 콘텐츠 검색 : http://www.letscc.net/
  • 구글 및 네이버, 다음 검색 시 CCL 조건 설정 후 검색


외부 도움 사이트

  • 소셜 블레이드 : https://socialblade.com/
    - 유튜브 및 SNS 채널 분석 도움 사이트
    - 내 채널 이름을 검색해 정보를 얻을 수 있음



Unity - Firebase 연동 (Analytics, AdMob)

버전 : firebase_unity_sdk_6.5.0.zip 게임에서 통계 측정 및 광고 추적을 위해 Firebase 을 연동한다. 앞서 [Unity - GPGS 와 Admob 연동 및 배포 준비 작업]  연동 이후에 작업을 진행 한다. 유니...