Unity 5로 '따라하면서 배우는 유니티 3D 입문' 6장 RC카 게임 따라하기.

키보드로 자동차를 운전하는 게임의 프로토타입으로 자동차가 돌아다닐 맵은 Terrain 기능을 이용해 제작.

* wsad키 혹은 화살표 상하좌우키로 자동차 조종.
* 게임 리셋은 escape 키.

게임은 용량이 꽤 많은데다 웹 용의 경우 랜더링이 이상하게 적용되어 올리지 않고 캡쳐만 올림.

15/11/15 일

* 자동차 모델 fbx와 매핑용 png들 Project 창으로 드래그 해 임포트하기.
자동차 모델 선택하고 Inspector 창에서 Model-Scale Factor: 2로 설정한 뒤 Apply 버튼 클릭. 들여온 크기의 2배 크기가 된다.
빈 게임오브젝트 생성, 이름: Car, Rigidbody 추가, Mass: 2000, Drag, Angular Drag: 0으로 설정. > 나중에 Mass: 20, Drag: 0, Angular Drag: 0.3으로 설정 변경.
Car 오브젝트 자식으로 자동차 fbx 모델 추가하고
빈 게임오브젝트 CarCollider 1, 2, 3를 만들어 Box Collider를 추가한 뒤 역시 자식으로 추가하고 각각의 위치와 크기 조절하여 자동차의 상부, 중간부, 하단부 충돌 영역 만들기.

* 앞뒤 바퀴용 빈 게임오브젝트 WcFrontLeft, WcFrontRight, WcRearLeft, WcRearRight 4개를 만들어 Wheel Collider를 추가한 뒤 역시 자식으로 추가.
Wheel Collider-Mass: 1, Radius: 1.1, Suspension Distance: 0.7, Suspension Spring-Spring: 1,000, Damper: 200, Target Position: 1, Forward Friction-Stiffness Factor: 1, Sideways Friction-Stiffness Factor: 0.2로 설정해주고 위치와 크기를 각각 바퀴에 맞게 조정.

키보드 WSAD키로 자동차 조종하기 처리. 뭔가 적용이 잘못되었는지 자동차 앞 두 바퀴가 좌우로 회전은 하지만 차가 전,후진을 하진 않는다.
자동차 엔진음 소리내기.
책의 예제를 테스트해 봐도 자동차는 전,후진 하지 않는다. 4와 5의 버전 차이에 따른 문제인듯.

Help-Unity Manual로 매뉴얼을 보며 조정하다 보니 문제는 whFLeft.brakeTorque = brakePower; 등의 brakeTorque에서 생기는 듯.

brakeTorque를 제외하고 motorTorque로만 조절을 하니 문제없이 움직인다. 어쨋건 전/후진, 좌우회전 등 조종이 되긴 하는데 조작감이 상당히 안좋다.

메인카메라를 Car의 자식으로 넣어 카메라가 자동차를 따라가게 하고
Car의 Rigidbody-Mass: 20, Angular Drag: 0.3으로 변경.

자동차 조종문제 해결. 전/후진시에는 BrakeTorque를 0으로 해주니 해결되었다.
그외의 경우엔 BrakeTorque를 양수로, MortorTorque를 영으로 설정.

즉, 아래같이 하면 된단 이야기.
전진시: MortorTorque: 양수, BrakeTorque: 0
후진시: MortorTorque: 음수, BrakeTorque: 0
전/후진이 아닐 때: MortorTorque: 0, BrakeTorque: 양수

* 새로 씬 만들고 Terrain을 추가한 뒤 1. Raise/Lower Terrain 브러시로 지형 만들기. 2. Paint Height 브러시로 일정 높이 지형 길 만들기, 3. Smooth Height 브러시로 지형 부드럽게 하기. Terrain-Settings-Height map-Export Raw...로 만든 하이트맵 저장하고 Import Raw...로 기존에 만든 하이트맵 불러와 Terrain에 적용하기.

* 지형 색칠, 매핑: Terrain-4. Paint Texture 선택하고 Textures-Edit Textures 클릭 뒤 창에서 Grass & Rock.psd 선택, Add를 누르면 지형전체가 해당 텍스쳐로 가득 찬다. CliffLayered Rock.psd를 추가하고 Target Strength: 0.5를 설정한 뒤 산 부분을 브러시로 칠하기. 이후 계속 추가하고 그럴싸하게 색칠하기, Paint Height-Height를 0으로 설정한 뒤 드래그로 자동차용 길 만들기.
* 나무 추가: Terrain-5. Place Trees에서 Edit Trees-Add Trees 클릭 뒤 창에서 익스포트해 둔 Palm.fbx를 선택. Tree Density를 40으로 한 뒤 나무 심을 곳을 마우스로 클릭해 야자 나무들 생성하기.
* 풀 추가: Terrain-6. Paint Details에서 Edit Details-Add Grass Texture 클릭 뒤 창에서 익스포트해 둔 Grass.psd, Grass2.psd를 선택. Opacity: 0.02, Target Strength: 0.18로 하여 브러시로 원하는 곳에 풀 생성하기.

* 물 추가, Skybox로 하늘 표시하기. 이전 버전에서 Edit-Render Settings에 있던 기능들은 Window-Lighting으로 옮겨졌다. 이곳에 Fog 설정 기능도 있다.
* 자동차를 따라가는 카메라 스크립트로 만들기.

* 이전 3ds Max로 만든 자동차를 넣어 봤는데 무게 균형이 안맞는 탓인지 자꾸 튕기는 현상이 발생. 골머리 중.
이 문제 역시 이전과 동일한 문제로 내부의 carAndLight, car가 각각 위치가 틀려져 있어서 생긴 문제였다. 모두 0,0,0으로 위치를 맞추자 제대로 구현됐지만 바퀴가 엉뚱한 방향으로 돌아간 문제는 해결 안되었다.
빈 게임오브젝트를 만들고 그곳에 스크립트를 적용한 뒤 바퀴 오브젝트는 해당 빈 게임 오브젝트의 자식으로 넣은 뒤 위치를 재조정하고 회전시켜 바퀴 방향 문제 해결. 한데 바퀴는 여전히 정상적 거리 보다 넓게 벌려져 있어 완전치 않은 상태-이건 자동차 차체와 바퀴 사이 간격이 없어서 Physic 충돌로 인해 생기는 현상인듯.
csGameMain.cs에 esc키 클릭시 게임을 다시 불러오게 설정해 게임 멈출 경우 등에 대비하게 처리.

* 랜더링을 해보니 웹용은 결과물이 그닥 좋아 보이지 않는다. Terrain 매핑은 번들번들 빛나고 그림자도 나타나지 않는 상태. PC용으로 랜더링하니 과연 제대로 깔끔하게 나온다만 용량이 크다. 70메가 가량. 웹은 8메가 정도로 거의 웹용의 10배 정도 크기다.