일자 | 내용 | 확인 |
---|---|---|
7/11(월) | 3. 기본 컴포넌트의 이해 | ✅ |
4. 지형과 레이어의 이해 | ✅ | |
7/12(화) | 5. 자주 사용하는 컴포넌트 | ✅ |
7/13(수) | 6. 스크립트의 이해 | ✅ |
7/14(목) | 실습 1. 공동 월드 만들기 | ✅ |
7/15(금) | 실습 2. 공용 워크스페이스 이용해 협업하기 | ✅ |
Position
: 엔티티 위치 조정
Scale
: 엔티티 크기 조정
WorldPosition
: Position의 값과 상호 교환
WorldZRotation
: zRotation의 값과 상호 교환
ZRotation
: 엔티티의 회전 조정
TranslateFunction
은 엔티티 위치를 이동시킬 때 사용void OnBeginPlay() { self.Entity.TransformComponent:Translate(4,5) -- 배치된 엔티티 위치를 기준으로 X 좌표를 4, Y 좌표를 5만큼 이동합니다. log("move on") -- 이동이 되면 콘솔 창에 Move On을 출력합니다. }
Rotate Function
은 엔티티를 반시계방향으로 회전시킬 때 사용void OnBeginPlay() { self.Entity.TransformComponent:Rotate(6) -- 배치된 엔티티 위치를 기준으로 6만큼 반시계 방향으로 회전합니다. log("Move On") -- 실행이 완료되면 콘솔 창에 Move On을 출력합니다. }
SpriteRendererComponent의 SpriteRUID 프로퍼티에 복사한 RUID를 입력하여 스프라이트 이용할 수 있음
SpriteRUID
: 오브젝트의 고유한 번호, 이미지를 id 형태로 관리하는 것FlipX / FlipY
: X축과 Y축을 기준으로 뒤집음(좌우반전 / 상하반전)
Color
: 오브젝트에 색깔을 입힐 수 있음(원본 이미지의 색에 혼합돼서 출력됨)
DrawMode
TiledSize
: 배치할 타일(오브젝트 하나)의 개수
PlayRate
: (Animate 속성을 갖고 있는 오브젝트의 경우) 속도 조절
StartFrameIndex
: (Animate 속성을 갖고 있는 오브젝트의 경우) 시작 이미지 인덱스
EndFrameIndex
: (Animate 속성을 갖고 있는 오브젝트의 경우) 종료 이미지 인덱스
eggLists
: 발판의 시작점
Size
: 발판을 이루는 점의 개수
[숫자]
: 발판의 연결점 개수
FootholdDrag
: 엔티티에게 적용되는 마찰력, 값이 클수록 엔티티가 발판에서 미끄러지다 빠르게 감속해 정지
FootholdForce
: 반대 방향으로 이동하려고 할 경우 저항으로 인해 방해받음
FootholdWalkSpeedFactor
: 이동속도에 곱해지는 계수, 값이 클수록 이동속도가 빨라짐
OrderInLayer
: 레이어의 배치 순서 결정
gravity
: gravity 프로퍼티의 값 조정을 통해 공중에 떠 있거나 지면에 떨어지도록 할 수 있음
IsBlockVerticalLine
: 세로 방향의 foothold를 설정할 수 있음
IsQuaterViewMove
: 프로퍼티의 값 조정을 통해 컴포넌트가 지형에 떨어지지 않고 자유롭게 움직일 수 있도록 설정할 수 있음
Collider
: 프로퍼티 에디터의 Edit 버튼을 누를 경우 엔티티에 충돌체가 나타남, 드래그 or 핸들러 조절을 통해 충돌체 크기 설정 가능
BoxOffset & ColliderOffset
: 충돌체의 위치 설정
BoxSize
: ColliderType이 Box일 경우 충돌체의 크기 설정
CircleRadius
: ColliderType이 Circle일 경우 충돌체의 크기를 설정
ColliderType
: 충돌체의 형태 선택, Box의 경우 충돌체를 사각형으로, Circle의 경우 원형으로 변경
IsLegacy
: TransformComponent에 영향을 받을지 여부를 설정
TriggerEnterEvent
: 엔티티 간 처음 충돌이 발생했을 때 1회 발생
TriggerStayEvent
: 엔티티가 충돌 중이면, 프레임마다 발생
TriggerLeaveEvent
: 엔티티가 충돌되었다가 충돌이 끝났을 때 1회 발생
리액터 컴포넌트가 추가된 엔티티의 충돌 이벤트를 받는 경우 : 값을 self로 설정
외부 엔티티의 충돌 이벤트를 받는 경우 : Entity로 설정
1. TriggerComponent 확장
2. 함수 오버라이드
OnEnterTriggerBody : 엔티티 간 충돌이 처음 발생했을 때 1회 호출
OnStayTriggerBody : 엔티티 간 충돌이 발생한 뒤, 두 엔티티가 겹쳐있는 동안 프레임마다 호출
OnLeaveTriggerBody : 엔티티 간 충돌이 종료될 때 1회 호출
3. 파라미터 : 충돌 이벤트가 들어옴
LookDirectionX
: 현재 X축을 기준으로 캐릭터가 바라보고 있는 방향을 의미
양수 : 오른쪽
음수 : 왼쪽
FixedLookAt
: 캐릭터가 바라보고 있는 방향을 고정시키는 것
1 : 오른쪽
-1 : 왼쪽
local sum = 0
for cnt = 1, 10, 1 do
if cnt % 2 == 0 then
sum = sum + cnt
end
end
for count = 1, 10, 1 do -- 1부터 10까지 1씩 증가
log(count)
end
void onBeginPlay() {
log("Hello Maple World")
}
출력결과:
특정 객체에 추가해주어야 함, 함수에서 내가 속한 컴포넌트의 프로퍼티 또는 함수를 가져다 쓸 때
self.컴포넌트명
으로 컴포넌트를 불러와 사용할 수 있음
프로그램 상에 하나만 존재
void OnBeginPlay()
{
local myEntity = self.Entity --자기 자신이 적용된 엔티티 참조 가능.
log(myEntity.Name.."HelloMOD") --콘솔 창에 myEntity의 이름과 "HelloMOD!" 출력
--OnInitialize와는 달리 아래와 같이 다른 엔티티, 다른 컴포넌트의 참조가 보장됩니다.
local otherComponent = myEntity.컴포넌트이름
local otherEntity = _EntityService:GetEntityByPath("엔티티 경로")
local otherEntityComponent = otherEntity :GetComponent("컴포넌트이름")
}
▶︎ 주의할 점
호출 순서 보장되지 않음, 다른 컴포넌트의 OnBeginPlay에서 컴포넌트 A의 프로퍼티 참조해야 한다면 컴포넌트 A에서 OnInitialize를 활용해 프로퍼티 값을 설정하는 것이 좋음
void OnUpdate(number delta)
{
if self._T.Time == nil then self._T.Time = 0 end
self._T.Time = self._T.Time + delta
--3초마다 Console 창에 HelloMOD를 출력
if self._T.Time >= 3 then
self._T.Time = 0
log("HelloMOD")
end
}
vold OnEndPlay()
{
log("OnEndPlay!!")
-- Console Result
-- OnEndPlay!!
}
Breakpoints
Debug
Watch Expression
: 프로퍼티/함수 내부에 선언된 변수를 Watch Expression에 등록해 코드가 실행될 때마다 값이 어떻게 변경되는지 추적
Call Stack
: 현재 디버깅 중인 함수가 어디서부터 호출되었는지 확인
다른 언어들처럼 함수 리턴 타입 설정, 함수 호출, 파라미터 등 사용 가능
self.Entity
: 컴포넌트 자신을 포함하고 엔티티로의 접근void OnBeginPlay() { local myEntity = self.Entity log(myEntity.Name) -- 엔티티 이름 출력 }
Entity.Parent
: 엔티티의 상위 엔티티 참조void OnBeginPlay() { local myEntity = self.Entity log(myEntity.Name) -- Entity C의 이름 출력 local parentEntity = myEntity.Parent log(parentEntity.Name) -- Entity A의 이름 출력 }
Entity.Children
: 엔티티의 하위 엔티티 참조void OnBeginPlay() { local myEntity = self.Entity log(myEntity.Name) -- Entity C의 이름 출력 local parentEntity = myEntity.Parent log(parentEntity .Name) -- Entity A의 이름 출력 local children = parentEntity.Children --Entity A의 하위 엔티티인 Entity C와 Entity D를 테이블 형태로 받아옵니다. local childrenEntity = nil for index, child in pairs(children) do if child.Name == "EntityD" then childrenEntity = child break end end if childrenEntity == nil then log("EmptyEntityD") return end local childrenEntity = nil log(childrenEntity.Name) --Entity D의 이름 출력 }
- null이 아닌 nil
- 기본적인 자료형은 nil, boolean, number, string, function, table, userdata, thread
- !=가 아닌 ~=
- !, &&, || 등이 아닌 not, and, or
- ^은 pow, 즉 거듭제곱
- A+=B 같은 할당 연산자는 지원x
- 문자열 합치기는 A .. B
- 삼항 조건 연산자 지원x
ex) condition ? exprIfTrue : exprIfFalse
→ condition and exprIfTrue or exprIfFalse
공동 월드 만들기는 생각보다 간단하다!
아직 팀원분들을 추가하지 않아서 개인 월드 불러오기를 통해 그룹 월드를 만들었다.
Ctrl+Alt+2를 이용하여 메이플 맵을 불러올 수 있다.
공동 작업 시 Ctrl+S를 이용하여 Check-In(저장)을 해야 다른 팀원이 편집하는 것이 가능하다!
매우 신기함😮 얼른 공동 작업 해보고싶다!!!