๋ชฉํ‘œ

๊ฒŒ์ž„์„ ๋งŒ๋“ค๋‹ค ๋ณด๋ฉด, ํ”Œ๋ ˆ์ด์–ด์™€ ์ ์˜ ์ถฉ๋Œ์ด ์ผ์–ด๋‚˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ ์œ ๋‹ˆํ‹ฐ ๋ฌผ๋ฆฌ๋ฅผ ์ด์šฉํ•ด ์ด๋™ ๋กœ์ง์„ ๊ตฌํ˜„ํ–ˆ๋‹ค๋ฉดย (Rigidbody2D์™€ BoxColider2D ์‚ฌ์šฉ)ย ์„œ๋กœ ๋ฐ€๋ฆฌ๊ฒŒ ๋˜๋Š”๋ฐ, ์ด ๋•Œ ์„œ๋กœ ๋ฐ€๋ฆฌ์ง€ ์•Š๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ณ ๋ฏผํ•ด๋ณด๊ณ , ๋„์ถœ๋œ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.ย 

์•„์ด๋””์–ด

์ผ๋ฐ˜์ ์ธ Player vs Enemy Collision์„ ์ƒ๊ฐํ•ด๋ณด๊ณ , Rigidbody bodyํƒ€์ž…์˜ ํŠน์„ฑ์„ ์ƒ๊ฐํ•˜๋ฉด์„œ ์•„์ด๋””์–ด๋ฅผ ๋– ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค.

Kinematic ํƒ€์ž…์„ ์ผœ๊ฒŒ ๋˜๋ฉด, Dynamic ํƒ€์ž…์˜ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์™€์„œ ์ถฉ๋Œํ•ด๋„ ์›€์ง์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฆ‰ ๋ฐ€๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

(๋‹จ, Kinematic ํƒ€์ž…์ด Dynamic์— ์ถฉ๋Œํ•˜๋ฉด ๊ทธ๋ƒฅ passํ•ฉ๋‹ˆ๋‹ค.)

๊ทธ๋ž˜์„œ ์›€์ง์ด๋Š” ์˜ค๋ธŒ์ ํŠธ๋“ค์—๊ฒŒ ์ž์‹์œผ๋กœ ๋นˆ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋งŒ๋“ค๊ณ , ๊ฑฐ๊ธฐ์— ๋ถ€๋ชจ์™€ ๊ฐ™์€ ํฌ๊ธฐ์˜ Colider๋ฅผ ๋งŒ๋“  ๋’ค, rigidbody type์„ Kinematic์œผ๋กœ ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

img.pngred๋Š” black์˜ child object์ž…๋‹ˆ๋‹ค.

์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๊ตฌํ˜„ํ•˜๊ฒŒ ๋˜๋ฉด, ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณด๊ธฐ๋„์ „์— ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ๋‚ ์•„๊ฐ€ ๋ฒ„๋ฆฝ๋‹ˆ๋‹ค.

๋ถ€๋ชจ, ์ž์‹ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์„œ๋กœ ์ถฉ๋Œํ•ด์„œ black(parent) ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ๋‚ ์•„๊ฐ€๊ฒŒ ๋˜๋Š”๋ฐ์š”, ์ตœ๋Œ€ํ•œ ์ฝ”๋“œ ์—†์ด ํ•ด๊ฒฐํ•ด ๋ณด๋ ค ํ–ˆ์ง€๋งŒ, ๋”ฑ ํ•œ์ค„๋งŒ ๋ถ€๋ชจ ์˜ค๋ธŒ์ ํŠธ์— ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

ํ•ด๋‹น ์ฝ”๋“œ๋Š” ๋ณธ์ธ๊ณผ ์ž์‹์˜ ์ถฉ๋Œ์„ ๋ฌด์‹œํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

//Insert this code inside Awake() Physics2D.IgnoreCollision(GetComponent<BoxCollider2D>(), GetComponentsInChildren<BoxCollider2D>()[1]);

๊ทธ๋ฆฌ๊ณ  ์‹คํ–‰์‹œ์ผœ์ฃผ๋ฉด, ์—ฌ์ „ํžˆ ๋ฐ€๋ฆฝ๋‹ˆ๋‹ค. ์ด๋Š” ํ”Œ๋ ˆ์ด์–ด์™€ ์ ์˜ black๋ผ๋ฆฌ ์„œ๋กœ ์ถฉ๋Œํ•˜๊ธฐ ๋•Œ๋ฌธ์ธ๋ฐ์š”, black ๊ฐ„์˜ ์ถฉ๋Œ์„ ์—๋””ํ„ฐ์—์„œ ๊บผ์ค๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๋ ˆ์ด์–ด๋“ค์€ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์œผ์…”๋„ ๋ฉ๋‹ˆ๋‹ค.

์ด์ œ๋Š” black์ด ์•„๋‹ˆ๋ผ, ๊ฐ๊ฐ Player, Enemy ๋ ˆ์ด์–ด ๊ทธ๋ฆฌ๊ณ  red๊ฐ€ ์•„๋‹ˆ๋ผ ๊ฐ๊ฐ Rigidbody_child_Player, Rigidbody_child๋ผ๊ณ  ๋ถ€๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ๊นŒ์ง€ ํ•˜์‹œ๋ฉด, ํ”Œ๋ ˆ์ด์–ด์™€ ์ ์ด ์ถฉ๋Œํ–ˆ์„๋•Œ ์„œ๋กœ ๋ฐ€์ง€ ์•Š๊ณ  ์ œ์ž๋ฆฌ์— ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Enemy vs Enemy ์ถฉ๋Œ์€?

Dynamic ํƒ€์ž…์ธ Enemy๊ฐ€ ์ด๋™ํ•˜๋‹ค๊ฐ€ ๋‹ค๋ฅธ Enemy์˜ child์™€ ๋‹ฟ๊ฒŒ๋˜๊ณ , child๋Š” Kinematic์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ€๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Enemy vs Enemy ์ถฉ๋Œ๋งŒ ์—๋””ํ„ฐ์—์„œ ๊บผ์ฃผ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

Player,Enemy vs Wall ์ถฉ๋Œ์€?

Dynamic ํƒ€์ž…์ธ P or E๊ฐ€ Static Type์ธ Wall์— ๋‹ฟ์œผ๋ฉด, ๋ฐ€๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. child ์˜ค๋ธŒ์ ํŠธ์™€ Wall ์ถฉ๋Œ์€ ๋ถˆํ•„์š”ํ•˜๋ฏ€๋กœ ์—๋””ํ„ฐ์—์„œ ๊บผ์ฃผ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

Player,Enemy vs Bullet, HitableObject ์ถฉ๋Œ์€?

์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ ๋ถˆํ•„์š”ํ•œ ์—ฐ์‚ฐ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์ตœ์ข…์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด Layer Collison Matrix๋ฅผ ์„ค์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

img.pngํ”„๋กœ์ ํŠธ์— ๋”ฐ๋ผ ์„ค์ • ๋ณ€๊ฒฝ์„ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ •๋ฆฌ

(rigidbody type ์„ค์ •)

Player ์˜ค๋ธŒ์ ํŠธ Rigidbody = Dynamic (layer1)

Player ํ•˜์œ„ ์˜ค๋ธŒ์ ํŠธ Rigidbodyย = Kinematicย  (layer2)

Enemy ์˜ค๋ธŒ์ ํŠธ Rigidbody = Dynamicย  (layer3)

Enemy ํ•˜์œ„ ์˜ค๋ธŒ์ ํŠธ Rigidbodyย = Kinematicย  (layer4)


(์ถฉ๋Œ ๋ ˆ์ด์–ด ์„ค์ •)

1 vs 4, 2 vs 3, 3 vs 4 on, ๋‚˜๋จธ์ง„ย ๋‹ค off

+ ๋ถ€๋ชจ ์ž์‹ ์˜ค๋ธŒ์ ํŠธ ๋ผ๋ฆฌ ์ถฉ๋Œoff


์›๋ฆฌ = ๋‹ค์ด๋‚˜๋ฏน์ด ์›€์ง์—ฌ์„œ ํ‚ค๋„ค๋งˆํ‹ฑ๋‹ฟ์œผ๋ฉด ์•ˆ๋ฐ€๋ฆผ.


๋‹ค๋งŒ ํ•œ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ 2๊ฐœ์˜ ์ถฉ๋Œ์ฒด๋ฅผ ๊ฐ€์ง„๋‹ค๋Š” ์ ์ด ๊ฒŒ์ž„ ํ€„๋ฆฌํ‹ฐ ๋ฉด์—์„œ ์–ผ๋งˆ๋‚˜ ๋ถ€ํ•˜๋ฅผ ์ค„์ง€ ๋ชจ๋ฅด๋Š”๊ฒŒ ๋‹จ์ .

๊ทธ๋ž˜์„œ ์ตœ๋Œ€ํ•œ ๋ถˆํ•„์š”ํ•œ ๋ฌผ๋ฆฌ ์—ฐ์‚ฐ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด, Rigidbody type์„ ์ ๊ทน์ ์œผ๋กœ ์ด์šฉํ•˜๊ณ , Collision Matrix๋ฅผ ์ตœ์ ํ™”

img.gif