2017년 9월 18일 월요일

Unity Custom Menu 만들기

귀찮은 작업이라고 생각해서 잘 안하는 편이었는데...
오늘 처럼 뭔가 단순하게 반복해야 하는 작업에는 메뉴로 등록하고 빨리 적용하는게 나을 것 같았다.

작업 내용은 어떠한가 하니
1. 어떤 오브젝트에 필요한 새 컴포넌트를 붙이고,
2. 구 컴포넌트의 값을 새 컴포넌트로 옮기고,
3. 구 컴포넌트를 삭제한 뒤,
4. 주석용으로 사용하는 컴포넌트를 붙여서 작성시각을 기록한다.

일괄로 하기엔 확인하면서 진행해야 해서 메뉴를 이용하는 정도가 딱 좋았다.
(컨텍스트 메뉴가 나았을지도? (웃음))

참고한 Document
https://docs.unity3d.com/ScriptReference/EditorGUILayout.html

예제는 이거면 금방 알 수 있다. (Toggle 레퍼런스에서 옮김)
필요한 변수를 선언하고
editorLayout 으로 연결하고
거기서 조작에 따라 처리할 내용을 기입하면 된다.


using UnityEngine;
using UnityEditor;

public class EditorGUILayoutToggle : UnityEditor.EditorWindow
{
    bool showBtn = true;

    [MenuItem("Examples/Editor GUILayout Toggle Usage")]
    static void Init()
    {
        EditorGUILayoutToggle window = (EditorGUILayoutToggle)EditorWindow.GetWindow(typeof(EditorGUILayoutToggle), true, "My Empty Window");
        window.Show();
    }

    void OnGUI()
    {
        showBtn = EditorGUILayout.Toggle("Show Button", showBtn);
        if (showBtn)
            if (GUILayout.Button("Close"))
                this.Close();
    }
}

2017년 9월 14일 목요일

Android Shell 로 뒤로가기(Back) 버튼 입력하기


Run Shell 에서 아래 커맨드를 입력한다. Root 권한이 있을 때만 실행이 가능하다.
Tasker 등에서 뒤로가기를 실행 해야 하는데 메뉴가 없을 때 유용하다.



input keyevent 4

//혹은

input keyevent 187

2017년 9월 8일 금요일

Unity Editor 를 켤 때 마다 무언가를 실행하기 (버전 정보 갱신)

버전 정보를 빌드 할 때 마다 일일히 써주는게 귀찮았다.

빌드 전에 버전 정보를 갱신해주는 스크립트를 돌리면 되는데,
아래 두가지 이유로 에디터를 켤 때 (포커스가 올 때?) 마다 버전 정보를 갱신해 줬다.
1. 다른 사람이 세팅한 빌드 머신을 건드리기 귀찮아서
2. 에디터 건드릴 때 마다가 좋아서

여튼 아래는 간단히 짠 코드
버전 정보의 형식은 예시로 적당히 쓴 것이다.
4단위로 1.0.년.월일
예) 1.0.17.1159

혹시 실행이 안되거나 권한 없음 오류가 나면, 유니티 에디터를 실행할 때 관리자 권한으로 실행하면 된다.


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

[InitializeOnLoad]
public class Startup
{
    static Startup()
    {
        string VersionInfo = "1.0." + string.Format("{0:00}", System.DateTime.Now.Year).Substring(2, 2) + "." + string.Format("{0:00}", System.DateTime.Now.Month) + string.Format("{0:00}", System.DateTime.Now.Day);
        System.IO.File.WriteAllText(Application.dataPath + "/Resources/AppVersionInfo.txt", VersionInfo.ToString());
        Debug.LogWarning("오늘의 버전 정보 갱신 : " + VersionInfo + "\n저장 경로 : " +Application.dataPath+"/Resources/AppVersionInfo.txt");
    }
}

2017년 9월 7일 목요일

게임 컨트롤러의 스위치를 와이어로 연결할 때 와이어 구매 팁 (컨트롤러 자작)

브레드보드용 와이어를 쉽게 구해서 사용할 수 있는데,
얇은 선이 꼬인 것을 연선, 굵은 선 한가닥을 단선이라고 한다.
게임 스위치용으로는 단선이 좋다.

연선으로 해도 동작은 하는데, 미묘하게 레이턴시가 생긴다.

2017년 9월 5일 화요일

2017년 8월 28일 월요일

코드 조각 리스트<클래스>의 소팅 하기

평소에는 List<>.sort() 로 쉽게 정렬을 하지만,
직접 만든 클래스는 정렬이 어려워서 이럴 떄 사용할만한 코드 조각

public class BasicEntity
{
    public int Index = 0;
    public string Name = string.Empty;
    public float Value = 0f;
}

   // true 면 낮은 순부터 0 false 면 반대
    public List<BasicEntity> sortFilterEntity(List<BasicEntity> list, bool order)
    {
        List<BasicEntity> result = list;

        if (order)
        {
            result.Sort(delegate (BasicEntity A, BasicEntity B)
            {
                if (A.Index > B.Index) return 1;
                else if (A.Index < B.Index) return -1;
                return 0;
            });
        }
        else
        {
            result.Sort(delegate (BasicEntity A, BasicEntity B)
            {
                if (A.Index > B.Index) return -1;
                else if (A.Index < B.Index) return 1;
                return 0;
            });
        }

        for (int i = 0; i < result.Count; i++)
        {
            Debug.LogError(result[i].Name);
        }

        return result;
    }

안드로이드 OBB 분할 관련 게시물 타래

이번 게임은 용량을 신경 쓰지 않은 탓에 100메가를 훌쩍 넘어버렸다.

사운드 리소스가 추가되면 더 커질텐데

스토어 등록에 대해서 고민을 하다가...


어차피 유료 패키지 게임이니까 다운로드 용량에는 신경쓰지 말고 만드는 것으로 고민

하지만 스토어 등록이 100메가를 넘으면 문제가 된다.


일단 구글 부터 해결 시도.

OBB 파일로 분할하여 빌드하는 기능이 유니티 5.5에 있어서 이것을 활용하기로 한다.

빌드 자체는 체크 박스 하나만 하면 되서 손쉬웠다.

참고링크 :
https://docs.unity3d.com/kr/current/Manual/android-OBBsupport.html



첫번째 문제
플레이스토어에 어디다가 분할 파일을 올릴 수 있지?

해결 -> 2번째 등록 (업데이트 APK 등록) 시에 분할 파일을 등록할 수 있는 항목이 추가된다.

처음에는 적당히 올리고, 빌드코드 2로 수정해서 새로 빌드하여, 업데이트 등록하면 된다.


두번째 문제
LoadResource Error

에셋번들처럼 뭔가 해줘야 하나?
구글 안드로이드 전용으로 플러그인이 있어서 이것을 최초 씬에서 로드하여 페치를 다운로드 받고 게임을 시작해야 한다.

작업 순서

1. 유니티 플러그인 다운로드
https://www.assetstore.unity3d.com/kr/#!/content/3189

2. 플러그인 폴더 내의 googleplaydownloader.cs 를 내 스크립트 폴더로 이동

3. googleplaydownloader 에 내 구글 개발자 계정의 Public Key를 코드에 추가

4. example 코드를 참고해서, 씬 처음에 부르도록 한다.

5. 내 경우는 obb 전용 씬을 하나 만들어서 먼저 모든 처리를 하고 게임 씬을 부르는 것으로 마무리

6. 스토어에 테스트 업로드 후 동작 확인 완료


사소한 문제는 있었지만, 생각보다 쉽게 적용할 수 있었다.

다음은 인앱결제를 적용해볼 예정이다.