강의

멘토링

로드맵

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

mir8725님의 프로필 이미지
mir8725

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진

Input Manager

회전/이동 코드 관련 질문

작성

·

408

0

제가 키 입력 받는 것이 if문으로 받기 껄끄러워서
if문을 switch로 대체하고, 키입력은 Input.inputString으로 받아서 다음과 같이 작성하였습니다.

    void OnKeyboard()
    {
        switch (Input.inputString)
        {
            case "w":
                Move_Rot(Vector3.forward);
                break;

            case "s":
                Move_Rot(Vector3.back);
                break;

            case "a":
                Move_Rot(Vector3.left);
                break;

            case "d":
                Move_Rot(Vector3.right);
                break;
        }
    }

    void Move_Rot(Vector3 vector)
    {
        float delta = Time.deltaTime;
        transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(vector), delta * ROT_SPEED);
        transform.position += vector * delta * SPEED;
    }

그런데 이처럼 작성하면,
회전이나 이동속도가 굉장히 느려지고, 회전 동작도 뚝뚝 끊깁니다.
(물론 동일한 방식으로 if문으로 작성했을 때는 끊김없이 부드럽게 이동되었습니다.)

혹시 이와 같은 일이 일어나는 건 무엇 때문일까요?
switch문이 아니면, GetKey가 아니라 Input.inputString으로 키입력을 가져와서 일까요?

퀴즈

56%나 틀려요. 한번 도전해보세요!

게임 오브젝트의 이동 계산 시 Time.deltaTime 값을 곱해주는 주된 이유는 무엇일까요?

캐릭터의 최대 이동 속도를 제한하기 위해

모든 컴퓨터에서 초당 이동 거리를 일정하게 유지하기 위해

물리 엔진 계산의 정확도를 높이기 위해

오브젝트의 회전 상태에 따라 이동 방향을 결정하기 위해

답변 4

1

mir8725님의 프로필 이미지
mir8725
질문자

아 프레임당 업데이트 되는게 아니라, 그냥 정말 키보드 입력만 받아오는 거였군요

제가 시도했던 다른 방법도 프레임 당 업데이트가 제대로 이뤄지지 않기 때문이네요

와...정말 감사합니다ㅠㅜ 강의 항상 재밌게 잘 보고 있습니다!!

0

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

살펴보니 switch-case 문제는 아니고 그냥 Input.inputString 관련된 이슈입니다.
실제로 로그를 찍어보면 Input.inputString이 빈 문자열로 찍히는 경우가 많습니다.
따라서 매 프레임 회전하지 않게 됩니다.
애당초 Input.InputString 누르고 있는 키를 탐지하는 용도로 만들어진게 아니라고 합니다.

https://docs.unity3d.com/ScriptReference/Input-inputString.html


https://answers.unity.com/questions/1417894/inputinputstring-is-sometimes-empty-when-im-holdin.html

0

mir8725님의 프로필 이미지
mir8725
질문자

도무지 잘 모르겠어서 방금 보내드렸습니다ㅠㅜ 감사합니다!

0

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

저 부분만 봐서는 알 수 없지만
switch와 Input.InputString과는 무관해 보이고
아마도 InputManager를 콜백으로 호출하는 것과 연관이 있어 보입니다.
해당 부분을 그냥 일반적인 Update 코드에 넣어도
동일한 문제가 일어나는지 테스트 해보시기 바랍니다.

해결이 안 되면 rookiss@naver.com로 전체 프로젝트 압축해서 보내주시기 바랍니다.

mir8725님의 프로필 이미지
mir8725

작성한 질문수

질문하기