쉬운 3D 게임 엔진 - 유니티가 어려운 이유?
옛날에 플래시 같이 쉬운데 3D를 지원하는 그런 게임 엔진이 없을까 하는 생각이 종종 듭니다.
사실 프로그래밍에 관해서는 플래시보다 유니티가 도드라지게 어렵거나 하지는 않습니다.
플래시로 게임을 만들 때는 움직이는 캐릭터를 만들려고 하면
1. 일단 붓툴로 캐릭터를 그리고
2. 그린 캐릭터를 F8을 눌러 무비클립으로 지정하고
3. 해당 무비클립에 다음과 같은 코드를 작성하면 끝이었습니다.
onClipEvent(enterFrame) {
var speed = 5;
if (Key.isDown(Key.LEFT)) {
this._x -= speed;
}
if (Key.isDown(Key.RIGHT)) {
this._x += speed;
}
if (Key.isDown(Key.UP)) {
this._y -= speed;
}
if (Key.isDown(Key.DOWN)) {
this._y += speed;
}
}
여기까지 하고 F5를 누르면 별도 컴파일 시간 없이 테스트할 수 있었습니다. (오랜만에 다시 쓰는 코드인데 당시에는 이게 callback 함수라는 사실도 몰랐던 것 같아 감회가 새롭네요 ㅎ)
근데 이걸 유니티에서 하면 어떨까요?
1. 일단 3D 모델을 프로젝트에 임포트합니다.
2. 임포트한 3D 모델을 씬에 추가합니다.
3. 3D 모델 Inspector에서 Script 컴포넌트를 추가합니다.
4. Script를 IDE로 열고 다음과 같은 코드를 작성합니다.
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
public float speed = 5f;
void Update()
{
var moveX = Input.GetAxisRaw("Horizontal");
var moveY = Input.GetAxisRaw("Vertical");
var movement = new Vector3(moveX, 0f, moveY) * speed * Time.deltaTime;
transform.position += movement;
}
}
여기까지 하고 IDE를 닫으면 컴파일 시간을 거친 후 F5를 눌러 테스트합니다.
하지만... 3D다 보니까 카메라를 세팅해야 한다는 것을 깨닫습니다. 물론 3D다 보니까 어쩔 수 없는 작업인 듯합니다.
프로그래밍은 나름 비슷해 보이는데 왜 이렇게 플래시에 비해 전체적인 게임 개발이 느리고 복잡하게 느껴질까요.
개인적으로는 드로잉이 안되고 무조건 에셋이 필요하다 보니까 프로토타이핑이 어려워서 그런 것 같습니다.
물론 에셋스토어가 강력한 편이기는 하지만 뭔가 딱 맞는 에셋을 찾기는 여전히 어렵다고 느낍니다. 에셋 패키지마다 형식과 구조가 전부 다르고 구매해야 하는 에셋도 있고 사용 방법을 새로 배워야 하는 장벽도 있습니다.
게다가 게임은 애니메이션이 반드시 필요한데, 플래시는 프레임별로 드로잉으로 처리할 수 있는 반면 3D 엔진에서는 메시, 스켈레톤, 아바타, 블렌딩, IK/FK과 같은 개념을 알아야 합니다. 개념을 숙지했더라도 실제로 관절을 움직여 가면서 애니메이팅을 하는 일은 더 어려워요. 게다가 애니메이션은 유니티를 벗어나 전문적인 3D 프로그램으로 작업하는 방식이 일반적입니다. 그러다 보니까 애니메이션도 결국에는 누군가 만들어 놓은 에셋을 골라서 구매해야 하는 현실이죠.
물론 이런 복잡한 시스템도 다 이유가 있어서 나온 결과라는 사실을 무시하는 건 아닙니다. 컴포넌트 시스템을 부정하고 싶지도 않고요(인테리어 디자인 프로그램을 개발한 적이 있는데, 저도 리팩터링을 할 때마다 유니티 엔진의 구조를 따라가게 되더군요). 3D에서 2D 드로잉과 같은 방법이 통하지는 않습니다. 게임을 제대로 만들려면 아주 세밀한 부분까지 컨트롤할 수 있어야 할 필요도 있습니다.
그럼에도 조금 더 쉬운 방법은 없는지 계속 고민하게 됩니다. 게임을 전문적인 프레임워크를 사용해 본격적으로 개발하는 일도 중요합니다. 그렇지만 일단 프로토타입을 빠르게 만들어서 재미를 테스트해 보는 일이 더 중요하다고 생각하기 때문입니다. 일단 재미만 있다면야 어떤 방법으로든 만들면 되니까요.
게임 회사 같으면 돈 주고 디자이너에게 시키면 되는 일이지만 저처럼 소규모로 시작하는 사람한테는 어려운 일입니다. 소규모 스튜디오나 인디 개발자들은 이런 생각을 한 번쯤 해보지 않았을까 하네요.
개인적으로 접근성을 굉장히 중요하게 생각하는데, 플래시는 두 가지 측면에서 접근성이 우수했습니다.
1. 플래시는 개발자 입장에서 접근성이 우수했습니다. 누구나 빠르게 게임을 만들고, 빌드하고, 배포할 수 있었습니다.
2. 플래시는 이용자 입장에서도 접근성이 우수했습니다. 웹 기반이기 때문에 누구나 웹사이트에 접속해서 가볍게 게임을 즐길 수 있었죠.
이러한 기반 덕분에 과거 초등학생, 중학생조차도 게임을 만들고 함께 즐기고 피드백을 받아서 차근차근 업데이트하는 매우 생산적인 문화가 발전할 수 있었다고 생각합니다. 혁신은 빠른 반복에서 오는 것 같아요.
게임등급위원회가 내린 황당한 조치, 플래시 지원 중단 등 사건을 겪은 이후 문화가 사그라들고 여전히 개발 의지가 남아 있는 다수는 유니티 같은 엔진으로 이탈했지만 말입니다. 그럼에도 유니티가 플래시 만큼 접근성이 좋은 게임 엔진인지는 의문입니다. 애당초 그런 목적으로 개발하는 것도 아니니까 어찌 보면 당연한 일이기도 한데요.
어쨌든 이 문제를 풀 실마리는 게임 에셋 및 애니메이션 생성의 가속화를 통해 찾을 수 있을 것 같습니다. AI가 해법이 되겠죠.