[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 학습 강의와 기본 학습 교안의 내용을 기반으로 작성되었음을 알립니다.