무기 회전 조이스틱.
0~360도 각도를 추출
조이스틱 핸들의 각도 - 무기의 각도 = 회전할 각도
회전할 각도 * 초당 회전 속도 = 실제 초당 회전 속도
[문제]
시계 방향인지 반시계 방향인지 알 수 없다.
시계 반시계 방향 거리를 구하고 가까운 쪽으로 회전하도록 할 경우
180도 이상 회전할 경우 의도한 방향과 반대로 회전한다.
[해결]
조이스틱의 핸들 좌표를 ++, +-, --, -+로 구분.
각 영역 별로 이동이 가지는 의미 부여.
A = 시계 방향 / B = 반시계 방향
++ : 오른쪽 = A / 왼쪽 = B / 위 = B / 아래 = A
+- : 오른쪽 = B / 왼쪽 = A / 위 = B / 아래 = A
-- : 오른쪽 = B / 왼쪽 = A / 위 = A / 아래 = B
-+ : 오른쪽 = A / 왼쪽 = B / 위 = A / 아래 = B
if (stick.Direction.x > 0)
if (stick.Direction.y > 0) blow = 1;//++
else blow = 2;//+-
else
if (stick.Direction.y > 0) blow = 3;//--
else blow = 4;//-+
조이스틱 핸들은 상하좌우 이동이 동시에 일어나는데
이 때 x, y 축이 서로 상반된 방향을 가리킬 수 있다.
이 경우 x와 y 중 절대값이 더 큰 쪽을 따르면 된다.
1프레임 단위로 핸들의 위치 정보를 저장하고 현재 위치와의 차이를 계산해 이동 방향을 특정할 수 있다.
이동 방향에서 회전 방향을 추출하고, 그 값이 A라면 시계 방향으로, B라면 반시계 방향으로 회전한다.
이렇게 하면 거리와 무관하게 의도한 방향으로 회전 시킬 수 있다.
[장애물]
하지만 A 였다가 B가 되는 경우도 자주 발생할거다.
A로 190도 이동하고 B로 10도 이동하면 B로 회전하는 문제가 생긴다.
딜레이를 더 주면 된다.
핸들을 따라오는 핀을 사용하자.
그리고 핸들 대신 그 핀의 이동 방향을 사용하면 된다.
그거라면 어차피 핸들이 움직여도 그걸 추적하는 핀을 참조하기 때문에 이 문제를 해결할 수 있다.
물리적인 추적에서 생기는 소소한 오차는 일정 수준 이하의 값을 무시하면 된다.\
각도의 차이.
그 차이를 시계 방향 반시계 방향 별도로 구분짓는다.
그리고 더한다.
매 프레임 핸들 각도를 계산
모든 프레임의 각도를 비교해 회전 방향 특정.
시계 / 반시계 방향을 구분해 서로 더해주면 이동할 방향 특정 가능.
직선으로 생각해 보면 쉽다.
현재 무기의 각도가 시작점이고, 핸들의 각도가 도착점이다.
두개의 점이 직선상에 위치한다고 했을 때.
도착점에 시계 / 반시계 방향이 있고
결국 회전은 2중 하나의 방향을 가진다.
시계 방향, 반시계 방향.
회전은 서서히 이루어지기 때문에 조이스틱 핸들과 딜레이가 있다.
하지만 각도 차이를 계산해 속도를 조절한다면 그 딜레이를 일정하게 조절할 수 있다.
...
라는 모든 고민이 굳이 지금 시점에서 해야하는 고민인지 의문이 들어서 드랍하기로 했다.
누중에 필요하겠다 싶으면 다시 꺼내자.
'게임개발 > 시행착오' 카테고리의 다른 글
버리자니 아깝고, 놔두자니 방해되는 것은 빠르게 버리자. (0) | 2022.07.14 |
---|---|
무기 회전 조이스틱_어쩌다 보니 해결 (0) | 2022.07.12 |
무기 방향 조이스틱_옵션 하나만 바꿨는데 훨씬 부드러워졌다. (0) | 2022.07.11 |
본게임 전에 간단한 실험을 하는 습관이 긴 삽질을 방지해준다는걸 배웠다. (0) | 2022.07.10 |
무기 회전 방식을 개선할 수 있지 않을까 싶었다. (0) | 2022.07.10 |