작성
·
430
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.)
입니다
답변 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
을 상속받고 있는 것이 맞는지 확인 부탁 드립니다.
크래시가 일어나고 있는 이유는 명확하니 해당 부분에서 객체 타입을 살펴보면 될 것 같네요.