프로그래밍 농장

유데미 스타터스 유니티 1기 취업 부트캠프 - 16주차 학습 일지 본문

STARTERS

유데미 스타터스 유니티 1기 취업 부트캠프 - 16주차 학습 일지

Tennessee201 2022. 10. 10.
728x90

이번주는 저번주에 이어 시네머신을 활용한 심화적인 프로젝트를 진행하였다. 

그리고 이를 기반으로 최근에 유행하였던 우마무스메와 같은 게임연출방식을 직접 기획하고 구현해보는 과제를 수행하였다 !

우마무스메 인게임 연출방식


맵 구성은 아래와 같다. 

기본적으로 Spawn될 플레이어들이 달릴 트랙에셋을 하나 다운받아준 후, 아이템 획득시 랜덤 이벤트를 받을 구간, 스폰될 구간, 1등 플레이어의 Cam, 그리고 플레이어 전체를 비추는 Cam 총 4개의 Virtual Cinemachine을 생성하고 배치해주었다. 

 

기본적으로 각 캐릭터를 선택하고 스폰하는 화면에서 캐릭터 별 이미지와 오브젝트가 생성되어야 함으로, 아래와 같이 Scriptable Object를 생성해준다. 각 스크립터블 오브젝트에는 캐릭터에 맞는 속성 ( 시작속도, 가속력, 최고속도 .. ) 등을 설정해주었다. 

캐릭터별 속성을 저장할 StatusData 스크립트

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[CreateAssetMenu(fileName = "StatusData", menuName = "ScriptableObj/StatusData", order = int.MaxValue)]
public class StatusData : ScriptableObject
{
    public string runnerName;
    public Sprite runnerImage;
    public float startSpd;
    public float maxSpd;
    public float acceleration;
}

게임 시작화면. 캐릭터를 스폰할수 있으며, 캐릭터 선택하여 스폰시, 화면 하단에 캐릭터의 Sprite가 생성되어 현재 상태를 확인할수있도록 하였다.

초기화면

 

캐릭터 생성화면

 


아래는 캐릭터 선택 후, 초기 플레이화면이다. 최초의 플레이 선택홤녀에서 쓰였던 시네머신Cam에서, 플레이 전체를 비추는 Cam과 선두 플레이어를 비추는 Cam의 전환을 코루틴을 두어 우마무스메와 같은 기능을 구현하였다 . 

캐릭터 선택후 초기 플레이 화면 플레이화면

 

아래는 주요 기능들을 구현한 GameManager.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Cinemachine;

public class GameManager : MonoBehaviour
{
    #region singleton
    public static GameManager instance = null;
    private void Awake()
    {
        if(null == instance)
        {
            instance = this;
            DontDestroyOnLoad(this.gameObject);

        }
        else
        {
            Destroy(this.gameObject);
        }
    }

    #endregion

    public RunnerSpawner runnerSpawner;
    public GameObject spawnUI;
    public GameObject playUI;
    public RaceEvent raceEvent;

    public List<GameObject> GoalList = new List<GameObject>();
    public List<GameObject> runners;
    public bool StartRun = false;

    public CinemachineVirtualCamera vcam1;
    public CinemachineVirtualCamera vcam2;
    public CinemachineVirtualCamera vcam3;
    public CinemachineTargetGroup vcamTargetGroup;

    float topZ = 0f;

    public void GameStart()
    {
        runners.AddRange(GameObject.FindGameObjectsWithTag("Runner"));
        if(runners.Count != 0)
        {
            foreach (var runner in runners)
            {
                if (runner.activeInHierarchy)
                {
                    vcamTargetGroup.AddMember(runner.transform, 1, 0);
                    var runnerController = runner.GetComponent<MovementController>();
                    runnerController.Run();
                }
            }
        spawnUI.SetActive(false);
        playUI.SetActive(true);
        StartRun = true;
        raceEvent.RepeatRandomEvent();
        vcam1.Priority = 5;
         StartCoroutine("Vcam2Control");
        }
    }

    private void FixedUpdate()
    {
        if (StartRun)
        {
            Vcam3Control();
        }
    }

    public void Vcam3Control()
    {
        foreach(var runner in runners)
        {
            if(runner.transform.localPosition.z > topZ)
            {
                vcam3.LookAt = runner.transform;
                vcam3.Follow = runner.transform;
            }
            topZ = runner.transform.localPosition.z;
        }
    }
    IEnumerator Vcam2Control()
    {
        while (StartRun) {
            vcam3.Priority = 8;
            yield return new WaitForSeconds(6f);
            vcam3.Priority = 12;
            yield return new WaitForSeconds(6f);
        }
    }
}

 


위 프로젝트는 기존에 학습한 시네머신의 다양한 기능들을 활용한 과정이었다. 기존에 Timeline와 Cinemachine 그리고 Dolly를 활용한 다양한 연출방식을 구현해보았지만, 이와같이 시네머신을 활용하여서도 실제 게임과 같은 사실적인 연출을 할수있어서 정말 의미있는 시간이었다. 

그리고 시네머신을 활용한 다양한 게임들의 사례들을 참조하면서 다양하고 참신한 연출방식을 통해 플랫폼에 대한 유저들의 흥미와 몰입을 한껏 증가시킬수있다는 사실을 깨달았다. 

 


( 다양한 시네머신 연출방식을 참조하였다. )


유데미코리아 바로가기 : https://bit.ly/3b8JGeD

 

Udemy Korea - 실용적인 온라인 강의, 글로벌 전문가에게 배워보세요. | Udemy Korea

유데미코리아 AI, 파이썬, 리엑트, 자바, 노션, 디자인, UI, UIX, 기획 등 전문가의 온라인 강의를 제공하고 있습니다.

www.udemykorea.com

본 포스팅은 유데미-웅진씽크빅 취업 부트캠프 유니티 1기 과정 후기로 작성되었습니다.

 

#유데미, #유데미부트캠프, #취업부트캠프, #개발자부트캠프, #IT부트캠프, #부트캠프후기

 
728x90