Unity Web Player. Install now! Restart your browser after install. <created with Unity>

화살표 상하 키 / w, s키: 탱크 전/후진.
화살표 좌우 키 / a, d 키: 탱크 회전.
마우스 좌클릭: 포탄 발사.
(탱크의 포탑은 마우스 커서 방향으로 회전된다)

Unity 5로 만든 탱크 게임 프로토 타입.
노란색 적 탱크들을 모두 파괴하면 성공, 주인공 탱크의 체력이 0이 되면 실패.

16/9/8 목

2016/9/6 화
적 탱크의 포탑이 주인공 탱크를 향할 때 찌그러지는 버그에서 계속 헤메는 중. 6:40
turretRotation.x = 0; turretRotation.z = 0;를 이용해 y축 이외는 회전하지 않게 하여 찌그러지는 버그는 잡았지만 적탱크가 주인공 탱크를 공격 중 하늘로 떠오르거나 땅속으로 가라앉는 버그는 아직 남았다. 7:00

3ds Max 8으로 탱크 간단히 만들어 fbx파일로 익스포트. 8:45
유니티 5로 만든 탱크모델 불러들여 테스트. 대충되긴 하는데 탱크 터렛의 회전이 y축이 아닌 x축을 기준으로 도는 문제가 발생. 9:55

* transform 자식의 회전문제는 까다롭다. 아이디어를 생각해봤는데
1. Quaternion을 Euler각도로 바꾸고 x축을 270도 돌린뒤 다시 Quaternion으로 되돌리는 방안.
2. transform.rotation을 transform.localRotation으로 대체하는 방법.
Turret.transform.rotation = Quaternion.Euler(90,Turret.transform.rotation.eulerAngles.y,Turret.transform.rotation.eulerAngles.z);를 덧붙이는 방식으로 일단 마우스가 클릭한 곳으로 총탄을 발사하는 것까지는 되었는데 탱크 터렛은 거꾸로 되어있다. 결과적으로 위의 방법들은 모두 실패. 2:55

2016/9/8 목
이틀전 하다 막혔던 주인공 탱크 터렛 회전을 제대로 돌아가게하기 위한 꼼수 3번째로 3ds Max 8에서 탱크 몸체와 터렛을 각각 따로 fbx로 바꿔 불러오는 방법을 택해 보다.

*** 며칠간의 수많은 헤멤과 실패끝에 드디어 성공. 탱크 몸체와 테렛을 각각 따로 불러올 필요는 없었다. 대신 회전이 들어가 있는 모델링 메쉬를 빈 게임오브젝트의 자식으로 넣어주면 되는 문제였다.
모델 매쉬 게임 오브젝트가 들어갈 위치에 회전이 0,0,0인 빈 게임오브젝트를 만들고 그 밑에 자식으로 회전(예를 들어 270,0,0)이 들어가 있는 모델 매쉬 게임 오브젝트를 넣어준 뒤 부모인 빈 게임 오브젝트를 회전시키면 되는 것이었다. 7:45

* 주인공 탱크 프리팹에 Rigidbody(Freeze Rotation: x,y,z 모두 체크)를 추가하고 이동 겸 지면, 장애물 등과의 물리적 충돌체크용 Sphere Collider(Is Trigger: Off), 총알과의 충돌체크용 Box Collider(Is Trigger: On) 추가.
* 주인공 탱크 프리팹을 복사한 뒤 색을 바꿔주고 SimpleFSM.cs를 넣어 적 탱크 프리팹을 만들다. 9:30

* Canvas, EventSystem(이건 Canvas 추가시 자동 추가됨), Text 추가하고 GameUI.cs 만들어 남은 적의 숫자 화면에 표시하게 처리. SimpleFSM.cs의 Explode() 함수를 수정하여 적 폭파시 남은 적 수 줄이고 화면에 표시하게 처리. 11:30

* 주인공 탱크 체력에 따라 녹색 체력바 표시하기:
Canvas에 Image 컴포넌트 추가한 뒤 녹색 체력 바 이미지 불러들이고
Image Type: Filled, Fill Method: Horizontal로 설정한 뒤
pTankCtrl.cs에 using UnityEngine.UI; //UI 컴포넌트에 접근하기위해 추가하고
OnTriggerEnter(Collider other) 함수에
//Image UI항목의 fillAmount 속성을 조절(현재 체력 / 최대 체력)하여 체력바 값 조정
imgHpbar.fillAmount = (float)hp / (float)initHp;
추가하여 체력에 비례하여 체력바 줄어들게 처리. 12:10

* 승리/패배시 화면에 해당 내용의 이미지 띄우기:
Flash CS4로 승리, 패배시 텍스트 이미지 만들어 png 파일로 익스포트,
Unity 5에서 Texture Type: Sprite(2D and UI)로 설정.
Canvas-Image 컴포넌트 추가하여 불러들인 승리, 패배 텍스트 이미지 각각 불러들여 위치, 크기 조정한 뒤 GameUI.cs에 내용 추가.
public Image imgWin; //승리 이미지
public Image imgLose; //패배 이미지
변수 추가하고 시작시 imgWin.enabled = false;, imgLose.enabled = false;로 안보이게 한 뒤 적 수가 0일 땐 imgWin.enabled = true;를, 주인공 체력이 0일 땐 imgLose.enabled = true;를 넣어 승리/패배시 각각 해당 텍스트 이미지를 화면에 띄우게 처리.

* 게임 승리/패배시 화면을 마우스로 클릭하면 게임 재시작하게 하기:
GameUI.cs에 내용 추가.
public bool isStageEnd = false; //스테이지 종료 여부 변수를 추가,
void Update(){
//스테이지 종료된 뒤 마우스 좌클릭 혹은 터치 패널 클릭시
if (isStageEnd && (Input.GetKey (KeyCode.Mouse0) || Input.touchCount > 0)) {
Application.LoadLevel(0); //스테이지 다시 불러오기
} }
함수를 추가한 뒤 게임 승리/패배 화면 표시할 때 isStageEnd = true;를 추가하여 update()함수의 내용이 실행가능하게 처리. 1:20

* 웹 상에서 테스트 해보니 잘 되는데 UI들이 화면 크기에 맞춰 위치를 변화하지 않아 큰 화면에선 인터페이스가 가운데 몰려 보이고 작은 화면에선 인터페이스들이 잘려 보이지 않는 경우가 생긴다.
Canvas-Canvas Scaler: Scale With Screen Size로 바꿔주니 화면 크기에 맞춰 전환된다. 1:35


게임 스냅샷.