[7월 15일]
[MOD 강좌 Chapter 6] 스크립트의 이해
● Script
- MOD에서는 대부분의 Lua 문법을 지원하면서 MOD 만의 문법이 결합된 형태를 쓰고 있다.
- 일반적으로 Lua 문법에 몇 가지 기능들이 더 추가된 것이라고 보면 될 것 같다.
- Workspace - MyDesk 하위에 나만의 Script를 만들어서 관리를 하면 된다.
- Create Component를 가장 보편적으로 사용하고, 종종 Logic을 사용하기도 한다.
- 기능이 단순하고, 지원하지 않는 것들이 많기 때문에 Script는 실제로 사용을 잘 하진 않는다.
간단하게 문법에 대해서 다루어 보겠다.
log("Hello World")
- 실행 결과
[Server][MyFirstScript]Hello,World
[Server][MyFirstScript]Hello,World
- 위와 같이 두 줄이 출력되는데, 다음 강의인 '네트워크의 이해'를 학습한다면 이해할 수 있겠다.
- 변수 : 임의의 값을 담는 공간
local number = 1
log(number)
number = 10
log(number)
- 실행 결과
1
10
* log 함수 : 출력을 담당한다.
○ 반복문 - for, while
for count = 1, 10, 1 do
log(count)
end
- Script를 Component로 생성하여 몬스터에 해당 Component를 추가하고 게임을 실행했다.
- 실행 결과
- 1부터 10까지 1씩 증가하며 차례대로 증가하는 것을 확인할 수 있었다.
local sum = 0
for count = 1, 10, 1 do
sum = sum + count
log(count)
end
log(sum)
- 실행 결과
- 1부터 10까지 1씩 증가하며 차례대로 출력되는 것을 확인할 수 있었고, 1부터 10까지의 합인 55가 출력되는 것을 확인할 수 있었다.
● Logic
- Logic은 한 게임에 하나 밖에 없다.
- Component의 경우에는 Entity에 추가하여 사용해야 하지만, Logic은 어떠한 Entity에 추가할 필요 없이 항상 작동한다.
* server only : 네트워크 강의에서 학습할 수 있다.
- 실행 결과
- 아까와 다르게 한 줄만 출력된다. 이 또한 네트워크 강의에서 학습할 수 있다.
- 콘솔 화면을 잘 확인하는 것이 유용하다.
- 디버깅을 할 때 굉장히 유용하게 사용할 수 있다.
● Component
- Q. Component를 만들어 log를 출력하려 했는데 출력이 안 됐다. 왜 그럴까?
- A. Logic은 월드 상에 하나만 존재하기 때문에 기본적으로 월드 밑에 계속 돌아가고 있는 것이다. 하지만 Component는 이것을 임의의 Entity에 추가해야만 작동한다. Entity 별로 돌아가기 때문에, Entity가 두 개가 된다면, 두 번 출력된다.
○ Function : 함수 : 어떠한 기능들을 모아둔 것.
- 자주 사용하는 세 개의 함수
Function | 설명 |
OnBeginPlay | * 컴포넌트가 초기화가 될 때 (처음 시작할 때) 처리하는 로직 |
OnUpdate | * 프레임마다 주기적으로 불리는 함수 여기에 출력함수를 작성한다면 끊임없이 출력되는 것을 확인할 수 있ㅅ다. |
OnEndPlay | * 끝날 때 처리하는 로직 * (OnDestroy와 함께 엔티티가 제거되는 시점에 1회 호출되는 함수입니다.) 끝날 때 처리할 작업을 넣어주면 된다. |
- Property 영역에 변수를 선언하면 Property에 변수 값을 조작할 수 있는 칸이 생성된다.
- 자기자신 : self라는 키워드를 쓴다. 점을 찍고 변수를 쓰면 property에 접근하여 값을 변경할 수 있다.
- 변수는 점(.)을 통해서 불러올 수 있고, 함수는 콜론(:)을 통해서 불러올 수 있다.
- Script Component 내에서 다른 Entity의 Component에도 접근할 수 있다.
- self.Entity : self는 Entity를 참조하고 있기 때문
local myEntityPosition = self.Entity.TransformComponent.Position
- myEntityPosition
- 이 component가 속한 Entity에 있는 TransformComponentdml Position이라는 Property의 값을 가져오게 된다.
- log(myEntityPosition)을 위치 출력 가능.
- 조작 또한 할 수 있다.
- wait(1) : 1초간 쉬어라.
Function:
void OnBeginPlay() :
{
local myEntityPosition = self.Entity.TransformComponent.Position
log(myEntityPosition)
-- 처음 Entity의 위치 출력
for count = 1, 3, 1 do
myEntityPosition.x = myEntityPosition.x + 0.5
myEntityPosition.x = myEntityPosition.y + 0.5
wait(1)
end
self.Entity.TransformComponent.x = 2
self.Entity.TransformComponent.y = 2
-- Entity를 x축으로, y축으로 2배 늘인다.
}
- 실행 결과
- Entity의 위치를 출력하고, Entity의 크기를 증가시킨 것을 확인할 수 있다.
회고 : Script.Logic.Component.Funtion.Self에 대해서 확실히 익혀두면 도움이 될 것으로 보인다.
*해당 게시글은 Supporters Hackathon 참여자에게 제공되는 MOD 학습 강의와 기본 학습 교안의 내용을 기반으로 작성되었음을 알립니다.
'Coding > 멋쟁이사자처럼' 카테고리의 다른 글
[멋쟁이사자처럼 X 넥슨] MOD Supporters Hackathon 3주차 회고 (8. Event와 컴포넌트 확장) (0) | 2022.07.22 |
---|---|
[멋쟁이사자처럼 X 넥슨] MOD Supporters Hackathon 3주차 회고 (7. 네트워크의 이해) (0) | 2022.07.22 |
[멋쟁이사자처럼 X 넥슨] MOD Supporters Hackathon 2주차 회고 (5. 자주 사용하는 컴포넌트) (0) | 2022.07.14 |
[멋쟁이사자처럼 X 넥슨] MOD Supporters Hackathon 2주차 회고 (4. 지형과 레이어의 이해) (0) | 2022.07.13 |
[멋쟁이사자처럼 X 넥슨] MOD Supporters Hackathon 2주차 회고 (3. 기본 컴포넌트의 이해) (0) | 2022.07.13 |