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)
!? 사실 한 줄로 표현할 수 있었다.
벽마다 설정한 법선 벡터에 따라서, 잘 튕겨나가는 모습을 볼 수 있다
'메이플스토리 월드 > 설명' 카테고리의 다른 글
[메이플스토리 월드/LUA] 360도까지 지원가능한 새로운 조이스틱 만들기 (0) | 2022.10.08 |
---|---|
[LUA] 루아스크립트에서 자연스러운 체력바 만들기 (LERP) (0) | 2022.10.07 |