안녕하세요
이제 최적화 급한 불은 끈것 같으니 다른 기능을 구현해보았습니다
오늘 만들어 본 기능은 블록캐기입니다
레이캐스트를 이용해 플레이어의 시선이 닿은 블록정보를 가져오고
해당 정보를 바탕으로 블록의 오리진을 구해줍니다
블록의 오리진을 구했다면 청크의 오리진과 맵데이터인덱스또한 구할 수 있습니다
이 기능은 블록을 캤을 때 실행될것이기에 해당 맵데이터의 블록정보를 공기로 바꿔줍니다
청크의 경계면에 있는 블록을 캐면 옆 청크의 메쉬로 같이 업데이트해주어야합니다
인덱스벡터를 선언해줍니다
만약 블록의 x좌표가 0이라면 해당 블록을 캤을때 왼쪽청크는 무조건 영향을 받겠죠?
왼쪽청크를 찾기위해 인덱스벡터가 필요하고 이는 청크오리진에 원하는 방향만큼 빼줘서 정해줄수있습니다
인덱스벡터를 찾았으면 해당 청크로가서 메쉬를 업데이트해줍니다
이때 청크가 있는지 없는지부터 판단해주기위해 함수를 하나 만들었습니다
이 함수는 인덱스벡터가 음수거나 최대청크를 초과했으면 true아니면 false를 반환합니다
인덱스벡터가 맞는값이면 이제 메쉬를 재생성해줍니다
전에 쓰던 CreateMesh함수를 약간 손봤습니다
이제 이 함수는 지혼자 메쉬만들고 할당하는게 아니라
메쉬만 생성하고 반환해줍니다
setmesh함수를 만들었습니다
메쉬필터에 메쉬를 넣는 간단한 함수입니다
처음에 청크를 생성하는 기능도 따로 함수를 팠습니다
레이어도 지정해줍니다 (7 = block)
그리고 청크 게임오브젝트 딕셔너리를 만들어 접근을 용이하게 했습니다
청크오리진을 키로 넣으면 해당하는 게임오브젝트를 반환합니다
이제 땅을 팔때마다 청크의 메쉬를 다시만들어서 할당해줄수있습니다
끼얏호우
이거완전마인크래프트indev
에셋쓰지
https://assetstore.unity.com/packages/tools/terrain/digger-pro-voxel-terrain-sculpting-149753