맨날 κ³§ 데λͺ¨!라고 ν•˜λ©΄μ„œ 아직도 데λͺ¨κ°€ μ™„μ„±λ˜μ§€ μ•Šμ€ νƒœλ³΄λ―Έμ½”μ•Όμ˜€.

ν•˜μ§€λ§Œ μ§„μ§œ 점점 더 λ‹€κ°€κ°€κ³  μžˆλŠ” 것 !

ν˜„μž¬ κ°œλ°œν•œ 것듀은 λ‚˜μ€‘μ— 이쁘게 λ³΄μ—¬λ“œλ¦¬κΈ° μœ„ν•΄ 아직은 봉인해두도둝 ν•˜κ² μ–΄μ˜€.

사망 컷씬 μ‹œμŠ€ν…œλ§Œ κ΅¬ν˜„ν•˜λ©΄ 될 λ“― !

μ–ν˜Έ


μ΄μ „κΉŒμ§€λŠ” 직접 κ΅¬ν˜„ν•΄μ„œ λ§Œλ“€μžλΌλŠ” μ£Όμ˜μ—ˆλŠ”λ°,

직접 κ΅¬ν˜„ν•΄μ„œ λ§Œλ“€λ©΄ λΆ€μ‘±ν•œ μ§€μ‹μ΄λ‚˜ μ‘μš©μ„ ν•  쀄 λͺ¨λ₯Έλ‹€λŠ” κ²ƒμœΌλ‘œ μΈν•œ 문제,

μ‚¬μš© νŽΈμ˜μ„±μ΄ μ’‹μ§€ μ•Šμ€ λ¬Έμ œκ°€ μžˆλŠ” κ²ƒμ΄μ•Όμ˜€.

κ·ΈλŸ¬λ‹€λ³΄λ‹ˆ 기초적인 ν† λŒ€λ§Œ 직접 κ΅¬ν˜„ν•΄λ³΄λ©° μž‘λ™λ°©μ‹μ„ 이해해보고

에셋을 μ‚¬μš©ν•΄κ°€λ©° μ–΄λ–€ μ‹μœΌλ‘œ κ΅¬ν˜„λœκ±΄μ§€ λ°°μš°λŠ” 것이

μ‹€λ ₯ ν–₯상에도 μ‹œκ°„μ μœΌλ‘œλ„ 더 μ’‹μ§€ μ•Šμ„κΉŒ 생각이 λ“€μ—ˆμ–΄μ˜€.


κ·Έλž˜μ„œ 이것저것 κ΅¬λ§€ν•˜κΈ°λ‘œ λ§ˆμŒλ¨Ήμ€ μ—μ…‹μ˜ 할인을 기닀리고 μžˆλŠ”λ°

내일뢀터 μ—μ…‹μŠ€ν† μ–΄ 50% 세일! + μΏ ν°μ½”λ“œ - r35
와! 할인! 인 κ²ƒμ΄μ•Όμ˜€.
기쁜 λ§ˆμŒμ— κ΅¬λ§€ν•˜λ €κ³  λ‹€μ§ν•œ 물건듀을 λ³΄λ‹ˆ λŒ€λΆ€λΆ„ ν•΄λ‹Ήμ—†μŒ...
λΈ”λž™ 프라이데이λ₯Ό 기닀리도둝 ν•˜λ©°,
이 νŒŒν‹°ν΄ 에셋을 κ΅¬λ§€ν•˜κ²Œ λ˜μ—ˆμ–΄μ˜€.

νŒŒν‹°ν΄μ„ λ§Œλ“€μ–΄λ³΄λ©° λŠλ‚€ 점이 각 μ˜΅μ…˜ 수치 쑰절이 생각보닀 νž˜λ“  κ²ƒμ΄μ•Όμ˜€.
이런 λŠλ‚Œμ„ λ„λŒ€μ²΄ μ–΄λ–»κ²Œ λ‚΄λŠ”κ±΄μ§€ κΆκΈˆν•΄μ„œ κ΅¬λ§€ν•΄λ³΄μ•˜λŠ”λ°
νŽ˜μ–΄λ¦¬ ν…ŒμΌμ¦ˆμ— 맞게 μƒˆλ‘œ λ§Œλ“€ μžμ‹ μ΄ 생긴 κ²ƒμ΄μ•Όμ˜€ !

μΆ€


κΈ°μ‘΄μ—λŠ” λ§Œλ“€μ–΄ μ‚¬μš©ν•˜μžλŠ” μ£Όμ˜κΈ°λ„ ν•˜κ³  ν•œκ΅­μ–΄ μžλ£Œλ„ λΆ€μ‘±ν•΄μ„œ

μœ λ‹ˆν‹° 2021버전뢀터 μ§€μ›ν•˜λŠ” 곡식 였브젝트 풀을 μ‚¬μš©ν•˜μ§€ μ•Šμ•˜μŒ.

νŽ˜μ–΄λ¦¬ ν…ŒμΌμ¦ˆ #21, 였브젝트 풀링

이런 λ°©μ‹μœΌλ‘œ κ΅¬ν˜„ν•˜μ˜€λŠ”λ° μ‚¬μš©ν•˜λ‹€λ³΄λ‹ˆ 곡식 였브젝트 풀링에 λΉ„ν•΄ λ„ˆλ¬΄λ‚˜λ„ λΆ€μ‘±ν•˜λ‹€κ³  λŠλ‚Œ.

κ·Έλž˜μ„œ 곡식 였브젝트 풀링을 μ‚¬μš©ν•˜κ²Œ λ˜μ—ˆμŒ.

κ΅¬ν˜„ν•  것도 μ—†κ³  μ‚¬μš©ν•˜κΈ°λ„ νŽΈν•˜λ‹€ λ³΄λ‹ˆ

ꡳ이 μ‹±κΈ€ν†€μœΌλ‘œ 였브젝트 ν’€ λ§€λ‹ˆμ € λ§Œλ“€μ§€ 말고 뉴비뢄듀 μš”κ±° μ‚¬μš©ν•΄λ„ λ‚˜μ˜μ§€ μ•Šμ„ 것 κ°™λ‹€κ³  생각함.


였브젝트 풀링

μš°μ„  였브젝트 풀링을 μ™œ μ‚¬μš©ν•˜λŠ” 지에 λŒ€ν•΄ λ¨Όμ € μ•Œκ³ κ°€λŠ” 것이 μ’‹λ‹€κ³  생각함.

λ‚˜λ„ 뉴비인지라 잘λͺ»λœ 정보가 μžˆμ„ 수 있고 μžμ„Έν•œ 뢀뢄은 λͺ¨λ₯΄λ‹€λ³΄λ‹ˆ

κ°„λž΅ν•˜κ²Œ ν™•μΈλ§Œ ν•˜κ³  κΆκΈˆν•˜λ‹€λ©΄ 직접 곡뢀해 λ³΄λŠ” 것을 μΆ”μ²œν•¨.


7cec8168f2d73ab64e81d2b628f1726d8f634b17 사진 우츑의 ν•˜μ΄λΌν‚€μ— 보이듯이 κ°€μ‹œλ₯Ό μƒˆλ‘œ μƒμ„±ν•˜μ§€ μ•Šκ³  λΉ„ν™œμ„±ν™”μ‹œν‚¨ κ°€μ‹œλ₯Ό λ‹€μ‹œ μ‚¬μš©ν•˜λŠ” 방식.


였브젝트 풀링을 μ‚¬μš©ν•˜λŠ” μ΄μœ λŠ” μž¦μ€ 생성과 파괴둜 μΈν•œ λ©”λͺ¨λ¦¬ ν• λ‹Ή, ν•΄μ œλ‘œ μΈν•œ κ°€λΉ„μ§€ 컬렉터 λ°œμƒμ„ 쀄이기 μœ„ν•¨μž„.

이러면 또 κ°€λΉ„μ§€ 컬렉터, GCκ°€ 무엇인가에 λŒ€ν•΄ μ•Œμ•„λ³΄μ•„μ•Ό ν•˜μ§€λ§Œ,

뉴비 λΆ„λ“€μ΄λ‚˜ μ €μ—κ²ŒλŠ” λ„ˆλ¬΄λ‚˜λ„ μ–΄λ €μš΄ λΆ€λΆ„.

κ°„λ‹¨νžˆ λΉ„μœ ν•˜μžλ©΄ μ˜›λ‚ μ— 많이 ν•΄λ³΄μ‹œμ§€ μ•Šμ•˜μ„κΉŒ 싢은 λ””μŠ€ν¬ 쑰각 λͺ¨μŒμ„ μƒκ°ν•΄λ³΄μ‹œλ©΄ 될 것 κ°™μŒ.

ν• λ‹Ήν•΄μ£Όκ³  μ‚­μ œν•˜λ©° 생겨버린 쀑간쀑간 비어버린 λ©”λͺ¨λ¦¬μ˜ 곡간을 μ •λ¦¬ν•˜λŠ” 것.


GCκ°€ λ°œμƒν•˜λ©΄ κ²Œμž„ 쀑 ν”„λ ˆμž„ λ“œλžμ΄ μΌμ–΄λ‚˜λ―€λ‘œ μ•„μ£Ό ν™”κ°€ λ‚˜μ§€ μ•ŠλŠ” 상황이 μ•„λ‹κΉŒ μ‹ΆμŒ.

λ”°λΌμ„œ μ΄μ•Œκ°™μ€ 생성/μ‚­μ œκ°€ λ§Žμ€ μ˜€λΈŒμ νŠΈλŠ” ν•„μˆ˜μ μ΄μ§€ μ•Šμ„κΉŒ μ‹Άμ§€λ§Œ

일단 μ“°λ‹€κ°€ λ¬Έμ œκ°€ μžˆλ‹€ μ‹ΆμœΌλ©΄ κ΅¬ν˜„ν•΄λ„ λ˜λ―€λ‘œ λ„ˆλ¬΄ 얽맀이지 μ•Šλ„λ‘ ν•˜κΈ°.



μ‚¬μš©ν•˜κΈ°

ν”νžˆλ“€ μ‚¬μš©ν•  μ΄μ•Œμ„ μ˜ˆμ‹œλ‘œ μ‚¬μš©ν•΄λ³΄κ² μŒ.

기쑴에 κ΅¬ν˜„ν•˜λ˜ 였브젝트 풀링은 싱글톀 λ§€λ‹ˆμ €λ₯Ό μ‚¬μš©ν–ˆμ§€λ§Œ

μœ λ‹ˆν‹° 였브젝트 풀링은 주체가 풀을 λ“€κ³  있음.

λ¬Όλ‘  μ‹±κΈ€ν†€μœΌλ‘œλ„ κ΅¬ν˜„μ΄ κ°€λŠ₯ν•˜κ² μ§€λ§Œ ꡳ이 그럴 μ΄μœ λŠ” 없을듯.


1. μ΄μ•Œμ„ μ˜λŠ” 주체의 μŠ€ν¬λ¦½νŠΈμ™€ μ΄μ•Œ 슀크립트λ₯Ό 생성.

a17d2cad2f1b782a99595a48fa9f3433f728bd6f6b8abd37615cac

μŠ€μƒ·μ°κΈ° νŽΈν•˜κ²Œ ν•˜λ‚˜μ˜ νŒŒμΌμ— μž‘μ„±ν–ˆμ§€λ§Œ κ°œλ³„ 슀크립트둜 μž‘μ„±ν•  것.

2. μ£Όμ²΄μ—μ„œ ν’€ λ§Œλ“€κΈ°

a17d2cad2f1b782a99595a48fa9f3433f728bd6f6b8abd3c6353a9f4

bulletPrefab은 μΈμŠ€νŽ™ν„°μ—μ„œ μ΄μ•Œλ‘œ μ“Έ ν”„λ¦¬νŒΉμ„ λŒμ–΄λ„£μ–΄μ€„ μ˜ˆμ •.

_bulletPool은 μƒμ„±λœ bulletPrefab듀이 λ“€μ–΄κ°ˆ ν’€.

static으둜 μ„ μ–Έν•œκ±΄ 각자 ν’€ λ”°λ‘œ λ“€κ³ μ‹ΆμœΌλ©΄ μ•ˆν•΄μ€˜λ„ 됨.


3. 풀링 λŒ€μƒμ΄ μžμ‹ μ΄ λ“€μ–΄κ°ˆ ν’€ μ•Œ 수 μžˆλ„λ‘ ν•΄μ£ΌκΈ°.

a17d2cad2f1b782a99595a48fa9f3433f728bd6f6b8abd3c665caff9

주체가 탄을 μƒμ„±ν•˜λ©° 풀을 μ•Œλ €μ€˜μ„œ 이후 탄이 μžμ‹ μ΄ λ“€μ–΄κ°ˆ 풀을 μ•Œ 수 μžˆλ„λ‘ ν•΄μ€Œ.


4. 주체의 ν’€ μ΄ˆκΈ°ν™”

a17d2cad2f1b782a99595a48fa9f3433f728bd6f6b8abd39675aacf4

풀을 μ‚¬μš©ν•˜κΈ° μœ„ν•΄ μ΄ˆκΈ°ν™”ν•΄μ£ΌκΈ°.

νŒŒλΌλ―Έν„° 값이 λ§Žμ€λ° μ•„λž˜μ— μ„€λͺ…ν•˜κ² μŒ.


5. νŒŒλΌλ―Έν„° 값에 λ“€μ–΄κ°ˆ ν•¨μˆ˜ λ§Œλ“€κΈ°

a17d2cad2f1b782a99595a48fa9f3433f728bd6f6b8abd3f655babfc

νŒŒλΌλ―Έν„°λ₯Ό 보면 λ””ν΄νŠΈ ν”„λΌλ―Έν„°λ‘œ createFuncμ™Έμ—λŠ” 넣어쀄 ν•„μš”κ°€ μ—†μ§€λ§Œ,

λ„£μ–΄μ£ΌλŠ”κ²Œ 관리할 λ•Œ νŽΈν• λ“― μ‹ΆμŒ.

createFunc : ν’€μ—μ„œ κΊΌλ‚Ό λ•Œ 없을 경우 μ‹€ν–‰.

actionOnGet : ν’€μ—μ„œ κΊΌλ‚Ό λ•Œ μ‹€ν–‰.

actionOnRelease : ν’€λ‘œ 넣을 λ•Œ μ‹€ν–‰.

actionOnDestroy : ν’€λ‘œ 넣을 λ•Œ 풀에 λ‹΄κΈ΄ μ˜€λΈŒμ νŠΈκ°€ maxSize일 경우 μ‹€ν–‰.

collectionCheck : ν’€λ‘œ λ„£λŠ” μ˜€λΈŒμ νŠΈκ°€ 이미 풀에 μ‘΄μž¬ν•˜λŠ” 경우 μ˜ˆμ™Έμ²˜λ¦¬ λ°œμƒμ‹œν‚΄. μ—λ””ν„°μ—μ„œλ§Œ μ‹€ν–‰λ˜λ―€λ‘œ κΈ°λ³Έκ°’μœΌλ‘œ 두면 될듯.

ν™•μ‹€ν•˜μ§€λŠ” μ•ŠμœΌλ‹ˆ 직접 μ°Ύμ•„λ³΄μ‹œλŠ” 것을 μΆ”μ²œ.

defaultCapacity : stack의 capacity인데 적절히 μ‚¬μš©λ  μ–‘λ§ŒνΌ μ •ν•΄μ£Όλ©΄ 될 λ“―.

maxSize : ν’€μ˜ μ΅œλŒ€ μš©λŸ‰, λ„˜μ–΄κ°ˆ 경우 μœ„ Destroy νŒŒλΌλ―Έν„° ν•¨μˆ˜ μ‹€ν–‰.

a17d2cad2f1b782a99595a48fa9f3433f728bd6f6b8abd39605daafe

ν•˜μ΄λΌν‚€μ— μƒμ„±λœ μ΄μ•Œλ“€ λ‚œμž‘ν•˜κ²Œ 있으면 보기 λΆˆνŽΈν•˜λ―€λ‘œ

μ»¨ν…Œμ΄λ„ˆ 역할을 해쀄 였브젝트λ₯Ό ν•˜λ‚˜ μƒμ„±ν•˜κ³  κ±°κΈ° μžμ‹μœΌλ‘œ μƒμ„±ν•˜λ„λ‘ ν•΄μ£Όμ—ˆμŒ.

get, release, destroyμ—λŠ” 별 것 μ—†λŠ” λ‚΄μš©μ΄μ§€λ§Œ,

이후 ν•„μš”ν•œ μž‘μ—…μ΄ 생길 μ‹œ 저기에 μΆ”κ°€ν•΄μ£Όλ©΄ 됨.


6. μ‚¬μš©ν•˜κΈ°

a17d2cad2f1b782a99595a48fa9f3433f728bd6f6b8abd376352af

μ‹€μ œ μ‚¬μš©λ˜λŠ” κ³³μ—μ„œλŠ” ν’€.Get ν•˜λ©΄ 였브젝트λ₯Ό λ°˜ν™˜ν•΄μ€Œ.

이 였브젝트λ₯Ό μ΄μš©ν•΄ ν•„μš”ν•œ μž‘μ—…μ„ ν•˜λ©΄ 됨.

μœ„μ—μ„œ μž‘μ„±ν•œ onGetμ—μ„œ ν•΄μ€˜λ„ 됨.


a17d2cad2f1b782a99595a48fa9f3433f728bd6f6b8abd3a615ea9fe

μ΄μ•Œμ—μ„œλŠ” 풀에 넣어쀄 μ‹œ Release μžμ‹ μ„ ν•΄μ£Όλ©΄ 끝.

μ„€λͺ…ν•˜μ§€ μ•Šμ€ μΈμŠ€νŽ™ν„°μ—μ„œ λŒμ–΄λ„£μ–΄μ£Όκ³  ν”„λ¦¬νŒΉν™” ν•˜λŠ” 것은 κΈ°μ΄ˆμ μ΄λ―€λ‘œ μ•Œμ•„μ„œ ν•  것.


 풀링 μ‹œ μ£Όμ˜ν•  μ μœΌλ‘œλŠ” λΉ„ν™œμ„±ν™”/ν™œμ„±ν™” ν•΄μ£ΌκΈ° λ•Œλ¬Έμ—

μ΄ˆκΈ°ν™”κ°€ ν•„μš”ν•œ μž‘μ—…μ€ enable, disableν•¨μˆ˜μ—μ„œ λ°˜λ“œμ‹œ ν•΄μ£Όμ–΄μ•Ό 함.

μƒˆλ‘œ μƒμ„±ν•˜λŠ” κ²½μš°μ—λŠ” λ¬Έμ œκ°€ μ—†μ—ˆμ§€λ§Œ,

λΉ„ν™œμ„±ν™” 된 μ˜€λΈŒμ νŠΈκ°€ λ‹€μ‹œ ν™œμ„±ν™” 되며 λΉ„ν™œμ„±ν™” 전에 κ°€μ§€κ³  있던 값을 μœ μ§€ν•˜κ³  μžˆμ–΄μ„œ

μ›μΉ˜μ•ŠλŠ” 상황이 μƒκΈ°λŠ” κ²½μš°κ°€ μžˆμœΌλ‹ˆ μ£Όμ˜ν•  것.


Β μΆ”κ°€μ μœΌλ‘œ μ΄μ•Œ μ‚¬μš© μ‹œ μ½œλΌμ΄λ”λ₯Ό 달아쀄 텐데,

μ΄μ•ŒλΌλ¦¬ λΆ€λ”ͺ힐 일이 μ—†λ‹€λ©΄ λ ˆμ΄μ–΄ λ§€νŠΈλ¦­μŠ€μ—μ„œ λΆ€λ”ͺ힐 λ ˆμ΄μ–΄λ₯Ό μžκΈ°μžμ‹ μ€ μ œμ™Έν•΄μ£Όλ„λ‘ ν•˜κ³ ,

μ½œλΌμ΄λ”λ₯Ό 달고 움직인닀면 무쑰건 rigidbodyλ₯Ό 달아주도둝 ν•˜κ³ 

λ‹¨μˆœνžˆ 좩돌체크만 ν•œλ‹€λ©΄ dynamic이 μ•„λ‹Œ ν‚€λ„€λ§ˆν‹±μœΌλ‘œ ν•΄ 주도둝 ν•˜μž.

또, λ¦Ώμ§€λ“œλ°”λ””λ₯Ό λ‹¬μ•„μ€¬μœΌλ©΄ transformμ—μ„œ μ‘°μž‘ν•˜λŠ”κ²ƒμ΄ μ•„λ‹Œ

rigidbodyμ—μ„œ λ¬΄λΈŒν¬μ§€μ…˜μ„ ν•˜λ“  속도λ₯Ό μ£Όλ“  νž˜μ„ 주도둝 ν•˜μž.


μ„€λͺ…ν•œ ν’€ 외에 λ”•μ…”λ„ˆλ¦¬ ν’€, λ§ν¬λ“œν’€, λ¦¬μŠ€νŠΈν’€ λ“±

방금 μ‚¬μš©ν•΄λ³Έ μŠ€νƒμœΌλ‘œ κ΅¬ν˜„λœ 풀이 μ•„λ‹Œ μ—¬λŸ¬κ°€μ§€ ν˜•νƒœλ‘œ κ΅¬ν˜„λœ 풀이 있음.

ν•„μš”ν•œ μš©λ„μ— λ§žμΆ°μ„œ μ‚¬μš©ν•˜λ©΄ λ˜κ² μœΌλ‚˜

λ‚˜μ—κ² ν•„μš”ν•˜μ§€ μ•Šμ€ λ“― ν•˜μ—¬ μ‚¬μš©ν•΄λ³΄μ§€ μ•Šμ•„μ„œ λͺ¨λ₯΄λ‹ˆ 슀슀둜 μ•Œμ•„λ³Ό 것.

https://docs.unity3d.com/ScriptReference/Pool.CollectionPool_2.html



μ΅œλŒ€ν•œ μžμ„Έν•˜κ²Œ ν’€μ–΄μ“΄λ‹€κ³  λ„ˆλ¬΄λ‚˜λ„ 길어져버린 λ‚΄μš©μΈ κ²ƒμ΄μ•Όμ˜€.

κ·Έλž˜λ„ 이해가 μ•ˆκ°„λ‹€λ©΄ κΈ€μž¬μ£Όκ°€ μ—†λŠ” 제 νƒ“μ΄λ‹ˆ κΆκΈˆν•œ 점은 물어봐도 쒋은 κ²ƒμ΄μ•Όμ˜€.


7cec8168f2d73ab64e81d2b628f1726d8f634b17

κ·€μ—¬μš΄ μ•ŒλΌμš°λ„€ ν•œλ²ˆ 더 λ³΄κ³ κ°€λŠ” κ²ƒμ΄μ•Όμ˜€ !

μ•ˆλƒ₯