유니티
-
유니티 화면 비율 고정 처리...12일지 2021. 10. 10. 00:49
[StructLayout(LayoutKind.Sequential)] public struct RECT { public int Left; public int Top; public int Right; public int Bottom; } SetResolution의 문제점 유니티에서 제공하는 SetResolution 함수를 그대로 사용했을 때 문제라고 할 수 있는 부분은 화면을 이동시켰다가 크기를 변경했을 때 그 자리에서 바뀌는 게 아니라 화면 중앙으로 이동하는 부분이 존재한다. 키보드를 주로 컨트롤로 사용하는 게임이라면 문제가 되지 않을 수 있으나 방치형 혹은 자동 사냥이 있는 게임의 경우에는 모니터의 한쪽으로 치워두고 다른 작업을 하는 경우가 대부분이므로 이 방식은 문제가 있을 수 있다. 화면 이동 문제 ..
-
유니티 화면 비율 고정 처리...11일지 2021. 10. 6. 11:52
화면 비율 변경 횟수 변경 화면 비율 변경 처리가 씹히지 않도록 SetResolution를 여러 번 반복하도록 코드를 추가했다. ResolutionController.cs public class ResolutionController : MonoBehaviour { // ... public int RefreshCount { get; set; } = 3; // ... private IEnumerator SetFixedResolution() { // ... for (int i=0; i< RefreshCount; i++) { Screen.SetResolution(m_screenSizeX, m_screenSizeY, false); yield return null; } // ... } // ... } 실행 결과는 ..
-
유니티 화면 비율 고정 처리...10일지 2021. 10. 5. 18:43
화면 비율 고정 처리 동작 안 하는 경우 확인 비율 처리가 동작하지 않는 경우에 대한 처리를 확인하기 위해 코드를 조금 정리해서 상태에 따라 값을 출력하도록 했다. ResolutionController.cs using System; using System.Collections; using System.Runtime.InteropServices; using UnityEngine; using UnityEngine.UI; public class ResolutionController : MonoBehaviour { public float AspectX { get; set; } = 16; public float AspectY { get; set; } = 9; public Text m_debugText; #regi..
-
유니티 화면 비율 고정 처리...9일지 2021. 9. 29. 14:10
마우스 버튼 처리 완료 이전에 조사한 결과와 추가로 GetAsyncKeyState이 어떤 값을 리턴하는 지를 확인한 결과 마우스 버튼을 뗐을 때 화면 비율 변경 처리가 진행되도록 처리할 수 있었다. 먼저, GetAsyncKeyState의 리턴은 다음과 같다. 0x8000 키가 현재 눌려진 상태 0x0001 뗀 상태에서 눌린 상태로 변경되는 순간의 상태 ※ 0x0001은 해당 순간을 놓칠 수 있으므로 0x8000을 사용했다. 그런데 마우스를 놓는 순간에 다른 위치로 마우스를 이동하면 크기 조정이 제대로 되지 않는 문제가 발생했다. 이 문제는 마우스를 놓는 타이밍을 정확하게 받거나 움직이는 것을 무시할 수 있는 방법을 찾아봐야 할 것 같다. 더보기 참고문헌 C++ Forum.GetAsyncKeyState
-
유니티 화면 비율 고정 처리...8일지 2021. 9. 28. 15:46
감지 처리 실패 유니티의 입력으로 처리를 하려고 했으나 여전히 창 내부만 지원하기 때문에 감지가 되지 않았다. 윈도우에서 직접 클릭한 정보를 받아올 필요가 있다. ResolutionController.cs private void Update() { if (m_isUpdating) { return; } IntPtr hCursor = GetCursor(); if (!m_isChanging && IsChanging(hCursor) && Input.GetMouseButtonDown(0)) { m_isChanging = true; Debug.Log("StartChange"); } else if(m_isChanging && Input.GetMouseButtonUp(0)) { StartCoroutine(SetFixe..
-
유니티 화면 비율 고정 처리...7일지 2021. 9. 27. 20:20
커서를 이용한 사이즈 조절 처리 커서를 받아오고 사이즈 변경에 관련된 커서가 아닐 때 사이즈를 변경하도록 수정했다. ResolutionController.cs using System; using System.Collections; using System.Runtime.InteropServices; using UnityEngine; public class ResolutionController : MonoBehaviour { public float AspectX { get; set; } = 16; public float AspectY { get; set; } = 9; #region ENUMERATIONS private enum Cursors { IDC_ARROW = 32512, IDC_SIZENESW = 3..
-
유니티 화면 비율 고정 처리...6일지 2021. 9. 24. 22:03
커서 확인용 함수 확인 현재 커서의 핸들을 가져오는 함수인 GetCursor의 동작을 확인했다. 그러나 GetIconInfo로는 다른 아이콘의 핸들 정보를 알 수 없었기에 다른 함수를 찾아봤으며 찾기 결과 LoadCursorA라는 함수를 찾을 수 있었다. HCURSOR LoadCursorA( HINSTANCE hInstance, LPCSTR lpCursorName ); HCURSOR와 HINSTANCE는 IntPtr로 대체할 수 있으며 LPCSTR을 string으로 대체할 수 있다. 수정하여 진행했으나 결과가 제대로 나오지 않았다. 추가로 더 찾아보니 C#에서는 다음과 같이 사용할 수 있다고 한다. [DllImport("user32.dll")] static extern IntPtr LoadCursor(I..
-
유니티 화면 비율 고정 처리...5일지 2021. 9. 20. 13:12
WinAPI 마우스 처리 함수 마우스의 상태를 가져오는 함수들을 찾아보면 다음과 같은 종류가 존재한다. GetCursor 커서의 핸들을 반환한다. GetCursorInfo 커서의 CursorInfo(커서 핸들, 커서 좌표) 구조체를 반환한다. GetCursorPos 커서의 좌표를 반환한다. GetIconInfo 주어진 커서 혹은 아이콘의 이미지를 반환한다. LoadCursorA 변수 중 hInstance를 null로 하고 원하는 커서 모양의 번호를 입력하면 미리 정의된 커서의 핸들을 반환한다. 이상의 함수에서 얻을 수 있는 정보 중 그나마 처리할 만한 건 GetCursor로 현재 커서를 가져온 뒤 LoadCursorA로 Resize와 관련된 커서의 핸들을 가져와 비교하여 현재 화면 크기 변경이 진행되고 ..