์ด๊ฒ ์์ดํ
์ ์์ฐ์ค๋ฝ๊ฒ ๋จ์ด์ง๋๋ฐ ๋ชฌ์คํฐ๋ ์ ๋จ์ด์ง๊ณ ์ ์๋ฆฌ์์ ์๋ฆฌ๊ฐ๋ฆฌ๋ง ํ๋๋ผ๊ตฌ์
๋ธ๋ญ ์ฌ์ด์ฆ๊ฐ 16x16์ด๋ผ์ ๋ฑ 0.16f๋งํผ์ฉ ๋์ดํ๋๋ฐ ์ ๋ฌ๊ณ
composite collider2d๋ฅผ ์ ์ฉ / ๋ฏธ์ ์ฉํด๋ ๋๊ฐ๊ณ
ํน์ ์ด์ ๊ด๋ จ๋ ์ค๋ฅ๋ฅผ ๊ฒช์ด๋ณด์ ๋ถ์ด ์์ผ์ ์ง.. ์กฐ์ธ์ข ๊ตฌํ๊ณ ์ถ์ต๋๋ค
public virtual void Update() {
rigidbody.velocity = new Vector2(0.3f * direction, rigidbody.velocity.y);
}
public virtual void OnCollisionEnter2D(Collision2D collision) {
if (collision.gameObject.tag != "Enemy" && collision.gameObject.tag != "Player" &&
(collision.contacts[0].normal.x == -1 || collision.contacts[0].normal.x == 1) ) {
direction *= -1;
}
}
๋ฐฉํฅ ์ ํ ์กฐ๊ฑด์ ๋ฌด์์ผ๋ก ํด๋จ์?
์ด๋ rigidbody.velocity = new Vector2(0.3f * direction, rigidbody.velocity.y); ์ถฉ๋ํ๋ฉด direction *= -1; ๋ก ์ค์ ํ์ต๋๋ค
์ถฉ๋ํ๋ฉด ์ด๋ผ๋๊ฒ ์ํ์ผ์ด๋ ๋ถ์งํ๋๊ฒ ์๋๋ผ ๋ฐ๊ธฐ๋ง ํด๋ ๋ฐ์ํด์ ์๊ธฐ๋ ๋ฌธ์ ์๋?
์ถฉ๋ ์กฐ๊ฑด์์ ์๋๋ฐฉ ์ถฉ๋ ๋ฐฑํฐ์ ๋ฐฉํฅ์ ๋ฃ์ด๋จ์ด์ collision.contacts[0].normal.x == -1 || collision.contacts[0].normal.x == 1
๋ด ์๊ฐ์ ๊ทธ๋ ๊ฒ ํด๋ ๋๊ฐ์ ์ผ๋ก ๋ถ๋ซํ๊ฑฐ๋ผ ์ถฉ๋์กฐ๊ฑด์ ๋ถํฉํ ์ ์๋ค ์๊ฐํ๋๋ฐ Debug.DrawRay ํจ์ ์ด์ฉํด์ collision.contacts[0]์ point์ normal ๋์ ํ๋ค์ ๋ฒ์ ๋ฒกํฐ์ข ๊ทธ๋ ค๋ด์ค์ ์์?
Debug.DrawRay(collision.contacts[0].point, collision.contacts[0].normal, Color.red, 2.0f); ์ด๋ ๊ฒ ์ฝ๋ ์ถ๊ฐํ๊ณ , ๊ฒฐ๊ณผ๋ ๋ณธ๋ฌธ์ ์ฒจ๋ถํ์ด์
์ง๊ธ ๋นจ๊ฐ์ ์ด ์ํ์ด๋ผ๋๊ฑด ๋ฐ๊ณ ๋ง ์์ด๋ collision.contacts[0].normal.x๊ฐ 1 ์๋ -1์ด๋ผ๋๊ฑฐ ๊ฐ์๋ฐ, ๋ฐฉํฅ์ ํ ์ ์ฉ ์ฝ๋ฆฌ๋๋ฅผ ๊ธฐ์กด ์ฝ๋ฆฌ๋๋ณด๋ค ๋ฐ๋ฅ๋ถ๋ถ์ ์ด์ง ๋์์ ํ๋๋ ๋ง๋ค๊ณ ๊ทธ๊ฑธ๋ก ๋ฐฉํฅ์ ํ ์ถฉ๋์ฒดํฌ ํ๋ฉด ๋ ๋ฏ?
๋ต๋ณ๊ฐ์ฌํฉ๋๋ค
๋ ์ด๋ฅผ ๋ชฌ์คํฐ ์ด๋ ๋ฐฉํฅ๋ณด๋ค ์๊ฑฐ๋ฆฌ์ ์ด์ ๋ ์ด๋ ์ถฉ๋ํ๋์ง ์ํ๋์ง ํ๋จํ๋ฉด ๋ ๋ฏ
๋ต๋ณ๊ฐ์ฌํฉ๋๋ค