본문 바로가기

TIL

[TIL]2024-1-22 / 21일차 - Unity 입문 개인 과제 기능 구현

 

1. 오늘의 알고리즘 코드카타

1-1. 음양 더하기

 

답안 : 

using System;

public class Solution {
    public int solution(int[] absolutes, bool[] signs) {
        int answer = 0;
        for(int i = 0; i < absolutes.Length; i++)
        {
            if(signs[i] == true)
                answer += absolutes[i];
            else
                answer -= absolutes[i];
        }
        return answer;
    }
}

문제 이해만 하고 나니 평소에 자주 쓰던 형태를 그대로 응용하면 돼서 생각보다 쉬웠다.

 

1-2 . 핸드폰 번호 가리기

 

답안 : 

//문자열의 원하는 부분만 가져오기?
//생각나는 방법은 for문 Length-4
//string에 바로 덧셈이 들어가나? 생각해보니 안해본듯

public class Solution {
    public string solution(string phone_number) {
        string answer = "";
        for (int i = 0; i < phone_number.Length; i++)
        {
            if (i < phone_number.Length - 4)
                answer += "*";
            else
                answer += phone_number[i];
        }
        return answer;
    }
}

설명하기에는 고민거리가 주석에 다 써있다.

 


 

2. 개인과제 기능 구현

 

어제 완료한 일

1.캐릭터 움직이기

2.임시방편으로 카메라 기능 구현

3.뜬금없는 총쏘기

4.타일맵 준비, 에셋 준비

 

오늘 해야될 일

1.타일맵 찍기 마무리

2.이름 받아오는 기능

3.캐릭터 변경 기능

4.카메라 기능 개선

 


 

2-1. 타일맵 찍기 마무리

 

전체 모습
튜터님의 방

 

이정도면 만족한다.

 

스프라이트 에디터로 이미지를 자르는 법, 랜덤 브러쉬, 그리드에서 장식들이 유기적으로 보일 수 있도록(뒤로가면 캐릭터가 가려진다던가) sorting 레이어를 구분하고 colision 을 맵에 완성도 있게 구현하는 방법들을 고민해보는 시간을 가질 수 있었다.

 

 

2-2. 이름 받아오는 기능

 

오랜만에 유니티를 하려니 이부분이 생각보다 고민을 해야했는데 readline으로 인풋 받기 쉽던 C#이 생각나기도 했다.

다행히 유니티에는 비슷한 기능으로 InputField가 존재한다.

그리고 이번에 처음으로 TextMashPro를 이용해 보았는데, 이를 호출할 때는 일반적인 InputField 앞에 TMP_ 를 붙혀줘야 하는 걸 찾아봐야 했다.

 

 

 

이름 받는 부분 UI

 

원래는 시작화면에서 이름과 캐릭터 선택을 하는 방식을 요구했었지만

이를 잘못 이해하여 따로 이름 작성창과 선택창을 만들었다(...) 이로서 필수기능+추가기능까지 두 마리 토끼를 잡은걸까?

 

 

두 글자 미만으로 이름을 작성할 시에는 경고문이 뜬다.

 

이름이 반영 된 모습

 

기본적인 코드 내용. 너무 갑자기 화면이 전환되는게 어색해서 짧은 sleep을 넣어두었다.

 

2-3. 캐릭터 변경 기능

 

 

캐릭터 변경 UI

 

 

캐릭터를 변경한 모습 / 캐릭터 변경은 스프라이트와 애니메이션 세트 변경으로 이루어져 있기 때문에 움직인 자리 그대로에서 캐릭터만 바뀐다.

 

 

캐릭터를 변경하면 이름 작성 창에서도 반영이 된다.

 

캐릭터 변경 부분은 구현이 어려웠는데, 이것저것 많은 시도를 했었다. 프리펩으로 만든 캐릭터 2개를 바꿔보는 방식은 기존에 다른 코딩들과 충돌이 많았다.

 

그래서 머리를 쥐어짜던 중 결국 과제 해설 영상이 올라왔고, 패배를 인정하고 영상을 보고 도움을 받았다.

 

그런데 생각보다 방식은 간단했다. 코딩 초보라 그걸 구현하는 것은 그렇게 간단하다고 느껴지진 않았지만.

 

 

캐릭터 변경에 관한 코드들 / 간략하게 설명하면 버튼을 눌러 받은 int index값을 enum으로 저장한 클래스를 불러와 그에 저장된 스프라이트와 애니메이터로 현재 플레이어를 교체하는 것.

 

아직 이런 객체 지향 코딩이 어려운 나로서는 혼자서는 어려웠을 법한 기능이지만 생각보다 쉽게 해결되는 방법이었다.

 

 

 

2-4. 카메라 기능 개선

 

처음에는 급조 방법으로 그냥 플레이어 안에다가 메인 카메라를 넣어두었다.

솔직히 편하고 문제도 별로 없는 방법이지만, 기능 구현이란 말은 이런 것을 뜻하지는 않는 기분이었다.

 

그래서 좀 더 게임스러운 분위기가 나도록 플레이어를 조금 늦게 천천히 따라오는 카메라를 구현하는 방법을 알아보았다.

내가 생각할 수 있는 방법은 없었기 때문에 인터넷 검색을 활용해야 했다.

 

구현된 코드

플레이어의 포지션을 카메라 스피드로 따라잡는 방법

 

구현된 모습

처음에는 카메라가 따라오며 화면이 조금씩 찢어지는 스크린 테어링이 발생했다.

이는 알아본 결과 FixedUpdate로 변경하여 거진 해결되었다.

 


 

오랜만에 유니티를 다시 보니 이전에 배웠던 것들도 까먹은 느낌이다.

공부에는 끝이 없다지만 조금 너무한 것이 아닌가?

 

마지막은 전체적인 기능 시연 영상으로 마무리 하겠다.