MSW 기본 학습 교안 5. 자주 사용하는 컴포넌트

bi_sz·2022년 9월 26일
0

MSW

목록 보기
5/11
post-thumbnail

MSW에서는 3가지의 TweenComponent를 제공한다.
컴포넌트의 이름에 따라 원점을 기준으로 동작하는 방식과 프로퍼티에서의 차이를 가진다.

TweenCircularComponent : 원점을 중심으로 원운동

  • 원점을 기준으로 원형으로의 움직임 연출
  • 회전 수, 속도, 반경 설정 가능

TweenFloatingComponent : 원점을 기준으로 부유운동

  • 엔티티가 제자리에서 떠다디는 듯한 움직임 연출

TweenLineComponent : 원점에서 목적지까지의 선형운동

  • 원점을 기준으로 목적지까지 선형운동의 움직임 연출
  • 목적지까지 편도, 왕복 운동 여부 및 가/감속, 도달 시 튕김의 운동 방식 설정

각 컴포넌트에 속한 프로퍼티는 프로퍼티 클릭 시 조정하는 기능에 대한 설명이 표시된다.


RigidbodyComponent는 강체의 물리적인 속성을 컨트롤 할 수 있는 컴포넌트이다.

Gravity : Gravity 프로퍼티의 값 조정을 통해 공중에 떠 있거나 지면에 떨어지도록할 수 있다.
IsBlockVerticalLine : 세로 방향의 Foothold 를 설정할 수 있다.
IsQuaterViewMove : 프로퍼티의 값 조정을 통해 컴포넌트가 지형에 떨어지지 않고 자유롭게 움직일 수 있도록 설정할 수 있다.

MovementComponent 는 이동 속도와 점프의 정도, 활성화의 여부를 조절하는 프로퍼티가 존재한다.

InputSpeed 프로퍼티의 조정을 통해 이동 속도를 설정하고,
JumpForce프로퍼티의 조정을 통해 점프의 정도를 설정한다.

TriggerComponent 는 엔티티의 충돌을 감지하는 컴포넌트이다.

MSW에서의 충돌 이란 충돌체를 포함하고 있는 엔티티의 충돌 영역이 서로 교차했을 때를 의미한다.

충돌체의 경우 TriggerComponentHitComponent 와 같은 컴포넌트를 엔티티에 추가할 경우 자동으로 생성된다.
TriggerComponent 또는 HitComponent를 가지도 있지 않은 객체와의 충돌은 감지할 수 없다.

두 컴포넌트는 설정하는 범위를 기준으로 차이를 가진다.

  • HitComponent : 피격의 범위를 설정할 때 충돌체 사용
  • TriggerComponent : 충돌이 일어나는 범위를 설정할 때 충돌체 사용

충돌체 크기 / 위치 편집

  • Collider : 프로퍼티 에디터의 Edit 버튼을 누를 경우 엔티티에 충돌체가 나타난다.
    드래그 or 핸들러 조절을 통해 충돌체 크기 설정 가능.
  • BoxOffset & ColliderOffset : 충돌체의 위치 설정
  • BoxSize : ColliderType 이 Box 일 경우 충돌체의 크기를 설정
  • CircleRadius : ColliderType 이 Circle 일 경우 충돌체의 크기를 설정
  • ColliderType : 충돌체의 형태 선택, Box의 경우 충돌체를 사각형으로, Circle의 경우 원형으로 변경
  • IsLegacy : TransformComponent 에 영향을 받을지 여부를 설정

스크립트 작성을 통해 이벤트를 받아 충돌 시 핸들 처리를 해줌으로써 충돌을 처리할 수 있다.

Entity Event System 을 이용한 충돌 시 액션 추가

액션 추가는 아래와 같은 순서로 진행된다.

  1. 충돌 이벤트 발생
  2. 액션을 수행할 핸들러를 Entity에 등록
  3. TriggerComponent를 통해 이벤트 발생 시 핸들러로 등록한 함수의 호출

액션을 수행할 핸들러는 리액터가 되는 스크립트의 Entity Envent Handler를 통해 추가해준다.
검색창에 Trigger 입력을 통해 아래 이벤트 핸들러를 선택할 수 있다.

  • TriggerEnterEvent : 엔티티 간 처음 충돌이 발생했을 때 1회 발생
  • TriggerStayEvent : 엔티티가 충돌 중이면, 프레임마다 발생
  • TriggerLeaveEnvent : 엔티티가 충돌되었다가 충돌이 끝났을 때 1회 발생
    위의 액션 목적에 맞는 핸들러를 선택해 준다.

충돌 Event Sender 설정을 통해
리액터 컴포넌트가 추가된 엔티티의 충돌 이벤트를 받는 경우에는 값을 self로,
외부 안티티의 충돌 이벤트를 받는 경우에는 Entity 로 설정해 준다.

위 이미지는 확장 TriggerComponent를 활용한 충돌 처리이다.
엔티티에 충돌 이벤트가 발생할 경우 호출되는 자체 함수를 통해 엔티티의 충돌 시 처리 로직을 추가해준다.

로직은 아래의 순서에 따라 추가해 준다.
1. TriggerComponent 확장
2. 함수 오버라이드

  • OnEnterTriggerBody : 엔티티 간 충돌이 처음 발생했을 때 1회 호출
  • OnStayTriggerBody : 엔티티 간 충돌이 발생한 뒤, 두 엔티티가 겹쳐있는 동안 프레임마 다 호출
  • OnLeaveTriggerBody : 엔티티 간 충돌이 종료될 때 1회 호출
  1. 파라미터 : 충돌 이벤트가 들어옴

Player 컴포넌트는 플레이어에 대한 로직을 스크립트로 추가할 수 있다.

  • PVP mode : 상호 공격이 가능한 모드

장애물과의 충돌 (TriggerEnterEvent)이 들어올 경우 hp를 100씩 감소시키는 스크립트 예제

HandleTriggerEnterEvent 함수는 장애물과의 충돌이 들어오는 시점에서 호출되는 함수이다.
함수의 매개변수로 TriggerEnterEvent 이벤트를 받아온 뒤, 함수 내부에서 수행할 명령어를 입력해준다.

충돌 이벤트 샌더를 self로 선언해줌으로써 리액터 컴포턴트가 추가된 엔티티의 충돌 이벤트를 받게된다.

PlayerControllerCompnent 는 플레이어를 컨트롤하는 컴포넌트이다.

  • LookDirection : 현재 X축을 기준으로 캐릭터가 바라보고 있는 방향을 의미
    양수 : 오른쪽
    음수 : 왼쪽
  • FixedLookAt : 캐릭터가 바라보고 있는 방향을 고정시키는 것
    1 : 오른쪽
    -1: 왼쪽

본문 : https://maplestoryworlds-developers.nexon.com/ko

0개의 댓글