
¤오브젝트 풀링 풀 반환 수정
-풀 반환 부분을 수정했더니 타일맵이 다음 순번에 반환됨.
- 하지만 플레이어와 충돌한 아이템들이 사라짐(Destroy)
- 플레이어와 아이템이 충돌하면 아이템을 비활성화 하고 풀에서 꺼낼때 활성화 코드를 넣었지만 에러남
=> 아이템 컨트롤러를 추가하고 활성화 비활성화 코드를 넣어줌


타일맵 컨트롤러 // 타일맵 프리팹에 부착
using Redcode.Pools;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Tilemaps;
public class TileMapController : MonoBehaviour ,IPoolObject // 아이풀 인터페이스 구현
{
TileManager tileManager;
public float speed=4f;
private float tileWidth = 17.88f; // 타일맵의 가로 길이
public string idname; // 타일맵 풀 이름
private void Start()
{
tileManager = GameObject.FindAnyObjectByType<TileManager>();
}
void Update()
{
// if (!GameManager.instance.isGameOver) 게임오버가 아니면
//게임오브젝트를 왼쪽으로 움직임
this.transform.Translate(Vector3.left * speed * Time.deltaTime);
// 화면 밖으로 벗어나면 비활성화 / 풀에 반환
if (transform.position.x < -tileWidth)
{
gameObject.SetActive(false);
ReturnGoPool();
}
}
void ReturnGoPool()
{
// 오브젝트 풀에 반환합니다.
//Debug.Log("testpooling 반환 호출 ");
tileManager.ReturnPool(this);
}
void Init()
{
//생성 위치
//오브젝트가 성공적으로 가져와졌다면, 여기서 추가 작업을 수행합니다.
transform.position = new Vector2(tileWidth, 0);
// 예를 들어, 오브젝트의 위치를 설정합니다.
}
public void OnCreatedInPool()
{
}
public void OnGettingFromPool() //재사용
{
// 타일맵 생성 코루틴
Init();
}
}
타일매니저
- 타일맵 생성 코루틴
- 타일맵 순서 시드대로 무한 생성
using Redcode.Pools;
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEditor.EditorTools;
using UnityEngine;
public class TileManager : MonoBehaviour
{
PoolManager poolManager;
// 난수생성기
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;
private void Awake()
{
poolManager = GetComponent<PoolManager>();
}
private void Start()
{
GenerateRandomNumbers();
// 타일맵 생성 코루틴
StartCoroutine(CreateTileMap());
}
IEnumerator CreateTileMap() // 딜레이 시간마다 무한 생성
{
while (true)
{
//int randomIndex = UnityEngine.Random.Range(0, 4); // 랜덤 인덱스 생성
// 게임을 시작 할때마다 타일맵을 순서대로 활성화함
int randomIndex = results[count];
TileMapController tileMap = poolManager.GetFromPool<TileMapController>(randomIndex);
// 여기서 randomIndex는 풀의 인덱스입니다.
// Debug.LogFormat("맵 번호 {0}", randomIndex);
// 타일맵 인덱스를 순서대로 반복한다.
count++;
yield return new WaitForSeconds(4.5f);
}
}
public void ReturnPool(TileMapController tileMap)
{
// Debug.Log("풀에 반환");
// 오브젝트를 풀에 반환합니다.
poolManager.TakeToPool<TileMapController>(tileMap.idname, tileMap);
}
//타일맵 랜덤 번호를 생성하고 저장
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 값으로 복원
}
}
'게임프로젝트 > 쿠키런 모작' 카테고리의 다른 글
베스트 스코어 저장하기 (0) | 2024.04.08 |
---|---|
R&D 타일맵 랜덤 무한 생성(5) 오브젝트 풀링 오류 수정 끝! (0) | 2024.03.30 |
R&D 타일맵 랜덤 무한 생성(3) 오브젝트 풀링 수정중 (1) | 2024.03.30 |
타일맵 랜덤 생성값 저장하기(2) (0) | 2024.03.30 |
타일맵 제작 (0) | 2024.03.29 |