아이템 효과들의 적용을 위해서
오브젝트 풀링 - 타일맵 재사용 대신 // 풀 매니저, 타일매니저 적용 X
타일맵 제너레이터- 타일맵의 생성 삭제로 변경
타일맵제너레이터
-타일맵 생성
using Redcode.Pools;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TileMapGenerator : MonoBehaviour
{
//public int maxindex;
// 난수생성기
public long seed = 6; // 0 ~ 9223372036854775807 (long 타입의 양수 범위)
private int minNumber = 0; //타일맵 인덱스 최소범위
public int maxNumber = 6; //타일맵 인덱스 최대범위
//필요한 임의의 숫자들의 총 개수// 타일맵의 길이
private int iterations = 99;
//이미 생성된 임의의 숫자들의 리스트
private List<int> results = new List<int>();
// LCG Parameters
// seed, a, c, m은 난수 생성 알고리즘에 사용되는 변수들로,
// 각각 초기값, 곱셈 상수, 덧셈 상수, 모듈로 상수를 나타냅니다.
private const long a = 1103515245;
private const long c = 12345;
private const long m = 2147483647;
private int count = 0;
public TileMapController[] tiles;
private void Start()
{
if (!GameManager.instance.isGameOver) //게임오버가 아니면
{
GenerateRandomNumbers();
// 타일맵 생성 코루틴
StartCoroutine(CreateTileMap());
}
}
IEnumerator CreateTileMap() // 딜레이 시간마다 무한 생성
{
while (true)
{
//int randomIndex = UnityEngine.Random.Range(0, 7); // 랜덤 인덱스 생성
// 게임을 시작 할때마다 타일맵을 순서대로 활성화함
int randomIndex = results[count];
//Debug.Log(randomIndex);
Vector2 pos = new Vector2(21.49f, 0);
Instantiate(tiles[randomIndex],pos,Quaternion.identity);
// 타일맵 인덱스를 순서대로 반복한다.
count++;
yield return new WaitForSeconds(7.15f);
}
}
//타일맵 랜덤 번호를 생성하고 저장
void GenerateRandomNumbers()
{
long originalSeed = seed; // 초기 seed 값을 임시 변수에 저장
results.Clear();
for (int i = 0; i < iterations; i++)
{
seed = (a * seed + c) % m; // 현재 seed를 사용하여 난수 생성
int randomNumber = minNumber + (int)(seed % (maxNumber - minNumber + 1));
results.Add(randomNumber);
}
seed = originalSeed; // 난수 생성 후 원래 seed 값으로 복원
}
}
타일맵 컨트롤러
- 타일맵 삭제
using Redcode.Pools;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Tilemaps;
public class TileMapController : MonoBehaviour //,IPoolObject // 아이풀 인터페이스 구현
{
TileMapGenerator generator;
// TileManager tileManager;
// PlayerController player;
public float speed=4f;
private float tileWidth = 21.49f; // 타일맵의 가로 길이
//public string idname; // 타일맵 풀 이름
private void Start()
{
generator = GameObject.FindAnyObjectByType<TileMapGenerator>();
// tileManager = GameObject.FindAnyObjectByType<TileManager>();
// player = FindAnyObjectByType<PlayerController>();
}
void Update()
{
if (!GameManager.instance.isGameOver) //게임오버가 아니면
{
//게임오브젝트를 왼쪽으로 움직임
this.transform.Translate(Vector3.left * speed * Time.deltaTime);
}
// 화면 밖으로 벗어나면 비활성화 / 풀에 반환
if (transform.position.x < -tileWidth*2)
{
//gameObject.SetActive(false);
Destroy(gameObject);
// ReturnGoPool();
}
}
//void ReturnGoPool()
//{
// // 오브젝트 풀에 반환합니다.
// //Debug.Log("testpooling 반환 호출 ");
// tileManager.ReturnPool(this);
//}
//void Init()
//{
// //생성 위치
// //오브젝트가 성공적으로 가져와졌다면, 여기서 추가 작업을 수행합니다.
// transform.position = new Vector2(tileWidth, 0);
// // 예를 들어, 오브젝트의 위치를 설정합니다.
//}
//public void OnCreatedInPool()
//{
//}
//public void OnGettingFromPool() //재사용
//{
// // 타일맵 생성 코루틴
// Init();
//}
}
'게임프로젝트 > 쿠키런 모작' 카테고리의 다른 글
Firebase 데이터 서버에 저장하기 / 랭킹 만들기 (0) | 2024.05.02 |
---|---|
베스트 스코어 저장하기 (0) | 2024.04.08 |
R&D 타일맵 랜덤 무한 생성(5) 오브젝트 풀링 오류 수정 끝! (0) | 2024.03.30 |
R&D 타일맵 랜덤 무한 생성(4) 오브젝트 풀링 수정중 (0) | 2024.03.30 |
R&D 타일맵 랜덤 무한 생성(3) 오브젝트 풀링 수정중 (1) | 2024.03.30 |