전체 글 483

[Unity][개념] 잡 시스템(Job System)_2

https://docs.unity3d.com/kr/current/Manual/JobSystem.html C# 잡 시스템 개요 C# 잡 시스템의 동작 방식 Unity C# 잡 시스템을 통해 사용자는 나머지 Unity 기능과 잘 연동하고 수정 코드 작성을 용이하게 해주는 멀티스레드 코드를 작성할 수 있습니다. 멀티스레드 코드를 작성하면 성능이 향상되는 이점을 누릴 수 있으며, 프레임 속도도 대폭 개선됩니다. 버스트 컴파일러를 C# 잡과 함께 사용하면 코드 생성 품질이 개선되며, 모바일 디바이스의 배터리 소모량도 크게 감소합니다. C# 잡 시스템의 핵심은 Unity의 내부 기능(Unity의 네이티브 잡 시스템)과 통합된다는 점입니다. 사용자가 작성한 코드와 Unity는 동일한 워커 스레드를 공유합니다. 이러한..

Unity 2022.09.20

[Unity][개념] 잡 시스템(Job System)

개념 유니티에서 안전한 멀티스레딩을 구현하는 시스템 스레드를 별도로 생성하지 않으며, 유니티의 워커스레드에 작업을 지시할 수 있게 한다. 잡 대기열에 잡을 배치하면 워커 스레드가 잡 대기열에서 항목을 가져와 실행한다. Native Container를 이용해 잡의 수행 결과를 메인 스레드와 공유한다. 버스트 컴파일러를 이용하여 추가적인 성능 향상을 기대할 수 있다. 장점 다수의 작은 작업들을 처리하기에 좋으며, 속도가 빠르다. 스레드를 추가로 만들고 관리하지 않아도 되므로 메모리를 절약할 수 있다. 유니티 콘솔을 이용해 디버깅할 수 있다. 메인 스레드의 데이터를 잡의 스택에 깊은 복사를 하여 복사본으로 사용하므로 Race Condition이 발생하지 않는다. 단점 워커 스레드를 이용하기 때문에 일반 스레드..

Unity 2022.09.20

[Unity][방법] 멀티스레드에서 unity 오브젝트 참조 방법

유니티엔진에서는 기본적으로 모든 CPU 연산이 메인 스레드에서 이루어진다. 그렇다고 다중 스레드를 사용할 수 없다는 것은 아니지만 메인 스레드가 아닌 다른 스레드에서 유니티의 메인 로직에 접근할 수 없도록 막혀있다. 다시 말해, 다른 스레드에서는 게임오브젝트, 컴포넌트 등에 접근하면 에러가 발생한다. 다른 스레드에서 유니티 메인 로직에 접근해야 한다면 MainThreadDispatcher 등을 사용하여 private async void TaskTest() { await Task.Run(() => { MainThreadDispatcher.Instance.Enqueue(() => transform.Translate(1f, 0f, 0f)); }); } 이렇게 작성하면 된다.

Unity 2022.09.20

[Unity][개념] 렉트 트랜스폼(Rect Transform)

렉트 트랜스폼(Rect Transform) 렉트 트랜스폼은 UI에서 사용되는 Transform입니다. 렉트 트랜스폼에는 Width, Height, Anchors, Pivot의 속성을 가지고 있습니다. Width : UI의 넓이를 나타냅니다. Height : UI의 폭을 나타냅니다. 앵커(Anchors) 앵커는 씬뷰에서 네게의 삼각형 손잡이 모습으로 표시되며, 부모로부터의 기준을 나타냅니다. 스크린이 리사이징(Resizing)될 때 앵커를 기준으로 UI의 위치, 크기가 변경됩니다. 앵커의 x, y는 0 ~ 1 사이의 비율 값으로 설정됩니다. 앵커의 x값은 0일때 부모의 가장 좌측, 1일때 부모의 가장 우측으로 설정됩니다. 앵커의 y값은 0일때 부모의 가장 하단, 1일때 부모의 가장 상단으로 설정됩니다. 다..

Unity 2022.09.19

[Unity][개념] 캔버스(Canvas)

목차 캔버스 특징 Canvas Renderer Mode Canvas Scaler UI Scale Mode Reference Pixels Per Unit Graphic Raycaster Rect Transform 앵커 피벗 포지션 Rect-Transform 앵커의 Min, Max 1. Min = Max인 경우 2. Min != Max 인 경우 3. X, Y 중 하나는 Min != Max 인 경우 앵커 프리셋 유니티 공식 매뉴얼 https://docs.unity3d.com/kr/current/Manual/UnityManual.html Scripting Overview http://www.devkorea.co.kr/reference/Documentation/ScriptReference/index.html 캔버..

Unity 2022.09.19

[Unity][개념] 오브젝트 찾는 방법 및 Find vs FindChild 차이점

[ 대표적인 함수 ] 1. Object를 찾는 방법(전체) - 비활성화된 Object는 못 찾음! 1 2 3 4 5 GameObject.Find("이름"); // Object의 이름으로 찾음. 가장 처음에 나오는 Object를 반환. GameObject.FindWithTag("..."); // 태그로 대상을 찾음. 가장 처음에 나오는 Object를 반환. GameObject.FindGameObjectsWithTag("..."); // 태그로 대상을 찾음. 같은 태그를 가진 Objects를 배열의 형태로 반환. 2. Object를 찾는 방법(자식) - 비활성화 된 Object를 찾을 수 있음! 1 2 3 transform.Find("..."); // Object의 이름을 찾음. 가장 처음에 나오는 Obje..

Unity 2022.09.16

[C#] 리플렉션 개념 및 주의사항(Reflection)

리플렉션은 컴파일 시에 알 수 없었던 타입이나 멤버들을 찾아내고 사용할 수 있게 해주는 메커니즘이다. 그러나 다음의 주요한 단점이 존재한다. 리플렉션을 사용하면 컴파일 시에 타입 안정성을 해친다. 리플렉션은 전반적으로 느리다. 어셈블리에서 정의하는 메타데이터를 살필 때 항상 문자열 검색이 수행되어야 한다. 리플렉션을 이용하여 멤버를 호출하면 성능에 좋지 않은 영향을 미친다. 따라서 먼저 매개변수들을 배열로 포장해야 한다. 내부적으로는 이렇게 포장된 내용을 다시 꺼내어 스레드의 스택에 옮긴다. 추가적으로 CLR이 메서드 호출 전에 각각의 매개변수들이 올바른 타입을 가지고 있는지 확인하고 호출자가 호출하려는 멤버에 접근할 보한 권한이 있는지 확인해야 한다. 상기의 이유로, 타입의 필드나 메서드 혹은 속성에 ..

VisualStudio/C# 2022.09.15

[C#] 리플렉션 개념 및 사용법(Reflection)

리플렉션(Reflection)은 어떤 Type에 대한 정보를 가져오거나 접근하는 등의 작업을 런타임에 동적으로 수행할 수 있도록 해주는 기능이다. 리플렉션을 사용하면 런타임에서 메서드를 호출하거나 필드의 값을 바꾸는 등의 작업을 할 수 있다. 실제로 어셈블리는 미리 생성된 스크립트를 기준으로 생성이 되며, 어셈블리가 동작할 때 메서드가 호출되거나 필드의 값을 변경하는 행위는 모두 프로그래머가 어셈블리를 빌드하기 전에 스크립트에 정의해놓은 일련의 작업일 뿐이다. 예를 들어 클래스 A에 존재하는 a, b, c라는 세 개의 필드에 사용자로부터 값을 입력받아 지정하고자 한다면 프로그래머는 클래스 A의 구성 요소에 대해 알고 있고, 수행해야 할 동작들에 대해서도 이미 정의되어 있기 때문에 아래와 같이 코드를 작성..

VisualStudio/C# 2022.09.14

[Unity][팁]구글 스프레드시트로 데이터 쉽게 관리하기(UGS)

유니티 구글시트 유니티 구글시트 소개 동영상 가이드 동영상 유니티 구글시트 소개글 (UGS) 유니티에서 구글시트를 이용하여 게임 데이터를 관리하는데 용이한 유니티 구글시트 (UGS)를 소개합니다! 공식문서에서 좀더 상세한 확인이 가능합니다. 😊 유니티 구글시트는 구글 스프레드 시트를 이용하여 게임 데이터의 데이터베이스를 디자인하거나, 게임의 Localization(현지화)를 매우 쉽고 효과적이게 할 수 있는 유용한 도구입니다. 아래 나열된 기능들을 사용하여 쉽게 게임 데이터를 구글시트로 관리할 수 있고, 테스트 시간도 크게 단축시킬 수 있으므로 게임 개발자 분들에게 큰 도움이 될것입니다. 기능 매우 편리한 Live Load/Save 가 가능합니다. 😉 실시간 로드 (데이터를 앱을 껏다키거나 빌드하지 않고..

Unity 2022.09.14

[Unity][팁] 기술 팁

https://gall.dcinside.com/mgallery/board/view/?id=game_dev&no=66894 알아두면 좋은 기술이나 지식, 라이브러리들 - 인디 게임 개발 갤러리 다음회사는 아마 게임회사를 안가게 될 것 같아서 제가 지금껏 해본것들 정리겸 인디겔에 적고 떠남니다..ㅠㅠ 유용한 라이브러리 뿐만 아니라 직접 할줄 알아야하는 지식도 포함하고 있음미다 gall.dcinside.com Odin Insepctor https://youtu.be/5TbhbU0HATQ 이건 뭐 누구나 다 아는걸텐데 말이 필요할까요! GUI 만들때도 굉장히 편하고 강력한 Serialize+GUI를 제공하기 때문에 사실 유니티를 사용한다면 누구나 가장 먼저 임포트하는 라이브러리 입니다. 비싸지만 잘 활용하면 생..

Unity 2022.09.14

[Unity][개념,방법] 네이티브 플러그인(Native Plugins)

[1] 플러그인 유니티 플러그인에는 두가지 종류가 있습니다. 1. Managed plug-ins 2. Native plug-ins 이 중, 네이티브 플러그인을 살펴보겠습니다. [2] 네이티브 플러그인 1. 네이티브 플러그인은 platform-specific native code libraries 입니다. 2. 네이티브 플러그인은 C 기반 언어 (C, C++, and Objective-C) 로 작성가능합니다. 3. 네이티브 플러그인은 simple C interface를 제공합니다. 4. 네이티브 플러그인은 타겟 플랫폼에서 네이티브 코드 컴파일러로 빌드됩니다. 유니티에서는.. native 플러그인이 제공하는 인터페이스를 다른 C# 스크립트들에게 공개하는 브릿징 C# 스크립트를 만들어줍니다. 그럼 다른 스크립..

Unity 2022.09.02

[Windows] 작업 스케줄러 사용방법(windows Task Scheduler)

관공서, 공공기관이나 회사 내에서는 업무 효율성을 높이기 위해서, 혹은 기업의 중요 자산 및 보안 데이터의 외부 유출을 차단하기 위해, 직원이 업무와 무관한 일을 업무 시간에 못하도록 통제하기 위한 목적 등으로 업무 외의 웹 사이트들을 차단해두고 있습니다. 업무 효율성을 높이기 위해, 개인정보나 보안 관련 이슈로 관공서나 회사 내에서 개인용 / 상용 전자 메일 사이트들은 차단되어 있어 이용이 불가능하다. 개인정보나 보안을 위해 개인용 혹은 상용 전자 메일 사이트들을 차단해두는 사내 정책에 의거하여 Gmail 이나 Outlook.com 의 스케줄러 기능을 이용할 수 없고, 정해진 직책에 따라 스마트폰의 스케줄러 앱을 활용할 경우 눈치가 보이거나, 업무 중 방해가 될 수 있습니다. 방해 금지 설정을 해 두는..

Windows 2022.08.31

[Unity][개념,방법] 오브젝트 풀링(ObjectPool) 이란?

오브젝트 풀링 프로그래밍에서 오브젝트를 생성하거나 파괴하는 작업은 메모리가 많이드는 작업이다. 오브젝트 생성은 메모리를 새로 할당하고 리소스를 로드하는 등의 초기화하는 과정이 필요하며 오브젝트 파괴는 파괴 이후에 발생하는 가비지양이 상당하여 가비지 컬렉팅으로 인한 프레임 드랍이 발생할 수 있다. 이를 해결하기 위해서 사용되는 기법이 바로 오브젝트 풀링(Object pooling)이다. https://docs.unity3d.com/ScriptReference/Pool.ObjectPool_1.html Unity - Scripting API: ObjectPool Object Pooling is a way to optimize your projects and lower the burden that is plac..

Unity 2022.08.25

[NetWork] WebSocket 이란?

정의 하나의 TCP 접속에 전이중 통신 채널을 제공하는 컴퓨터 통신 프로토콜 목적 기존 방식의 단점 개선. 기존의 양방향 통신 (왜 써야할까?) HTTP 프로토콜 HTTP는 클라이언트의 요청이 있어야만 서버가 응답할 수 있다. 반대로 서버가 먼저 보내는 요청은 클라이언트가 받을 수 없다. 이 단점을 개선하기 위해 나온 기술이 Polling이다. Polling은 주기적으로 서버에 요청을 보내서 받을게 있는지 확인하는 방법이다. 단점은 서버측에서 보낼 내용이 없어도 클라이언트는 알 수 없기 때문에 계속해서 request를 보내 확인을 해야하고, 지속적인 연결과 해제는 handshake가 필요하기 때문에 서버에 부담을 준다. 클라이언트가 많아질수록 더욱 커지게 된다. 이 polling의 단점을 조금 개선한 것..

Web/NetWork 2022.08.25

[NetWork] http통신을 이용한 양방향 통신기법, Polling VS Long Polling

웹에서 프로그래밍을 하다보면 결국 채팅프로그램을 만드는 예제를 많이 하게된다. 채팅을 하기위해서 여러분이 선택하는 방법은 사실상 웹소켓으로 기결된다. 브라우저상에서 사용하지 않는다면 TCP소켓을 사용하는 경우도 있다. 일단 만고의 진리부터 한번보고 지나가자. http는 절대 절대 절대 양방향이 되지 않는다. http는 양방향이 되지 않는 모델이다. request, response형태로 단방향만 가능하다. 또한 불변의 진리, http는 서버에서 원하는 타이밍에 클라이언트에게 데이터를 보낼 수 없다. 문제는 http에서 서버에서 클라이언트로 역으로 요청하는건 불가능 하다는 것이다. 애당초 Client만이 Server로 연락할 수 있고 Server는 Client의 요청을 응답하는것만 가능하다는 것이다. 과거에..

Web/NetWork 2022.08.25

[NetWork] 데이터 통신 방식(Realtime, push, polling)

Realtime 실시간은 사용자가 즉시라고 느낄 정도로 충분히 빠르거나, 또는 컴퓨터가 외부에서 진행되는 처리에 뒤떨어지지 않을 정도로 빠르게 동작하는 컴퓨터의 반응 수준이다 Push push server는 클라이언트의 요청이 오면 응답해주는 방식이 아닌 서버가 클라이언트에게 공지사항과 같은 무엇인가 통지해주기 위한 방법이다. 다시 말해 클라이언트의 요청이 없이도 서버는 클라이언트에게 응답하는 방식이다. Polling 폴링(polling)이란 하나의 장치(또는 프로그램)가 충돌 회피 또는 동기화 처리 등을 목적으로 다른 장치(또는 프로그램)의 상태를 주기적으로 검사하여 일정한 조건을 만족할 때 송수신 등의 자료처리를 하는 방식을 말한다 Long Polling(COMET) 클라이언트가 웹서버에게 새로운 내..

Web/NetWork 2022.08.25

[NetWork] 폴링(Polling)이란?

폴링은 리얼타임 웹을 위한 기법으로, 일정한 주기(특정한 시간)을 가지고 서버와 응답을 주고 받는 방식을 말한다. 이렇게 서버와 응답을 주고 받는 이유는 웹이 태생 자체부터 실시간을 위해 필수적인 persistent connection이 불가능하기 때문이다. 클라이언트가 서버에 특정 요청을 하면 서버가 응답해준 후 연결이 끊어지는게 HTTP의 특징이기 때문이다. 따라서 실시간 서비스라고 불리는 서비스들 대부분이 실시간이 아니다. 실시간으로 변하는 야구 중계 같은 경우, 브라우저에서 5초 단위로 서버에 요청을 보내 업데이트 하는 방식으로 구현된다. 폴링을 위키피디아식으로 다시 정의해보면 폴링이란 하나의 장치(혹은 프로그램)가 충돌 회피 또는 동기화 처리 등을 목적으로 다른 장치 (또는 프로그램)의 상태를 ..

Web/NetWork 2022.08.25

[NetWork] REST API와 Websocket통신 차이점

1. Http 통신 Client의 요청이 있을 때만 서버가 응답하여 해당 정보를 전송하고 곧바로 연결을 종료하는 방식 이러한 방식은 client가 요청을 보낸 경우에만 server가 응답하기 때문에 단방향적 통신으로 볼 수 있습니다. 따라서 server가 client로 요청을 보낼 수는 없습니다. 요청을 보낼 때, 내용을 기다리는 시간과 함께 연결하는 시간이 들어가게 됩니다. 이러한 Http 통신은 실시간 연결이 아닌, 필요한 경우에만 server로 접근하는 콘텐츠 위주의 데이터를 사용할 때 용이합니다. 만약 게시물에 대한 내용을 요청하기 위해 실시간으로 연결을 유지하는 Socket 통신을 사용하게 되면, 게시물을 받은 후에도 계속 통신을 위한 연결이 성립되어 있어 부하가 걸리게 됩니다. 일반적으로 모바..

Web/NetWork 2022.08.25