본문 바로가기
VR 팀프로젝트/[GroundZero] 제작 일지

GroundZero 제작일지 - GameOverScene 구현

by 잰쟁 2023. 12. 21.
728x90

 

▼구현할 부분

 

 


▼ 과정

 

PlayerCar 안에 'GameOverCanvas' 라는 이름으로 Canvas 생성해준다.

 

Canvas의 RenderMode를 'World Space'로 변경해주고, Event Camera를 PlayerCar의 자식인 OVRCameraRig의 CenterEyeAnchor로 설정해준다.

 

GameOverCanvas 안에 아래와 같이 만들어준다.

UI들을 담을 bg를 만들어주고 그 아래에 'DEFEAT' 텍스트와 게임결과를 알려줄 List들을 담을 배경으로 List_bg를 만들어주고 그 아래에 List들을 만들어준다.

 

게임결과 종류는 총 4가지로, 아래와 같다.

1) Player가 Enemy들에게 데미지 입힌 총량

2) Player가 방패로 총알을 방어한 횟수

3) Player가 죽인 Enemy 수

4) Player가 한 Wave를 클리어할 때마다 얻는 보상(WaveItem)의 갯수

 

List 안에는 Amount, Desc, 3D 오브젝트를 넣어준다.

Desc : 게임결과 설명

Amount : 게임결과 데이터

 

각 3D 오브젝트 별로 아래와 같이 제자리에서 도는 애니메이션도 추가하였다.

4가지를 만들어주면 아래와 같은 구조가 된다

 

 

 


▶ GameOverScene 배경 연출

레퍼런스한 게임 플레이 영상을 보면 Lobby나 GameOver 씬에서 고개를 상하좌우로 돌려도 360도 방향으로 배경화면이 있는 것을 알 수 있다.

 

 

이 점을 해결하기 위해 'Inverted Normals(Flip Normals)' 블렌더를 사용하여 구현해보았다. 

 

우선 Materials 폴더에 'InverseSphere'라는 이름으로 Shader와 Material을 하나씩 만들어준다

 

Visual Studio Code로 위에 만들어준 InverseSphere 폴더를 열어 아래와 같이 작성해준다.

Shader "Flipping Normals" {
    Properties {
        _MainTex ("Base (RGB)", 2D) = "white" {}
    }
    SubShader {

        Tags { "RenderType" = "Opaque" }

        Cull Off

        CGPROGRAM

        #pragma surface surf Lambert vertex:vert
        sampler2D _MainTex;

        struct Input {
            float2 uv_MainTex;
            float4 color : COLOR;
        };

        void vert(inout appdata_full v) {
            v.normal.xyz = v.normal * -1;
        }

        void surf (Input IN, inout SurfaceOutput o) {
             fixed3 result = tex2D(_MainTex, IN.uv_MainTex);
             o.Albedo = result.rgb;
             o.Alpha = 1;
        }

        ENDCG

    }

      Fallback "Diffuse"
}

 

 

적당한 배경 이미지 파일을 가져와 Texture Type을 Sprite로 변경해준다.

 

미리 만들어둔 Material을 열어 Shader를 위에 만들어둔 Shader로 선택하여 변경하고 (Shader 이름이 같아야 함)

배경 sprite 파일을 드래그 해주어 넣어준다.

 

 

PlayerCar에 아래에 3D 오브젝트 Sphere를 생성해주고 Material을 위에서 만든 Material로 변경해준다.

PlayerCar를 Sphere가 감싸야 되므로 Scale도 많이 늘려준다.

 

 

만들어둔 GameOverCanvas를 Sphere의 자식을 넣어주고 Canvas의 위치 조정을 해주면 된다.