작성자 | LlIiEe | ||
---|---|---|---|
작성일 | 2010-08-06 21:44:43 KST | 조회 | 8,282 |
첨부 |
|
||
제목 |
FPS/TPS 맵을 위한 탄착지점 계산 함수
|
음.. 맵자료실에 올려놨던 TPS맵에서 탄착지점 계산이 너무 허접해서..
안돌아가는 머리 굴려가며 연구 끝에 완성된 함수입니다.
이전에 만든건 지도높이가 다르면 탄착지점 계산이 안되는 오류가 있었는데,
이번에는 어떤 지형, 어떤 장애물이 있어도 탄착지점 계산을 완벽하게 이루에 내는것을 볼 수 있습니다.
(심지어 하늘에다가 총질을 할 수도 있습니다... 물론 최대 사거리 까지만..)
(유튜브 클릭해서 720p로 보는것을 권장...)
원리를 설명드리자면..
일단 삼각함수를 기본 베이스로 하구요..
[지도의 높이 0]에서 [카메라의 높이]까지를 "a",
카메라의 Y축 회전을 "b"라고 하면
플레이어 유닛에서 해당 지점까지의 거리가 "a/tan(b)"가 되겠죠..
처음에 만든 TPS맵이 이 방법을 썼는데, 지도의 높이 변위 때문에 정확한 지점이 계산이 안되더라구요..
쏘는 위치와 맞는 위치의 맵 높이가 다르면 총알이 엉뚱한데 박힌다는거죠..
그래서 역으로 생각한게
반복문을 [플레이어 유닛의 반경]에서 최대 사거리까지 0.01씩 증가하고
그 증가변수를 "a"
카메라의 Y축 회전을 "b"라고 하면
"a*tan(b)"는 플레이어가 보는 각도로 탄환이 0.01거리 만큼 이동했을 때 "탄환의 높이"가 됩니다.
이를 이용해서 탄환이 높이가 그 지점에서의 높이와 같이지면
-> "바닥이나 벽에 탄환이 맞았다"가 되는거죠.
최대 사거리 까지 반복을 했는데, 위와 같은 경우가 발생하지 않는다면
그때의 탄환 높이를 반환해서 공중에 탄환이 터지는 모습을 보여줄 수 있습니다.
아, 물론 연산은 지역변수로만 행해지며, 함수가 끝나면 지역변수는 사라집니다..
또한 오브젝트를 이용한게 아니라서 맵에 오브젝트가 많아져서 발생하는 렉을 최소화 했습니다.
약간 걱정되는건, 데이터 연산량이 좀 많다는거..
실제로 8P멀티 맵을 만들어 지인분들과 테스트를 해본 후,
결과를 봐서.. 여유롭게 플레이가 되면 맵파일을 공개 해보도록 하겟습니다.
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
© PlayXP Inc. All Rights Reserved.