뒤끝 초보입니다. 키이벤트에서 막혀서 질문드립니다.

안녕하세요.
뒤끝예제 게임과 똑같이 게임을 구현한 뒤에 제가 조금씩 바꿔가며 개발중입니다.
문제는 Protocol.cs 스크립트에
public static class KeyEventCode
{
public const int NONE = 0;
public const int MOVE = 1;
public const int NO_MOVE = 2;

    public const int GetKey = 3;
    public const int GATE_MOVE = 4;
}

0,1,2 는 원래 있던거고, 제가 3과 4를 추가해서 사용하려고 하는데, 4는 문제없는데, 3번을 호출하는 경우에
(월드매니저 ProcessKeyEvent 함수에 디버깅 해보니) 다른 넘버가 호출되거나 그래서
3번을 짝수로도 바꿔보고 10번이나 큰수로도 바꿔봐도 자꾸 다른 넘버가 호출되거나 아니면 같이 호출되는 문제가 생깁니다.

월드매니저의 ProcessKeyEvent 내용 중~
if ((keyData & KeyEventCode.GATE_MOVE) == KeyEventCode.GATE_MOVE)
{
_tempPOS = new Vector3(keyMessage.x, keyMessage.y, keyMessage.z);
isGateMove = true;
}

if ((keyData & KeyEventCode.GetKey) == KeyEventCode.GetKey)
{
isGetKey = true;
}

주로 많이 잘못호출되는 두 내용입니다.
예제에서 기존에 작성되있는 무브나 노무브는 잘못 호출되지 않는거보면 제가 추가한 넘버의 문제인건지, 추가하면
안돼는건지, 아니면 특정 넘버만 써야하는건지 꼭 좀 알려주세요.ㅠㅜ

저번에는 GetKey를 12로 해서 (인게임에서 캐릭터가 실제 열쇠를 획득해서) 해당 내용이 12로 정상 호출됬는데,
게이트무브(4번)가 같이 실행되었었고 (실제인게임에서 게이트무브 실행X)
방금 GetKey를 3번으로 바꿔서 다시 로그를 찍어보니 인게임에서 실제 키를 획득해서 3번이 정살 호출되었는데,
플레이어무브(1번)이 같이 호출되네요. 플레이어의 실제 무브는 없었습니다. 오직 GetKey만 실행된 상황에서
1번도 같이 호출되는 문제로 파악됩니다.ㅠㅠ

방금
public static class KeyEventCode
{
public const int NONE = 0;
public const int MOVE = 1;
public const int NO_MOVE = 2;
public const int GATE_MOVE = 4;
public const int KeyGateNum = 13;
public const int GET_KEY = 16;
}

이렇게 GET_KEY 를 16으로 하니 안겹치고 문제 해결했습니다만, 어떤게 문제였는지는 알려주실수 있을까요?ㅠㅜ

안녕하세요 개발자님

if ((keyData & KeyEventCode.GetKey) == KeyEventCode.GetKey)
{
isGetKey = true;
}

위와 같이 키 데이터를 비교하는 방식을 논리 연산자를 이용하여 처리하던 중 다른 조건의 논리 연산에도 조건이 충족되어 발생하는 것으로 확인되었습니다.

해당 비교문을 아래와 같이 논리 비교가 아닌 일반 숫자 비교로 교체하면 다른 숫자를 이용해도 정상적으로 작동할 것이니 해당 부분으로 교체해주시면 감사하겠습니다.

if (keyData == KeyEventCode.GetKey)
{
isGetKey = true;
}
좋아요 1