Unity/Project

[Unity] 내배캠 최종프로젝트 : 루시퍼 서바이벌 19일차,

JEE_YA 2025. 5. 1. 22:13

왜 벌써 19일차인거지? 제목을 작성하면서도 놀랬다.

오늘은 타일매니저로 다시 돌아가서.... 테스트 중 자원이 겹치는 현상을 발견했다.

그리하여 이러한 점도 수정할 겸 플레이어가 처음 시작하는 중앙 타일에선 생성이 안되는 형식으로 바꿔주었다.

 

    public void SetResourceTileMap()
    {
        // 그리드 중심으로부터 범위를 계산
        int halfGrid = gridCount / 2;

        // **이미 사용된 위치를 추적하는 리스트
        List<Vector3> usedPositions = new List<Vector3>();

        // x축 그리드 순회
        for (int x = -halfGrid; x <= halfGrid; x++)
        {
            // y축 그리드 순회
            for (int y = -halfGrid; y <= halfGrid; y++)
            {
                // 중앙 타일(0,0)은 건너뜀
                if (x == 0 && y == 0)
                    continue;

                int resourceCount = Random.Range(0, 3); // 0~2사이의 타일이 랜덤으로 생성
                Vector3Int gridCell = new Vector3Int(x, y, 0);
                Vector3 worldPos = grid.CellToWorld(gridCell);
                Vector3 centerPos = new Vector3(worldPos.x, 0, worldPos.z);

                // 결정된 개수만큼 반복
                for (int i = 0; i < resourceCount; i++)
                {
                    // 겹치지 않는 위치 찾기
                    Vector3 spawnPos;
                    bool validPosition = false;

                    // 최대 5번 시도
                    for (int attempt = 0; attempt < 5; attempt++)
                    {
                        spawnPos = GetRandomPositionInCell(centerPos, 7);

                        // 다른 자원과 겹치는지 확인
                        validPosition = true;
                        foreach (var pos in usedPositions)
                        {
                            if (Vector3.Distance(spawnPos, pos) < 2.0f)
                            {
                                validPosition = false;
                                break;
                            }
                        }

                        // 겹치지 않는 위치를 찾았으면 자원 생성
                        if (validPosition)
                        {
                            int resourceType = Random.Range(0, resourceTileObj.Count);
                            Instantiate(resourceTileObj[resourceType], spawnPos, Quaternion.identity, ResourceTileBlock);
                            usedPositions.Add(spawnPos);
                            break;
                        }
                    }
                }
            }
        }

SetResourceTileMap() 코드를 수정해주었는데, 맵을 돌면서 랜덤으로 생성되는것까지는 기존과 동일하나 자원을 놓을때는 셀 중심으로 안겹치게 최대 5번 시도해서 고른 후 다른 자원이랑 너무 가까우면 다시뽑고 괜찮은 자리면 그 위치에 자원 프리팹을 생성해주게끔 해두었다.

그리고 중앙 타일에는 자원타일이 배치되지 않도록 해주었다.

 

이렇게 하여 타일도 마무리..! 

 

그리고 오늘은 기본적으로 작성햇던 코드를 리팩토링한다는 마인드로 쳐다보고 있었는데... 수정한 부분은 거의 없고 기본 개념 찾아보는 시간이 된듯 하다 ㅎㅎ... 뭘 한거야........

내일은 중간점검 겸 발표날이니 피드백 받고 다시한번 처음에 다짐햇던것처럼 열심히 시작하는 마음을 가져야겠다.