Nexon Supporter Hackathon 12

이태곤·2022년 9월 27일
0

Nexon Supporters Hackathon

목록 보기
12/12
post-thumbnail

Index

  1. Model

  2. 스크립트

  • 원본참조 vs 사본참조

  • 실행제어 주의할 점

  • 지역변수 선언

  • 동적 Entity생성


Model

  • MOD에서 제공하고있는 Entity의 원본으로 Component와 Property를 기본적으로 탑재하고있다.

  • Model List에서 카테고리별로 다양한 Model들을 확인하고 추가할 수 있다.

ex) object, npc, monster, background 등

--> 나만의 Model을 만들고 싶다면? 모델화!

  1. 추가하고자하는 Model 선택 -> 커스터마이징
  • npc에 운동하는 속성을 추가하기위해 TweenLineComponent를 추가해주었다.

  1. Entity 우클릭 -> Make Original Model 클릭

cf) Make Child Model 과의 차이?

  • 부모 Model로부터 모든 기능을 상속받음 -> 부모 Model로부터 영향을 계속해서 받음

--> 부모 모델에 컴포넌트를 추가해되면 자식모델에도 추가되게된다.

--> 자식 모델에서는 컴포넌트를 삭제할 수 있는 기능인 Remove Component를 제공하지 않는다.(Add Component기능은 제공)

  1. Model List -> My Model 또는 Workspace에서 추가된 나만의 모델을 확인할 수 있다.

  1. MyNPC를 클릭해서 추가해보면 TweenLine Component를 가지고있는 커스터마이징 된 Entity로 추가된 모습을 확인해볼 수 있다.

--> Apply VS Revert

--> Apply : Entity에 추가한 기능을 -> Original모델에 적용할때

--> Revert : Original모델에 변경사항을 -> 특정 Entity에 반영할때

ex)

  1. 왼쪽 벚꽃나무 Entity에 NameTag Component를 추가한다.

  1. Apply를 통해서 모델자체에 변경사항을 적용해준다.

  1. 모델에 방금 Entity에 추가했던 NameTagComponent가 추가된 모습을 확인할 수 있다.

  1. 오른쪽 벚꽃나무 Entity에 Revert기능을 적용한다.

  1. 모델의 변경사항이 Revert를 통해 오른쪽 벚꽃나무 Entity에 적용된 모습을 확인할 수 있다.


스크립트

- 원본참조 vs 사본참조

  • local position : 컴포넌트를 탑재한 Entity의 TransformComponent -> Position의 원본 값을 참조

--> position.x = position.x + 1을 KeyDownEvent로 등록되었을 때 실제로 Entity가 x축으로 1만큼 이동하는것을 확인해볼 수 있다.

--> 만약 단순히 값을 참조만 하고싶다면? Clone()을통해 사본참조!

- 실행제어 주의할 점

--> return 값이 존재할 경우 함수가 상호간에 호출이 가능한 공간인지의 여부를 확인해야한다.

ex)

  • Function2에서 Function1을 호출하게되면 정상적으로 1이 return된다.

--> Function2는 server only이므로 server로부터 호출이 가능하다.

  • Function3에서 Function1을 호출하게되면 1이 return 되지 않는다.

--> Function3는 client only이므로 server로부터 호출될 수 없다. -> 값을 받을수가 없다.

  • 지역변수 선언

--> self._T.변수명 을통해 함수안에서만 사용할 수 있는 지역변수를 선언할 수 있다.

- 동적 Entity생성

  • HandleKeyDownEvent : 'A'키가 눌릴때마다 이벤트가 발생하도록 작성

  • Spawn : _SpawnService에서 SpawnByModelId를통해 동적생성을 원하는 Entity의 정보를 작성한다.

--> ("Entity Model Id", "생성될 Entity 이름", "생성위치", "부모 Entity")

--> 이벤트가 한번 발생할때마다 Property의 NewValue1의 값을 1씩 증감시켜서 Spawn되는 X값의 위치를 1씩 더해주었다.

--> 'A'를 6번눌렀을 때 동적으로 생성된 pig Entity의 모습

cf) 이벤트가 발생할때마다 Vector3에서 x값이 1씩 증가함에따라 차례로 생성된 Entity의 모습


  • _TimerService

--> wait()의 문제점?

--> 여러 다른곳에서 wait()을 사용하게되면 사용한만큼 딜레이가 되어 의도했었던 결과물, 타이밍이 안나올 수 있다.

따라서, _TimerService사용!

  • OnBeginPlay : 3초마다 1씩 증감하는 NewValue1의 값을 콘솔화면에 출력하는 기능을가진 함수이다.

--> local function으로 선언

  • 매개변수 : ("자기자신", "Callback 함수", "반복주기", "반복여부")

--> Callback함수에 self키워드를 쓰지않은 이유 : 지역으로 선언된 함수를 호출하였기 때문이다!

cf) Callback? 주기적으로 실행시킬 대상(함수)

  • Trigger Component 주의할 점

--> 기본적으로 Entity에 Trigger Component를 추가하게되면 BoxSize, offset영역이 Entity크기에 알맞게 자동으로 설정이 된다.

하지만, 스크립트에서 컴포넌트를 추가(동적생성)하게되면 BoxSize와 offset영역을 자동으로 설정해주지 않으므로 수동으로 입력을 해주어야한다.

0개의 댓글