C# + Unity

[C#] WinAPI OpenProcess 함수로 프로세스 핸들 얻기 포스트 Teaser

[C#] WinAPI OpenProcess 함수로 프로세스 핸들 얻기

카테고리:

3 분 소요

프로세스 핸들 프로세스 핸들(Process Handle)은 컴퓨터 운영 체제에서 프로세스를 식별하고 관리하기 위한 개념이다. 프로세스 핸들은 보통 운영 체제 API에서 제공되며, 각 언어 및 환경에서는 해당 API를 이용하여 프로세스 핸들을 얻고 조작한다. 프로그래밍에서는 핸들을 이용하여 프로세스나 자원을 제어하는 데 사용한다. 주요한 Windows API 함수 및 프로세스 핸들과 관련된 몇 가지가 있다. CreateProcess 함수: 새로운 프로세스를 생성하고 핸들을 반환한다. OpenProcess 함수: 기존 프로세스의 핸들을 얻는다. CloseHandle 함수: 프로세스 핸들을 닫는다. 소스 코드 using System; using System.Diagnostics; using

[C#] 대리자와 delegate, Action, Func 포스트 Teaser

[C#] 대리자와 delegate, Action, Func

카테고리:

2 분 소요

대리자 대리자는 특정 매개 변수 목록 및 반환 형식이 있는 메서드에 대한 참조를 나타내는 형식이다. 쉽게 설명하면, 대리자를 통해 함수를 매개 변수로 전달할 수 있다. 이는 콜백 함수와 같은 이벤트에서 사용한다는 점에서 C++의 함수 포인터와 유사하지만, 멤버 함수에 대해 완전히 개체 지향이라는 점에서 다르다. 매개변수로는 상황에 따라 Action이나 Func를 사용한다. 매개 변수가 없으며 값을 반환하지 않는 경우에는 Action을 사용하고, 이외의 경우에는 모두 Func<TResult>를 사용한다. 1. Action과 delegate를 사용하는 경우 예를 들어 아래와 같은 경우를 볼 수 있다. using System; using System.Windows.Forms; public c

[Unity] Destory의 비밀과 DestroyImmediate 포스트 Teaser

[Unity] Destory의 비밀과 DestroyImmediate

카테고리:

2 분 소요

Destory 함수 유니티에서는 하이어라키(Hierarchy)에 살아있는 GameObject를 스크립트로 삭제하는 방법으로 Destory 함수를 사용한다. 일반적으로 Destory 함수를 사용하면 즉시 제거된다고 생각하기 쉽지만, 사실 지연된 소멸을 통해 해당 함수의 호출이 발생한 시점에서부터 다음 Update 함수가 호출되기 전 사이에 파괴된다. 그래서 흔히 다음과 같은 실수를 하기 쉽다. foreach (Transform child in GameObject.Find("EMPTYOBJECT").transform) { GameObject.Destroy(child.gameObject); } foreach (Transform child in GameObject.Find("

[Unity] 버튼에 할당한 Script 외부에서 실행하기 포스트 Teaser

[Unity] 버튼에 할당한 Script 외부에서 실행하기

카테고리:

최대 1 분 소요

소스 코드 유니티에서는 컴포넌트에 Script를 할당할 수 있다. 보통 유니티 에디터 상의 OnClick()에 스크립트를 매핑하여 사용한다. using UnityEngine; public class Example : MonoBehaviour { public void OnClick() { Debug.Log("Button Clicked"); } } 위와 같은 스크립트를 적용한 버튼을 클릭하면 유니티 에디터 하단 콘솔창에 해당 메시지가 출력된다. 이때 다른 컴포넌트에서 위 버튼에 할당된 스크립트를 실행하고 싶을 땐 아래와 같은 스크립트를 사용한다. GameObject.Find("할당한 버튼 이름").GetComponent<Examp

[C#] 생산자 소비자 문제에 사용 가능한 Concurrent Class 사용하기 포스트 Teaser

[C#] 생산자 소비자 문제에 사용 가능한 Concurrent Class 사용하기

카테고리:

2 분 소요

생산자-소비자 문제 생산자-소비자 문제(Producer-Consumer Problem)는 컴퓨터 과학에서 다중 스레드 또는 프로세스 간 협력 및 동기화에 관련된 전형적인 문제 중 하나이다. 여기서 생산자(Producer)는 공유 자원(버퍼나 큐 등)에 데이터를 생성하고 삽입하는 작업을 수행하고, 소비자(Consumer)는 공유 자원에서 데이터를 제거하고 소비하는 작업을 수행한다. 이때 발생할 수 있는 문제들은 크게 4가지로 분류한다. 동시성(Concurrency): 여러 생산자와 소비자가 동시에 실행될 수 있으므로, 공유 자원에 대한 안전한 액세스 보장 순서 보장(Ordering): 생산자가 데이터를 생성하고 삽입하는 순서와 소비자가 데이터를 제거하고 소비하는 순서 일치 공유 자원 보호:

[C#] DLLImport로 외부 DLL 함수 호출하기 포스트 Teaser

[C#] DLLImport로 외부 DLL 함수 호출하기

카테고리:

1 분 소요

DLLImport DllImport는 P/Invoke(플랫폼호출) 방법 중 하나로 C#에서 .NET 외의 코드나 라이브러리, 특히 C나 C++로 작성된 코드를 호출할 때 사용한다. 이를 사용하여 C# 코드에서 외부 DLL 함수를 호출한다. 소스 코드 아래는 DllImport를 사용하는 기본적인 예제로 kernel32.dll에 있는 MessageBox 함수를 호출한다. using System; using System.Runtime.InteropServices; class Program { // kernel32.dll에 있는 MessageBox 함수 선언 [DllImport("kernel32.dll", SetLastError = true)] public stati

[C#] 비동기 이벤트 기반 소켓 서버 구현하기 포스트 Teaser

[C#] 비동기 이벤트 기반 소켓 서버 구현하기

카테고리:

4 분 소요

서버의 종류 서버를 구현하는 방식에는 크게 단일 스레드 기반 서버와 다중 스레드 기반 서버로 나뉜다. 다중 스레드 기반 서버의 경우, 각각의 스레드가 연결을 담당하여 통신하므로 이해가 쉽다. 하지만, 단일 스레드인데 어떻게 여러 클라이언트의 접속을 해결하느냐는 의문이 든다. Node.js의 libuv 구현체의 Event Loop를 사용하여 구현한 서버를 보면 이해할 수 있다. C#의 SocketAsyncEventArgs에서도 운영체제에서 제공하는 IOCP(I/O Completion Port)와 같은 메커니즘을 ThreadPool을 사용하여 비동기 작업을 처리한다. 소스 코드 아래는 SocketAsyncEventArgs를 사용하여 비동기 이벤트 기반의 에코 서버를 구현하는 코드이다. Async

[C#] 콜백 함수 포스트 Teaser

[C#] 콜백 함수

카테고리:

3 분 소요

콜백 함수 콜백 함수(callback function)는 프로그래밍에서 특정 이벤트가 발생했을 때 호출되는 함수를 가리킨다. 콜백 함수는 다른 함수나 컴포넌트에 의해 호출되는 함수로서, 보통 이벤트 핸들러로 비동기적인 프로그래밍이나 이벤트 기반 프로그래밍에서 자주 사용된다. 이벤트 처리(Event Handling): 사용자가 버튼을 클릭하거나 다른 이벤트가 발생했을 때 특정 작업 수행 비동기 작업(Asynchronous Operations): 비동기 작업이 완료되었을 때 실행되는 함수를 콜백으로 등록하여 작업이 끝날 때까지 대기하지 않고 다른 작업 수행 타이머 및 인터벌(Timeouts and Intervals): 특정 시간 간격으로 실행되는 작업 수행 C#에서 콜백 함수는 델리게이트(d