테슬라에는 공식 셀러가 없다.

따라서 처음 구매하는 사람들은 당연히 온라인상에서 방법을 찾아볼 수밖에 없다.
나 또한 그랬기 때문에 이번 편에서는 구매 예약부터 인도받기 까지의 과정을 전체적으로 정리해보려고 한다.


1. 구매 예약

예약은 상대적으로 간단하다.

본인이 로드스터를 주문할 것이 아니라면 예약금 100만원만 넣으면 끝이다.

(화성간 차로 유명한 로드스터는 예약금만 5,500만원이다 …)

먼저 테슬라 공식 홈페이지로 들어가자

 

tesla.com

 

이후 지역을 한국으로 변경하고, 원하는 차량을 선택 후 옵션을 확인해보자.
옵션은 다음과 같은데, 각 옵션 별로 특징이 있으니 신중하게 생각해보아야 한다.

  • 트림
  • 색상
  • 휠 크기
  • 인테리어
  • FSD (혹은 EAP)

 

트림은 차량의 정체정을 결정하는 가장 큰 요소이다.
모델 3/Y를 기준으로 스탠다드 / 롱레인지 / 퍼포먼스가 존재하는데 각각의 특징은 다음과 같다.


스탠다드 : 시내 출퇴근 용도를 위한 평범한 주행거리, 속도
롱레인지 : 중장거리 이동이 잦은 운전자를 위한 긴 주행거리와 빠른 속도
퍼포먼스 : 스포츠카에 준하는 폭발적인 성능을 원하는 운전자를 위한 차량

 

 

색상은 아무래도 개인 취향이 가장 많이 반영되는 옵션이기 때문에 사족을 붙일만한 부분이 없다.

다만 화이트 펄 색상은 2020 ~ 2021년 테슬라에서 롱레인지 가격을 일시적으로 5,999 만원으로 하향 조정한 적이 있었는데,

보조금 상한선을 맞추기 위해 옵션을 붙일 수 없었기 때문에 당시 출고된 차량 중 화이트 색상이 상당히 많았다.
따라서 화이트가 지금도 가장 많이 보이고 또 가장 무난하기도 하다.

사실 어떤 색상이든 예쁘기 때문에 차별점을 두고 싶다면 무조건 추천이다.

 

 

휠 크기는 아는 사람은 알겠지만 전비를 고려해서 선택하는 것이 좋다.
크기가 크면 클수록 타이어 접지면이 늘어나고 무게도 증가하기 때문에 더 큰 힘(전기)을 필요로 한다.
만약 휠 디자인에 눈길이 간다면 사제품으로도 얼마든지 변경할 수 있으니 참고하면 좋겠다.

 

 

인테리어는 가장 무난한 블랙과 화이트, 일부 고급 모델은 아이보리도 있다.
다만 화이트는 관리하기가 힘든 만큼 웬만하면 블랙을 추천한다. 그런데 이쁘긴 진짜 이쁨

 

 

마지막 옵션인 FSD (혹은 EAP)는 테슬라의 꽃인 완전 자율주행 기능이다.
실제로 이 기능만 보고 테슬라를 구매하는 사람도 많고 앞으로 업데이트될 기능까지 미리 구매하는 개념이기 때문에 충분히 메리트가 있다고 생각한다. (현재는 베타)

 

다만 유의해야 할 점은 1,000만원에 달하는 기능을 포함한다면 차량가액에도 반영되기 때문에 추후 취등록세를 납부할 때 그만큼 부담이 커진다.
따라서 꼭 구매해야겠다면 차량을 인도받은 이후 추가하는 것을 권한다.
(참고로 EAP는 앞으로 나올 FSD 업데이트까지는 지원하지 않는다)

 

여기까지 모두 선택했다면 주문 버튼을 누르자.

 

2. 기다리기

주문이 완료되면 메일 한 통만 달랑 날아올 뿐이다.

테슬라에 문의해봤자 “인도 시기가 다가오면 연락드립니다” 외에 의미 있는 답변을 듣기는 힘들 것이다.

 


그만큼 기다림은 테슬라의 최종 컨텐츠다.
이 기다림을 즐기기 위해서는 기본적으로 다음의 사항을 알고 있어야 한다.

  • 인도 일자는 하늘이 정해준다
  • 각 분기마다 들어오는 대수가 다르다
  • 옵션 별로도 들어오는 대수가 다르다


여기서 가장 황당했던 점은, 모델3 스탠다드의 경우 2021년 1분기에 소량 들어오고 22년 7월까지 아무 소식이 없었다는 점이다.
대략 6분기 동안 모델3 스탠다드는 들어온적이 없었다는 점이 인도 시기를 예상할 수 없게 만들었다.
또한 분기마다 각 옵션 별로 (트림, 색상, 휠, 인테리어, FSD 모두 영향을 준다) 들어오는 대수가 다르기 때문에
일단 주문했으면 그냥 잊고 지내는 게 마음 편하다.

 

3. 인도 준비

하늘이 점지해 준 인도 날짜가 가까워지면 카카오톡으로 설문조사 링크가 전달된다.
이는 보조금에 관련된 내용이지만 설문조사를 한 것이 반드시 해당 분기에 인도받는다는 것을 보장하지는 않는다.

설레는 마음을 가라앉히고 다시 한번 잊고 살다 보면 어느 날 모르는 번호로 전화가 올 것이다.
인도담당자 (이하 어드바이저)가 연락을 주는 것으로, 이쯤 되면 인도 시기에 거의 임박했다는 기대감에 들떠도 좋다.

어드바이저와 함께 준비해야 할 것은 꽤나 많으므로 인도일에 앞서 미리미리 처리해두는 것을 권장한다.

 

  • 주민등록등본, 초본
  • 전기자동차 구매 지원신청서
  • 차량구매계약서
  • 보조금 지급 우선 보급 대상 증명자료 (자격요건 충족 시)


하나 팁을 주자면 모든 것을 종이서류로 처리할 필요는 없고, 패드가 있다면 전자상으로도 서명해서 바로 전송할 수 있다.

서류만 잘 제출하면 보조금 처리는 어드바이저가 해주기 때문에 가만히 기다리면 된다.

 


보조금 지급까지 확정되었다면 가장 헷갈리는 최종결제 부분이다.
테슬라는 삼성카드 결제만 지원하기 때문에 기본적으로 삼성카드가 필요하다.
또한 다이렉트 오토를 이용해서 카드할부를 신청할 경우 삼성에서 지급받은 가상계좌에 잔액을 입금하고, 그 가상계좌로 테슬라에서 결제해야 한다.

즉, 타임라인으로 보면 다음과 같다.

 

  1. 보조금 확정
  2. 보조금 지원받은 차량 최종가액 확인
  3. 삼성카드 다이렉트 오토 신청할 경우, 할부금이 포함된 가상계좌 확인
  4. 일시불로 지급할 금액을 가상계좌로 입금
  5. 해당 가상계좌로 테슬라 공식 홈페이지에서 결제


마지막으로 어드바이저와 보험, 차량등록, 차량번호 발급까지 잘 처리되었다면 이제 정말 다 끝났다.
참고로 차량등록이나 차량번호 발급은 테슬라 협력업체에 대행을 맡길 수 있는데, 금액이 꽤나 비싼 편이다.

 

 

4. 인도받기

대망의 인도날이 밝았다.
인도 장소는 수도권의 경우 대부분 이케아 광명점에서 받는 것으로 알고 있다.
시간대에 따라 차량이 정확히 배정되기 때문에 시간은 꼭 맞춰서 가는 것을 권장한다.

테슬라 앱과 처음 연동하는 화면


사실 이전에는 단차 이슈가 굉장히 많았다.

필라부터 트렁크 프렁크의 틈, 헤드라이트 각도가 안 맞는 등 정품 인증은 단차로 해야 한다는 말이 나올 정도였다.
심지어 벌어진 필라 틈새 사이로 핸드폰이 들어가는 경우도 종종 있을 정도였으니..

다행히 요즘은 단차가 많이 줄어들어서 내가 받은 차량은 거의 살펴볼만한 부분이 없었다.
아마도 다들 아는 것처럼 인도 며칠 전부터는 신차패키지를 알아보고 준비할텐데, 그곳에서 전문가에게 검수를 맡기는 편이 낫다.
인도 당일에는 기능적인 부분에서 큰 이상이 없는지, 어떻게 운행하는지를 파악하는 데에 중점을 두자.

만약 차량에 이상이 있거나 궁금한 점이 있는 경우 비상깜빡이를 켜면 직원이 점검해준다.


이후 직접 운전해서 따뜻한 집으로 돌아오면 되겠다.
일정이 맞지 않더라도 초기 불량은 그때 꼭 점검하는 것이 좋으므로 탁송은 웬만하면 추천하지 않는다.

(탁송비도 꽤나 비싸다)

 

 

5. 정리

여기까지 테슬라 차량 구매부터 인도까지 모든 과정에 대해 알아보았다.

나로서도 다 처음 겪는 일이고 궁금한 점은 TKC 네이버 카페에서 많은 도움을 받아 해결하기도 했다.

다만 예상치 못했던 점은 차량의 색상 변경이었는데, 그레이에서 실버로 변경하면 22년 3분기에 바로 받을 수 있다는 말에 냅다 변경한 것이 살짝 아쉬웠다.

이후 3분기에 실버 색상을 받은 사람도 있더라..

 

옵션을 변경하게 되면 취소는 불가능하므로 정말 신중히 결정하길 바라며.. 

테슬라 구매 가이드를 마친다.

'차타고 달리자 > 테슬라로' 카테고리의 다른 글

[#0] 테슬라를 구매하게 된 계기  (0) 2022.12.04

 

평소 전기차, 아니 차량 자체에 관심이 없던 사람이 첫차로 테슬라를 구매해 운용하게 된 이야기

 

그 시작은 2021년 11월로 거슬러 올라간다.

친한 친구 중 한명에게 어느 날 뜬끔없이 연락이 왔다.

 

'주말에 뭐해? 나랑 테슬라 타보러 가자'

 

당시 나는 차량에 큰 관심이 없었을 뿐더러, 가끔 타는 일이라고는 장보러 갈 때 어머니의 낡은 투싼을 모는 정도였다.

결론적으로 말하면 그런 나에게도 테슬라는 충격적으로 다가왔다.

 

테슬라 청담점은 한강대로를 한 바퀴 둘러보는 코스로 구성되어 있었는데,

U턴하는 곳을 기점으로 친구가 먼저 운전하고 이후 내가 운전대를 넘겨받아 시승하는 방식이었다.

 

뒤에서 친구가 운전하는 것을 본 첫인상으로는 차에 뭐가 없네? 였다.

다만 허전하다는 감정보다는 오히려 세련됐다는 느낌이 많이 들었는데,

마치 2010년대 초반 LG에서 나온 슬라이드 폰을 사용하다가 아이폰을 처음 본 느낌과 비슷했다.

군더더기 없는 디자인과 빠른 반응성, 유저 친화적인 인터페이스까지.. 지금 생각해보면 보자마자 빠져들었던 것 같다.

 

시승 당시 사진

 

하지만 뒤에서 보는 것은 새발의 피에 불과했음을.. 운전대를 넘겨받고 단지 10여 분을 운전했을 뿐인데 테슬라는 내 차다, 하는 생각이 들었다.

옆에서 T맵 기반의 지도를 보여주는 것은 그렇다쳐도, 주위의 차량이나 사람을 인식해서 실시간으로 보여주는 것이 매우 신기하게 다가왔다. 심지어 꼬깔콘이나 차량의 종류까지 구분해내다니..

놀라움의 정점은 오토파일럿 기능이었다. 주위를 인식한 것을 바탕으로 셀 수 없이 많은 기능들을 해내고 있었다.

 

  • 자동 차선 유지
  • 차간 거리 유지
  • 자동 속도 조절
  • 자동 차선 변경 (*FSD)

 

짧은 시승 시간이었지만 테슬라의 소프트웨어가 곧 미래 모든 차량이 지향점으로 삼아야 할 본보기라는 것을 느끼기에는 충분했다.

돌아오는 길, 내가 타는 투싼은 테슬라에 비하면 중세시대 마차와 다를 바가 없다는 것을 깨닫기 시작했다.

IT 업계에서 근무하는 만큼 평소에 컴퓨터와 최신 기술에 관심이 많았지만, 테슬라의 AI 기술력과 전기차의 조합이 이 정도로 실생활에 깊게 적용되어 있구나하는 생각이 절실히 들었다.

 

시승을 마치고 돌아가는 길, 친구에게 했던 말 한마디가 기억에 남는다.

언제가 될지는 모르겠지만 내 첫 차는 테슬라다.

 

 

그리고 얼마 지나지 않은 12월.. 예약금 100만원을 넣고 테슬라를 예약했다.

 

 

차량을 구매하는 데에 가장 중요시하게 여긴 것은 유지비감가상각이었다.

각각에 포함되는 사항을 세부적으로 고려한 항목은 다음과 같다.

 

  • 유지비
    • 연간 보험료
    • 충전 비용
    • 부품 교체, 수리
    • 자동차 할부

 

이러한 면을 종합적으로 따져보았을 때, 유가가 치솟은 시점에서 내연기관을 유지하는 것보다 전기차를 유지하는 것이 훨씬 경제적이라는 것은 자명한 사실이었다.

이외에도 내연기관보다 훨씬 적은 부품이 들어가기 때문에 각종 수리나 교체를 받을 필요가 없다는 것도 큰 이점이었다.

차량가격 6150만원에 보조금 500만원 정도를 받아 5500만원 선에서 구매할 수 있는 점도 나쁘지 않다고 생각했다.

전기차에 적용되는 각종 환경 관련 할인도 유지비 측면에서 매우 긍정적인 점이었고.

물론 당시에도 비싼 감이 있었지만 지금 글을 쓰고 있는 2022년 12월 현재 테슬라 RWD의 차량 가격은 7034만원이며, 국가보조금 자체도 매년 줄고있는 상황이기 때문에 돌이켜보면 잘한 선택이었다.

 

  • 감가상각
    • 테슬라 브랜드 가치
    • 오토파일럿 등 첨단 AI 기술
    • 배터리 노후화
    • 수리나 사고이력 등

 

감가상각 측면에서는 가장 먼저 테슬라가 가진 소프트웨어 기술력을 중요시 생각했다.

현존하는 차량 중 가장 똑똑할 뿐만 아니라, 사용자 안전을 최우선으로 생각하는 설계들이 믿을 수 있는 점이었다.

실제로 수많은 후기와 사고를 회피하는 능력 등을 보았을 때, 차량이 자신의 가치를 스스로 지킬 수 있다는 것은 다른 차에서 찾아보기 힘든 부분이었다.

또 하나, 테슬라라는 브랜드는 이제 대체 불가능한 메가급 기업이 되어 전기차 시대를 이끌어가는 리더가 되었다.

애플이 스마트폰이라는 새로운 세계를 열어젖힌 이후 늘 1위를 유지하는 기업으로 성장했듯이, 테슬라 역시 그들만의 기술력과 머스크가 이끄는 브랜딩으로 업계 1위를 유지할 수 있다고 보았다.

 

다만 한 가지 걸렸던 점은 배터리였다. 배터리가 노후화됨에 따라 효율이 떨어지고 화재에 대한 이슈가 꾸준히 제기되던 시점이었기 때문에 구매하기 전 가장 크게 고민했던 포인트이기도 했다.

결과적으로 배터리에 대한 문제는 계속 타봐야 하는 점이기도 하고, 보증기간 동안은 무상으로 지원을 받을 수 있기 때문에 지금으로써는 큰 문제 없이 타고 있다. (좀 더 자세한 내용은 다음 편에서..)

 

정리하자면 나는 2021년 12월 26일에 테슬라 모델3 스탠다드(RWD)를 주문해 2022년 9월 29일에 인도받았다.

그 과정에서 내연기관에 대한 고민, 의구심 섞인 주위의 시선도 많았지만 결과적으로는 현재 매우 만족하고 있다.

다음 편에서는 차량을 인도받기까지의 과정과 준비했던 것, 그리고 다양한 팁을 전달해보고자 한다.

'차타고 달리자 > 테슬라로' 카테고리의 다른 글

[#1] 테슬라 구매 가이드  (0) 2022.12.05

맥북으로 Xcode를 쓰다가 문득 이런 생각이 들었다.


'비쥬얼 스튜디오는 왜 cpp파일을 만들 때 템플릿이 없을까?'


물론 처음부터 코딩하는게 더 편할 때도 있지만,

알고리즘 문제를 풀 때나 일반적인 프로젝트를 진행할 때는 기본 틀이 있는게 작업하기가 훨씬 편하다.



예를 들어, Xcode에서 지원하는 기본 템플릿은 이렇게 생겼다.




VS2017에서도 템플릿을 만들면, cpp파일을 만들 때 자동적으로 코드를 넣어줄 수가 있다.


처음에 개념을 찾다가 Item Template라는 것을 발견했는데, VS2017엔 그런게 없어서 한참 헤매다가 발견했다.. '항목 템플릿'이라고 번역해뒀더라..



Visual Studio 2017을 실행하고, 빈 프로젝트를 만들어주자

소스 파일에 main.cpp 파일을 하나 생성하고, 다음과 같은 코드를 작성해 놓는다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//
// main.cpp
// project
//
// Created by (name) on 20xx. x. x..
// Copyright ⓒ 20xx년 (nickname). All rights reserved.
//
 
#include <iostream>
 
int main(int argc, const char * argv[]){
    //insert code here...
    std::cout << "Hello World!\n";
    return 0;
}
cs

* 필요한 부분은 바꿔서 작성하면 되겠다.



저장하고 프로젝트 탭에서 템플릿 내보내기 클릭.

항목 템플릿을 선택한다.




소스 파일 밑에 있는 main.cpp 파일만 선택한다.




여기서 주의할 점은, 템플릿 이름이 파일 이름으로 설정된다는 것이다.

main으로 설정하면 이 템플릿을 선택했을 때 main.cpp 파일이 만들어진다.


또한 출력 위치를 잘 기억해두자. 템플릿을 삭제하고 싶으면 저 위치에 있는 zip파일을 삭제하면 된다.




VS2017을 재시작하고, 프로젝트를 만들어서 소스 파일을 추가해보자. 




다음과 같이 main 템플릿이 뜨면 성공!



※ 날짜와 프로젝트 이름까지 자동적으로 적용시킬 수 있는 방법이 있을지 모르겠다.. 한번 연구해 봐야겠다.

'코딩을 배우자 > C++로' 카테고리의 다른 글

Visual Studio 2017 프로젝트 템플릿 만들기  (1) 2018.07.11

코딩을 열심히 하고 ctrl +F5를 눌러서 결과를 확인하려고 했으나, 콘솔창이 바로 꺼져서 당황했던 적이 있었다.


해결방법은

1. 코드 마지막 부분에 system("pause")를 추가하거나 

2. 프로젝트 속성에서 링커->시스템->하위 시스템을 콘솔(/SUBSYSTEM:CONSOLE)로 바꿔주는 두 가지가 있는데


1번 해결책은 불필요한 코드가 프로젝트에 들어가 있어서 찜찜하다는 단점이 있었고

2번 해결책은 프로젝트를 새로 생성할 때마다 설정해줘야된다는 불편함이 있었다.


따라서 좀 더 깔끔한 방법이 없을까 하다가.. 프로젝트 템플릿이라는 개념을 발견했다.


프로젝트 템플릿


사용자가 원하는 프로젝트 설정을 저장해 새로운 프로젝트를 만들 때 바로 적용시켜 사용할 수 있도록 하는 것


이 포스팅에서는 프로젝트 템플릿을 이용해 새 프로젝트를 디버깅 했을 때 '계속하려면 아무 키나 누르십시오.' 문구가 나오도록 할 것이다.



빈 프로젝트를 하나 생성하고, 프로젝트 설정으로 들어가서 링커>시스템>하위 시스템을 콘솔(/SUBSYSTEM:CONSOLE) 로 바꿔주자


 


프로젝트 탭에서 템플릿 내보내기 선택




템플릿 이름은 편한대로 영어로 지어주고, 출력 위치를 잘 기억해두자.





마침을 누르고 Visual Studio 2017을 재실행해서 새 프로젝트 버튼을 누르면 다음과 같이 템플릿이 추가된 것을 확인할 수 있다.

※ 마침을 누르면 폴더창이 뜨면서 압축파일이 생성된 것을 확인할 수 있는데, 이 압축파일을 삭제하면 템플릿을 삭제할 수 있다. (위의 출력 위치에 생성)




디버그를 했을 때 '계속하려면 아무 키나 누르십시오...'가 성공적으로 뜨면 완료!




다음 포스팅에서는 항목 템플릿(Item Template)에 대해 알아보도록 하겠다.



'코딩을 배우자 > C++로' 카테고리의 다른 글

Visual Studio 2017 아이템 템플릿 만들기  (0) 2018.07.11

오늘의 게임

루니아Z( 루니아전기) | 올엠 | 2006 - 2012 


MMORPG의 새 바람을 불어온 루니아전기

 오늘 소개할 게임은 아는사람은 알만한, 2000년대 중반 반짝이나마 선풍적인 인기를 끌었던 ⌈루니아전기⌋다.  필자가 게임에 유입된 이유는 단순히 넥슨에서 유통했기 때문이었던 것으로 기억한다. 당시 초등학교 친구였던 박씨와 함께 게임을 즐겼던 기억이 남아있다. 출시 초반에 시작해서 4 정도 플레이했던 것으로 회자되는데, 루니아전기가 루니아Z 바뀌는 시점에서 게임을 접었던 같다. 때문에 필자는 루니아Z보다는 루니아전기가 익숙하게 와닿는다. 이제는 서비스가 종료되어 프리서버로 명백을 유지하고 있다고 한다. 하지만 굳이 프리서버까지 찾아가며 플레이하는 국내유저는 많지 않을 것으로 보인다.

루니아전기는 출시 당시 꽤나 완성도가 있었다. 벨트스크롤 방식을 사용하여 유저에게 많은 활동범위를 주었고, 콤보나 스킬 사용에 있어서 어느정도 컨트롤도 필요하게끔 만들었다. 또한 아트, 성우, BGM 등이 여타 양산형 게임들과는 달리 유려하고 분위기에 맞아떨어지는 느낌을 주었다. 스토리는 루니아전기에서전기라는 뜻에 걸맞게 주인공들의 이야기를 에피소드 형식으로 풀어나가는 방식이었다. 에피소드의 분량도 꽤나 많고, 초창기 지속적으로 추가되었기 때문에 유저의 반응도 좋았다. 2006 초반 동접자 3만명을 달성했다는 이야기가 있을 정도로 흥행했지만, 운영 미숙과 여타 MMORPG 크게 차별점을 두지 못하며 많은 유저가 떠나게 되었다. 그렇게 2012 10 18 정식 서비스를 종료하였다.


콤보와 스킬 시스템

 필자가 루니아전기에서 무엇을 가장 열정적으로  했냐고 묻는다면, 단연 콤보연습이라고 것이다. 당시 필자는 커다란 지팡이를 들고다니는다인이라는 마법사 캐릭터를 플레이했었는데, 기본공격으로 때리다가 마지막에 지팡이 부분으로 적을 띄워올릴 수가 있었다. 스킬을 이용해 계속 에어본을 시키며 추가적으로 데미지를 넣곤 했었다. 친구인 박씨가 플레이했던지크라는 전사 캐릭터와 PvP에서 이기기 위함이었던 것으로 기억하는데, 캐릭터 모두 시간이 흐를수록 비주류 캐릭터가 되었다고 들었다. 여튼, 루니아전기의 매력 하나는 콤보이다. 어느 캐릭터를 하든지 에어본 기술이 있고, 계속 에어본을 유지시키면서 딜을 넣는 방식은 상당한 컨트롤을 요구로 했다. 마침내 실전에서 성공적으로 콤보를 성공시킬때의 기쁨이란!


과금 요소

 루니아전기의 과금요소는 크게 기능성 아이템과 치장용 아이템으로 나눌 있었다. 기능성 아이템은 인벤토리 확장, 물약, 캐릭터카드 등의 게임 플레이에 도움을 주는 용도였고 치장용 아이템은 그대로 장비 아이템 위에 착용하는 겉멋을 위한 아이템이었다. 상하의부터 무기 대부분의 장비아이템에 대해 치장을 있었다. 돌이켜보면 매우 일반적인 과금요소가 아니었나 싶다. 하지만 유료 캐릭터들이 출시되기 시작하면서 기존 유저들이 키우던 캐릭터와의 밸런스 문제를 마땅히 해결하지 못했다는 생각이 든다. 


마치며..

 이렇게 오늘의 게임인 루니아전기에 대해 알아보았다. 추억의 게임 시리즈는 앞으로도 간혹 나올 수는 있지만, 서비스를 종료한 게임 중에 내가 가장 즐겨했던 게임은 어제와 오늘에 걸쳐 소개한서바이벌 프로젝트루니아전기 아닐까 싶다. 필자의 견해를 바탕으로 추억의 게임을 되돌아보면, 친구들과 어울려 특정 목표를 성취하고 각자의 캐릭터를 육성하며 경쟁하는 MMORPG 게임이 대부분이었다. 현재까지도 장수하고 있는 게임인메이플스토리마비노기등의 게임 역시 기억에 많이 남는다. 루니아전기는 비록 장수하지는 못했지만, 필자의 기억 속에 오래도록 남아있을 것이다. Thanks Lunia!


읽어주셔서 감사합니다!

칼럼 원본은 여기서 확인하실 수 있습니다.

오늘의 게임

서바이벌 프로젝트 | 아이오 엔터테인먼트 | 2001 - 2013



2000년대 초를 풍미했던 게임

 필자가 처음으로 서바이벌 프로젝트(이하 서프) 했던 것은 초등학교 때였던 것으로 기억한다당시에는 횡스크롤이나 탑다운 종류의 게임이 절대적으로 많았었는데서프도 탑다운  게임  하나였다.

서프는  다섯 가지의 다양한 게임모드를 서비스했다미션대난투,  대전퀘스트놀이가 그것이다유저들은  게임모드에따라 원하는 방을 찾아서 함께 플레이할  있었으며얼마든지 방을 만들 수도 있었다대체적으로 미션을 깨면서 게임화폐인코드와 경험치를 모아 계정을 성장시키고대난투와 대전놀이를 통해 다른  유저와 실력을 겨루었다서프가 2000년대 초에흥행할  있었던 이유로는  만든 맵과 게임모드개성있는 캐릭터들카드와 확률 시스템의 삼박자가 훌륭하게 맞아떨어졌기때문이었다고 생각한다.

다양한 게임모드 

 앞서 언급했던 것처럼 서프는 다양한 게임모드를 지원했고적게는 3많게는 16개까지 세부모드가 있었다.  때문에 유저가많던 시기에는 어딜가든 하나쯤은 원하는 모드를 찾을  있기 마련이었다그러나 2000년도 중반부터 서프가 하락세를 걷기시작하면서 줄어든 유저층에 비해 너무나 많은 맵과 게임모드는 오히려 단점으로 작용하게 되었다좋아하는 모드를 같이  사람을 구하지 못하게  유저들이 점점 이탈하게  것이다필자 역시 서프가 서비스를 종료하기 직전인 12년도 말에 게임을 잠깐 했었던 적이 있었다.함께 깨는 미션과 퀘스트는 혼자만의 게임이 되어버렸고 대전과 놀이는 수다방으로  명백을 유지하고있었다유저끼리 서로를 상대하는 듀얼이나 대전모드만이 간간히 눈에  뿐이었다.

이처럼 게임모드가 많다고 좋은 것은 유저가 그만큼 많이 접속할  뿐이다유저가 줄어들수록 서로 뭉칠  있는 게임모드가필요하고이용률이 높지 않은 모드는 과감히 삭제할 줄도 알아야 한다.


개성있는 캐릭터들

 필자가 지인들에게 서프를 언급했을  가장 먼저 화두에 오르는 것은 바로 캐릭터이다지금까지도 많이들 기억에 남아있는이유는 개성있는 외모와 스킬속성 때문이라고 생각한다 

속성은 바람으로 나누어지고  속성에 따라 캐릭터들이 존재했는데각각 원거리와 근거리 스킬이 있고 이동속도나조작감 또한 캐릭터별로  달랐다유저들은  캐릭터에 자신의 속성카드를 적용시켜 게임을 플레이했다 12개의 캐릭터와 4개의 속성이 있었으니가능한 조합 수는  48가지가 있었던 것이다.

이처럼 유저가 입맛에 맞게 캐릭터와 속성을 선택할  있다는 점이 다양한 메타를 만들어냄으로써 게임을 오래 즐길  있도록 해주었던 요소가 아닐까 싶다.


카드와 확률 시스템

 서프에서 카드는 가장 핵심적인 요소이자 과금 요소이기도 했다크게 캐릭터 프리미엄 카드와 장비 확률 카드로 구분되었는데캐릭터 프리미엄 카드는 캐릭터의 성능을 올려줌과 동시에   세련된 외관으로 바꾸어 주는 역할을 했다.

장비 카드는  속성별로 도끼방패신발펜던트  아홉 가지의 종류가 있었다 카드는 특정 효과가 확률적으로 붙어있고 확률을 높이기 위해서는 과금이 필요했는데 필자는  카드를 업그레이드한 적은 한번도 없었다대체로 랭커들이 많이들 업그레이드를 했었던  하다.

이렇게 오늘의 게임서바이벌 프로젝트에 대해 간략히 알아보았다흔히들 추억의 게임이라고 말하면 서프를 많이 언급할 만큼현재 20 중후반이 즐겨했던 게임이지 않았나 싶다아쉽게도 신규 게임모드 개발 부재값비싼 과금요소와 종류의 한계캐릭터 다양화가 되지 않아  게임성에 비해 빛을 많이 보지 못했다현재도 각종 프리서버에 접속할  있다고 하니예전의 향수를 느껴보고 싶다면 한번쯤 찾아보는 것을 권한다.


읽어주셔서 감사합니다!

칼럼 원본은 여기서 확인하실 수 있습니다.


자 이번 포스팅에서는 장애물들을 설정하고 마무리하도록 하겠습니다.


장애물을 배치하는 것은 간단합니다.

하이라키 탭에서  3D Object > Cube  이름을 Obstacle로 설정해 주시고, 프로젝트 탭에서  Create > C# Script  선택, 이름을 역시 Obstacle로 설정하겠습니다.

Obstacle에 들어갈 스크립트는 아래와 같습니다.


1
2
3
4
5
6
7
8
9
10
11
public class Obstacle : MonoBehaviour {
    private int hp = 1;
 
    void OnDamage(int damage){
        hp = hp - damage;
        if (hp <= 0) {
            Destroy (gameObject);
            return;
        }
    }
}
tistory.hanorange.com
cs


Obstacle 오브젝트는 1 만큼의 hp를 가지고 있으며 피격시 OnDamage함수가 실행되어 damage만큼 hp가 깎이게 됩니다.

hp가 0이하가 되면 큐브가 없어지게 되죠.


OnDamage 함수는 저번시간에 작성했던 Bullet 오브젝트의 컴포넌트인 Fire.cs 스크립트에 있습니다. 잠깐 가져와 볼까요?


1
2
3
if(Physics.Raycast(레이캐스트 설정)){
    hit.collider.SendMessage("OnDamage"1, 메세지 옵션);
}
tistory.hanorange.com
cs

Raycast로 광선을 쏘았을 때 맞는 오브젝트가 있다면 그 오브젝트가 hit되었을 때 OnDamage함수를 발동시키라는 내용입니다. 데미지는 명시된 1 만큼 전달됩니다.

이제 Obstacle에 스크립트와 물리적 요소를 추가하기 위한 Rigidbody를 넣어주시고, Obstacle의 크기를 2, 2, 2로 키워주겠습니다.


Obstacle 을 배치할 시간입니다. 하지만 배치하기에는 땅이 너무 좁네요. 

Plane의 크기를 4, 4, 4로 늘려줍시다.

이제 하이라키 탭에서 Obstacle 을 Plane의 자식으로 넣어서, 맵과 함께 움직이도록 설정하겠습니다.

그 뒤에 Obstacle을 선택한 뒤 Ctrl+c, Ctrl+v 로 복붙해서 맵에 10개 정도만 만들어주겠습니다. ( Ctrl+d 를 누르면 더 빨라요! )



잘 따라오셨나요? 


자, 실행해 봅시다!



정상적으로 잘 플레이되네요.

여기까지 잘 따라오셨으면 게임은 완성입니다! 수고하셨습니다. 👏👏👏

오류가 나거나, 이해가 안되는 부분은 댓글 달아주시면 답해드리도록 하겠습니다!



※ 다음 포스팅에서는 외전으로 어떻게 두명이서 플레이할 수 있는지에 대해 알아보도록 하겠습니다.

계속 개발해 보겠습니다. 

먼저 지금까지 한 Scene을 저장하겠습니다. 하이라키 탭에서  Ctrl + s  를 눌러서 Main이라고 저장해줍니다.


슈팅게임이기 때문에 플레이어가 총을 들고있어야 하겠죠? 하이라키에서  3D Object > Cube  를 두개 만들어서 모형을 적당히 잡아줍시다.

큰 큐브는 Gun으로 손잡이는 Handle로 Gun안에 자식으로 넣어줍니다. 만들어진 Gun은 또한 Player의 자식으로 넣어줍니다.

Material 도 생성해서 색깔을 입혀주시면 Gun 모양까지 완성입니다.



이제 총알과 총알을 발사하는 C# 스크립트를 제작해보겠습니다.

총알은  3D Object > Sphere  의 크기를 0.2 정도로 한 작은 구로 만들어 주시구, 이름은 Bullet 입니다. 앞과 마찬가지로 Material을 만들어서 총알에 색깔을 입혀줍니다. Bullet Color정도로 이름을 설정해주면 되겠네요.


저는 총알이 빛나게 해주고 싶기 때문에  Bullet에서  Add Component > Light  를 넣어주었습니다. 선택 사항이에요!


이제 Project에서  Create > C# Script  로 스크립트를 만들어 줍시다. 이름은 Fire로 설정해주세요.

코드는 다음과 같습니다


public class Fire : MonoBehaviour {
    public float speed = 8f;
    private RaycastHit hit;
    
    // Update is called once per frame
    void Update () {
        if(Physics.Raycast(transform.position, transform.forward, out hit, speed * Time.deltaTime){
 
            hit.collider.SendMessage("OnDamage"1, SendMessageOptions.DontRequireReceiver);
 
            Destroy(gameObject);
            return;
        }
            transform.Translate(00, speed * Time.deltaTime);
    }
}
 
tistory.hanorange.com
cs


speed 는 총알이 날아가는 속도입니다. public으로 선언해주었기 때문에 inspector창에서 직접 수정이 가능하죠.


눈여겨볼 코드는 RaycastHit 메소드입니다. 

만약 오브젝트에 Collider를 붙여서 CompareTag 메소드를 사용하게 되면, 총알처럼 빠른 오브젝트는 프레임과 프레임 사이를 순식간에 지나가게 되어 업데이트 적용을 받지 못해 물체의 충돌을 감지하지 못하는 경우가 발생할 수 있습니다.


그러나 RaycastHit를 사용하게되면 보이지 않는 빔이 속성값으로 넣어준 방향으로 '한 프레임' 정도를 먼저 쬐면서 지나가게 됩니다. 이 빔에 맞는 오브젝트의 정보를 반환할 수도 있죠. 

즉, Update문에 있는 Physics.Raycast(transform.position, transform.forward, out hit, speed * Time.deltaTime

코드는 시작점과 방향, 빔과 속도를 지정해준 것입니다.


hit.collider.SendMessage("OnDamage"1, SendMessageOptions.DontRequireReceiver);

이 코드에서는 총알을 맞은 오브젝트에게 "OnDamage" 함수를 실행하라고 알려줍니다. 1 만큼 데미지를 주고, DontRequireReceiver 메소드는 "OnDamage" 함수가 없는 객체는 수행할 필요가 없다는 뜻입니다. 


작성이 완료되었으면 Bullet의 inspector에 Fire 스크립트를 붙여줍시다.

이제 총알은 게임이 시작되면 클릭할때마다 생성되어 발사될것이기 때문에 Project탭으로 드래그해서 프리팹으로 만들어 주시고, 하이라키에서는 지워줍니다.



총알을 발사할 스크립트를 만들 차례입니다.

하이라키 탭에서  Create > Create Empty  를 선택해서 Fire Position이라고 이름을 바꿔 주시구, 위치를 다음과 같이 총구 앞으로 배치해줍시다.

총알이 발사될 위치를 잡아주는 과정입니다.



Project 탭에서  Create > C# Script , 이름은 Gun으로 설정해줍니다.


public class Gun : MonoBehaviour {
    public GameObject bulletPrefab;
    public Transform firePosition;
 
    public float timeBetFire = 0.6f;
    private float lastFireTime = 0;
 
    // Update is called once per frame
    void Update () {
        if (Input.GetButton("Fire1")){
            if(Time.time >= lastFireTime + timeBetFire) {
                Fire ();
            }
        }    
    }
 
    void Fire(){
        lastFireTime = Time.time;
        Instantiate (bulletPrefab, firePosition.position, firePosition.rotation);
    }
}
 
tistory.hanorange.com

cs


먼저 프리팹으로 만든 Bullet과 총알이 발사될 위치인 firePosition을 가져와줍니다.


발사 간격도 설정해 주어야겠죠? timeBetFire 에서 설정한 쿨타임은 0.6초입니다.

lastFireTime 은 총알이 발사되었을 때 Time.time 으로 현재 시간을 저장하기 때문에, 업데이트문에서 버튼을 눌렀을 때 현재 시간이 마지막에 발사된 시간과 쿨타임을 합친 시간보다 크다면 총알이 발사되는 원리입니다.


Instantiate 메소드는 프리팹을 firePosition의 위치와 각도로 복사해 가져온다는 내용의 코드입니다.

이제 Gun의 inspector에서 Gun 스크립트를 붙여주시고, BulletPrefab과 Fire Position에 맞는 오브젝트를 넣어줍시다.



이제 카메라 뷰를 적당히 설정해주고, 구동해 봅시다!



총알까지 잘 발사가 되네요. 완성이 머지않았습니다.

저번 포스팅에 이어서, 3주차때 진행한 내용을 포스팅하겠습니다.


이번에 제작한 것은 위에서 아래로 내려다보는 탑다운 뷰 게임입니다. 로컬에서 2명이 동시에 플레이할 수 있죠.

플레이어는 맵의 끝과 끝에서 시작되고, 중간의 장애물들을 파괴하면서 서로를 잡아야 합니다.


먼저 유니티 프로젝트를 3D로 시작해 줍니다.


기본 배치로 하이라키 탭에서  3D Object > Plane  으로 땅을 깔아 줍시다.


그 후에  3D Object > Capsule  로 주인공의 몸체를 만듭니다.

또한 주인공의 앞뒤를 구분하기 위해 간단하게 선글라스를 씌워 주겠습니다. 

주인공 캡슐의 이름을 Player로 바꿔주시고, Player를 우클릭,  3D Object > Cube  로 자식 오브젝트로 넣어주겠습니다.

이제 적당히 크기와 위치를 조정해 주시면 이런 구성이 될겁니다.



색깔이 없으니 허전하네요. Project 빈 공간에서 우클릭,  Create > Material  을 두 개 추가해서 바닥과 선글라스의 색깔을 넣어주겠습니다.

각각 Plane Color, Glass Color라고 설정해 주시고 속성(inspector)탭에서 Albedo 값으로 색을 지정하겠습니다.

색깔 설정이 완료된 Material을 오브젝트로 드래그 앤 드롭해주면 색깔 설정까지 완료됩니다.



이제는 플레이어가 물리적인 힘을 받을 수 있도록 Rigidbody 컴포넌트를 추가해야겠네요. 

Player에서  Add Component > Rigidbody  추가.


또한 플레이어가 보고있는 방향을 기준으로 앞뒤로만 움직이게 할 것이고, 움직임을 직접 값으로 넘겨줄 것이기 때문에 

 Player의  Rigidbody > Constraints > Freeze Rotation  에서 x, y, z값 모두 체크해 주겠습니다.


이제 플레이어가 움직일 수 있도록 스크립트를 추가해 줍니다. 

Project 탭에서 우클릭  Create > C# Script  선택해서 이름을 PlayerController 라고 지정합시다.

코드는 다음과 같습니다.


public class PlayerController : MonoBehaviour {


    public Rigidbody myRigidbody;

    public float rotationSpeed = 180f;
    public float moveSpeed = 12f;
    

    void Start () {

    }


    void Update () {
        float inputRotation = Input.GetAxis ("Horizontal");
        float inputSpeed = Input.GetAxis ("Vertical");

        transform.Rotate (0, rotationSpeed * inputRotation * Time.deltaTime, 0);

        Vector3 moveDistance = transform.forward * moveSpeed * inputSpeed * Time.deltaTime;

        myRigidbody.MovePosition (myRigidbody.position + moveDistance);

    }
}


여기서 핵심적인 부분은, rotationSpeed 라는 회전 속도와 moveSpeed 라는 움직이는 속도를 플레이어에게 어떻게 적용시키느냐입니다.

Update() 문 안의 코드들은 1초에 대략 30번~ 60번 실행됩니다. 이것을 흔히 게임에서 '프레임'이라고 하죠.

플레이어가 원하는대로 부드럽게 움직이려면 이 프레임 단위로 수행되는 단위가 극히 짧아야 합니다.

예를 들어서, moveSpeed가 12f라는 뜻은 1초에 12f만큼 가겠다는 뜻입니다. 그러나 만약


Vector3 moveDistance = transform.forward * moveSpeed * inputSpeed;


이런 식으로 코드를 작성하게 되면 1프레임마다 12f씩 튕겨나가는 주인공을 보시게 될겁니다.

그것을 방지하기 위해서  Time.deltaTime 이라는 녀석을 곱해주는 것이죠.  

즉, 이 녀석을 곱함으로써 프레임이 다른 환경에서도 원하는 움직임을 똑같이 맞춰주는 것이다! 라고 생각하시면 되겠네요. 자세한 설명은 지금은 넘어가도록 하겠습니다.


transform.Rotate (0, rotationSpeed * inputRotation * Time.deltaTime, 0);


이 회전속도를 제어하는 코드도 역시 마찬가지입니다.

모든 3D 오브젝트는 x, y, z의 축을 가지고 있는데 저희가 만들 게임은 y축으로만 회전할것이기 때문에 x와 z값에는 0이 들어갑니다.


아참, inputRotation 과 inputSpeed 는 각각 "Horizontal" 과 "Vertical" 로 설정되어 있는데,

이것은 십자 방향키를 입력했을 때 "좌우" 와 "위아래"를 뜻합니다. 


이 스크립트를 저장한 뒤에, Player의 inspector 탭에서  Add Component > PlayerController  를 검색해 넣어줍시다.

아래와 같이 스크립트에서 myRigidbody 에 Rigidbody 컴포넌트를 붙여주면 실행 완료입니다.




노트북 사양이 딸려서 약간 끊기네요.


자 그럼 오늘은 여기까지입니다. 

나조차도 유니티를 잘 다루지 못하는 초급생이지만, 고등학교 아이들을 가르쳐달라는 의뢰가 와서 강의를 총 세번 진행하였다.

그동안 까먹었던 기본적인 지식들과 함수들의 응용에 대해 복습할 수 있던 좋은 시간이었다.



1주차 강의내용 : Roll a Ball 게임 제작


유니티 홈페이지에 있는 듀토리얼 시리즈 중 하나.

유니티 툴의 기본 구성과 스크립트 제작, 오브젝트의 활용법, 카메라 이동 등의 내용을 다루고 있다.


듀토리얼 링크 > https://unity3d.com/kr/learn/tutorials/s/roll-ball-tutorial


듀토리얼과 유사한 흐름으로 진행하면 큰 무리가 없는 좋은 예제다.



2주차 강의내용 : Unity-Chan 에셋을 이용한 게임 제작


유니티짱으로 널리 알려져 있는 이 에셋은 3D 캐릭터기반 게임을 만들고자 하는 사람들에게 많은 도움이 될 것이다.

물리 법칙과 애니메이션 효과, 에셋 활용법을 골고루 다루는 법에 대하여 알수 있는 시간이었다.

맵 또한 에셋에서 받아와 맵을 각자 만들어보고, 유니티짱을 그 속에서 구현해보라는 자율성을 주었다.


유니티짱 에셋 링크 > https://www.assetstore.unity3d.com/kr/#!/content/18705


3주차에는 로컬 멀티플레이를 지원하는 탑다운 뷰 슈팅게임을 제작해 보았다.

UI나 점수계산은 안되지만 고등학생 수준에서는 간단하게 제작하고 플레이하기 적합했다.


이 3주차 내용은 블로그에 제작과정을 포스팅하도록 하겠다.

'일상을 견디자' 카테고리의 다른 글

계획을 세우고 지키는 법  (0) 2017.05.31

+ Recent posts