List의 크기를 알 경우 Capacity를 미리 설정하자. capacity를 넘어가면 재할당 후 복사하므로 비용이 크다. (반복문에서 빈번하게 일어날 경우...) capacity가 증가될 시 count에 따라 기하 급수적으로 커질 수 있다. capacity * T.Size 만큼 메모리를 잡고 있으므로 낭비가 크다. (게임에서는 중요!) List에 삽입할 개수를 미리 안다면 Capacity를 미리 설정하여 메모리를 확보하는 습관을 가지자. 클라이언트 프로그래머의 일기/신입 클라이언트 프로그래머의 일기 2021.05.17
IOS) You must specify cliendID for GIDSignIn Error 해결 방법 유니티 버전 : 2019.4.18f1 XCode 버전 : 12.4 에러 기기 : 모든 IOS 기기 에러 원인 : 유니티 버전이 올라가면서 Xcode에서 Target membership에 UnityFramework 란게 추가 됨. 그러면서 동시에 내 plist 파일이 Unity-iPhone을 바라보는 것이 아닌 UnityFramework를 자동으로 바라봄. 해결 방법 : 해당 에러나는 plist 파일의 Target Membership을 Unity-iPhone으로 바꿔준 후 빌드하면 해결 됨. 에러 로그 : 더보기 Uncaught exception: NSInvalidArgumentException: You must specify |clientID| for |GIDSignIn| 해당 에러는 App을 실행한 후.. 클라이언트 프로그래머의 일기/신입 클라이언트 프로그래머의 일기 2021.02.19
IOS) UnityAppcontroller renderingAPI Error 해결 방법 유니티 버전 : 2019.4.18f1 에러 기기 : IPhone5(IOS 10) 에러 원인 : 유니티의 Auto Graphics API가 더이상 OpenGLES을 자동으로 추가해주지 않음. 해결 방법 : Player Settings -> Other Settings -> Auto Graphics APi를 체크 해제 한 후 OpenGLES를 추가 해 준다. 에러 로그 : 더보기 Uncaught exception: NSInternalInconsistencyException: [UnityAppController renderingAPI] called before [UnityAppController selectRenderingApi]Uncaught exception: NSInternalInconsistencyExc.. 클라이언트 프로그래머의 일기/신입 클라이언트 프로그래머의 일기 2021.02.19
NGUI TweenScale(UITweener.cs)의 Reset과 Play NGUI를 사용하면 아래와 같이 From -> To로 Scale 값을 조정 할 수 있는 기능이 있습니다. 이 Tween Scale을 Script에서 관리하고 싶은 경우에 대해서 알아보겠습니다. Tweener의 상태를 수동으로 재설정 하는 함수입니다. public void ResetToBeginning () { mStarted = false; mFactor = (amountPerDelta < 0f) ? 1f : 0f; Sample(mFactor, false); } 프로세스를 수동으로 활성화하고 필요한 경우를 되돌리는 함수입니다. public void Play (bool forward) { mAmountPerDelta = Mathf.Abs(amountPerDelta); if (!forward) mAmount.. Unity 2021.01.19
유니티 메뉴창에 원하는 메뉴 띄우는 법(MenuItem) 아래 사진과 같이 메뉴창에 원하는 메뉴를 띄우는 방법입니다. 스크립트 최상단부에 using UnityEditor; 을 선언해줍니다. 그 후 원하는 곳에 [MenuItem("원하는메뉴이름/목록") 을 넣어주면 됩니다. Unity 2021.01.15
백준 2908 상수(C++) 문제 상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두 개를 칠판에 써주었다. 그 다음에 크기가 큰 수를 말해보라고 했다. 상수는 수를 다른 사람과 다르게 거꾸로 읽는다. 예를 들어, 734와 893을 칠판에 적었다면, 상수는 이 수를 437과 398로 읽는다. 따라서, 상수는 두 수중 큰 수인 437을 큰 수라고 말할 것이다. 두 수가 주어졌을 때, 상수의 대답을 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 상근이가 칠판에 적은 두 수 A와 B가 주어진다. 두 수는 같지 않은 세 자리 수이며, 0이 포함되어 있지 않다. 출력 첫째 줄에 상수의 대답을 출력한다. 예.. 백준 알고리즘 연습 2020.11.20
C# System.Collections.Generic의 List와 SortedSet에 대하여. 우선 이 글을 쓴 이유는 IronSource에서 Dependencies를 붙이는 과정에서 발생한 문제를 해결하기 위함이다. 해당 유니티 프로젝트의 버전은 2017.4.36f1 버전이었으며, SortedSet은 정확히 몇 버전부터 제공되는지는 모르겠지만 2018.4.13f1 버전으로 실행했을때에는 제공 됐다. 해당 DependenciesManager는 SortedSet의 IComparer 를 활용하여 선언함과 동시에 비교 후 Sort까지 하고있었다. 하지만, 우리의 프로젝트는 2017 버전이었기에 SortedSet을 사용할 수 없었다. 그래서 문제를 해결하기 위해 SortedSet의 구조를 파악하던 중 LIst와 많이 유사한 것을 알 수 있었다. 그래서 해당 SortedSet을 List로 선언 한 다음 I.. 클라이언트 프로그래머의 일기/신입 클라이언트 프로그래머의 일기 2020.11.03
AndroidX Migration이란? Migration이란 한 운영환경으로부터, 대게의 경우 좀 더 낫다고 여겨지는 다른 운영환경으로 옮겨가는 과정을 말합니다. 즉 여기서 AndroidX Migration은 더 나은 환경인 AndroidX로 운영환경을 옮기는 과정을 뜻합니다. AndroidX는 API Level 28로 그 미만인 14~27까지의 API를 Migration 하는 작업입니다. 이걸 하는 이유는 2020년 8월 쯤 부터 모든 Android App이 PlayStore에 등록 할 때 AndroidX로 등록해야 하기 때문입니다. Migration 하는 방법. 1. Android Studio의 최신 버전으로 업데이트 합니다.(PC에 안깔려 있다면 최신버전 다운하면 됩니다.) 1) 메뉴창에 Help -> Check for update를 클.. 클라이언트 프로그래머의 일기/신입 클라이언트 프로그래머의 일기 2020.10.26
NGUI 이벤트 정리 1. OnHover(bool state) - 터치가 되면 계속적으로 이벤트가 발생되는 함수입니다 state로 내가 터치중인지 아닌지가 되고 터치를 오브젝트에서 때거나 범위를 벗어났을 경우 false가 됩니다. 제가 사용했던 적은 리듬게임에서 롱노트를 처리할 때 사용했습니다. 2. OnPress(bool state) - 터치를 시작할 때 한번만 발생되는 함수입니다. 마찬가지로 state로 터치를 했는지를 알수 있구요. 어짜피 터치 시작시 함수가 호출되므로 state의 큰 의미는 없다고는 생각되지만 이용되야 하는 상황도 있겠죠 (아 옛날 소스 보다 수정합니다. OnPress로 롱노트 처리를 하였고 터치시작시 true. 땔시 false가 호출됩니다) 주로 버튼 이벤트에 쓰이는데 보통 버튼이라면 OnClick을.. 클라이언트 프로그래머의 일기/신입 클라이언트 프로그래머의 일기 2020.10.26
모바일 게임 Wifi 기능 연동 시 사용 할 함수들. 만약 게임에 기능을 추가하게 된다면 사용 하려고 만든 함수들 입니다. 1. 와이파이 세기 측정.(API Level에 따라 2개로 나뉨.) // Android API 30 미만에서 사용 할 함수 ( 20/10/26 기준 최신 API는 29 입니다.) private static int GetSignalLevel(int numberOfLevels) { using (var activity = new AndroidJavaClass("com.unity3d.player.UnityPlayer") .GetStatic("currentActivity")) { var wifiManager = activity.Call("getSystemService", "wifi"); var wifiInfo = wifiManager.Call(.. 클라이언트 프로그래머의 일기/신입 클라이언트 프로그래머의 일기 2020.10.26