반응형 개발878 Unity) 워크플로우 속도 향상을 위한 기능 5가지(2019 v) 워크플로우 속도 향상을 위한 기능 5가지(2019 v) 워크플로우 속도 향상을 위한 5가지 기능을 발췌했다. 1) 플레이 모드(Enter Play Mode) 2) 에셋 임포트(Asset Import Pipeline) 3) 에셋 관리(Addressable) 4) 디바이스 프리뷰(Device Simulator) 5) 패치 빌드(Script Only Patching) Unity Korea에서 공개한 기능으로 'Dev Week : 워크플로 속도 향상을 위한 기능 소개'를 편집한 포스팅입니다. 원본 URL :https://www.youtube.com/watch?v=Kel7NIP2AOg ------------------------------------------------------------------------.. 2020. 6. 1. Unity) 프로파일러( Profiler ) 프로파일러( Profiler ) 프로파일러는 게임을 최적화하는데 최적화된 툴이다. GPU, CPU, 렌더링, 메모리 등 여러 가지 정보를 보여준다. 프로파일링을 켜놓고 게임을 재생하면 성능에 대한 데이터를 기록해준다. 사용방법은 다음과 같다. [Window] -[Analysis] -[Profiler] 하게되면 Profiler 창이 나온다. 프로파일링을 켜놓고 게임을 재생하면 성능에 대한 데이터를 기록해준다. 개발을 진행하면서 많이드 보는 카테고리는 CPU 항목과 렌더링 항목이다. 런타임 상황에서 오브젝트를 생성하거나 연산을 하는 과정에서 유니티 특성(C#)에서 GC 콜이 발생하는 과정에서 많은 부하가 생기고 프레임 드랍을 많이 경험하기 때문이다. 프로파일러의 항목을 자세히보면 상세정보를 볼 수 있는데 현.. 2020. 6. 1. Unity) MeshCollider.convex MeshCollider.convex 오늘의 삽질은 Fbx의 파일에서 충돌 영역 관련돼서 맵에 구멍(Hole) 처리를 한상황에서 물리를 적용했을 경우에(RigidBody) 충돌 여부 관련돼서 convex의 여부를 깜빡해서 나왔다. ' MeshCollider.convex '의 설명음 다음과 같다. 충돌 감지를 위해 사용되는 메쉬 오브젝트를 나타냅니다. 이것을 true로 설정하게 되면, 해당 메쉬 충돌체는 구멍(holes)이나 입구(entrances)를 갖지 않습니다. 컨벡스 메쉬는 다른 컨벡스 충돌체나 컨벡스가 아닌 메쉬들과 충돌이 가능합니다. 따라서 만약 제공되는 기본 충돌체보다 더 디테일한 충돌체가 필요한 경우라면, 컨벡스 메쉬 충돌체는 강체들에서 적합합니다. 체크를 하게 되면 메쉬의 콜라이더가 구멍을 .. 2020. 6. 1. 코드) 리스폰 가능한 포지션 가져오기(방해물 영역제외) 리스폰 가능한 포지션 가져오기(방해물 영역제외) 게임을 만들다보면 게임 장르특성에 따라 다르긴하지만 . 리스폰영역에대한 고민을 할때 구현했던 코드들이다. 기본적으로 겹쳐서 생성하면안되는 로직으로 처리를 했고 distance를 기반으로 해당 위치를 제외하고 리스폰 영역을 구하도록 작업했다. public Vector3 GetNotObstaclePosition(List _obstacle) { Vector3 returnValue = Vector3.zero; bool flag = false; do { returnValue = this.GetIntPosition(Random.insideUnitSphere * 100f); returnValue.y = 0f; if(false == Utill.Instance.CheckM.. 2020. 5. 29. 코드) c# 날짜계산하기(DateTime 비교) c# 날짜 계산하기 게임 작업을 하다 보면 시간을 기준으로 처리하는 로직들이 꽤나 많이 필요하다. 유틸 함수로 따로 처리해두고 필요할 때 사용하면 편리하다. 현재 날짜와 저장된 날짜와 비교하기 System.DateTime currentDate = System.DateTime.Now; System.DateTime prevDate = DateTime.Parse(missionAttendanceValue); System.TimeSpan timeCal = currentDate - prevDate; if( timeCal.Days == 0 ){ //return; //같은날인경우 } 하루를 기준으로 갱신되는 시간 값 가져오기 private void UpdateTimeInfo() { DateTime today = Dat.. 2020. 5. 29. 개발일지)맞고 시뮬레이터 개발일지 -2 맞고 시뮬레이터 개발일지 -2 맞고에 대한 룰을 기반으로 먹는 위치라던지 점수를 추가한 플레이어 작업을 진행했다. 현 진행은 다음과 같다. 1. 맞고의 룰 만들기 2. 플레이어 만들기 (현시점) 3. 유효한 시드(승률 데이터 밸런스 데이터 만들기) 작업된 영상은 다음과 같다. 1차적으로는 플레이어가 맞고의 룰(한턴당 한번 [1초])에 의거해서 자신의 카드(초록색)에서 카드를 선택하게 되고 그 선택한 카드를 내면 바닥 패(빨간색)에서 먹을 수 있는 카드를 조건에 의거한 검사를 진행하고 자신의 먹 은패(파란색)에 해당 먹은 카드를 포지션에 맞게 위치한다. 그리고 이후에는 점수에 대한 계산을 한다. 지금은 Go, Stop과, 폭탄, 흔들기 등등에 대한 추가 작업이 남아있다. 작업을 진행하면서 가장 많이 고민했.. 2020. 5. 26. 개발일지) 맞고 시뮬레이터 개발일지 -1 맞고 시뮬레이터 개발일지 -1 맞고의 시뮬레이터를 작업하고 있다. 목표는 특정 어떤 시드를 기준으로 최선의 선택을 하는 과정에 대한 작업을 하고 있다. 첫날은 에디터에 대한 작업과 구조작업을 진행했고 에디터를 만들어갈 예정이다. 맞고는 테이블 게임으로 고나 스톱으로 게임을 중단할수 있는 흔히 '도박'으로도 많이 쓰이는 카드게임류 이다. 맞고는 10장의 패를 가지고 7점부터 'Go, Stop'을 선택할수 있다. 목표는 다음 과 같다. 1. 맞고의 룰 만들기 (현 시점) 2. 플레이어 만들기 3. 유효한 시드(승률데이터 밸런스 데이터 만들기) 유효한 밸런스 데이터를 만들면 이걸 기반으로 여러가지 테스트를 할 예정이다. 오늘 작업한 리스트는 맞고에 대한 룰 만드는 과정에서 1차 테스트를 해본 결과이다. 기본적.. 2020. 5. 18. 게임개발) 갸챠(랜덤 선택연출) 갸챠(랜덤 선택연출) 확률을 기반으로 갸챠(Gacha)의 연출을 하는 작업들을 굉장히 많이 한다. 이번에 한 연출을 정리하려고한다. 작업은 여러 개의 데이터를 연출로 표현 랜덤으로 선택이 되다가 천천히 느려져서 선택이 되는 연출을 하려고 한다. 연출의 조건은 다음과 같다. 1. 모든 후보자 데이터들이 한번 이상은 선택이 되어야 한다. 2. 천천히 느려져서 결정된 데이터를 선택이 되어야 한다. 3. 선택이 된 데이터를 제외한 나머지에 대해서 연출을 진행한다. 작업된 영상은 다음과 같다. 선택이된 상태(빨간색) / 결정된 상태(노란색) / 결정이안된 상태(흰색) 간단하게 테스트를 해봤는데 다른 곳에서도 잘 사용할 수 있을 것 같아서 이렇게 정리하게 되었다. 어디에서든 갸챠(뽑기)에 대한 연출은 쪼는 맛이 있.. 2020. 5. 13. 문제해결) Raycast Target (터치가 안되는 삽질) Raycast Target (터치가 안 되는 삽질) 해결 UI 작업을 하던도중 버튼에 버튼이 클릭이 안 되는 경우가 생겼다.삽질과 삽질 끝에 확인된건 Debug 용으로 사용하던 Text의 'Raycast Target'이 활성화되어있던 것이었다.왼쪽의 버튼은 정상적으로 클릭이 되었지만 오른쪽의 광고보기 버튼은 Text의 영역 안에 포함되어 잇고 Raycast 세팅이 되어있어서 버튼까지 이벤트가 가지 않고 텍스트가 받았던 것이었다. 이런 간단한 삽질을 이런저런 버튼 설정이라던지 삽질을 하고 알게되었다. ㅠㅠ Unity Event System : [링크] 이벤트 시스템 - Unity 매뉴얼이벤트 시스템은 키보드, 마우스, 터치, 커스텀 입력 등 입력 기반 애플리케이션의 오브젝트에 이벤트를 전송하는 방법입니다.. 2020. 5. 11. 기본기) 우선순위 큐(Priority Queue) 우선순위 큐(Priority Queue) Queue에 우선순위에 대한 기능이 추가된 확장된 개념이다. 큐의 기본 메서드인 'Push', 'Pop', 'Top' 등등을 사용한다 Pop(가져오는 과정)에서 제일 먼저 들어온 데이터를 반환하지 않고 현재 우선순위 큐 내부에서 가장 우선순위가 높은 데이터를 반한 한다. 우선순위 큐는 보통(heap)이라는 자료구조로 구현되고 내부는 정렬을 기본적으로 처리된다. '모든 정점은 자신의 자식보다 우선순위가 높다'. 시간 복잡도는O(logN)가 되고 내부는 역시 이진트리로 되어있다. ★☆☆☆☆ 2020. 5. 11. Unity) Notch Design(Safe Area) Unity- Notch Design(Safe Area) 개발을 하는 과정에서 기본 중에 기본은 해상도 대응이다. 디스플레이되는 화면 해상도에 따라 어떻게 보일 것인지를 정해야 한다. 모바일 해상도 대응하는 과정에서 Notch Design이라는 카메라가 전면부로 나오게 되면서 생기는 이슈에 대한 대응이 필요하게 되었다. Safe Area라고 하기도한다. 이런 과정에서는 스크린 사이즈와 뷰 사이즈가 다르게 표현되어야 한다. 그래야 Notch Design 영역에 가려지는 화면이 생기지 않게 된다. Sfae Area의 영역(Notch Design)이 해당되지 않는 영역에서 화면을 그려져야 한다. 이론으로는 배경(전체 화면)을 제외한 나머지 오브젝트들이 [Root]를 기반으로 하위에 포함되고 Root는 Notch.. 2020. 5. 7. Unity) UGUI RectTransform (사각 트랜스 폼) UGUI RectTransform (사각 트랜스 폼) 유니티 Canvas에서는 RectTransform이라는 컴포넌트를 지원한다. GUI에서 위치 포지션을 설정하는 기본적인 컴포넌트로 UI에 대한 작업을 지원한다. 기본적으로 Canvas의 하위에 있는 UI에 포함되는 항목에 자동으로 붙으면 LocalPosition을 사용한 값으로 인스펙트의 값이 변경된다. RectTransform은 GUI에 사용되지만 다른 용도로도 사용할 수 있다. 사각형의 위치, 크기 및 고정을 저장하고 조작하는 데 사용되며 상위(부모) RectTransform을 기반으로 다양한 스케일링 형식을 지원한다. Alt 단축키 (Also Set Position) Shift 단춬키 (Also Set Pivot) < Inspector 속성 설명.. 2020. 5. 3. 게임개발) 인디게임 맵 만들기 인디게임 맵 만들기 유니티로 인디게임의 맵을 만들기를 테스트 코드를 작성했다. 1차적으로는 방의 크기를 최대치(변수)를 설정하고 그로 인해서 해당 연관성 있는 맵을 생성하는 것을 목표로 했다. 사용한 리소스의 형태는 다음과 같다. 완벽하게 적용되지 않았지만 결과는 다음과 같다. 머릿속으로 생각했을 때는 굉장히 쉽게 적용할 수 예상했지만. 실상은 그렇지 않았다. 작업한 방식은 다음과 같다. 1. 좌표 + 방향으로 1차적으로 위치를 선택한다. 2. 생성할 블록을 검사한다. 현재 위치에서 좌우 4방향(위, 아래, 왼쪽, 오른쪽)을 해당 위치의 데이터가 존재하면 꼭 포함해야 할 역순을 가지고 온다. 3. 생성이 가능한 데이터(2에 해당) 된 데이터를 기반으로 트리의 형태로 크기를 체크한다. 남은 크기 사이즈가 .. 2020. 5. 1. 디자인패턴) 복합 패턴(Composite Pattern) 복합 패턴(Composite Pattern) 내용을 동일시해서 재귀적인 구조를 만들기 위한 디자인 패턴이다. Entry는 File과 Directory을 동일시하기 위한 추상 클래스로 Entry를 통해서 처리하면 동일한 메서드로 동일하게 처리가 가능하다. ★★☆☆☆ 2020. 4. 29. Unity) Unity JSON Library Unity JSON Library 유니티에서 JSON을 사용할 때 편리한 라이브러리를 소개하려고 한다. Unity Asset 스토어에서 JSON.Net을 검색하면 다음과 같이 나오는데 impot 한다. 특징으로는 클래스를SerializeObject 와 DeserializeObject 가 가능하다는 장점이 있다. 그냥 string 을 읽어서 파싱을 하지 않아도 된다. 데이터 클래스로 바로 변환하면 된다. 데이터를 InfoSkinUnit 클래스로 바로 변환하는 과정이다. 변환할 JSON 데이터는 다음과 같다. InfoSkinUnit의 클래스는 다음과 같다. JObject loaddata = JObject.Parse(_loadstring); JObject levelJObject = (JObject)loadda.. 2020. 4. 29. 이전 1 ··· 48 49 50 51 52 53 54 ··· 59 다음 반응형