2019년 11월 27일 수요일

Jenkins에서 유니티로 실행한 Shell Script 가 끝나질 않는 문제 삽질 이야기


1. 우리팀 빌드머신은 iMac 이고 젠킨스로 빌드하고 있다.

2. 어셋 번들 파일 서버는 Amazon S3에 마련되어 있어 각 버전별로 폴더를 만들어서 업로드 하고 싶었다.

3. 버전이 클라이언트의 특정 변수에 설정되어 있어서 쉘크립트를 젠킨스가 직접 실행할수 없다. 서버 개발자 분께 부탁해서 버전을 파라메터로 받아서 S3의 버전 이름 폴더에 파일을 업로드 할 수 있는 스크립트를 만들었다.

4. 해당 스크립트를 어셋 번들 생성 후 유니티 코드로 호출 할 수 있도록 함수를 만들었다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
static void RunQaBundleUploadScript()
    {
        Debug.Log($"업로드 스크립트 실행 준비");
        if (psi == null)
        {
            psi = new System.Diagnostics.ProcessStartInfo();
        }
        var v = new GlobalConfig.VersionInfo();
        string args =
            Path.Combine(Application.dataPath,
            $"Editor/QaBundleUploadScript/qa_{EditorUserBuildSettings.activeBuildTarget.ToString().ToLower()}_patch.sh {v.ClientVersionToString()}");

        psi.FileName = "/bin/sh";
        psi.UseShellExecute = false;
        psi.RedirectStandardOutput = true;
        psi.Arguments = args;
        psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Minimized;
        psi.CreateNoWindow = true;
        var proc = System.Diagnostics.Process.Start(psi);
        proc.WaitForExit();//로그 출력을 위해
        var log = proc.StandardOutput.ReadToEnd();

        Debug.Log($"업로드 스크립트 실행 완료 {args}\n{log}");
    }

5. 단순 실행이 아니라 로그도 보고 싶어서 WaitForExit 와 ReadToEnd 를 사용하였다.
6. 유니티 에디터에서 해당 함수를 테스트 하고 동작이 확인되어 젠킨스 빌드를 돌렸는데 빌드도 되고 S3에 업로드도 잘 되었지만 젠킨스의 빌드 상태가 종료되지 않고 계속 대기상태가 유지되었다.
7. 서버 개발자분께서 알려 주셔서 WaitForExit 와 ReadToEnd 의 소스 코드를 다음과 같이 수정하니 젠킨스 빌드가 정상적으로 종료 되었다.


1
2
3
4
5
6
using(var proc = System.Diagnostics.Process.Start(psi))
{
    var log = proc.StandardOutput.ReadToEnd();
    proc.WaitForExit();
    Debug.Log($"업로드 스크립트 실행 완료 {DateTime.Now}\n{args}");
}

2019년 11월 25일 월요일

CJK UniCode Range

@"[\uFF21-\uFF3A]" // A-Z
@"[\uFF41-\uFF5A]"  // a-z
@"[\uFF10-\uFF19]"  // 0-9
@"[\uAC00-\uD7A3]"  // 가-힣
@"[\u1100-\u1112]"  // ㄱ-ㅎ
@"[\u3130-\u3163]"  // ㄱ-ㅎ(Compatible)ㅏ-ㅣ
@"[\u4E00-\u9FFF]" // Unified Hanja (Traditional/Simplify Chinese, Japanese, Korean)
@"[\u3040-\u30FC]" // Japanese

출처

한글
 구분 시작 끝
 한글(자음, 모음) 1100 11FF
 호환용 한글(자음, 모음) 3131 318F
 한글 음절(가~힣) AC00 D7A3

한자
 구분 시작 끝
 한중일 부수 보충 2E80 2EFF
 한중일 통합 한자 확장 - A 3400 4DBF
 한중일 통합 한자 4E00 9FBF
 한중일 호환용 한자 F900 FAFF
 한중일 통합 한자 확장 20000 2A6DF
 한중일 호환용 한자 보충 2F800 2FA1F

일어
 구분 시작 끝
 하라가나 3040 309F
 가타카나 30A0 30FF
 가타카나 음성 확장 31F0 31FF

[출처] 유니코드 한글, 한자, 일어 범위|작성자 realization

2019년 5월 22일 수요일

Max Size 가 원래 크기보다 작은 스프라이트의 SetNativeSize 하기

256x256 사이즈의 스프라이트를 128로 Max Size를 줄여서 사용할 때 SetNativeSize 를 하면 128x128 이 아니라 256x256 의 원래 크기로 돌아가 버린다

그럴 땐 overrideSprite의 사이즈를 이용하면 된다.

Sprite overrideSprite = GetComponent<Image>().overrideSprite;
icon.rectTransform.sizeDelta = new Vector2(overrideSprite.rect.width, overrideSprite.rect.height);

2019년 3월 22일 금요일

TextMeshPro의 글자 가로 세로 길이

TextMeshProUGUI 의 Text 글자들의 가로 세로 길이 구하는 법

GetPreferredValues()

Function to Calculate the Preferred Width and Height of the text object.
Declaration
public Vector2 GetPreferredValues()
Returns

TypeDescription
Vector2