경일게임아카데미 멀티 디바이스 메타버스 플랫폼 개발자 양성과정 20221008 개인 공부 2022/04/04~2022/12/14

Jinho Lee·2022년 11월 29일
0

2022.10.08 개인 학습 - 특강

  • 남궁영빈 선배

  • 과거 정리한 내용이지만 포스팅에 시간이 걸렸다.

코드 리뷰

  • 당장 바꿀 생각이 없다면 Const를 설정하는 습관을 들이자.

  • [SerializeField]를 Attribute 설정을 하면 자동으로 할당해준다.

  • 값을 받아 밖으로 보내는 스크립트는 키 세팅을 바꾸는 등, 감싸는 이유가 있지 않으면 굳이 감쌀 이유가 없는 코드이다.

  • ( 조건 || 조건 ){ return; } v.s. if(조건){ return; } if(조건){ return; }

    • 결론부터 말하자면 ||

    • 둘 다 정도를 넘으면 좋지 않다.

    • 후자면 값을 반환해야 할 때 전부 바꿔야 하는데 효율적이지 못함

    • || 을 여러 번 쓰고 절반을 넘지 않도록 개행을 하는 편이 좋다고 생각

과제 풀이

  • 머리 / 몸통 / 다리 / 왼팔 / 오른팔로 나뉘어 있다.

    • 머리 : 입력 체크

    • 양팔 : 공격 로직

    • 다리 : 이동 담당

    • 몸통 : 스텟

  • 이동은 머리에서 입력을 받고, 몸통에서 이동 속도를 받아 다리에서 이동하도록 이루어져야 한다.

    1. 머리가 다 한다.

      • 머리에 대한 의존도가 너무 높아진다. / God Object
    2. 컨트롤러를 만든다.

      • 디자인 패턴 - MVC 패턴
  • 각 요소를 연결하는 방법

    • GetComponent로 스크립트를 참조 - 탈부착이 어려울 수 있다.

    • 프리팹 - 확장성을 생각했을 때 구조가 바뀌는 경우에 대처하기 어렵다.

    • 런타임 중 구조가 바뀌어야 할 상황을 위해 각 파트의 연결 / 생성 / 탈부착을 관리하는 매니저를 만든다.

MVC 패턴

  • Model - View - Controller 패턴

  • 웹에서 유래한 디자인 패턴

  • 컨트롤러는 모두와 연결되어 실질적인 연산을 하지만, 모델은 뷰를 알 수 없고 뷰는 모델을 알 수 없다.

    • 관심사 분리 (Separation of concerns, SoC)
    1. 모델: 데이터와 비즈니스 로직을 관리

    2. 뷰: 레이아웃과 화면을 처리

    3. 컨트롤러: 명령을 모델과 뷰 부분으로 전달

  • 컨트롤러는 갓 오브젝트가 아니다

    • 갓 오브젝트는 하나의 객체가 역할에 상관없이 다양한 종류의 책임을 많이 지고 있을 때를 말한다. → 책임이 많고 적음과는 다른 문제

    • 컨트롤러는 그 이름에 맞는 기능만을 하기에 갓 오브젝트까지는 아니다.

  • 이는 게임에도 적용할 수 있다.

    • 모델

      • 게임의 데이터

      • 로직이 아닌 순수 데이터

      • 스텟 등

      • 외적으로 보이는 요소, 출력

      • 애니메이션, 렌더러 등

    • 컨트롤러

      • 핵심 로직, 연산

      • Model들을 조작하고 업데이트된 Model들을 View에 통지

과제에 MVC 패턴 적용

  • 코드는 위에서 아래로, 트리 형식으로 구조가 이루어진다.

  • 몸통에 파트가 부착되었음을 컨트롤러에 전달하도록 구현

  • 반드시 말단 컴포넌트는 수동적이어야 한다 → ex. 컨트롤러 선에서 메시지 전달을 컷할 수 있어야 한다.

  • 인터페이스는 프로퍼티를 가질 수 있다.

  • 추상클래스의 역할 : 구현의 강제에 더하여 확장을 하는 역할

  • isas

    • is : 앞의 변수가 뒤의 타입인지 판별 - bool 반환

    • as : 앞의 변수를 뒤의 타입으로 변환

  • 동등 연산자에서 비교할 값을 앞으로 빼는 습관 → 실수로 할당하는 경우를 막기 위해

    • obj == nullnull == obj
  • 원뿔형 콜라이더의 충돌 처리

    • 30도 원뿔 충돌의 구현

    • Sphere Collider로 충돌 여부를 계산한다.

    • 상대와 나 사이 방향 벡터를 계산해 전방 벡터와 방향 벡터 사이 각을 Vector3.Angle()로 계산한다.

    • 이 각이 15f (양 측 15도, 합하면 30도 범위)이하면 기능을 실행하도록 구현한다.

참고

0개의 댓글