본문 바로가기

Coding/멋쟁이사자처럼

[멋쟁이사자처럼 X 넥슨] MOD Supporters Hackathon 3주차 회고 (12. 알아두면 유용할 것들)

[7월 22일]

 

● Model

- 모델 : Entity에 Component를 추가해 모델화 할 수 있다.

- Original Model : 빈 Entity에서 Component들을 추가해 새로운 무엇인가로 만든 것이다.

- Child Model : 기존 Entity에서 상세 Component만 바뀐 것으로, 기존 Entity에서 파생된 모델

 

[모델과 관련된 기능]

- apply : 어떤 기능을 모델 전체에 추가 시 사용

- revert : 부모 모델에서 추가된 기능을 현재 모델에 추가 시 사용

 

● Player 기본 속성 변경

- Player의 모델 Property는 기존 Component에서 필요한 몇 가지 Property만을 골라 연결한 것이다.

 

모델 Property 명 원 Component
원 Property 명
설명
speed MovemonetComponent
* InputSpeed
* 플레이어의 기본 이동 속도 값을 정합니다.
* 값이 클수록 빠르게 움직입니다.

* 기본값은 1.2입니다.
jumpForce MovementComponent
* JumpForce
* 플레이어의 기본 점프 높이를 설정합니다.
* 값이 클수록 높이 점프합니다.

* 기본값은 1입니다.
walkAcceleration RigidbodyComponent
* WalkAcc
* 이동 가감속 값을 설정합니다.
* 값이 클수록 최대 속도에 빠르게 도달합니다.
* 기본값은 1입니다.
gravity RigidbodyComponent
* Gravity
* 플레이어가 받는 중력 값입니다.
* 값이 클수록 빠르게 떨어집니다.

 * 기본값은 1입니다.
cameraDeadZone CameraComponent
* DeadZone
* 입력한 범위까진 플레이어 아바타가 움직이더라도 카메라는 고정됩니다.
* X, Y값이 0일 경우 플레이어 아바타의 모든 움직임에 카메라가 반응합니다.
cameraSoftZone CameraComponent
* SoftZone
* SoftZone 영역을 설정합니다.
* 대상이 프레임의 영역에 들어오면 카메라가 방향을 바꾸어 DeadZone으로 되돌립니다.
cameraDamping CameraComponent
* Damping
* 플레이어 아바타가 DeadZone을 벗어나 이동할 때 카메라가 쫓아가게 됩니다.
* 이때 화면을 급격하게 틀지 않고, 자연스럽게 플레이어 아바타를 따라가게 합니다.
* 값이 클수록 움직이는 플레이어 아바타를 부드럽게 따라갑니다.
cameraScreen CameraComponent
* ScreenOffset
* 화면에서 DeadZone의 중심점 위치를 지정합니다.
* X, Y값은 (0,0)부터 (1,1)까지 입력할 수 있습니다..
cameraDutch CameraComponent
* DutchAngle
* 카메라 회전 각도를 설정합니다.
* 큰 값을 입력할수록 화면이 시계 방향으로 회전합니다.
* 카메라는 입력한 값에 따라 반시계 방향으로 회전합니다.
cameraOffset CameraComponent
* CameraOffset
* 카메라 위치를 입력 받은 값만큼 보정합니다.
* X, Y 좌표값은 절댓값입니다.
* 입력한 값만큼 카메라가 이동해 플레이어 아바타를 추적합니다.
message ChatBalloonComponent
* Message
* 플레이어 아바타의 말풍선 안에 들어갈 내용을 입력합니다.
chatModeEnabled ChatBallonComponent
* ChatModeEnabled
* 채팅창에 입력한 대화가 말풍선으로 동시에 나타납니다. 
* 비활성 상태가 기본입니다.
nameTag NameTagComponent
* Name
* 플레이어의 이름표를 붙이거나 뗄 수 있습니다.
* NameTagComponent의 Enable 체크박스를 해제해 비활성화합니다.
damageSkinId DamageSkinSettingComponent
* DamageSkinId
* ID값을 입력해 데미지 스킨 종류를 정합니다.
damageDelayPerAttack DamageSkinSettingComponent
* DelayPerAttack
* 데미지 값이 여러 번 화면에 보일 때 데미지 값 사이의 지연 속도(초)를 입력합니다.
triggerBodyBoxSize TriggerComponent
* BoxSize
* 플레이어가 충격 감지하는 범위를 박스 크기 좌표 값으로 정합니다.
triggerbodyBoxOffset TriggerComponent
* Offset
* 플레이어가 충격을 감지하는 박스의 위치를 좌표 값으로 정합니다.
maxHp PlayerComponent
* MaxHP
* 플레이어의 최대 체력을 설정합니다.
* 기본값은 1000입니다.

 

[동적 spawn]

- 각 필드 별로 스폰할 몬스터와 스폰할 몬스터의 수를 설정하면, 해당 조건에 맞춰 몬스터가 생성되는 스폰 시스템

- 동적 spawn 구현 시 SpawnByModelId 함수를 사용한다.

 

● 실행제어 주의 사항

 

 

- CallFunction1의 경우 서버에서만 돌아가는 함수로 value값 출력 시 서버에서 함수 결과 값을 받아와 정상적으로 값이 출력된다.

- CallFunctionFromClient의 경우 클라이언트에서만 돌아가는 함수(function setting을 해주지 않음)로 value 값 출력 시 서버에서 값을 받아오지 못한다. 따라서 정상적으로 값이 출력되지 않는다.

 

● Entity 동적 생성

- 개발자가 모든 설정을 수동으로 작업해 Entity를 생성하는 것이 아니라 알아서 Entity가 자동으로 생성되도록 하는 것

- 주로 같은 모델의 Entity를 여러 개 생성할 때 사용한다.

 

● 충돌

- 메이커에서 TriggerComponent 추가 시 자동으로 offset 영역을 처리해주지만, Component에서 추가하면 수동으로 사이즈를 입력해주어야 한다. 이렇게 되면 Entity를 동적 생성하는 경우 하나하나에 충돌 설정으로 자동으로 해줄 수 없게 된다.

- 따라서 동적 생성된 Entity의 경우 함수에 다음과 같이 AddComponent 함수를 사용해 RigidBodyComponent를 추가해주면 된다.

 

self.Entity:AddComponent("RigidBodyComponent", true)

 

회고 : 이미 학습했던 내용이라 하더라도 자세한 부분까지 학습하지 않은 내용들이 많았던 것 같다. 더 꼼꼼하게 학습하자.

 

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