게임프로젝트/쿠키런 모작
R&D 타일맵 랜덤 무한 생성
pudding81
2024. 3. 26. 14:35
- 타일맵 프리팹 만들기
- 타일맵 프리팹들을 생성하고 비활성화 시키기
- 랜덤으로 활성화시키고 위치 재배치하기
- 활성화된 프리팹이 화면에 끝에 맞춰지면 다른 프리팹 활성화 시키기
- 화면에서 벗어나면 비활성화시키기
- 타일맵 프리팹 생성 및 비활성화: 게임 시작 시 모든 타일맵 프리팹을 생성하고 비활성화합니다.
- 랜덤 활성화 및 위치 재배치: 랜덤으로 하나의 타일맵을 활성화하고, 게임 화면 내에서 적절한 위치로 이동시킵니다.
- 연속 활성화: 활성화된 타일맵이 화면 끝에 도달하면, 다음 타일맵을 활성화합니다.
- 화면 벗어남 처리: 타일맵이 화면에서 벗어나면 비활성화하여 재사용할 수 있도록 합니다.
타일맵 컨트롤러
- 타일맵이 왼쪽으로 이동한다.
- 타일맵이 화면밖으로 나가면 비활성화된다.
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); // 위치 재배치
}
}
}
------> 시간간격으로 생성해서 타일맵이 겹쳐지거나 떨어지거나 이상하게 나온다