Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

동구의_C# & Unity_개발일지

2024.04.08 내일배움캠프 72일차 TIL_Unity (최종 프로젝트, 알고리즘, 기술 면접) 본문

카테고리 없음

2024.04.08 내일배움캠프 72일차 TIL_Unity (최종 프로젝트, 알고리즘, 기술 면접)

mongle_0l 2024. 4. 8. 10:40

알고리즘 코드카타 55일차

옹알이 (2)

문제 설명
머쓱이는 태어난 지 11개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음과 네 가지 발음을 조합해서 만들 수 있는 발음밖에 하지 못하고 연속해서 같은 발음을 하는 것을 어려워합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.
using System;

public class Solution {
    public int solution(string[] babbling) {
          int answer = 0;
            string[] talk = new string[] { "aya", "ye", "woo", "ma" };

            for (int i = 0; i < babbling.Length; i++)
            {
                for (int j = 0; j < talk.Length; j++)
                {
                    string str = talk[j] + talk[j];
                    babbling[i] = babbling[i].Replace(str, "@").Replace(talk[j], " ");
                }
                if (babbling[i].Trim().Length < 1)
                    answer++;
            }

            return answer;
    }
}


기술면접 연습하기 24일차

디자인 패턴(Singleton, Observer 등) 사용하는 이유는 무엇인가요? (꼬리질문) 프로젝트에 디자인패턴을 적용해 본 경험이 있나요?
왜 그 디자인패턴을 선택해서 구현하였나요?
(꼬리질문) Unity를 사용하면서 경험해볼 수 있는 대표적인 디자인패턴이 무엇인지 설명해주세요.
디자인 패턴을 사용하는 이유는 주로 코드의 재사용성, 유지보수성, 확장성, 그리고 코드의 가독성과 이해도를 향상시키기 위함이다.
사용한적 있다. 이벤트 기반 시스템을 구현하기 위해 Observer 패턴을 사용한 적이 있다. 이 패턴을 선택한 이유는 여러 객체 간에 느슨한 결합을 유지하고, 객체 간의 상호작용을 효율적으로 관리하기 위함이었다. 또한, 코드의 유연성을 높이고, 변경 사항에 대응하기 쉽도록 만들어줬다.
Unity에서 가장 대표적인 디자인 패턴 중 하나는 Component 패턴이다. 이 패턴은 게임 오브젝트를 구성하는 각각의 구성 요소(컴포넌트)를 분리하여 관리하고, 각 컴포넌트는 특정 동작이나 기능을 담당한다.

최종 프로젝트


트러블 슈팅

불필요한 맵을 카메라에서 보이지 않도록 하기 위해서 Polygon Collider2D을 사용해 카메라 영역에 맵 제한 구현을 하였다. 하지만 포탈을 타고 다른 맵으로 이동할 때 카메라가 Polygon Collider2D에 막히는 오류가 있었다.

 

해결 방법

각 장소마다 영역이 걸려있는 시네머신 Virtual Camera를 만들어 여러개의 씬에서 여러 대의 카메라를 사용해서 교체해 주는 것처럼 시네머신 카메라도 여러 대를 만들어서 각 장소마다 설정 후 이동할 때마다 해당 카메라 이동하게 만든다!
public class GameManager : Singleton<GameManager>
{
    public CinemachineConfiner2D cine2d;
}
GameManager에 CinemachineConfiner2D 타입의 cine2d 변수를 선언
> 2D 공간에서 Cinemachine의 Confiner를 사용하여 플레이어를 제한하는 데 사용

 

public class NextMap : MonoBehaviour, IInteractive
{
    public PolygonCollider2D destCol;
}
포탈 스크립트인 NextMap에서 PolygonCollider2D 타입의 destCol 변수를 선언
> 포탈이 목적지에 도달했을 때 플레이어를 이동시킬 영역을 정의하는 데 사용

 

이후 각각의 맵에 있는 카메라에 bounds을 달아주면!

 

포탈을 타고 이동하면 카메라가 따라와져 맵 이동이 잘된다!