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 채널 분석 도움 사이트
    - 내 채널 이름을 검색해 정보를 얻을 수 있음



2019년 8월 29일 목요일

저작권 무료 리소스

홍보용으로 제작하는 유튜브용 저작권 무료 리소스를 정리 한다.

이미지

  • 프리큐레이션
    - Link : http://www.freeqration.com
    - 30개가 넘는 무료 이미지 사이트를 종합해 검색할 수 있는 사이트
    - 대부분이 CC0 라이센스이지만 이미지별 확인이 필요

  • 구글 이미지 검색
    - Link : https://www.google.co.kr/imghp
    - 검색 후 [도구] > [사용 권한] > [재사용 가능] 으로 재 검색
    - 사이트를 방문해 최종 라이센스 확인 필요


영상

  • 비디보
    - Link : https://www.videvo.net/
    - 'Editorial Use Only' 라는 표시만 없으면, 라이센스 내에서 영리 목적으로 이용 가능
    - 라이센스 정책
    - 상업적 이용이 가능한 무료 리소스를 검색 하려면 라이센스 정책은 Royalty-Free , Only Show Free Clips  옵션을 선택

  • 마즈와이
    - Link : http://mazwai.com
    - 대다수 ATTRIBUTION LICENSE 3.0 라이센스로 출처 표시로 영리목적으로 사용할 수 있음
    - 다운로드 받고자 하는 재생 영역을 지정 할 수 있음


배경음악



효과음



폰트



2019년 8월 22일 목요일

Youtube용 플레이 영상의 DaVinci Resolve 15 설정값


플레이한 게임 영상을 유튜브로 업로드 하기 위해 기초적인 영상 설정을 기록해 둔다.

영상은 BlueStack 과 OBS를 이용해 녹화했고, 이를 DaVinci Resolve에서 편집해 Youtube로 업로드한다.


배경 처리
- 촬영한 영상이 세로 영상이라 배경의 처리가 필요하다.
- 이는 동일 영상을 Zoom In 하여 배경으로 사용 했다.
  1. DaVinci Resolve 의 Video1에 배경 영상을 Video2 에 정상 영상을 위치 시킨다. 
  2. 배경으로 사용 되는 Video1은 Inspector에서 Transform의 Zoom을 조절해 확대 시킨다.
    > Zoom 효과는 X, Y 값을 약 3.25 정도로 조절한다.
  3. 이후 Video1에 OpenFX > Filters에서 BoxBlur를 선택해 뿌연 효과를 준다.
    > 각 Horizontal/Vertical Strength 를 0.200 으로 설정
    > Gang 에 체크
    > Number Of Iterations 은 2로 설정
    > Border Type을 Replicate 로 설정
  4. 배경으로 사용되는 영상의 Audio1 소스는 Mute 하거나 링크 해제 후 삭제 처리 한다.


본 영상 좌/우 잘라내기
- 세로로 촬영된 영상의 좌/우를 잘라내기 위해 Video2 에서 수정 작업을 한다.
  1. 본 영상 Video2은 Inspector에서 Cropping의 값을 조절해 좌/우를 잘라낸다.
  2. Crop Left 를 655.00 으로 Right 를 653.00 으로 설정 한다. 


추출 영역 지정 하기
- Deliver 화면에서 Render 게이지를 조절해 영상으로 추출할 영역을 지정 할 수 있다.
- 이는 1개의 영상에 여러 추출 영역을 가지고 있을때 사용 하기 좋다.
 (1개의 영상에 3개의 영상 추출이 필요할 때)

  1. Render 모드를 In/Out Range 로 변경
  2. 추출 시작 지점에 Timeline 커서를 위치시키고 우클릭 Mark In 으로 지정
  3. 추출 종료 지점에 Timeline 커서를 위치시키고 우클릭 Mark Out 으로 지정
  4. Add to Render Queue 로 영상 추출



이상의 작업을 하면 배경으로 본 게임 영상이 확대되어 Blur 처리되어 표시되고, 중앙에 본 게임 영상이 표시되도록 편집 할 수 있다.

2019년 8월 21일 수요일

unity 화면 꺼짐 방지

게임 플레이 중 디바이스의 설정에 따라 입력이 없으면 화면이 꺼지는 설정을 강제하는 코드.


// 화면이 꺼지지 않도록 설정
Screen.sleepTimeout = SleepTimeout.NeverSleep;

// 디바이스 설정에 맞추어 화면이 꺼지도록 처리 
Screen.sleepTimeout = SleepTimeout.SystemSetting;

출처 : https://docs.unity3d.com/kr/2018.4/ScriptReference/Screen-sleepTimeout.html

공유 폴더 접속이 안되는 (오류코드: 0x80004005)

윈도우 10 Home에서 공유 폴더에 접속이 안되고 상세 정보로 "오류코드: 0x80004005"가 발생 될 수 있다.

이 경우 다음과 같이 레지스트리를 고쳐 리부팅 하면 문제가 해결 된다.

  1. regedit 실행
  2. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA 경로 이동
  3. 값 수정 또는 생성
    값 : LmCompatibilityLevel
    종류 : DWORD
    데이터 : 1

출처 : https://answers.microsoft.com/ko-kr/windows/forum/windows_7-networking/%EC%98%A4%EB%A5%98%EC%BD%94%EB%93%9C-0x80004005/3b1dd77b-9b76-4d99-b555-e1e9619d7af1

윈도우10 오류 점검 및 복구 방법

윈도우10을 사용하다 오류가 생겼을 때 복원 작업을 하거나 점검하는 방법이 있음.

  1. 명령 프롬프트(cmd)를 관리자 권한으로 실행 (윈도우키 + x 에서 선택 가능)
  2. dism 유틸 실행해 복원 작업을 준비
    dism /online /cleanup-image /restorehealth
  3. 유틸 실행 후 약 15분 정도 대기
    콘솔에 "작업을 완료했습니다." 텍스트 표시 될 때까지 대기
  4. System File Checker(시스템 파일 확인) 실행
    sfc /scannow
  5. 표시되는 결과에 따라 처리
  • 복구 성공
    - Windows 리소스 보호에서 무결성을 발견하지 못했습니다.
    - Windows 리소스 보호가 손상 된 파일을 발견 및 성공적으로 복구 했습니다. 자세한 정보는 CBS.log 를 참조하십시오.

  • 복구 실패
    - Windows 리소스 보호에서 요청 된 작업을 수행할 수 없습니다.
     (안전모드로 Windows\WinSxS\Temp 폴더 확인.)
    - Windows 리소스 보호가 손상 된 파일을 발견했지만 일부 파일을 복구 하지 못했습니다. 자세한 내용은 CBS.log 를 참조하십시요.
     (Windows\CBS\cbs.log 에 있는 내용을 열어보고 문제가 있는 파일 확인 후 대체)



Unity - Firebase 연동 (Analytics, AdMob)

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