게임프로젝트/쿠키런 모작

R&D 타일맵 랜덤 무한 생성

pudding81 2024. 3. 26. 14:35

- 타일맵 프리팹  만들기

- 타일맵 프리팹들을 생성하고 비활성화 시키기

- 랜덤으로 활성화시키고 위치 재배치하기 

- 활성화된 프리팹이 화면에 끝에 맞춰지면 다른 프리팹 활성화 시키기

- 화면에서 벗어나면 비활성화시키기

 

 

  1. 타일맵 프리팹 생성 및 비활성화: 게임 시작 시 모든 타일맵 프리팹을 생성하고 비활성화합니다.
  2. 랜덤 활성화 및 위치 재배치: 랜덤으로 하나의 타일맵을 활성화하고, 게임 화면 내에서 적절한 위치로 이동시킵니다.
  3. 연속 활성화: 활성화된 타일맵이 화면 끝에 도달하면, 다음 타일맵을 활성화합니다.
  4. 화면 벗어남 처리: 타일맵이 화면에서 벗어나면 비활성화하여 재사용할 수 있도록 합니다.

 

타일맵 컨트롤러

- 타일맵이 왼쪽으로 이동한다.

- 타일맵이 화면밖으로 나가면 비활성화된다.

 

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TileMapController : MonoBehaviour
{
    public float speed;

    private float tileWidth = 17.88f; // 타일맵의 가로 길이


    void Update()
    {
        // if (!GameManager.instance.isGameOver) 게임오버가 아니면

        //게임오브젝트를 왼쪽으로 움직임
        this.transform.Translate(Vector3.left * speed * Time.deltaTime);


        // 화면 밖으로 벗어나면 비활성화
        if (transform.position.x < -tileWidth)
        {
            

           gameObject.SetActive(false); // 비활성화
        }



    }
}

 

타일 제너레이터

- 타일맵 프리팹이 생성되고 비활성화 된다.

- 비활성화 된 맵인 경우만 활성화된다.

 

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TileGenerator : MonoBehaviour
{
    public GameObject[] tileMapPrefabs; // 타일맵 프리팹 배열
    public float tileWidth = 17.88f; // 타일맵의 가로 길이

   

   // private int currentIndex = -1; // 현재 인덱스
    // 인스턴스화된 타일맵을 저장할 리스트
    private List<GameObject> tileMapInstances = new List<GameObject>();

    private int randomIndex;

    public float timeSpawn=0;
    private float lasttimeSpawn;

    private int lastIndex; 

    void Start()
    {
        // 타일맵 생성후 풀에 넣기
        SpawnTileMap();
       


    }

    void Update()
    {
        // 시간 경과에 따라 타일맵 활성화 
        if (Time.time >= lasttimeSpawn + timeSpawn)
        {
            lasttimeSpawn = Time.time;

            Debug.Log(lasttimeSpawn + timeSpawn);

            ReuseTileMap();
        }

    }






   // 타일맵 인스턴스화 및 위치 설정 (풀에 넣기)
    void SpawnTileMap()
    {


        foreach (var prefab in tileMapPrefabs)
        {
            GameObject instance = Instantiate(prefab, Vector3.zero, Quaternion.identity);
            instance.SetActive(false); // 처음에는 비활성화 상태로 생성
            tileMapInstances.Add(instance); // 리스트에 추가
        }


    }

    // 랜덤으로 활성화시키기
    void ReuseTileMap()
{

        
            this.randomIndex = UnityEngine.Random.Range(0, tileMapInstances.Count); // 랜덤 인덱스 생성
            GameObject randomTileMap = tileMapInstances[randomIndex]; // 랜덤 타일맵 선택

        if (!randomTileMap.activeSelf)
        {
            Debug.Log("비활성화된 맵인경우");

            randomTileMap.SetActive(true); // 활성화
            randomTileMap.transform.position = new Vector2(tileWidth, 0); // 위치 재배치
        }

       

    }
}

 

 

 

------> 시간간격으로 생성해서 타일맵이 겹쳐지거나 떨어지거나 이상하게 나온다