본문 바로가기

TIL

[TIL]2024-3-12 / 54일차 - 최종 프로젝트 2주차 2일차

이모티콘 휠

1. 오늘의 기술면접 - 가비지 컬렉터에 대해 설명해주세요

답안:

힙 메모리 영역은 공간이 유한하기 때문에 메모리 누수가 나지 않도록 유의해야 하는데
메모리의 주어진 공간을 순차적으로 채우는 특징으로 인해 할당을 반복하다 보면
힙 영역의 마지막 주소에 도달하게 되는데 이때 가비지 컬렉터가
더이상 사용하지 않는 메모리를 수집하여 공간의 할당을 해제하는 개념
이 필요없는 메모리 수집을 가비지 콜렉션(Garbage Collection)이라고 한다.

2. 오늘의 알고리즘 코드카타 - 기사단원의 무기

 

답안 : 

using System;

public class Solution {
    public int solution(int number, int limit, int power) {
        // 1부터 number까지, 기사번호의 약수 개수만큼 공격력을 가진 무기 구매
        // 공격력 제한을 넘는 기사는 고정 공격력 무기 구매, 무기 공격력당 1kg 철 소모
        // 무기를 전부 만들기 위해 필요한 철의 무게 리턴
        
        //배열로 기사단원의 수를 선언하고
        //우선 각 기사단원마다 약수의 갯수를
        //이후 그것이 제한수치를 넘는지 판단 
        
        int answer = 0;
        int[] cnt = new int[number + 1];
        
        //약수 구하는 이중 포문은 인터넷에서 참조...
        for(int i = 1; i <= number; i++)
        {
            for(int j = i; j <= number; j += i)
            {
                cnt[j]++;
            }
        }
        
        //cnt[i]를 공격력 제한수치와 비교
        for(int i = 1; i <= number; i++)
        {
            if(cnt[i] > limit)
                answer += power;
            else
                answer += cnt[i];
        }
        
        return answer;
    }
}

 

코드의 설명은 주석으로 대부분 처리했다.


3. 오늘의 작업 - 감정표현 기능

오늘은 어제 발생했던 버그를 해결하고

SetResolution에 Fullscreen 불린 값이 임시로 true로 해놓은 것을 까먹음
Screen.Fullscreen값으로 바꿔서 현재 상태를 받도록 함

 

 

호스트 방에 접속 실패 UI 팝업을 만들고

 

 

감정표현 기능 작업에 들어갔다.

이 기능은 휠을 부르고 거기서 선택하는 방식으로 구현했다.

 

 

휠 메뉴를 여는 모습

지금은 임시로 메인메뉴에서 열 수 있지만 게임에서는 게임 스테이트를 받아 인게임에서만 열 수 있을 예정이다.

 

 

각 이모티콘 패널들은 이미지 컨트롤과 이벤트 트리거가 있어서

이미지 컨트롤에서 애니메이터를 받아 이벤트 트리거에서 포인터가 Enter / Exit 되는 상황에 맞추어

애니메이터에 MouseOver <Bool>값을 체크해준다.

그러면 이에 맞는 애니메이션(이모티콘 확대)가 실행되는 방식이다.

 

에셋들은 무료로 돌아다니는 아이콘들을 베이스로 직접 수정해서 만들었다.

 

 

플레이어 위에 이모티콘이 생성되는 모습

이모티콘의 등장 모션은 두트윈(DoTween)의 기능을 애용했다.

 

 

테스트 삼아 랜덤하게 움직이는 대상에게도 잘 작동하는 모습

 

귀엽게 기능이 잘 구현된 것 같아

이 느낌으로 나중에 인게임 코멘터리 기능에서도 많이 이용해보면 좋을 것 같다.

 


그리고 저번 발표 준비를 하며 만든 발표 자료를 이용했던 TIL이 무려 우수 TIL로 뽑혀 버렸다...

2번이나 뽑히게 되어 영광이면서도 "도대체 왜!?"를 또 한번 외쳤다.