인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

댕진형님의 프로필 이미지
댕진형

작성한 질문수

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

JobQueue

26분 14초 부분에 ApplyLeave(gameObject)는 가능여부 체크후 실행하는 것이 좋을 것같습니다!

작성

·

187

1

안녕하세요, 선생님.

애청하는 학생 중하나입니다.

다시한번 정주행중인데.. 수정하였으면 하는 부분이 하나 생겨 문의를 드려봅니다. 아래 부분에서

ApplyLeave(gameObject); 목적지에 갈수 있는지 체크한 이후에 넣는게 맞지 않나 생각이듭니다!

- 몬스터가 플레이어를 쫓다가 막혔을때 (물론 막히면 다른데로 갈수도있으나 그러지 않은 상황이 지금단계에서는 생기더라구요. )

ApplyLeave는 계속 하고 있으나, return이 되어 게임상 _object list에는 저장이 되지 않고 있는 상황이 생겨서용..

별거 아니지만.. 테스트중 오류가 발견되어 코멘트 남겨봅니다! 늘 감사하게 강의 듣고있습니다. 감사합니다.

=> AS-IS

public bool ApplyMove(GameObject gameObject, Vector2Int dest)

            {

                ApplyLeave(gameObject);



                // 예외를 처리한다.

                if (gameObject.Room == null)

                    return false;

                if (gameObject.Room.Map != this)

                    return false;

               // 목적지에 갈 수 있는지 체크
                if (CanGo(dest, true) == false)
                    return false;
      PositionInfo posInfo = gameObject.Info.PosInfo;

                // 목적지에 나를 텔레포트 시킴
                {
                    int x = dest.x - MinX;
                    int y = MaxY - dest.y;
                    _objects[y, x] = gameObject;
                }

=> TO-BE

 public bool ApplyMove(GameObject gameObject, Vector2Int dest)
            {

                // 예외를 처리한다.
                if (gameObject.Room == null)
                    return false;
                if (gameObject.Room.Map != this)
                    return false;

                // 목적지에 갈 수 있는지 체크
                if (CanGo(dest, true) == false)
                    return false;

                // (순서조정) 나의 위치 체크와, 공간에서 사라지게 하고 하는게 다 ApplyLeave에 들어가있다.
                ApplyLeave(gameObject);
                
                PositionInfo posInfo = gameObject.Info.PosInfo;

                // 목적지에 나를 텔레포트 시킴
                {
                    int x = dest.x - MinX;
                    int y = MaxY - dest.y;
                    _objects[y, x] = gameObject;
                }

                // 실제 좌표 이동 | 사실 왜 바꿔주는지는 아직 모르겠음 return도 안하는데
                posInfo.PosX = dest.x;
                posInfo.PosY = dest.y;

                return true;
            }

답변 1

1

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

좋은 판단을 하신 것 같네요.
컨텐츠 코드는 과감하게 막 수정하셔도 무방합니다.

댕진형님의 프로필 이미지
댕진형

작성한 질문수

질문하기