레이블이 Dev Ref...인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Dev Ref...인 게시물을 표시합니다. 모든 게시물 표시

2018-10-26

Unity - 스크립트에서 한글 입력시 깨짐 현상

* C# 스크립트에서 텍스트를 대입하면 실행시 깨져서 나오는 경우가 있습니다.

예) _uiTitleText.text = "한글입력확인";

* 아무리 봐도 로직상에 문제가 없다면 스크립트 파일 형식이 UTF-8 형식으로 바꾸어 줘야합니다.

* VS나 기타 에디터로 스크립트를 UTF-8 형식으로 바꾸고 다시 저장하면 해결이 됩니다.

* Git이나 다른 소스 관리 툴이 파일 형식을 자동으로 바꿀수 있으니 그 부분도 확인해야 합니다.

Unity - 화면 좌표로 UI 좌표를 얻기

* 화면에서 마우스 클릭 위치로 UI 패널을 이동시키는 것과 같은 처리를 할 경우 RectTransformUtility.ScreenPointToLocalPointInRectangle()을 이용합니다.


RectTransform referRect = _scenePanel.GetComponent<RectTransform>();
RectTransform rectTrans = _infomationPanel.GetComponent<RectTransform>();
Canvas canvas = _infomationPanel.GetComponentInParent<Canvas>();
Vector2 mousePosition = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
Vector2 localPoint;
RectTransformUtility.ScreenPointToLocalPointInRectangle(referRect, mousePosition, canvas.worldCamera, out localPoint);

* 주어진 referRect를 참고하여 마우스 위치(스크린 위치)에 해당하는 상대적인 UI 좌표를 localPoint에 담습니다.

* 참조 캔버스의 월드 카메라는 null일 수 있으나 잘 작동합니다.

2018-08-12

Android - 안드로이드 디버그키 스토어 생성

* 일단 openSSl 설치 되어있고 실행 파일 패스 설정이 되어 있어야합니다.

* 아래와 같이 keytool을 실행합니다.

* keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl base64

* 자신 계정 폴더에 debug.keystore가 생성됨을 확인합니다.



2018-06-25

Unity - Video Player 비디오 클립 동적 변경 및 출력

* 비디오 플레이어에서 클립을 동적 변경 시에는 Prepare를 수행후 Prepare가 완료되어야 출력이 가능합니다. 비디오 클립은 인스탄스화된 객체가 아니라 리소스에서 바로 로딩한 객체이여야 합니다.

* Prepare된 상태의 이벤트 핸들러를 등록할 수 있습니다.


public VideoPlayer _videoPlayer;

void Awake()
{
    _videoPlayer.prepareCompleted += OnVideoPrepared;
    _videoPlayer.clip = Resources.Load<VideoClip>("ExamClip");
    _videoPlayer.Prepare();
}

void OnVideoPrepared(VideoPlayer source_)
{
    _videoPlayer.Play();
}

2018-04-30

C# - 변수명을 문자열로 얻어오기

* C# 6.0 이상에서는 변수명을 문자열로 얻어오기 위하여 nameof() 키워드가 존재한다.
* 이전 버전에서는 아래와 같이 별도의 함수를 만들어 사용한다.
* 각 프로젝트의 유틸리티 클래스에 static 형태로 정의하는 것이 사용에 용이할 것으로 보인다.

using System.Linq.Expressions;

string GetVariableName<T>(Expression<Func<T>> expr)
{
    var body = (MemberExpression)expr.Body;

    return (body.Member.Name);
}

2018-01-25

HTTP Request - 기상 정보 확인 API(기상청)

* 공공데이터포털에서 제공되는 날씨정보 API (기상청)

* 일단 공공데이터포털(https://www.data.go.kr)에 가입, 서비스 키를 발급받기 위하여 가입을 하고 공인인증서가 필요할 수 있다.

* 날씨, 미세먼지 관련 정보를 확인하기 위해서 아래의 서비스에 가입을 한다.
 - 동네예보정보조회서비스: 동네 지역(서울일 경우 동 단위) 날씨 정보를 제공
 - 중기예보정보조회서비스: 2일에서 10일 정도까지의 날씨 예보를 제공, 큰 지역으로 구분
 - 대기오염정보조회서비스: 미세먼지 등 대기 상태에 대한 정보를 제공, 예보 포함

* 위 3가지 서비스키는 하나의 서비스에서 받으면 동일 사용이 가능하다. (기상청에서 통합 발행이 되는듯 하다)

* 서비스를 가입하면 해당 매뉴얼이 존재한다.(매뉴얼만 보고도 충분히 이해가 가능)

* 동네예보정보조회서비스
 - 정확한 사용법은 서비스 페이지에 첨부되어 있는 문서를 참조
 - 지역별 좌표를 얻기 위하여 지역코드를 파싱해야 한다.
http://www.kma.go.kr/DFSROOT/POINT/DATA/top.json.txt (전국 지역)
http://www.kma.go.kr/DFSROOT/POINT/DATA/mdl.11.json.txt (서울지역 코드 11)
http://www.kma.go.kr/DFSROOT/POINT/DATA/leaf.11650.json.txt (서초구 코드 11650)
 - 아래 예제의 nx=60&ny=127& 부분이 좌표
 - 동네초단기실황: 현재의 날씨 정보
http://newsky2.kma.go.kr/service/SecndSrtpdFrcstInfoService2/ForecastGrib?serviceKey=서비스키&base_date=20180125&base_time=0600&nx=60&ny=127&numOfRows=100&pageSize=100&pageNo=1&startPage=1&_type=xml
 - 동네초단기예보: 당일 시간별 예보
http://newsky2.kma.go.kr/service/SecndSrtpdFrcstInfoService2/ForecastTimeData?serviceKey=서비스키&base_date=20180125&base_time=0600&nx=60&ny=127&numOfRows=100&pageSize=100&pageNo=1&startPage=1&_type=xml
 - 동네예보: 모레(3일)까지의 예보
http://newsky2.kma.go.kr/service/SecndSrtpdFrcstInfoService2/ForecastSpaceData?serviceKey=서비스키&base_date=20181025&base_time=0600&nx=60&ny=127&numOfRows=100&pageSize=100&pageNo=1&startPage=1&_type=xml

* 미세먼지
 - 서비스 페이지에 첨부되어 있는 문서를 참조
 - 시도별 실시간 측정정보 조회: 특정 지역(동단위)의 정보를 확인
http://openapi.airkorea.or.kr/openapi/services/rest/ArpltnInforInqireSvc/getCtprvnRltmMesureDnsty?serviceKey=서비스키&startPage=1&numOfRows=100&sidoName=서울&ver=1.1
 - 대기질 예보통보 조회: 모레(3일)까지의 큰 지역 단위의 예보
http://openapi.airkorea.or.kr/openapi/services/rest/ArpltnInforInqireSvc/getMinuDustFrcstDspth?serviceKey=서비스키&numOfRows=10&pageSize=10&pageNo=1&startPage=1&searchDate=2018-01-25&InformCode=PM10

2017-09-12

Unity - 안드로이드 기기 볼륨 조절

* 자세한 설명은 생략한다.

private static AndroidJavaObject _mainActivity = null;
private static AndroidJavaObject _androidAudioManager = null;
private static int _maxVolume = 0;

public static AndroidJavaObject GetMainActivity()
{
   if (_mainActivity == null)
{
var unityPlayerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
     _mainActivity = unityPlayerClass.GetStatic<AndroidJavaObject>("currentActivity");
}

return (_mainActivity);
}

public static AndroidJavaObject GetAndroidAudioManager()
{
if (_androidAudioManager == null)
  {
   _androidAudioManager = GetMainActivity().Call<AndroidJavaObject>("getSystemService", "audio");
_maxVolume = _androidAudioManager.Call<int>("getStreamMaxVolume", 3);
}
  return (_androidAudioManager);
}

// 볼륨 확인
public int GetVolume()
{
    AndroidJavaObject audioManager = GetAndroidAudioManager();
    return audioManager.Call<int>("getStreamVolume", 3);
}

// 볼륨 설정, 인자는 0부터 1 사이 값, _maxVolume과 비율로 설정해야 할 것으로 보임
public void SetVolume(float fVolume_)
{
  AndroidJavaObject audioManager = GetAndroidAudioManager();
audioManager.Call("setStreamVolume", 3, (int)fVolume_, 0);

}

* 출처: 회사 동료

2017-07-13

Word - 하이퍼링크를 따라간 후 되돌아가기(Jump back to link)

* MS 워드에서 Ctrl+Click으로 하이퍼링크를 따라간 후 원래 편집하던 부분으로 돌아가는 기능이 매우 필요했다.

* 이때는 Alt + 좌우 화살표 키로 웹브라우저의 전페이지, 다음페이지 이동 처럼 워드 문서 내부에서 링크를 이동한다.

* 출처: https://cybertext.wordpress.com/2014/03/17/word-jump-back-to-a-link/

2017-01-20

Unity - UI 객체 Picking

* UI 객체 피킹 확인
- UI 객체를 스크린 좌표를 기준으로 확인을 합니다.
- 이벤트 시스템에서 확인 가능합니다.

// 사용 이벤트 시스템 (eventObject는 예제로 설정)
EventSystem eventSystem = eventObject.GetComponentInChildren<EventSystem>();

PointerEventData pointerData = new PointerEventData(eventSystem);
pointerData.Reset();
Vector2 delta = new Vector2(1.0f, 1.0f);
pointerData.delta = delta;
pointerData.position = Input.mousePosition;

List<RaycastResult> rayResult = new List<RaycastResult>();
eventSystem.RaycastAll(pointerData, rayResult);
if (rayResult.Count > 0)
{
    // 판별 조건(예로 이름으로 판단)
    if (rayResult[0].gameObject.name == "ChracterSelectPanel")
    {
        return (true);
    }
}

return (false);

2016-12-29

C# - 배열 복사(Array Copy)

* C# 배열 복사(Array Copy)
 - System.Array.Copy()와 Clone()은 CopyTo()와 같은 메소드가 있다.레퍼런스 형태의 복사가 아니고 독립적인 메모리에 값을 설정합니다.


int[] src = new int[4] { 14, 15, 16, 17 };
int[] dstCopy = new int[4];
int[] dstCopyTo = new int[4];
int[] dstClone;

// 앞 2개의 값을 복사, 일부를 복사할 경우 사용
System.Array.Copy(src, dstCopy, 2);

// 목표 배열에 2번째 인덱스 부터 복사, 메모리 익셉션 주의
src.CopyTo(dstCopyTo, 2);

// 모든 항목을 복사(메모리를 할당)
dstClone = (int[])src.Clone();

2016-11-19

SVN - Tortoise SVN 오버레이 아이콘 사라지는 현상

* 윈도우즈 OS 10 기준입니다.
* TortoiseSVN 1.9.4, Build 27285  버전 기준입니다.

* TortoiseSVN 탐색기 오버레이 아이콘 복구
 - SVN을 사용하다 보면 아래 그림과 같이 변경된 사항에는 빨간 느낌표 아이콘이 뜹니다.



 - 그러나 어떤 순간에 수정 사항이 있어도 변경이 되지 않고 녹색 체크 아이콘으로 유지가 되는 현상이 있습니다
 - 이 현상은 윈도우즈에 등록된 오버레이 아이콘의 최대 개수가 한정되어 SVN 오버레이 아이콘이 우선 순위에 밀려 표현이 안되게 됩니다.
 - 우선 순위를 올려주면 간단하게 해결이 됩니다.
 - 레지스트리 에디터(regedit)을 실행창에서 실행합니다.
 - 편집/찾기에서 ShellIconOverlayIdentifiers을 찾습니다. (시간이 오래 걸릴 수 있습니다.)
 - 아래 그림과 같이 Tortoise 아이콘 관련값에 공백을 삽입하여 우선 순위를 올립니다.(재 부팅 전에는 아래쪽에 위치해 있습니다. 재부팅 필요)

  

 - 재부팅 후 아이콘이 정상적으로 나타나는 것을 확인할 수 있습니다.
 - TortoiseGit도 오버레이 아이콘을 같이 사용하는 것으로 보여 Git도 동일 문제가 발생하면 위와 같은 방법으로 처리하면 해결될 것으로 보입니다.

2016-05-30

SVN - 백업 및 복구

* 윈도우즈 OS 기준입니다.

* 백업
 - 커맨드 창을 관리자 모드로 실행합니다.
 - 레파지토리 위치를 확인합니다. (예: E:\Repositoryes\MyProject)
 - 커맨드 창에서 "svnadmin dump E:Repositoryes\MyProject > D:\MyProject_backup.dmp"와 같이 입력합니다.

* 복구
 - 커맨드 창을 관리자 모드로 실행합니다.
 - 레파지토리 위치를 확인합니다. (예: E:\Repositoryes\MyProject)
 - 복구할 위치에 레파지토리가 없다면 생성해 주어야 합니다.
 - 커맨드 창에서 "svnadmin create E:\Repositoryes\MyProject"와 같이 입력하면 생성됩니다.
 - 레파지토리를 확인 했으면 커맨드 창에서 "svnadmin load E:\Repositoryes\MyProject < D:\MyProject_backup.dmp"와 같이 입력을 하면 복구가 완료됩니다.

2016-05-03

Redmine - 레드마인 데이터 백업 및 복원

* Bitnami Redmine 2.6.x 버전을 기준으로 합니다.

* 백업
 - 레드마인 설치 폴더로 이동
 - apps/redmine/htdocs/config/database.yml 파일을 메모장으로 열어 database,  
   username, password 내용을 확인 합니다.
 - 레드마인 설치 루트 폴더에서 use_redmine.bat 실행합니다.
 - 커맨드 창에서 mysqldump -u [username] -p [database] > redmine_backup.sql을
   입력하고 엔터를 치고 password를 입력합니다.
 - redmine_backup.sql 파일로 데이터 베이스가 백업됩니다.
 - \apps\redmine\htdocs\files 폴더에 있는 파일을 압축하여 별도 보관합니다.

* 복원
 - 레드마인 설치 후 설치 폴더로 이동 합니다.
 - 데이터 베이스 백업 파일을 레드마인 루트 폴더에 복사합니다.
 - \apps\redmine\htdocs\files 폴더에 별도 압축한 파일을 풀어 복사합니다.
 - apps/redmine/htdocs/config/database.yml 파일을 메모장으로 열어 database,  
   username, password 내용을 확인 합니다.
 - 레드마인 설치 루트 폴더에서 use_redmine.bat 실행합니다.
 - 커맨드 창에서 mysql -u [username] -p [database] < redmine_backup.sql을
   입력하고 엔터를 치고 password 입력합니다.

2016-02-26

Unity - 안드로이드 폰에서 뒤로가기 버튼 처리

* 안드로이드 폰에서 뒤로가기 버튼은 일반 PC의 ESC 버튼으로 인식한다.

* 아래와 같이 처리해주면 뒤로가기 버튼 처리가 된다.


void    Update()
{
#if UNITY_ANDROID
    if (Input.GetKey(KeyCode.Escape))
    {
        // 여러가지 처리들
        Application.Quit();
    }
#endif
}

2015-11-17

Unity - 앱스토어, 플레이스토어 링크 및 웹 페이지 열기

[iOS 앱 스토어 링크 열기]

* 앱 스토어 앱으로 열기

   Application.OpenURL("itms-apps://itunes.apple.com/app/id1234567890")



[Android 플레이 스토어 링크 열기]

* 마켓 앱으로 열기

   Application.OpenURL("market://details?id=com.Company.Project");


* 일반 웹 브라우져로 열기

   Application.OpenURL("https://play.google.com/store/apps/details?id=com.Company.Project");


[일반 웹 페이지 열기]

* 일반 웹 브라우져로 열기
 - 일부 Adroid 기기에서는 "http:"를 생략하면 링크가 열리지 않는 현상이 있음

   Application.OpenURL("http://redkim14.blogspot.kr/")