2022.10.08 개인 학습 - 특강
남궁영빈 선배
과거 정리한 내용이지만 포스팅에 시간이 걸렸다.
당장 바꿀 생각이 없다면 Const를 설정하는 습관을 들이자.
[SerializeField]를 Attribute 설정을 하면 자동으로 할당해준다.
값을 받아 밖으로 보내는 스크립트는 키 세팅을 바꾸는 등, 감싸는 이유가 있지 않으면 굳이 감쌀 이유가 없는 코드이다.
( 조건 || 조건 ){ return; } v.s. if(조건){ return; } if(조건){ return; }
결론부터 말하자면 ||
둘 다 정도를 넘으면 좋지 않다.
후자면 값을 반환해야 할 때 전부 바꿔야 하는데 효율적이지 못함
|| 을 여러 번 쓰고 절반을 넘지 않도록 개행을 하는 편이 좋다고 생각
머리 / 몸통 / 다리 / 왼팔 / 오른팔로 나뉘어 있다.
머리 : 입력 체크
양팔 : 공격 로직
다리 : 이동 담당
몸통 : 스텟
이동은 머리에서 입력을 받고, 몸통에서 이동 속도를 받아 다리에서 이동하도록 이루어져야 한다.
머리가 다 한다.
컨트롤러를 만든다.
각 요소를 연결하는 방법
GetComponent로 스크립트를 참조 - 탈부착이 어려울 수 있다.
프리팹 - 확장성을 생각했을 때 구조가 바뀌는 경우에 대처하기 어렵다.
런타임 중 구조가 바뀌어야 할 상황을 위해 각 파트의 연결 / 생성 / 탈부착을 관리하는 매니저를 만든다.
Model - View - Controller 패턴
웹에서 유래한 디자인 패턴
컨트롤러는 모두와 연결되어 실질적인 연산을 하지만, 모델은 뷰를 알 수 없고 뷰는 모델을 알 수 없다.
모델: 데이터와 비즈니스 로직을 관리
뷰: 레이아웃과 화면을 처리
컨트롤러: 명령을 모델과 뷰 부분으로 전달
컨트롤러는 갓 오브젝트가 아니다
갓 오브젝트는 하나의 객체가 역할에 상관없이 다양한 종류의 책임을 많이 지고 있을 때를 말한다. → 책임이 많고 적음과는 다른 문제
컨트롤러는 그 이름에 맞는 기능만을 하기에 갓 오브젝트까지는 아니다.
이는 게임에도 적용할 수 있다.
모델
게임의 데이터
로직이 아닌 순수 데이터
스텟 등
뷰
외적으로 보이는 요소, 출력
애니메이션, 렌더러 등
컨트롤러
핵심 로직, 연산
Model들을 조작하고 업데이트된 Model들을 View에 통지
코드는 위에서 아래로, 트리 형식으로 구조가 이루어진다.
몸통에 파트가 부착되었음을 컨트롤러에 전달하도록 구현
반드시 말단 컴포넌트는 수동적이어야 한다 → ex. 컨트롤러 선에서 메시지 전달을 컷할 수 있어야 한다.
인터페이스는 프로퍼티를 가질 수 있다.
추상클래스의 역할 : 구현의 강제에 더하여 확장을 하는 역할
is
와 as
is
: 앞의 변수가 뒤의 타입인지 판별 - bool
반환
as
: 앞의 변수를 뒤의 타입으로 변환
동등 연산자에서 비교할 값을 앞으로 빼는 습관 → 실수로 할당하는 경우를 막기 위해
obj == null
⇒ null == obj
원뿔형 콜라이더의 충돌 처리
30도 원뿔 충돌의 구현
Sphere Collider로 충돌 여부를 계산한다.
상대와 나 사이 방향 벡터를 계산해 전방 벡터와 방향 벡터 사이 각을 Vector3.Angle()
로 계산한다.
이 각이 15f (양 측 15도, 합하면 30도 범위)이하면 기능을 실행하도록 구현한다.