728x90
풀링코드
RPG 게임을 만들고 있던 중
이거는 인스턴스로 생성하지 않아도 활성화, 비활성화로 관리(?) 하면 되겠다! 싶은 오브젝트가 있어,
코드를 작성해보았습니다 !
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CircleObj : MonoBehaviour
{
SpriteRenderer Srenderer;
enemyObj enemyCs;
public int Damage = 50;
CircleCollider2D Ecollider2D;
//클릭
Vector3 mouseVec;
Camera Camera;
float MaxDistance = 5f;
void Start()
{
Srenderer = GetComponent<SpriteRenderer>();
enemyCs = GameObject.Find("Enemy").GetComponent<enemyObj>();
Ecollider2D = GetComponent<CircleCollider2D>();
Camera = GameObject.FindWithTag("MainCamera").GetComponent<Camera>();
}
void Update()
{
//이 게임 오브젝트가 활성화가 되어있을때만 클릭 가능하도록.
if(Input.GetMouseButtonDown(0) && gameObject.activeInHierarchy)
{
mouseVec = Input.mousePosition;
mouseVec = Camera.ScreenToWorldPoint(mouseVec);
RaycastHit2D hit = Physics2D.Raycast(mouseVec,transform.forward,MaxDistance);
if(hit)
{
Srenderer.material.color = Color.red;
StartCoroutine("Ready");
}
}
}
IEnumerator Ready()
{
yield return new WaitForSeconds(1f);
gameObject.SetActive(false);
//코루틴 안에 넣어줌으로 연속으로 눌리지 않게.
enemyCs.enemyHP = enemyCs.enemyHP - Damage;
Srenderer.material.color = Color.gray;
yield return null;
}
}
위 코드는
적 주변에 (그림안에 검정색으로 칠해진) 서클이 Active 되고
이 서클을 클릭하면 몬스터의 체력이 닳고 색이 변한뒤 Active false 되는 스크립트 입니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerAttack : MonoBehaviour
{
public GameObject CircleObjt;
void Update()
{
if(!CircleObjt.activeInHierarchy)
{
StartCoroutine("PAttack");
}
}
IEnumerator PAttack()
{
CircleObjt.SetActive(true);
CircleObjt.transform.position = new Vector3(Random.Range(5.7f,7.54f),Random.Range(-2.58f,-1.17f),0f);
//(0.5f,-2.9f)
//CircleObjt.transform.position = new Vector3(Random.Range(6.93f,11.69f),0.5f,0f);
yield return null;
}
}
해서 서클 오브젝트가 Active 되어있지 않으면
다시 Active 시켜주고 position을 랜덤 하게 주어 다른 곳에 뜨도록 하였습니다.
풀링 집중 탐구 🔎
이렇게 코드를 짜놓고 어느날,
구글 서칭중 이렇게 오브젝트를 미리 만들어 놓고 Active시켜주는 방법을 풀링이라는 방식이란걸 알았습니다.
계속 인스턴스로 생성을 하게 되면
오브젝트 생성,삭제 하는 과정에서 가비지(Garbage)값이 만들어지는데
이 가비지 값이 만들어지면 유니티에서 가비지 컬렉트( 메모리를 비우는 기술 )를 실행하는데,
이 과정에서 게임이 끊기게 된다고 합니다.
해서 이를 방지 하기 위해
오브젝트 풀링은, 오브젝트를 생성 하고 삭제 시키는 것이 아닌
활성화 -> 비활성화 -> 활성화 의 반복으로 실행 시킵니다.
보통은 리스트나 배열안에다가 넣으시고 코드를 작성하시는데
아직은 배열이나 리스트 활용이나
복잡한 공식을 활용하는 구현은 잘 하지 못해서
잘 정리 하신 분의 링크를 올립니다..
제꺼는 그냥 간단한 풀링 코드로 참고해주시길 바랍니다...
감사합니다 !
정리 해주신 글 ->
728x90
'🧩 코딩 > 코드 메모' 카테고리의 다른 글
UNITY 텍스트 파일 StreamReader로 읽어보자 ! (0) | 2023.01.07 |
---|---|
UI Button / 체크 박스 UI " Toggle " 구현 (0) | 2022.12.02 |
unity 배열 []과 리스트 List의 개념 (0) | 2022.12.02 |
선형 보간 / Lerp로 부드럽게 움직이기 (MoveTowards,Lerp, SmoothDamp 비교 ) (0) | 2022.11.29 |
Unity Time.timeScale로 게임 내 시간 조절하기 🤸🏻♀️ (0) | 2022.10.30 |