멋쟁이사자처럼 X 넥슨 MOD Suppoters Hackathon Chapter 6 회고

2022. 7. 13. 12:22해커톤, 개인 프로젝트/Nexon MOD 해커톤

반응형

멋쟁이사자처럼 X 넥슨 MOD Suppoters Hackathon Chapter 2주차 13일 회고

 

 

 

부족하지만 멋쟁이사자처럼 X 넥슨 MOD Suppoters Hackathon에 합격하게되어서 MOD를 먼저 사용해볼 수 있는 감사한 기회를 얻게 되었습니다...! 최선을 다해 공부하고, 리뷰하겠습니다! 부족한 글 보러 와주셔서 감사드립니다!

 

 

 

오늘도 반갑습니다.

 

 

 

 

 

 

 

 

 

 

Chapter 1~4 회고록

https://devdongbaek.tistory.com/132

 

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

부족하지만 멋쟁이사자처럼 X 넥슨 MOD Suppoters Hackathon에 합격하게되어서 MOD를 먼저 사용해볼 수 있는 감사한 기회를 얻게 되었습니다...! 최선을 다해 공부하고, 리뷰하겠습니다! 부족한 글 보러

devdongbaek.tistory.com

 

Chapter 5 회고록

https://devdongbaek.tistory.com/136

 

멋쟁이사자처럼 X 넥슨 MOD Suppoters Hackathon Chapter 5 회고

멋쟁이사자처럼 X 넥슨 MOD Suppoters Hackathon Chapter 2주차 12일 회고 부족하지만 멋쟁이사자처럼 X 넥슨 MOD Suppoters Hackathon에 합격하게되어서 MOD를 먼저 사용해볼 수 있는 감사한 기회를 얻게 되었습..

devdongbaek.tistory.com

 

 

 

 

 

 

 

 

 

 

 

 

 

 

이번 Chapter 6에서는 스크립트에 대해 배워보았다.

 

MOD는 Lua라는 언어에 MOD만의 문법이 추가된 형식이다.

// Lua는 파이썬과 같이 동적언어라고 한다.

 

 

 

 

 

 

Lua 스크립트의 기본적인 문법은 아래와 같다.

--출력
log("Hello World!")



--변수 선언
local number = 1 
local sum = 0


--반복문 선언
	for count = 1, 10, 1 do  --1부터 10까지 1씩 증가
	
    end


--조건문
	if count%2 == 0 then
		sum = sum + count
	end



--함수
void Sum()
{

}

 

 

 

 

 

 

 

분명 기본으로 제공되는 컴포넌트나 여러 기능이 있는데 왜 코드, 스크립트를 작성해야 할지에 대해 궁금할 수도 있을 것 같다.

흐음

 

 

 

 

 

 

 

 

 

 

 

그 이유는 마우스 클릭이나, 드래그등 기본적인 방법만으로는 표현에 한계가 있기에 이를 극복하기 위해서 코드, 스크립트를 작성하게 된다.

 

 

 

 

 

 

 

 

 

 

 

 

 

Chapter 5와 마찬가지로 주로 사용하는 스크립트에 대해서 알아보자

스크립트는 두 가지로 나눌 수 있다.

 

Create Component와 Create Logic

 

 

 

 

 

먼저 Create Component에 대해서 알아보자

Component의 특징은 아래와 같다.

  • Component는 여러 개 존재할 수 있다.
  • 코드 작성 이후 해당 Component 탑재를 희망하는 Entity에 반드시 반드시 추가해주어야 한다.

 

 

 

 

코드 작성 후 Entity에 Component를 추가하지 않고, 왜 적용이 안되지라고 생각하는 경우가 생각보다 많다

부끄부끄

 

 

 

 

 

Create Component의 기본적인 창

 

 

위 컴포넌트의 구성요소에 대해서 이야기해보겠다.

먼저 Property를 설정할 수 있고, 설정한 Property는 Property 창(패널)에 노출되게 된다.

 

 

Function은 Component에서 사용될 함수이고, 내가 속한 property나 다른 함수를 가져다 쓸 때

self.컴포넌트명으로 컴포넌트를 불러와 사용할 수 있다.

 

 

Entity Event Handler는 해당 Component를 가진 Entity에게 이벤트가 발생했을 경우 실행할 함수이다.

  • 예를 들어)
  • Entity가 바라보는 방향이 바뀌면 함수를 실행
  • Entity가 포탈을 이용하면 함수를 실행
  • Entity가 채팅을 입력하면 함수를 실행 

 

 

자주 사용되는 함수는

  • OnBeginPlay : 컴포넌트가 초기화가 될 때(처음 시작할 때) 처리하는 로직
  • OnUpdate : 프레임마다 주기적으로 불리는 함수
  • OnEndPlay : 끝날 때 처리하는 로직

가 있다.

 

 

 

 

 

 

 

 

그러면 재밌는 예시(?)를 통해 오늘도 Create Component를 배워볼까??? 

레츠꼬

 

 

 

 

이제는 모두가 우리 중학생 형을 알거라고 가정하고, 예시를 만들겠다.

 

 

알거라고 가정하고

 

 

사랑합니다.

 

 

 

 

 

 

실제로 순찰하는 중학생 형과 마주치게 된다면 우리는 어떻게 되겠는가?

 

 

 

잔뜩 경락 마사지를 받고, 소득세를 지불하지 않겠는가?

눙물...

 

 

 

 

 

 

 

 

이를 게임상에서 구현하여 형과 충돌이 일어날 경우 HP를 닳게 하고, 넉백(뒤로 밀려남)을 구현해보자

 

1. 첫번째로 Create component를 통해 "Bbing"이라는 Component을 만들자.

 

 

2. 내 캐릭터에 이 컴포넌트를 적용하기위해 Default Player의 Propery 패널에서 Bbing Component를 Add 해주자.

 

 

 

3. 저번 회고에서 형에게 TweenLinComponent를 추가해줌으로써 반복적인 움직임을 하도록 만들어주었다. 이번에는 나와 충돌하는 걸 형이 인지할 수 있도록 TriggerComponent를 형에게 추가해주자.

 

 

4. 이제 Bbing Component에 유저가 충돌이 감지될 때마다 넉백 이벤트와 HP가 감소하도록 만들어주자!

추가적으로 우리는 예의 동방 지국에 살기 때문에 충돌하면 형님께 사과를 즉시 드리도록 하자!

 

 

 

위 코드에 대한 설명을 해보겠다.

 

설명이 조금 기니 다들 착석해주길 바란다.

 

 

착서어억!

 

먼저 Entity Event Handler 오른쪽 + 버튼을 눌러서 HandlerTriggerEnterEvent 함수를 추가해주었다. 

  • 이 함수는 TriggerComponent를 가진 Entity와 충돌 이벤트가 발생하였을 경우 감지해주는 함수입니다.

 

 

그다음 넉백 이벤드 구현을 위해 if - else문을 작성해주었다.

 

  • self.Entity.PlayerControllerComponent는 플레이어 자신의 PlayerControllerComponent를 의미한다.
  • PlayerControllerComponent에는 LookDirectionX라는 Property를 가지고 있다. 이 Property는 Entity가 오른쪽을 바라보고 있을 경우 양수의 값을 가지고 왼쪽을 바라보고 있을 경우 음수의 값을 가지게 된다.
  • 이를 이용해서 오른쪽을 보고있을 때와 왼쪽을 보고있을때의 구문을 따로 작성할 수 있다.
    • self의 의미는 해당 Entity가 가진 값을 스스로 참조하고 싶을 때 사용하며, 변수를 참조할 때는 self.변수명, 함수를 참조할 때는 self:함수명으로 참조한다.
  • RigidbodyComponent는 Addforce라는 함수를 가지고 있다. 함수이기 때문에 세미콜론으로 참조해주었고, Addforce 라는 함수는 함수 인자로 벡터를 받게 된다. 
    • Vector2는 2차원 벡터로 첫번째 좌표가 x축, 두번째 좌표가 y축을 의미한다고 생각하면 된다.
  • 첫 if문은 유저가 오른쪽을 보고있다면 왼쪽으로 넉백시켜! 그다음 else문은 유저가 왼쪽을 보고있다면 오른쪽으로 넉백시켜! 라는 뜻이다.

 

 

 

 

그다음 self.Entity.PlayerComponent.Hp 구절은 충돌 감지시 100씩 체력을 감소하는 구절이다.

 

 

 

 

 

마지막 구절은 충돌 감지시 유저가 특정 말을 말풍선으로 출력하도록 만드는 구절이다!

 

 

 

 

영상으로 한번 잘 구현되었나 보도록 하자!

 

도키 도키

 

 

 

 

 

 

 

 

형과 닿자마자 공손하게 사과드리는 훈훈한 모습이다.

짜식

 

 

 

 

 

 

 

 

 

 

 

 

이제 마지막으로 Create Logic에 대해서 알아보자

Logic은 기본적으로 게임을 만들게 되면 딱 한개만 존재할수있다.

또한 Logic은 작성하고나면 따로 추가하지 않아도 자동으로 실행된다.

 

 

 

Logic은 간단한 코드로만 알아보자!

void OnBeginPlay()
{
	--현재 컴포넌트의 엔티티의 transformComponent의 position 값을 갖고옴
	local myEntityPosition = self.Entity.TransformComponent.Position
	log(myEntityPosition)

	--컴포넌트가 적용된 엔티티의 위치 변경
	for count=1, 10, 1 do
		myEntityPosition.x = myEntityPosition.x + 0.5
		myEntityPosition.y = myEntityPosition.y + 0.5
		wait(1)
	end

	--컴포넌트가 적용된 엔티티의 크기 변경
	self.Entity.TransformComponent.Scale.x = 2
	self.Entity.TransformComponent.Scale.y = 2
}

 

OnBeginPlay는 위에서 설명했듯 컴포넌트가 시작(초기화)하자마자 호출되는 함수이고, 위 코드는 1초 간격으로 TransformComponent를 가지고있는 Entity들의 위치와 크기를 변경해주는 코드이다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

오늘도 부족하디 부족한 글 보느라 정말 감사하고, 제발 또 봤으면 좋겠다.

꼭 다시 놀러와주라!

 

사랑해요 여러분

반응형