본문 바로가기

TIL

[TIL]2024-3-20 / 60일차 - 최종 프로젝트 3주차 3일차

 

 

1. 오늘의 기술 면접 질문 - 델리게이트(Delegate)의 개념에 대해 설명해주세요.

답안 : 

 

델리게이트는 대리자라는 뜻으로, 메소드를 간접적으로 호출하기 위해 대리자 선언하여 참조시킬 수 있습니다.

메서드 파라미터와 리턴 타입에 대한 정의를 한 후, 동일한 파라미터와 리턴 타입을 가진 메서드를 서로 호환해서 불러 쓸 수 있는 기능으로, 특정 메소드를 처리할 때 그 메소드를 직접 호출하는 것이 아닌 델리게이트로 참조 시켜 부르는 것으로 사용할 수 있으며 이때에는 반환형과 매개 변수 종류, 갯수가 모두 일치해야 합니다.

 

이를 이용해 콜백 메서드나 구독 패턴을 구현할 수 있다. 또한 델리게이트 체인을 통해 여러 개의 메서드를 연결할 수 있다.

 


2. 오늘의 알고리즘 코드카타 -  체육복

 

답안 : 

//3가지 배열이 생기게 됨 - 학생 번호 별 / 도난 당한 학생 / 여벌을 가진 학생 
//여벌 체육복의 학생은 도난 당해도 한 개만 당해 본인은 처리 가능

using System;

public class Solution
{
    public int solution(int n, int[] lost, int[] reserve)
    {
        int answer = 0;
        
        // 학생 번호에 따라 배열 생성
        int[] intArray = new int[n];
        
        // 유형 별 반복문으로 가진 체육복의 개수 체크
        for(int i = 0; i < intArray.Length; i++)
            intArray[i] = 1;
        for(int i = 0; i < lost.Length; i++)
            intArray[lost[i] - 1]--;
        for(int i = 0; i < reserve.Length; i++)
            intArray[reserve[i] - 1]++;
        
        // 체육복 빌리는 과정
        for(int i = 0; i < intArray.Length; i++)
        {
            if(intArray[i] == 0)
            {
                if(i > 0 && intArray[i - 1] == 2)
                {
                    intArray[i - 1] = 1;
                    intArray[i] = 1;
                }
                else if(i < intArray.Length - 1 && intArray[i + 1] == 2) 
                {
                    intArray[i] = 1;
                    intArray[i + 1] = 1;
                }
            }
        }
        
        // 체육복을 가지게 된 학생의 수
        for(int i = 0; i < intArray.Length; i++)
            if(intArray[i] > 0)
                answer++;
        
        return answer;
    }
}

 

역시나 오전 졸음의 힘인가, 시간까지 혼자 마무리 짓지 못해 다른 답안을 참고하여 깔끔하게 정리되었다.

빌려주는 것에 대한 개념을 확실하게 인지한다면 그렇게 어렵지는 않은 문제였다.


3. 오늘의 작업물 - 캐릭터 애니메이션

오늘은 캐릭터 사망과 리스폰 / 캐릭터 기초 이동 애니메이션을 만들었다.

 

캐릭터 사망과 리스폰은

네트워크와 연동되어야 하는 특성 때문에 플레이어를 제거하고 다시 만드는 것은 현재 네트워크 작동 방식에서

많이 복잡한 문제가 되어서

단순히 죽는 것이 아닌 대미지를 받는 것이 감지되면

죽는 애니메이션이 실행되며 콜라이더와 리지드 바디가 비활성화 / 프리즈 되어 해당 위치에서 사망 위치 마크가 찍히는 연출 이후 게임의 시작지점으로 트랜스폼을 옮긴 뒤에 리스폰 애니메이션을 실행, 이후 제한걸린 것들을 풀어주는 방식으로 되어있다.

 

 

 

 

이렇게 사망과 리스폰을 적당히 처리하게 되어 기본적인 캐릭터 애니메이션을 넣어주게 되었다.

 

현재 캐릭터 무브먼트에서는 다양한 상태 체크를 하게 되는데

이때에 점프 중 / 지상과 닿은 상태 / 이동 중 등을 체크하게 되어

정지점프 모션 / 이동점프 모션 / 이동 모션등을 구분하여 애니메이션과 트랜지션 조건을 달아주었다.

 

위와 같이 각종 파라미터와 애니메이션 내에 이벤트를 통해 작동하고 있으며

 

사망처리에 경우에도

 

이런 오버라이드 레이어를 만들어 따로 처리하는 방식으로 수정하였다.