본문 바로가기

Coding/멋쟁이사자처럼

[멋쟁이사자처럼 X 넥슨] MOD Supporters Hackathon 2주차 회고 (5. 자주 사용하는 컴포넌트)

[7월 12일]

 

[MOD 강좌 Chapter 5] 자주 사용하는 컴포넌트

 

○ TweenComponent

 

- 애니메이션의 시작점과 목적지 사이의 값들을 각 시간에 따라서 보관해주는 것을 Tween이라고 보면 된다.

- 등속, 등가속, 가속, 감속 등 여러 가지 설정을 활용하여 다양한 연출을 할 수 있다.

 

○ TweenLineComponent

 

- 선형 운동 방식 : Linear - 등속운동

- 동기화 방식

    - ServerAuthority : 같은 서버로 동기화가 되어야 동일하게 연출된다.

    - Client Only : 서버와 동기화 되지 않는다.

- 사다리 : ClimableComponent를 갖고 있다면 사다리처럼 타고 올라갈 수 있다.

    - 여기에 TweenLineComponent를 추가하게 되면 움직이는 탈 것이 된다.

 

○ TweenCircularComponent : 원운동

○ TweenFloatingComponent : 부유운동

 

○ DefaultPlayer - RigidbodyComponent

- Workspace - DefaultPlayer - RigidbodyComponent

- Rigidbody : 강체(형태가 변하지 않는 물체)

- RigidbodyComponent : 강체들의 물리적인 속성을 컨트롤 한다. 물리엔진이 탑재된 것은 아니므로 완벽하진 않다.

 

 

Property 설명
DownJumpSpeed * 아래 점프 시 위로 튀어오르는 속도를 조절합니다.
Gravity * 중력값입니다. 공중에서 이동할 때에 지상으로 얼마나 빨리 떨어질 것인가와 연관이 있습니다.
* 입력값이 클수록 더욱 더 빠르게 떨어집니다.
IgnoreMoveBoundary * true일 경우 지형에 의해 생성된 맵 영역을 벗어날 수 있습니다.
IsBlockVerticalLine * true일 경우 기본 이동과 다르게 세로 지형이 무조건 Block 됩니다.
* 벽 같은 지형을 무조건 통과할 수 없도록 할 때 사용합니다.
IsQuaterViewMove * 기본 이동 규칙을 쿼터뷰 이동으로 변경합니다.
* 쿼터뷰 이동 시 수평 수직 이동으로 개념이 변경됩니다.
IsolatedMove * true일 경우 일반 이동으로는 지형을 벗어나지 못하며 낭떠러지에서도 떨어지지 않습니다.
* 점프 같은 외부 이동으로는 지형을 벗어날 수 있습니다.
Mass * 질량입니다.
* 값이 클수록 가감속이 느려집니다.
* 입력값이 클수록 외부요인에 대한 반응성이 낮습니다.
QuaterViewAccelerationX * 쿼터뷰 이동 시 X축 가속도 값을 변경합니다.
QuaterViewAccelerationY * 쿼터뷰 이동 시 Y축 가속도 값을 변경합니다.
WalkAcceleration * 지형 이동 시 가감속 값을 나타냅니다.
* 입력값이 클수록 더욱 더 빠르게 최대 속도에 도달합니다.
WalkDrg * 지형 이동 시 미끄러짐에 저항하는 힘입니다.
* 입력값이 클수록 미끄러지지 않고 빠르게 멈추게 됩니다.
* 맵, 지형, 캐릭터의 속성을 계산해 최종 적용 값은 0.5부터 2 사이의 범위입니다.
WalkJump * 점프 시 얼마나 높게 뛰어오를지에 대한 값입니다.
* 값이 클수록 높게 뜁니다.
WalkSlant * 지형 이동 시 경사를 얼마나 잘 넘을 수 있는지와 연관된 값입니다.
* 입력값이 크면 급경사를 넘어갈 수 있습니다.
* 0부터 1 사이의 값을 가집니다.
WalkSpeed * 지형 이동 시 최대 이동 속도 값을 조절합니다.
Enable * Component의 활성화 여부를 확인합니다.

 

- Gravity

    - 기본 설정에 의해, 공중에 Entity를 위치했을 경우 Object는 떨어지지 않고 몬스터는 떨어지는 것을 확인할 수 있다.

    - Object에서도 Gravity 속성을 1로 지정해주면 떨어진다.

    - 이 때, Object에 지정되어 있는 원점을 기준으로 떨어진다. (떨어지면 자연스럽게 Snap이 될 것이다.)

    - 몬스터의 원점은 보통 중앙 하단에 지정되어 있다.

    - 타일을 세로로 지정하면 Foothold 정보가 하나로 되어 통과할 수 없다고 했었다.

 

 

    - 하지만, 타일이 바닥과 연결되어 있지 않은 경우에 대해서는 통과할 수 있다. 디테일한 차이를 만들어 낼 수 있다.

 

 

    - 타일이 바닥과 연결된 경우에는 통과할 수 없다.

 

 

- IsBlockVerticalLine 설정을 True로 지정해주면 통과할 수 없게 된다.

 

 

 

- IsQuaterViewMode

    - 기본 이동 규칙을 쿼터뷰(수평/수직) 이동으로 변경.

 

 

    - 일반 맵에서 QuaterView를 적용하면 매우 어색해보인다.

 

 

    - 이러한 경우에는 QuaterView에 적합한 맵을 적용해주면 훨씬 더 자연스럽다.

 

 

○ DefaultPlayer - MovementComponent

- 속도와 점프력 정도를 설정할 수 있다.

- MovementComponent 설정을 False로 지정하여 캐릭터가 움직하지 못하게 할 수 있다.

- 몬스터에도 Movement 값이 존재한다.

 

○ DefaultPlayer - TriggerComponent : 충돌 이벤트를 관리할 수 있는 Component

 

 

Property 설명
Collider 충돌을 감지하는 범위를 설정할 수 있다.
ColliderType * 충돌체의 타입을 설정합니다.
* IsLegacy가 false인 신규 시스템에서 사용할 수 있습니다.
BoxSize * 직사각형 충돌체의 너비와 높이를 지정합니다.
ColliderOffset * Entity를 기준으로 충돌체의 중심점 위치를 설정합니다.
* IsLegacy가 false인 신규 시스템에서 사용할 수 있습니다.
IsLegacy * 이 Component가 이전의 시스템으로 동작할지를 설정합니다.
* 신규 시스템은 충돌체가 TransformComponent의 회전과 크기에 영향을 받습니다.
* 또한 Collider Type을 설정해 원 모양 충돌체를 사용할 수 있습니다.
Enable * Component의 활성화 여부를 확인합니다.

 

- 객체 간의 충돌이 일어났을 때 이를 알려주는 Component

- 충돌에 대한 처리는 Script에서 처리해주면 된다.

- 기본적인 함정 Entity에는 TriggerComponent가 없기 때문에 충돌이 발생하더라도 이벤트가 발생하지 않는다.

 

 

- Workspace - myDesk - Create Scripts - Create Component를 통해 새로운 Component를 생성한다.

 

 

- Trap Entity에 새로 생성한 Component를 추가한다.

 

 

Event 설명
TriggerEnterEvent * TriggerBody와 TriggerReactor가 최초로 충돌할 때 Reactor 쪽으로 발생하는 이벤트입니다.
TriggerLeaveEvent * TriggerBody와 TriggerReactor의 충돌이 끝났을 때 Reactor 쪽으로 발생하는 이벤트입니다.
TriggerStayEvent * TriggerBody와 TriggerReactor가 계속 충돌하고 있을 때 Reactor 쪽으로 발생하는 이벤트입니다.

 

- Trap 메뉴에서 원하는 Trap을 월드에 배치하고, Property에서 TriggerComponent를 추가해준다.

 

 

- TriggerComponent를 추가한 뒤, Trap과 충돌하면 로그를 출력하도록 하였다.

- 코드는 아래와 같다.

 

 

- 실행 결과는 아래와 같다.

 

 

- Trap과 부딪혔을 때 오른쪽으로 밀려나도록 설정할 수 있다.

- 코드는 다음과 같다.

 

 

- 실행 결과는 다음과 같다.

 

 

- TriggerComponent 끼리 충돌을 감지하기 때문에 TriggerComponent가 없는 객체들 사이에서는 충돌을 감지할 수 없다.

- Q. 두 개의 Entity가 있을 때 하나의 Entity에 대해서만 TriggerComponent가 설정되어 있다면 충돌을 감지할 수 있을까?

- A. 충돌을 감지할 수 없을 것으로 보인다.

 

○ PlayerComponent : 최대 HP, PVP 여부, 리스폰 대기시간을 설정할 수 있다.

 

 

Property 설명
MaxHp * 최대 Hp입니다.
PVPMode * 플레이어끼리 공격이 가능한지를 설정합니다.
RespawnDuration * 죽은 후 리스폰까지 걸리는 시간입니다.
Enable * Component의 활성화 여부를 확인합니다.

 

○ Create Component

- MyDesk - Create Scripts - Create Component

- Component를 만들어 사용하고 싶다면, Workspace에서 새로운 Component를 만들고, Entity에서 그 Component를 추가해주면 된다.

 

- 게임 실행 시 플레이어의 닉네임을 로그에 출력하고 싶다면 다음과 같은 코드를 작성하면 된다.

 

 

- 결과는 다음과 같다.

 

 

○ DefaultPlayer - PlayerControllerComponent

 

 

Property 설명
AlwaysMovingState * 이동 가능한 상태를 나타냅니다.
FixedLookAt * 이동 시에 바라보는 방향을 한 쪽으로 고정합니다.
LookDirectionX * 현재 X축을 기준으로 캐릭터가 바라보고 있는 방향입니다.
* 양수일 경우 오른쪽, 음수일 경우 왼쪽입니다.
Enable * Component의 활성화 여부를 확인합니다.

 

- Trap과 부딪히는 방향에 따라서 저항의 방향을 설정할 수 있다. 코드는 다음과 같다.

 

- 실행 결과는 다음과 같다.

 

 

- FixedLookAt : 플레이어가 어느 쪽으로 이동을 하든 바라보는 방향을 고정할 수 있다.

 

- 왼쪽으로 고정한 경우

 

 

- 오른쪽으로 고정한 경우

 

 

회고 : 이번 강의에서는 미니게임을 만들 때 아주 필수적이라고 생각되는 장애물과 Trap에 대하여 학습했다. 이것들 또한 프로젝트 진행할 때 적극적으로 활용할 수 있을 것으로 보인다. 추가로, 캐릭터가 바라보는 방향을 고정하는 것 또한 창의적으로 활용해 볼 수 있을 것으로 보인다.

 

*해당 게시글은 Supporters Hackathon 참여자에게 제공되는 MOD 학습 강의와 기본 학습 교안의 내용을 기반으로 작성되었음을 알립니다.