* C# 스크립트에서 텍스트를 대입하면 실행시 깨져서 나오는 경우가 있습니다.
예) _uiTitleText.text = "한글입력확인";
* 아무리 봐도 로직상에 문제가 없다면 스크립트 파일 형식이 UTF-8 형식으로 바꾸어 줘야합니다.
* VS나 기타 에디터로 스크립트를 UTF-8 형식으로 바꾸고 다시 저장하면 해결이 됩니다.
* Git이나 다른 소스 관리 툴이 파일 형식을 자동으로 바꿀수 있으니 그 부분도 확인해야 합니다.
2018-10-26
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일 수 있으나 잘 작동합니다.
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-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();
}
* Prepare된 상태의 이벤트 핸들러를 등록할 수 있습니다.
public VideoPlayer _videoPlayer;
void Awake()
{
_videoPlayer.prepareCompleted += OnVideoPrepared;
_videoPlayer.clip = Resources.Load<VideoClip>("ExamClip");
_videoPlayer.Prepare();
}
void OnVideoPrepared(VideoPlayer source_)
{
_videoPlayer.Play();
}
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-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);
- 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-02-26
Unity - 안드로이드 폰에서 뒤로가기 버튼 처리
* 안드로이드 폰에서 뒤로가기 버튼은 일반 PC의 ESC 버튼으로 인식한다.
* 아래와 같이 처리해주면 뒤로가기 버튼 처리가 된다.
void Update()
{
#if UNITY_ANDROID
if (Input.GetKey(KeyCode.Escape))
{
// 여러가지 처리들
Application.Quit();
}
#endif
}
* 아래와 같이 처리해주면 뒤로가기 버튼 처리가 된다.
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:"를 생략하면 링크가 열리지 않는 현상이 있음
피드 구독하기:
글 (Atom)