멋쟁이사자처럼 X 넥슨 MOD Suppoters Hackathon 3주차 5일 회고

Jiwon Lee·2022년 7월 22일
1

MOD x Supporters

목록 보기
11/23
post-thumbnail

10. 컴포넌트의 활용 II

🍁 **[ 공부 후기 ]**

오… 텔레포트 관련된 내용들 너무 신기하고 재밌당 ~ 근데 이펙트 찾기 너무 힘든 것 같다 … 프로젝트 때 사용할 것도 찾아봐야 하는데 큰일이네 ;;


📌 함께 보면 도움이 되는 가이드


👿 입력 관련 스크립팅

키보드 입력 처리

HandleKeyDownEvent()를 이용해 event.key로 눌린 키 확인 가능

→ if문 +keyboardKey.키 로 케이스 별 처리

마우스 입력 터치

TouchEvent() → 엔티티 터치 ( 터치를 받았을 때 )

  • touch 감지하는 컴포넌트 ( TouchReceiveComponent ) 추가 필요

ScreenTouchEvent() → 화면 터치


🐢 이펙트 뿌리기

비쥬얼 이펙트

Resource Storage의 skill 등의 탭에서 확인 가능

_EffectService:PlayEffect(RUID, self.Entity, self.Entity.TransformComponent.Position, 0, Vector3(1,1,1)) 이용 → world 포지션을 따라가므로, 스킬이나 설치 이펙트 등에 적합함

이펙트가 world 포지션이 아닌 캐릭터 등을 따라오게 하려면 _EffectService:PlayEffectAttached()

→ 기준이 부모 엔티티이므로 포지션이 Vector3(0,0,0)

사운드 이펙트

audioclip 탭에서 확인 가능 → SoundComponent를 추가해서 사운드 추가 가능
브금은 map 전체에 SoundComponent 추가한 뒤 bgm 체크 !


🐡 카메라 설정

기본적으로 플레이어( 클라이언트 )를 따라가는 카메라 무빙 …

DefaultPlayer 엔티티를 눌러보면 CameraComponent 존재함
→ Offset 위치, DutchAngle 회전값 등 설정 가능 !

_CameraService

_CameraService로 카메라 연출 가능

→ 기본적으로 맨 끝으로 가면 맵 영역을 기준으로 짤려서 보이게 됨


🐈 기타 조작 연출

PotalComponent

포탈 엔티티 추가 시 기본적으로 들어있으며 위쪽 방향키를 누르면 동작함

PotalEntityRef 속성을 사용해 다른 포탈과 연결시킬 수 있음 !

_TeleportService

포탈 혹은 어떤 엔티티에 닿기만 해도 작동하게 하려면 스크립팅 필수 … _TeleportService 이용

→ 특정 장소에 가면 엔티티가 다른 엔티티 쪽으로 떨어지는 등 연출 가능

또는 InteractionComponent를 Extend 해서 처리 가능 !

사다리 ladder

사다리의 경우 head, body, tail로 분리되어 있음

ClimbableComponent가 존재하기 때문에 사다리로 사용 가능한 것 → Ladder / Rope는 애니메이션 종류 선택


11. UI 에디터의 이해


📌 함께 보면 도움이 되는 가이드


UI 에디터 시작하기

MOD Maker 상단에 UI 에디터 버튼을 눌러 킬 수 있음

UI의 경우에는 카메라 위에 올라가는 느낌 … 캐릭터가 이동하고, 카메라가 이동돼도 고정됨

기본 UI들은 어느정도 스크립트 구현까지 되어있음 ! → 본인 게임에 맞춰 수정 가능

기본 UI 엔티티

UI 에디터 창 안에 이미지, 버튼, 스크롤뷰, 텍스트, 입력 테스트 조합 가능

이미지 엔티티 안에 직접 TextComponent 등을 넣어서 조합할 수도 있음

UI Preset

자주 사용하는 UI, 스크립트 포함 → Model List 최하단 탭에서 확인 가능


TextComponent

텍스트 크기, 색상, 패딩 등 다양한 텍스트 속성 설정 가능

ButtonComponent

버튼


UI 관련 컴포넌트

UITransformComponent

부모의 원점으로부터 거리를 기준으로 정렬 가능 ! ( Anchor Preset ) → 부모 크기가 바뀌면 삐져나올 수 있는 문제는 Stretch 설정 ~ ~

SpriteGUIRendererComponent

UI의 배경색, 배경, 리소스 경로 설정 등 텍스트박스를 꾸며볼 수 있음

FillAmount 속성 값 등으로 체력바 구현 가능 ! → type이 fill이 아니면 X

→ TransformComponent에서 PivotRectSize를 변경해서 fill처럼 구현할 수 있음

PreserveSprite : NativeSize로 설정 시 원본 이미지 크기대로 ( 커지지 X )


UI Group

PopupGroup → 조건 만족되는 경우 나타나는 그룹 … UIPopup 스크립트에서 스크립팅 수정가능

UIToast → 마찬가지로 UIToast 스크립트에서 수정 가능

하지만 기본 그룹 사용하는 대신 새로운 Group을 만들고, Enable / Visible 등을 조절하여 사용하기 …

Group들이 보여지는 순서는 기본적으로 그룹 리스트에 들어있는 순서

UI와 서버

UI는 자동으로 sync 되지 않음 !! 서버에는 UI Property가 존재 X

→ UI 상에서 서버가 필요할 경우 로직을 common이나 maps 등에서 조작 후 클라이언트로 전송해야 함

ScrollLayoutComponent

하위 컴포넌트 추가 시 규격에 맞게 자동으로 그리드에 맞춰 추가됨

type : Grid로 설정 시 위아래 자동으로 그리드 만들어서 추가됨

UseScroll : 스크롤 바 사용

CellSize : 하위 아이템 사이즈

self.item:Clone()으로 아이템 복사 가능 …


맵에 UI 고정하기

Scene Maker의 maps 탭에 UI 엔티티를 추가하면 동일하게 이벤트 처리 가능하며, 추가적으로 서버 처리 가능 !! 다만 맵 좌표계를 가지는 position…


12. 알아두면 유용할 것들

🍁 **[ 공부 후기 ]**

드디어 Basic Class가 끝났다 … ㅠㅠ 얼른 도큐먼트들도 확인하고 꼼꼼하게 공부한 내용 보충 좀 하고 싶다 … 바쁘구만 …


📌 함께 보면 도움이 되는 가이드


Model

엔티티 + 컴포넌트 + 속성들 …

Make Model 유의사항

Make Original Model → 엔티티에서 모델 생성 ( 독자적 모델 )

Make Child Model → 기존 모델에서 변경점을 가지는 모델 → 부모 변경 시 함께 변경됨

Revert

모델의 원본을 다시 가져옴 ( 엔티티에 적용 업데이트 )

Apply

엔티티에 변경한 내용을 모델에 적용

_SpawnService : 동적 스폰

_SpawnService:SpawnByModelId()를 통해 동적인 엔티티 생성 가능

_SpawnService:SpawnByModelId(RUID, name, position, self.Entity.CurrentMap, "") 

DefaultPlayer 모델

컴포넌트 삭제 불가능 … Player라는 모델을 부모로 가지고 있기 때문 ! → 사용하기 싫은 컴포넌트가 있다면 Player에서 제거 …


스크립트

⚠️ 자기 자신의 프로퍼티, 함수를 쓸 때는 항상 self.으로 접근 ~~

callBack 사용 시에는 self.함수명

변수의 값 타입과 참조 타입

값 타입 → 정수, 문자열 등

참조 타입 → Vector2, Vector3 등, 주소로 들어가 직접 변경하게 됨…

값만 가져오고 싶을 때는 :Clone() 사용

실행 제어

사용하지 않음 → 부르는 곳에서 실행

Client / Server → 다른 데서 불러도 Client 혹은 Server로 전송해서 실행 … but 리턴 값이 돌아오진 않음 !! 주의하기

Property

설정이 너무 많을 때, self._T.변수명 으로 임시 변수 사용 가능


엔티티 동적 생성하기

알아서 엔티티가 자동으로 생성되도록 하는 것 → 주로 같은 모델의 엔티티를 여러개 생성할 때 사용

  1. Clone으로 복제하기
  2. ModelId로 생성하기
  3. Template으로 생성하기

_TimerService:SetTimer

타이머를 생성해 콜백 실행 가능

CallBack → 주기적으로 함수 등을 실행시키는 것

AddComponent

메이커에서 TriggerComponent 추가시 자동으로 offset 영역을 처리해줌

→ 그러나 컴포넌트에서 추가하면 수동으로 사이즈를 입력해줘야 함, 엔티티를 동적 생성하는 경우 하나하나에 충돌 설정을 자동으로 해줄 수 없음

→ 동적 생성된 엔티티의 경우, 함수에 다음과 같이 AddComponent 함수를 사용해 RigidBodyComponent를 추가

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

*BTNodeType

패키지형 컴포넌트로 여러가지 기능이 유기적으로 연결되어 있는 것

🔗BTNodeType에 대한 더 자세한 설명

profile
노는 게 제일 좋은데 공부는 하고 싶어요 😗

0개의 댓글