์งˆ๋ฌธ๊ธ€ : https://gall.dcinside.com/mgallery/board/view/?id=game_dev&no=98548


1. GetComponent ๋งŽ์ด์จ๋„ ์ƒ๊ด€์—†์Œ?

-> ๋œ ์“ธ์ˆ˜๋ก ์ข‹๊ธดํ•˜๊ฒ ๋‹ค๋งŒ ํ•„์š”ํ• ๋•Œ ์ž˜ ์“ฐ๋ผ๊ณ  ์žˆ๋Š”๊ฑฐ๋‹ˆ ๋ถ€๋‹ด์€ ์•ˆ๊ฐ€์ ธ๋„๋ ๋“ฏ

์ผ๋‹จ ๋งŒ๋“ค๊ณ  / ๋ฌธ์ œ๋˜๋ฉด ์ตœ์ ํ™”๋ฅผ ๊ณ ๋ฏผ

๋ง‰์—ฐํ•˜๊ฒŒ GetComponent ๋งŽ์ดํ•ด์„œ ์•„.. ์ตœ์ ํ™”๊ฑฑ์ •๋˜๋Š”๋ฐ~ ๋กœ ์ƒ๊ฐํ•˜์ง€๋ง๊ณ 

๋ชฉํ‘œ ํ”„๋ ˆ์ž„ ์•ˆ๋‚˜์˜ค๋Š”๋ฐ(ํ˜น์€ ์ฃผ๊ธฐ์ ์ธ ์ฒดํฌ๋กœ) ํ”„๋กœํŒŒ์ผ๋ง ๋Œ๋ฆผ

-> update์—์„œ ์žฆ์€ GetComponent๋กœ ์ธํ•ด ๋น„์šฉ์ด ๋งŽ์ด๋ฐœ์ƒํ•˜๋Š”๊ฑธ ํ™•์ธ

-> ๊ฐœ์„ 

์˜ ๊ณผ์ •์œผ๋กœ ์ƒ๊ฐํ•˜๋Š”๊ฒŒ ์ข‹์„๊ฑฐ๊ฐ™์Œ. ๋„ˆ๋ฌด ์ด๋ฅธ ์ตœ์ ํ™”๋Š” ๋…์ž„.



2. ์‹ค์‹œ๊ฐ„ ์ฒด๋ ฅ๊ด€๋ฆฌ ๋‹ค๋ฅธ๋ฐฉ๋ฒ•?

-> ๋ฐฉ๋ฒ•์ด์•ผ ๋งŽ์€๋ฐ ๊ฒŒ์ž„ ์ „์ฒด ๊ตฌ์กฐ๋‚˜ ์š”๊ตฌ์‚ฌํ•ญ๋“ฑ์„ ๋‹ค ์•Œ ์ˆ˜ ์—†์œผ๋‹ˆ

์„ฃ๋ถˆ๋ฆฌ ์ด๋ ‡๊ฒŒ ์ €๋ ‡๊ฒŒ ๊ตฌ์กฐ๋ฅผ ๋ฐ”๊ฟ”๋ผ ์–˜๊ธฐํ•˜๊ธด ์ข€ ๊ธ€๊ณ ..

์ด์—๋Œ€ํ•œ ๋‹ต๋ณ€์€ ์งˆ๋ฌธ๊ธ€์— ๋‹ค๋ฅธ์‚ฌ๋žŒ๋“ค์ด ๋‹ฌ์•„๋…ผ ๋Œ“๊ธ€์ด๋‚˜ ๋‹ค๋ฅธ ๊ฒœ ์ฝ”๋“œ๋“ค ์ฐธ๊ณ ํ•ด๋ณด๋ฉด๋ ๋“ฏ



------------------------


3. ์•„๋‹˜๋ง๊ณ  ์ฝ”๋“œํ›ˆ์ˆ˜

๊ธ€๋‚ด์šฉ์œผ๋กœ ๋ฏธ๋ค„๋ด์„œ OnTriggerStay์—์„œ ์ด๊ฑธ ๋Œ๋ฆฌ๊ณ  ์žˆ๋Š”๊ฒƒ์œผ๋กœ ๋ณด์ž„

๋Œ€์ถฉ ๋น„์Šทํ•˜๊ฒŒ ๋งŒ๋“ค์—ˆ์Œ.

myMonster๋Š” ์–ด๋””์„œ ๋ญํ•˜๋˜์•ค์ง€ ์•Œ์ˆ˜์—†์–ด์„œ ๋Œ€์ถฉ ์•„๋ฌด๋ ‡๊ฒŒ๋‚˜ ๋บ์Œ


04b0d121e0ed61f638f1c6bb11f11a39952bd285bbaf1778



1. ๋ผ์ด๋” ๋ง ๋“ฃ๊ธฐ

invert if ํ•ด์ฃผ๋ผ๊ณ  ํ•˜์‹œ๋‹ˆ ๊ณ ์ณ์ฃผ์ž

04b0d121e0ed61f639f1c6bb11f11a39b33e1d9c8d02d038


2. ํ•„์š”์—†๋Š”๊ฑฐ ์ง€์›Œ์ฃผ๊ณ 

!= false : == true ์–ด์ฐจํ”ผ ๋˜‘๊ฐ™์Œ

04b0d121e0ed61f637f1c6bb11f11a396d67b085bc1cc0d5



3. ์ค‘๋ณต๋˜๋Š”๊ฑฐ ํ•ฉ์ณ์ฃผ์ž

collision.gameObject.GetComponent<MyMonster>๋ฅผ ์™œ ๋งค๋ฒˆ ๊ณ„์†์ƒˆ๋กœํ•˜๋Š”๊ฑฐ์•ผ

๊ฑ ๋ณด๊ธฐ์ข‹๊ฒŒ ์ค„์—ฌ

04b0d121e0ed61f73ef1c6bb11f11a39fc88b9ee514d6ea8



4. GetComponent๋Œ€์‹ ์— TryGetComponent๋ฅผ ์‚ฌ์šฉ


GetComponent๋Š” ํ• ๋‹น์— ์„ฑ๊ณต ์‹คํŒจ์—ฌ๋ถ€์™€ ์ƒ๊ด€์—†์ด GC Allocation์ด ๋ฐœ์ƒํ•จ

(์œ ๋‹ˆํ‹ฐ ๋ฒ„์ ผ ์˜ฌ๋ผ๊ฐ€๋ฉด์„œ GetComponent ๊ฐœ์„ ํ›„ ์—๋””ํ„ฐ์—์„  ํ• ๋‹น / ๋Ÿฐํƒ€์ž„์—” ๋น„ํ• ๋‹น

ํ•˜๋ฃจ์ •๋„ ์ƒ๊ฐํ•ด๋ดฃ๋Š”๋ฐ.. ๋‘˜๋‹ค GC ๋ฌธ์ œ๋„ ์—†๊ณ  ๋Ÿฐํƒ€์ž„์— GetComponent๊ฐ€ ๋”๋น ๋ฅด๋‹ˆ

TryGet์„ ๊ผญ ๊ณ ์ง‘ํ• ํ•„์š”๋Š” ์—†์–ด๋ณด์ž„.

์†”์งํžˆ ๋‘˜์ด ์ฐจ์ด ๋‚œ๋‹ค๊ณ ํ•ด๋ด์•ผ ๊ทธ๊ฒŒ ํผํฌ๋จผ์Šค์ ์œผ๋กœ ์–ผ๋งˆ๋‚˜ ์˜ํ–ฅ์ค„๋งŒํผ ํฐ ๋ฌธ์ œ๊ฒ ์–ด

๊ทธ๋ƒฅ ๊ฒฝ์šฐ์—๋”ฐ๋ผ ์ด๋Ÿฐ๋• TryGetํ•˜๊ณ  / ์ปดํฌ๋„ŒํŠธ null์ฒดํฌ ์•ˆํ•ด๋„๋˜๋Š” ํ™•์‹คํ•œ์ƒํ™ฉ์—์„ 

๊ฑ GetComponent์จ๋„ ์•„๋ฌด ๋ฌธ์ œ์—†๋‹ค๊ณ ์ƒ๊ฐ



- https://docs.unity3d.com/Manual/performance-garbage-collector.html
- https://tistory.jeon.sh/11

- https://forum.unity.com/threads/does-getcomponent-t-no-longer-allocates-garbage.978090/#post-6354051



04b0d121e0ed61f73ff1c6bb11f11a39a77b309ba4ea538a



5. CompareTag ์ฒดํฌ ์ดํ›„์˜ GetComponent์˜ ๋…ผ๋ฆฌ์  ๋ถˆํ•„์š”์„ฑ

04b0d121e0ed61f73cf1c6bb11f11a391925d654b28019f0


๋…ผ๋ฆฌ์ ์œผ๋กœ ์ƒ๊ฐํ•ด๋ณด์…ˆ CompareTag ๋ชฉ์ ์€ ํ•ด๋‹น ์ฝœ๋ผ์ด๋”์˜ GameObject๊ฐ€

MyMonster๋ผ๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” "MyMonster"๋ผ๋Š” ํƒœ๊ทธ๋ฅผ ๋‹ฌ๊ณ ์žˆ๋Š” GameObject์ธ๊ฐ€?

๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•จ์ž„


04b0d121e0ed61f73df1c6bb11f11a3966153837c3d62d89


ํƒœ๊ทธ ํ™•์ธ์ด ํ•„์š”ํ• ๊นŒ? ๊ฑ TryGetComponent๋กœ ๋ชฉ์ ์„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค

q) MyMonsterํƒœ๊ทธ๊ฐ€ ๋‹ฌ๋ ค์žˆ์ง€ ์•Š์€ ๋‹ค๋ฅธ ๋ฌด์–ธ๊ฐ€๊ฐ€ MyMonster Component๋ฅผ ๋‹ฌ๊ณ ์žˆ์„์ˆ˜๋„ ์žˆ์ž–์•„์š”!!

a) ๊ทธ๋ ‡๊ฒŒ ๋งŒ๋“ค์—ˆ์„๋ฆฐ ์—†๊ฒ ์ง€ ใ…‹ใ…‹ ๋ง์ด๋Ž€?


6. component.TryGetComponent


04b0d121e0ed61f73af1c6bb11f11a396b9d73795ba49c0b

gameObject๋กœ ํ•œ๋‹จ๊ณ„ ๋” ๊ฑฐ์น˜๋Š”๊ฑฐ ์—†์–ด๋„ ๋ ๋“ฏ?



7. healList ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์€ OnTriggerStay๊ฐ€ ์•„๋‹ˆ๋ผ MyMonster ๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋„๋ก


04b0d121e0ed61f738f1c6bb11f11a39358327c8050ab84c

ํ•˜๋ฉด์„œ healList๋Š” private์œผ๋กœ ๋ณ€๊ฒฝ

์™ธ๋ถ€์—์„œ ๋‚ด๋ถ€์˜ healList๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๊ธฐ๋Šฅ๋‹จ์œ„๋ฅผ ํ˜ธ์ถœํ•˜๋„๋ก

public void Heal()

{

foreach( m in healList)

// heal

}


ํ•จ์ˆ˜๋ฅผ ํด๋ž˜์Šค์•ˆ์— ๋งŒ๋“ค์–ด์ฃผ๋ฉด ๋ ๋“ฏ


04b0d121e0ed61f73bf1c6bb11f11a3923dc7b4f2ea4aef9



์ง  ์ด๋ ‡๊ฒŒ ๋ณด๊ธฐ์ข‹๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.


list์— ์ง‘์–ด๋„ฃ๋Š” ์ž…์žฅ์—์„œ ์–ด๋– ํ•œ ์กฐ๊ฑด์ด๋‚˜ ์ถ”๊ฐ€์ฒ˜๋ฆฌ๋ฅผ ๋‹ค๋ฅธ๊ณณ์—์„œ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์•„๋„๋Œ

TryAdd ํ•˜๋Š”๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์•ผ ๋‚˜ ์ด๊ฑฐ "๋„ฃ์„๊ฒŒ" ํ•˜๋ฉด

๋ฐ•ํžˆ๋Š” ๋ฆฌ์ŠคํŠธ ์ž…์žฅ์—์„œ ๋ฐ•ํž์ง€ ๋ง์ง€ ์•Œ์•„์„œ ํ•ด์ฃผ๊ฒ ์ง€ ํ•˜๊ณ  ๋•Œ๋ ค๋„ฃ๋Š” ๋ชฉ์ ์—๋งŒ ์ง‘์ค‘ํ•˜๋ฉด ๋ณด๊ธฐ์ข‹์ž–์•„?


------------------------------------------------------------------


Before

04b0d121e0ed61f739f1c6bb11f11a39dfca60c4a5292995cd



After

04b0d121e0ed61f73bf1c6bb11f11a3923dc7b4f2ea4aef9



๋” ์ž˜ ์ฝํžˆ๊ณ  ๊ฐ„๋‹จํ•ด์กŒ์ง€?

ํ•œ๋ˆˆ์— ๋ด๋„ ์ปดํฌ๋„ŒํŠธ ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์„œ ์žˆ์œผ๋ฉด ํž๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•ด๋ผ~ ํ•˜๊ณ  ๋ชฉ์ ๋„ ํ™•์ธํ•˜๊ธฐ ์‰ฌ์›Œ์ง


q) ๊ทธ๋ž˜์„œ ์ด๊ฑฐํ•˜๋ฉด ๊ฒœ ๋นจ๋ผ์ง?

๋ญ ๊ผด๋ž‘์ด๊ฑฐ๋กœ ์œ ์˜๋ฏธํ•œ ์ฐจ์ด๊ฐ€ ์žˆ๊ฒ ์Œ?

๊ถ๊ธˆํ•˜๋ฉด ํ”„๋กœํŒŒ์ผ๋งํ•ด๋ณด์…ˆ

๊ฒƒ๋ณด๋‹ค ์ฃผ์„์—†์œผ๋ฉด 1๋…„๋’ค์— ์ฃผ๋ฅด๋ฅด๋ฅต ๋‹ฌ๋ฆฐ ๊ธด ์ฝ”๋“œ ๋ณด๋ฉด์„œ ์ŠคํŠธ๋ ˆ์Šค ๋ฐ›์„๊บผ

ํ•œ๋ˆˆ์— ์ž˜์ฝํžˆ๊ณ  ๊ฐ„๋‹จํ•˜๊ณ  ์‰ฝ๊ฒŒ ๋ช…ํ™•ํ•˜๊ฒŒ ์ค„์—ฟ๋‹ค๋Š”๋ฐ ์˜์˜๋ฅผ ๊ฐ€์งˆ๋ž˜



์•„๋‹˜ ๋ง๊ณ 


์ด๊ธ€์€ ํƒœํด๋“ค์–ด์˜ค๋ฉด ๋‚ด๊ฐ€ํ‹€๋ฆฐ๊ฑฐ๊ณ  ์ชฝํŒ”๋ฆฌ๋‹ˆ ์‚ญ์ œ๋ ์ˆ˜๋„ ์žˆ๋‹ค

7