포스트

[SCG 프로젝트] 클라이언트 간 충돌 확인하기

이 포스트는 개인 프로젝트의 기록입니다.

이번 개발내용은 지난 포스트에서 언급한 클라이언트 간 충돌을 간단하게 구현했습니다.

두 객체간 충돌 확인 코드는 아래와 같습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
static bool check_collision(int client_ticket)
{
    for (int i = 0; i < clients.Count; i++)
    {
        if (i == client_ticket) continue;
        lock (lockObject)
        {
            if (clients[i].is_impact(clients[client_ticket]))
            {
                Console.WriteLine($"Client ({client_ticket}) and ({i}) impact!!!");
                return true;
            }
        }
    }
    return false;
}

충돌판정

두 클라이언트가 동시에 충돌하였지만 lock 없이 연산을 진행할 경우,
연산이 완료되는 시점에 따라 충돌 후 위치값이 예상했던 값과 다를 수 있습니다.

여기서 lock은 매우 중요한 역할을 합니다.
충돌 체크 중, 다른 스레드에 의해서 객체가 이동할 수 있기 때문에 lock을 사용해서
유효한 데이터를 사용하도록 작성하였습니다.


진행 상황

현재 모습은 위 영상처럼
두 객체간 충돌이 판정되고 다른 방향으로 이동할 수 있도록 구현하였습니다.

다음 개발에서는 플레이어가 조종 가능한 객체를 추가할 예정입니다.


소스코드 확인하기

Github 주소

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.