스파르타코딩클럽 게임개발

오늘은 스파르타 코딩 클럽 unity 게임 개발 과정 4일차!

코드천자문 2023. 11. 2. 23:15
반응형

오늘도 즐거운 개발 과정을 작성해보겠다!

 

나는 온라인 부트캠프가 참 맘에 든다.

 

침대에서 일어나서 씻고나서 바로 참석 할 수 있다는 점이 아주 큰 매리트랄까!

 

그러므로 오늘도 일찍 자리를 지켰다!

 

게으름이여 물러나라!!! 하하하핳!!

 

 

일찍 도착하였지만 우리 프로젝트 작업물은 거의 작업이 완료 되어서 할 일이 별로 없다.

 

그래서 오늘은 어제부터 만들려고 했던 타이틀! 을 만들어 볼려고 한다.

 

타이틀은  https://www.canva.com/ko_kr/create/logos/gaming 이 사이트에서 만들었다. 

 

게임 로고를 제작할 수 있는 사이트다.

 

그리고 https://www.bing.com/images/create?FORM=GENILP 에서 타이틀에 필요한 그림을 만들었다.

 

빙 이미지 크리에이터가 내가 지시한 그림을 만들어내는 사이트다.

 

둘다 내가 큰 노력을 할 필요없이 쉽게 제작할 수 있는 사이트 도움을 많이 받았다.

 

타이틀로 사용할까 싶었던 그림 1
타이틀로 사용할까 싶었던 그림 2
타이틀로 사용할까 싶었던 그림 3
타이틀로 사용할까 싶었던 그림 4

 

 

이렇게 귀여운 이미지를 가지고 로고를 만들면 그것이 바로 타이틀이 되는 것!

 

그 이미지를 splash image에 넣어서 사용했다.

 

여기서 splash image란.. 

 

내가 만든 게임에 이런 이미지가 나오면 정말 게임같아서 좋다.

 

게임이 시작될 때 보이는 이미지다.

 

프로버전의 유니티를 사용하면 처음에 유니티의 로고가 보이지 않고 바로 우리가 만든 로고가 보이는데

 

나는 유니티의 로고가 보기 좋기도 하고 프로를 사서 쓸 돈도 없기에 그냥 쓴다 .. 뭐 문제도 없구 ^^ 

 

그래서 여러분이 하는 게임 중 저 유니티가 처음에 보인다면 아 ~ 무료버전의 유니티로 게임을 만들었구나! 라고 생각하면 된다.

 

아 그래서 우리가 만든 타이틀은 왜 안보여주냐고?

 

다음 게시글에 공개할 것이다.

 

정말 잘 뽑혀서 기분이 좋다.

 

또 한가지 ui를 수정 하였다.

 

원래는 미니게임 플레이어의 체력을 상단에 두었는데 이제는 플레이어의 머리 위에 두어 가시성이 좋아졌다.

 

원래는 좌측처럼 상단에 고정 되어있었지만 이젠는 플레이어 머리위를 따라간다.

 

 

움직이는 대로 따라움직인다.

효과도 좋지만 코드 작성의 난이도도 짧다!

 

아주 가성비 넘치는 효과!

 

코드 전문은 이렇다.

 

 

 

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

public class Follow : MonoBehaviour
{
        RectTransform rect;    //Ui는 트렌스폼과 달리 따로 변수를 만들어 줘야 한다.
       
        private void Awake()
        {
                rect = GetComponent<RectTransform>();
        }

        private void FixedUpdate()
        {
                rect.position = Camera.main.WorldToScreenPoint(new Vector3(MiniGameManager.I.run.transform.position.x+20,(MiniGameManager.I.run.transform.position.y)+15f, MiniGameManager.I.run.transform.position.z));
        }
}

 

 

 

 

 

 rect.position = Camera.main.WorldToScreenPoint(new Vector3(MiniGameManager.I.run.transform.position.x+20,(MiniGameManager.I.run.transform.position.y)+15f, MiniGameManager.I.run.transform.position.z));

이 코드가 제일 핵심인데. 

실제로 ui의 위치와 게임 오브젝트의 위치는 다르다.(월드와 스크린의 차이)

미니게임의 플레이어인  run의 포지션을 그냥 넣어버리면 안된다.

이 문제를 해결해 주는것이 Camera.main.WorldToScreenPoint() 이 코드인데,

WorldToScreenPoint() 이것은 월드상의 오브젝트 위치를 스크린 좌표로 변환시켜주는 함수다.

이제 rect은 run을 따라간다!

 

저 몇줄만으로 !! 대단하다!! 

 

이 코드는 유튜브 골드메탈님의 뱀서라이크 강좌에서 보고 참고하였다.

https://www.youtube.com/watch?v=ip0xffLSWlk&list=PLO-mt5Iu5TeZF8xMHqtT_DhAPKmjF6i3x&index=13

한번쯤은 따라해봐도 좋은 강좌

 

 

 

그리고 드디어 빌드를 해보았는데 어라.. 문제가 발생했다..

 

 

여태껏 우리는 유니티 내부의 게임뷰를 보면서 게임을 플레이하며 테스트 했다.

 

게임 뷰에서 게임의 모습을 바라보는 모습

 

그런데 어라?? 빌드를 하니 이게 무슨... 일이람?? 

빌드를 하고나니 뭔가.. 뭔가가 이상하다..

 

ㅜㅜㅜ

 

아니 왜 UI 짤림??? ㅅㅂ!!!!

 

이럴수가! 말도안돼!! 

 

정말 절망적이였다! 

 

눈물이 앞을 가렸다!

 

으아아ㅏ아아ㅠㅠㅠ

 

 

이 방법을 어떻게든 해결하기 위해 튜터님에게 달려가서 물어보았지만 조금 시간이 걸리시는 듯 했다.

 

그런데 그때 구세주가 있었으니! 

 

빛은하

 

바로 같은 조원인 은하님이다!

 

문제점을 바로 파악하고 내가 고민하던 부분을 완벽하게 고쳐주셨다.

 

문제가 뭐였냐면 

 

켄버스의 스케일 문제였다.

Match를 보라!

 

여기서 Match는 이 화면을 세로를 기준해서 맞출지 가로를 기준을 해서 맞출지 옵션을 선택하는 속성이다.

 

 

이런식으로 캔퍼스의 스케일을 세로를 기준으로 맞출지 가로를 기준으로 맞출지 선택할수있다.

 

이 속성 덕분에 드디어 내가 염원하던 아름다운 화면을 볼 수 있었다!

 

 

UI가 아름답게 모두 보인다!

 

아아.. 너무 좋아!!

 

이렇게 해서 모든 준비를 끝낸 우리조는 내일을 위한 발표 준비를 했다.

 

시연영상은 내가 만들었고 발표는 빛은하님께서 맡으실 예정이다.

 

오늘도 즐거운 프로젝트 개발이였고 오늘 또한 큰 문제 없이 넘어가서 기분좋았다.

 

오늘도 열공함!

 

내일은 발표의 날이다! 우리의 프로젝트를 모두에게 보여주는 아주 중요한 날이다!

 

모두가 우리 게임을 좋아해주었으면 하는 바람이 크다!

 

아자아자 화이팅! 내일도 열심히!

 

이만 글을 줄이겠다! ㅂㅂ

반응형