[javascript] Three.js를 사용하여 웹에서의 3D 슈팅 게임 개발

이번 글에서는 Three.js를 사용하여 웹에서 3D 슈팅 게임을 개발하는 방법에 대해 알아보겠습니다. Three.js는 JavaScript로 작성된 3D 그래픽 라이브러리로, WebGL을 기반으로 동작합니다. 이를 사용하여 웹 브라우저에서 3D 그래픽을 구현할 수 있습니다.

1. Three.js 설치

Three.js를 사용하기 위해서는 먼저 Three.js를 설치해야 합니다. Three.js는 npm을 통해 설치할 수 있습니다.

npm install three

2. 게임 화면 설정

게임을 개발하기 전에 게임 화면을 설정해야 합니다. Three.js에서는 SceneCamera를 사용하여 화면을 구성합니다.

let scene = new THREE.Scene();
let camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);

위 코드에서는 Scene 객체를 생성하고 PerspectiveCamera를 사용하여 카메라를 설정합니다.

3. 게임 오브젝트 추가

게임에서 필요한 오브젝트들을 추가해야 합니다. Three.js에서는 Mesh를 사용하여 오브젝트를 생성할 수 있습니다.

let geometry = new THREE.BoxGeometry(1, 1, 1);
let material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
let cube = new THREE.Mesh(geometry, material);
scene.add(cube);

위 코드에서는 BoxGeometry를 사용하여 큐브 형태의 오브젝트를 생성하고, MeshBasicMaterial을 사용하여 오브젝트의 색상을 설정합니다. 마지막으로 scene.add()를 사용하여 오브젝트를 씬에 추가합니다.

4. 렌더러 생성

게임에서 생성한 씬과 카메라를 렌더링해야 합니다. Three.js에서는 WebGLRenderer를 사용하여 씬을 렌더링할 수 있습니다.

let renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);

위 코드에서는 WebGLRenderer를 생성하고, setSize()를 사용하여 렌더러의 크기를 설정합니다. 마지막으로 renderer.domElementappendChild()를 사용하여 렌더러의 DOM 엘리먼트를 HTML에 추가합니다.

5. 애니메이션 추가

게임을 좀 더 동적으로 만들기 위해 애니메이션을 추가할 수 있습니다. Three.js에서는 requestAnimationFrame()을 사용하여 애니메이션을 구현할 수 있습니다.

function animate() {
    requestAnimationFrame(animate);

    // 게임 로직 추가

    renderer.render(scene, camera);
}
animate();

위 코드에서는 requestAnimationFrame()을 사용하여 애니메이션을 업데이트하는 함수를 호출합니다. 그리고 게임 로직을 업데이트한 후 renderer.render()를 사용하여 씬과 카메라를 렌더링합니다.

6. 사용자 입력 처리

게임에서는 사용자 입력을 처리해야 합니다. Three.js에서는 PointerLockControls를 사용하여 마우스나 키보드 입력을 처리할 수 있습니다.

let controls = new THREE.PointerLockControls(camera, document.body);
document.addEventListener('click', function() {
    controls.lock();
});

위 코드에서는 PointerLockControls를 생성하고, click 이벤트를 사용하여 사용자가 클릭하면 컨트롤을 활성화합니다.

7. 공격 로직 추가

3D 슈팅 게임에서는 적과의 전투를 위한 공격 로직이 필요합니다. 이를 구현하기 위해 게임 오브젝트의 움직임, 충돌 검사 등을 처리해야 합니다.

function shoot() {
    // 공격 처리
}

document.addEventListener('keydown', function(event) {
    if (event.keyCode === 32) { // Spacebar 키
        shoot();
    }
});

위 코드에서는 shoot() 함수를 구현하여 공격 로직을 처리하고, keydown 이벤트를 사용하여 Spacebar 키를 누르면 shoot() 함수를 호출합니다.

8. 결론

위의 단계들을 차례대로 따라가면 Three.js를 사용하여 웹에서 3D 슈팅 게임을 개발할 수 있습니다. 이렇게 개발된 게임을 웹 브라우저에서 즐길 수 있습니다. Three.js를 활용하면 더욱 다양하고 흥미로운 웹 기반 3D 게임을 개발할 수 있습니다.

Three.js 공식 웹사이트