인프런 커뮤니티 질문&답변
System.ArrayTypeMismatchException:
작성
·
465
0
Map.cs -> ApplyMove 및 ApplyLeave 함수 부분에서 오류가 간헐적으로 발생합니다.
public bool ApplyMove(GameObject gameObject, Vector2Int dest)
{
ApplyLeave(gameObject);
PositionInfo posInfo = gameObject.PosInfo;
if (CanGo(dest, true) == false)
return false;
{
int x = dest.x - MinX;
int y = MaxY - dest.y;
_objects[y, x] = gameObject; // 이 부분에서 오류 발생 함
}
// 실제 좌표 이동
posInfo.PosX = dest.x;
posInfo.PosY = dest.y;
return true;
}
System.ArrayTypeMismatchException: 'Attempted to access an element as a type incompatible with the array.'
이라는 오류가 발생합니다....
첨부파일에 있는 프로젝트 실행해도 마찬가지입니다
.NET Core 3.1
Protobuf( 3.12.3)
Newtonsoft.Json (12.0.)
입니다
퀴즈
Protobuf 사용의 주요 이점은 무엇일까요?
클라이언트 메모리 사용량 감소
수동 패킷 구문 분석 제거 및 효율적인 직렬화
서버 처리 속도 향상
유니티 에셋 직접 로드 가능
답변 2
0
혹시나 동일 문제 일어나는 분들을 위해 답글 남겨둡니다
다형성 문제인듯 하고.. Map.LoadMap()에서
_objects 배열이 Player[,]배열로 초기화 됩니다.
이후 GameRoom.EnterGame()에서 Map.ApplyMove를 호출 할때 Player 타입이 아닌 Monster 혹은 Projectile 타입으로 사입하려고 시도해서 배열 타입 불일치로 에러가 나는것같습니다
Map.LoadMap()에서
_objects = new Player[yCount, xCount]; 하는 부분을
_objects = new GameObject[yCount, xCount]; 로 수정하면 정상 작동됩니다
0
안녕하세요,
제 환경에서는 발생하지 않고 있고,
해당 기반 프레임워크로 진행중인 프로젝트에서도 발생한 적이 없어서
말씀주신 단서로만은 찾기가 힘듭니다.
보내주신 에러를 보니 배열에 안 맞는 물체를 넣을 때 발생하는 오류인데
GameObject이 아닌 다른 객체를 넣을 때 발생하는 것으로 보이며,
Monster -> GameObject, Player -> GameObject, Arrow -> Projectile -> GameObject
을 상속받고 있는 것이 맞는지 확인 부탁 드립니다.
크래시가 일어나고 있는 이유는 명확하니 해당 부분에서 객체 타입을 살펴보면 될 것 같네요.




