본문 바로가기

메이플스토리 월드/설명

[LUA/메이플스토리 월드] 반사 벡터 만들기,특정 오브젝트에 닿으면 튕기는 오브젝트 만들기

Unity를 사용해서 반사 벡터를 만드는것은, Vector3 내장함수인 Reflect를 사용해서 쉽게 구현을 했었다.

그런데 메이플스토리 월드를 사용해서 개발을 하는데, 내가 못 찾은건지 존재하지 않는건지 모르겠지만 내장함수가 없었다...

그래서 직접 구현해보기로 결정

생각보다 많이 간단했다.


우선 반사 벡터를, 구하는 과정을 찾아보면

위와 같이 볼 수 있다.

여기서, 법선 벡터에 내 벡터를 투영하는 벡터를 만들어 줄 것인데, 이 값의 벡터값은 n이고, 스칼라값은 내 벡터의 역벡터인 -P와n을 내적한 값이기 때문에

n(-P·n)

라고 할 수 있다.

자 이제, 조금더 확장해서 본다면

그림이 많이 복잡하지만, 이런식으로 그려질 수 있고 따라서 내가 구하고 싶은 반사벡터는

P+2*n(-P·n)

이 된다.

 


사실 위에 증명은 구현만 원한다면 별로 중요하지 않지만, 이왕 내장함수 안 쓸거 왜 저런 공식이 나오는지 알아보게 됐다.

이제 스크립트에 정리해보자

local myVector //내 벡터
local n //오브젝트의 법선 벡터

local RefelectVector=myVector+2*n*Vector2.Dot(-myVector,n)

!? 사실 한 줄로 표현할 수 있었다.

 

벽마다 설정한 법선 벡터에 따라서, 잘 튕겨나가는 모습을 볼 수 있다