Search

월드 오브 워쉽

요약
Unity 엔진을 활용한 사실적인 해양 전투 게임 '월드 오브 워쉽' 모작 프로젝트 개발. HDRP 렌더링과 물리 기반 시뮬레이션을 통해 실제 군함의 특성을 고증하여 사실적인 전투 경험을 구현했습니다.
역할
총 2명이 함께 진행
프로젝트 리더로서 게임 메커니즘 설계 및 구현 (기여도100%)
실제 탄도학 기반의 정교한 포탄 궤적 및 데미지 시스템 개발 (기여도 100%)
멀티레이어 데미지 판정을 통한 세부적인 피해 시스템 구현 (기여도 100%)
선체 형상에 맞는 다이내믹 카메라 연출 시스템 개발 (기여도 100%)
모듈화 아키텍처 설계 (기여도 100%)
성과
8종의 전투함, 3종 무장, 16종 포탄 등 다양한 게임 요소 구현
실제 탄도학 기반의 정교한 데미지 시스템 개발로 게임의 전략적 깊이 향상
3차 베지어 곡선을 활용한 다이내믹 카메라 시스템으로 몰입감 증대
데이터 기반의 확장 가능한 아키텍처 설계로 향후 콘텐츠 추가 용이성 확보
시기
2022.08 (1개월 소요)

실제 탄도학 기반의 포탄 궤적 시스템

실제 탄도학 공식을 Unity 엔진에 구현하여 고도로 정확한 포탄 궤적 시뮬레이션을 개발했습니다. 이 시스템은 포구 속도, 중력, 공기 저항 등 다양한 물리적 요소를 고려하여 각 발사체의 움직임을 계산합니다.
수정 포인트 질량 모델 (MPMM)
정교한 궤적 계산을 통해 원거리 교전의 현실성을 크게 향상시켰습니다. 플레이어는 목표물의 거리, 상대 속도, 기상 조건 등을 고려하여 조준해야 하므로, 전략적 사고와 기술적 숙련도가 요구됩니다. 이를 통해 단순한 조준을 넘어선 깊이 있는 전투 경험을 제공합니다.
포탄 데이터 예시

예시 코드

public class Shell : ProjectileBase { private double C = 0.5561613f; // 관통력 상수 private double a = 9.81f; // 중력 가속도 private double cw_1; // 2차 공기저항 계수 private double cw_2; // 1차 공기저항 계수 private double k; // 공기저항 상수 private double v_x; // x방향 속도 private double v_y; // y방향 속도 private double x; // x좌표 private double y; // y좌표 public ShellData shellData; // 탄환 데이터 private void FixedUpdate() { double dt = Time.deltaTime; // 공기저항을 고려하여 포탄의 속도와 위치 계산 x += v_x * dt; y += v_y * dt; v_x = (v_x - dt * k * rho * (cw_1 * Math.Pow(v_x, 2) + cw_2 * v_x)); v_y = (v_y - dt * a - dt * k * rho * (cw_1 * Math.Pow(v_y, 2) + cw_2 * Math.Abs(v_y)) * Math.Sign(v_y)); transform.position += fireRotation * new Vector3(0, (float)v_y / 3000, (float)v_x / 3000); } }
C#
복사

멀티레이어 데미지 시스템

함선의 복잡한 구조를 반영한 멀티레이어 데미지 판정 시스템을 구현했습니다. Unity의 콜라이더 시스템과 레이캐스팅 기술을 활용하여 피격 각도, 관통력, 장갑 두께 등을 정밀하게 계산합니다.
이 시스템은 함선의 각 부위별로 차별화된 피해를 적용합니다. 예를 들어, 장갑이 얇은 부분을 정확히 타격하면 더 큰 피해를 입히고, 주요 시스템(엔진, 포탑 등)을 파괴하면 전투력에 직접적인 영향을 미칩니다. 이를 통해 플레이어는 단순한 체력 감소가 아닌, 전략적인 타격점 선정의 중요성을 체감할 수 있습니다.

예시 코드

// Shell.cs protected override void OnImpact(Damageable damageable) { // 오버매치, 장갑 관통, 입사각 계산을 통해 피해량 판정 if (!damageable.CheckOvermatch(shellData.bulletDiametr)) { float angle = Vector3.Angle(lastRaycastHit.normal * -1, transform.forward); if (damageable.CheckRicochet(angle, shellData.bulletRicochetAt, shellData.bulletAlwaysRicochetAt)) { OnExplosion(); return; } if (!damageable.CheckPenetrate(ref penetration)) { OnExplosion(); return; } } damageable.CheckEffect(shellData); damageable.CheckDamage(shellData.damage, GetInstanceID()); }
C#
복사

HDRP 기반 사실적 해양 환경

Unity의 High Definition Render Pipeline (HDRP)을 활용하여 극도로 사실적인 해양 환경을 구현했습니다. 고해상도 텍스처, 실시간 반사, 복잡한 조명 효과 등을 적용하여 시각적 품질을 극대화했습니다. 특히 수면의 움직임, 대기 산란, 볼류메트릭 안개 등을 정교하게 표현하여 생동감 넘치는 해양 전장을 연출했습니다.
이 첨단 렌더링 기술은 단순히 아름다운 그래픽을 넘어 게임플레이에도 직접적인 영향을 미칩니다. 예를 들어, 동적으로 변화하는 날씨와 조명 조건은 가시성에 영향을 주어 전술적 판단의 요소가 됩니다. 또한, 정교한 물리 기반 렌더링으로 원거리의 함선이나 포탄 궤적을 더욱 사실적으로 표현하여 전장 상황 판단의 정확도를 높입니다.