인프런 커뮤니티 질문&답변

김성수님의 프로필 이미지

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)

Player 이동

모바일 게임 용으로 개발 중입니다.

해결된 질문

21.03.10 18:18 작성

·

529

1

안녕하세요 강사님

1. 저는 모바일 게임용으로 게임을 개발 중입니다.

그래서 키보드가 아닌 조이스틱으로 움직여 구현 해보려고 하는데요.. 조이스틱으로 이동까지는 가능하게 했는데 그리드로 이동하게 해보려고하니 방향_dir를 뽑아내는게 힘듭니다 ㅠ

머리속으로는 h, v 중 큰 값으로 방향을 뽑아 낼 수 있을까 했습니다. 그런데 생각보다 잘안되네요..

public Vector3 poolInput()

{

float h = joystick.GetHorizontalValue();

float v = joystick.GetVerticalValue();

Vector2 moveDir = new Vector3(h, v, 0).normalized;

return moveDir;

}

 

2. 그리고 조이스틱으로 게임 구현했을 때 서버 연동시 문제가 없을까요?

메일 확인 부탁드립니다!

항상 감사드립니다!

답변 3

2

Rookiss님의 프로필 이미지
Rookiss
지식공유자

2021. 03. 10. 21:03

아 주의할 사항까지는 아니구요 ㅎㅎㅎ

실제로 게임 학원을 가더라도 동일하게
특정 학생이 해결 못하는 문제가 있을 때,
답을 주는 것을 금지합니다.
왜냐하면 진짜 이런 고민을 하면서 터득하는게 많기 때문이죠.

삼각함수나 벡터 내적/외적에 대한 개념이 없다면
사실 위 문제는 해결하기 힘든 것이 맞습니다.
외적을 이용하면 동일 영역에 있는지를 쉽게 판별할 수 있습니다.
cross(1, v)와 cross(v, 2) 순서로 각각 연산했을 때,
v가 1~2 밖에 있다면 z 부호가 달라지기 때문이죠.

김성수님의 프로필 이미지
김성수
질문자

2021. 03. 10. 22:11

정말 감사드립니다 ㅠㅠ

1

Rookiss님의 프로필 이미지
Rookiss
지식공유자

2021. 03. 10. 20:53

1.
우선 강의 자체가 아닌,
개인 개발과 관련된 내용은 저한테 물어보시면 안 되고
고민하는 과정에서 해답을 스스로 얻어야 합니다.
엄청 엄청 오랜 시간이 걸릴 수도 있고 해결 방법에 완전 야메 방법일 수도 있겠지만,
어차피 나중에 현업 프로그래머가 되더라도
동일하게 스스로 문제를 해결해야 할 상황이 늘 발생하게 됩니다.
그러나 이왕 질문하셨으니 이번 한 번만 풀이를 보여드리도록 하겠습니다.

머리속으로는 h, v 중 큰 값으로 방향을 뽑아 낼 수 있을까 했습니다. 그런데 생각보다 잘안되네요.

h, v 둘의 값을 Debug.Log로 찍어보면 -1~1 사이의 값으로 나온다는 것을 알 수 있습니다
지금은 방향이 중요한 것이지 joystick을 얼마나 멀리 눌렀는지가 중요한 것이 아니기 때문에
크기로 판별하는 것은 부족합니다.

문제의 상황은 위와 같습니다.
벡터 v가 1~2 영역에 있으면 위로 가는 것으로 인식하고,
2~3, 3~4, 4~1 이면 각각 우측, 아래, 왼쪽이 되겠죠.
이를 판별하려면 삼각함수를 이용하거나
벡터의 외적을 이용하는 것을 고려할 수 있겠습니다.
외적 풀이는 다음과 같습니다.

2.
물론 상관 없습니다. 서버는 클라가 뭔 짓(?)을 하는지 크게 관심이 없습니다

0

김성수님의 프로필 이미지
김성수
질문자

2021. 03. 10. 20:55

앗 감사합니다

주의하겠습니다!ㅎㅎ