전체 분류
유니티 빌드 중 겪은 문제 정리
유니티 빌드 중 겪은 문제 정리
2023.08.24유니티 빌드를 하다 보면 별별 오류를 다 겪는다. 주로 SDK가 원인인 경우가 많다. 그 오류들의 원인은 대체 무엇이고 해결 방법은 무엇인지 알아보는 글이 되겠다. 그리고 인터넷에 널린 글들을 찾아볼 필요 없도록 그냥 이 글에 다 넣어버릴 예정이다. 페이스북 SDK 에러 : debug.keystore 없음 [콘솔] Your Android setup is not correct. See Settings in Facebook menu. [경고] Your android debug keystore is missing! You can create new one by creating and building empty Android project in Eclipse. 해결 방법 아무 유니티 프로젝트에서 Android ..
LeetCode 23.08.16 : Sliding Window Maximum
LeetCode 23.08.16 : Sliding Window Maximum
2023.08.17https://leetcode.com/problems/sliding-window-maximum/ 풀이 - 보자마자 이중 for문? 생각했지만 제한조건에 nums.length가 10의 5승인 걸 보고 그만둠. - 우선순위 큐로 최초 k 사이즈만큼의 num들을 정렬해놓고, 다음 k + index에 위치한 숫자를 EnQueue하는 방식으로 생각. - 우선순위 큐 검색 도중 window 안에 들어와있는 값이 아니면 삭제해보도록 하자. - 닷넷에는 이미 구현된 PriorityQueue가 있다. public class IntMaxCompare : IComparer { public int Compare(int x, int y) => y.CompareTo(x); } static int[] Solution(int[] n..
ZString 라이브러리는 어떻게 제로 할당을 주장하는가
ZString 라이브러리는 어떻게 제로 할당을 주장하는가
2023.08.04string을 매번 선언할 때마다 메모리 할당이 일어나는 것은 당연한 일이지만, 그만큼 경계해야 할 일이기도 하다. 특히나 프레임마다 string을 선언하거나 stringBuilder 없이 문자열을 합치는 것은 성능 상 좋지 않다. 이러한 메모리 할당을 줄이는 방법은 굉장히 다양하지만, 이번 글에서는 가장 금방 적용할 수 있는 라이브러리를 소개한다. https://github.com/Cysharp/ZString GitHub - Cysharp/ZString: Zero Allocation StringBuilder for .NET and Unity. Zero Allocation StringBuilder for .NET and Unity. Contribute to Cysharp/ZString developmen..
Unity 인스펙터 꿀팁 알아보기
Unity 인스펙터 꿀팁 알아보기
2023.08.03이전 사수분이 유튜브 유니티 11가지 꿀팁 영상을 공유해주셨는데, 개발자 입장에서 내용이 굉장히 유익했다. 이런 자잘한 꿀팁들이 또 존재할 것 같아서, 영상들과 유니티 공식 메뉴얼을 뒤져보았다. 이 글은 그 결과로 나온 요약글이다. 프로그래머가 아니더라도 인스펙터를 자주 만지는 사람들에게 유용할 것이라고 생각한다. 사실 그 때에는 인스펙터 프리셋 기능도 정리했었는데, 결국 안 쓰게 되서 그 부분은 제외했다. 궁금하신 분은 공식 블로그 글을 확인해보는 것도 괜찮을 듯. 아무튼 본론으로 들어간다. 여러 오브젝트 한번에 일렬로 배치하기 주의, 유니티 2021 버전 이상만 가능하다. 여러 오브젝트를 선택한 뒤에 숫자 프로퍼티에 L(최솟값, 최댓값)을 입력하면 알아서 일렬로 배치된다. L은 Linear의 약자인 ..
불면증 상담
불면증 상담
2023.06.27"글쎄, 어떤 불안감에서 오는 걸까." 며칠 동안이나 눈을 갑자기 뜨던 그가 중얼거렸다. 잠을 제대로 못 잤다는 그의 주장과는 달리 눈 밑의 어둠은 보이지 않았다. 모순적이게도 기운이 넘쳐 보였기에 어쩐지 부럽다는 생각이 들었다. "아무래도 걱정이지만 나쁘진 않아. 이것저것 하니까 재밌어졌거든." 그리고는 잠들지 못한 대가로 완성한 목도리를 보여 준다. 쓸데 없는 것에 시간을 허비한 것 같다는 생각을 하다가, 무례한 것 같아 괜히 뻣뻣이 고개를 든다. 그는 이어서 최근의 고민을 털어놓는다. "내가 보기엔, 너무 할 게 많아서 그러는 것 같아." "주말에 열심히 쉬었다고 하지 않았어?" 그가 배를 부여잡고 아픈 표정을 짓는다. 어이 없네, 진짜로. "해야 한다랑 쉬고 싶다가 충돌한다는 거지 " "뭐... ..
~06/23 Log
~06/23 Log
2023.06.23
방향치
방향치
2023.06.18억눌린 채로 그 괴물이 나를 들여다본다. 그것은 소름끼치게 이를 드러내며 웃는다. 반달같은 눈웃음을 지으며 그 안광으로 나를 노려본다. 두렵다. 통제되어 나에게 해를 끼치지 못할 것을 알고 있음에도. 나는 장치를 손에 들고 있었다. 하나는 그것에게 고통을 주는 버튼. 또 다른 하나는 그것을 해방할 수 있는 버튼이다. 나는 그것이 갑자기 소리를 질러서, 화들짝 놀라 오른쪽 버튼을 실수로 눌러버리는 나를 상상한다. 그 결말은 나의 죽음일까, 아니면 영원한 괴로움일까. 그것의 눈동자가 나를 탐욕적으로 바라보고 있으니, 좋은 결말이 아닐 것은 분명하다. "이제 오른쪽 버튼을 누르세요." 뒤에 있던 나의 안내자가 말한다. 나는 순간, 멈칫하여 뒤를 돌아본다. "아니, 농담이에요. 정말 누르려고 했던 것도 아니잖아..
절제
절제
2023.03.11그는 정돈된 삶을 살았다. 주변 이들에게 자신의 욕망을 내보이지 않았고, 솔깃한 제안이 들어오더라도 미소를 지으며 흘려냈다. 그를 아는 사람들에게는 가장 완벽한 사람이었다. 오랜 세월을 절제하며, 사람들이 자신을 존중하며, 그저 넓은 바다를 유영하는 삶이었다. 하지만 가장 그와 오래 했던 친구는 그것이 불만이었다. 자신의 의견을 드러내는 일도 없음. 무엇을 원하는 지 알 수 없으니 더 접근할 수도 없음. 그러니 그를 좋아하는 사람들이 진정으로 그와 함께할 수 있겠는가? 절제하는 것이 수동적으로 자신에게 주어지는 모든 것들을 받아들이는 삶인가? 친구는 항상 그를 위해 조언하고, 토론하려 노력했다. 그러나 그는 그것에 동의하면서도 익숙하지 않은 삶의 방식을 택할 수는 없었다. 친구는 서로의 욕망을 건전하게 ..
언어권에 따른 String 변환에 주의하자
언어권에 따른 String 변환에 주의하자
2023.02.20무언가의 객체에 대한 ToString()은 별 신경을 쓰지 않고 사용하기 쉬운 메서드이지만, 글로벌 런칭을 주로 한다면 생각보다 사용에 주의가 필요하다. DateTime 파싱 데이터에는 보통 생성 시간이나 수정 시간이 들어가지만, 유니티에서는 DateTime을 Serialize하지 못한다. 이 때문에 나는 보통 DateTime을 String으로 바꿔 저장하고, 불러올 때에는 DateTime.Parse를 쓰고 있다. //세이브 할 때 UtcNow_string = DateTime.UtcNow.ToString(); //로드 할 때 UtcNow_dateTime = DateTime.Parse(UtcNow_string); 하지만 세이브와 로드 사이에 언어권이 변경되는 경우 이 구문은 오류가 날 수 있다. DateT..
is null 연산은 유니티의 ==를 사용하지 않는다
is null 연산은 유니티의 ==를 사용하지 않는다
2023.02.09원인 C# 9.0에서 추가된 패턴 일치 중, not 패턴은 해당 패턴이 일치하지 않도록 요구하는 기능이다. 개인적으로는 A != null을 사용하는 것보다 A is not null을 사용하는 것이 명확하다고 생각했기에, 개발 중인 코드의 조건문에 is를 적극적으로 사용하기로 하였다. 그러나… public Animator Animator { get { if (animator is null) animator = GetComponent(); return animator; } } 위의 코드는 animator == null일 때 새 애니메이터를 찾아 대입하는, 아주 명확하고 간단한 코드다. 하지만 파이어베이스에서는 해당 구문에 참조가 없다며 오류를 뿜어내고 있었다. null 체크로 오류가 날 만한 것은 unity..
Test Framework 적용하기
Test Framework 적용하기
2023.01.27근래 테스트 자동화와 리포팅의 필요성을 느껴 프로젝트에 Unity Test Framework를 적용하려 한다. 어떻게 적용하는지, 코드 작성 방법은 무엇인지 알아보는 글이 되겠다. Test Framework 시작하기 Package Manager에서 Test Framework를 설치하고, Window/General/Test Runner를 실행해준다. Test Framework 적용하기 이 창에서 테스트 코드를 만들거나 재생할 수 있다. 상단에 PlayMode/EditMode가 나뉘어져 있는 것을 확인할 수 있는데, PlayMode는 에디터 플레이 중에 작동한다. 반면에 EditMode는 에디터에서만 작동하므로 에디터 전용 테스트에 유용할 것이다. 아무튼, 나는 PlayMode에서 테스트 항목을 만들고 싶었..
C# 9.0 새 기능 알아보기
C# 9.0 새 기능 알아보기
2023.01.16최근 유니티 2021 버전을 주로 사용하게 됨에 따라, C# 9.0의 기능을 정리할 필요성을 느껴 오랜만에 포스팅을 한다. 2022 버전에서도 C# 9.0을 사용하고 있으니 당분간 C# 신기능 포스팅은 이후로는 없을 듯 하다. 마이크로소프트 공식 문서를 참조했다. 레코드 레코드(record) 형식이 새로 추가되었다. 변경할 수 없는 데이터 모델을 지원하기 위해 만들어졌다. 레코드는 초기화 한 뒤에는 객체 내의 멤버들을 변경할 수 없다. public record Person(string FirstName, string LastName); public record Person { public string FirstName { get; init; } = default!; public string LastNam..