Box Collider 2D ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
ํฌ๊ธฐ๋ฅผ ์กฐ์ ํด์ค๋๋ค.
๋ฌผ๋ฆฌ๋ฅผ ์ ์ฉ ์์ผ์ผ ํ๋ฏ๋ก (์ค๋ ฅ ๋ฐ๊ธฐ ์ํจ) ์บ๋ฆญํฐ์ rigid body 2D๋ฅผ ์ถ๊ฐํฉ๋๋ค.
๊ทธ๋ผ ์ ์๋ํ๋์ง ํ์ธํ๊ธฐ ์ํด, ๊ฒ์์ ์์ํ์ ๋ ์์์ ๋จ์ด์ง๋๋ก ํ๊ฒ ์ต๋๋ค!
Bottom์ด๋ผ๋ ์ค๋ธ์ ํธ๋ฅผ ์ถ๊ฐํ์ฌ, Box Collider 2D ๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
์ค ์ ์๋ํฉ๋๋ค!
๊ทธ๋ฐ๋ฐ, Collider size์กฐ์ ๋ ์ ํ๋๋ฐ๋ ์บ๋ฆญํฐ์ ์์ ์ฌ์ด์ ์์ฃผ ๋ฏธ์ธํ ํ์ด ์๋ ๊ฒฝ์ฐ๊ฐ ์์ ๊ฒ๋๋ค.
๋ํธ๊ฐ ๋งค์ฐ ์์ ํฝ์ ์ผ ๋ ์ด๋ฐ ํ์์ด ๋ฐ์ํ๋ค๊ณ ํฉ๋๋ค.
์ด๋ Edit > Progject Setting > Physics 2D
Default Contact Offset์ 0์ผ๋ก ๋ฐ๊ฟ์ฃผ์๋ฉด ๋ฉ๋๋ค. (0.0001์ด ์ต์)
์ํ๋ผ์ค
์ํ๋ผ์ค๋ ํ ์ค์ณ๋ฅผ ๋ชจ์๋์ ์ปค๋ค๋ ํ ์ค์ณ์ ๋๋ค.
๊ฒ์์์๋ ์บ๋ฆญํฐ ํ ๊ฐ๋งํด๋ ์ด๋/๊ณต๊ฒฉ/์ ํ/์คํฌ์ฌ์ฉ ๋ฑ๋ฑ ๋ค์ํ ๋ชจ์ ์ด ํ์ํ์ฃ .
๋ํ, ํ ๋ชจ์ ๋น ์ฌ๋ฌ ๊ฐ์ ํ ์ค์ณ๋ก ์ ๋๋ฉ์ด์ ์ด ๊ตฌํ๋๋ฏ๋ก ํ ์ค์ณ๋ค์ ๊ฐ๋ณ์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ ๋งค์ฐ ๋นํจ์จ์ ์ ๋๋ค. ๊ทธ๋์ ํ ์ค์ณ๋ฅผ ๋ชจ์ ํ๋์ ์ํ๋ผ์ค๋ก ๋ง๋ ๋ค๊ณ ํฉ๋๋ค.
์๋์ฒ๋ผ์!
01) ์ํ๋ผ์ค ์๋ฅด๊ธฐ
Inspector์์ Sprite Mode๋ฅผ single -> Mulitple๋ก ๋ณ๊ฒฝํด์ค๋๋ค.
single์ ๊ทธ ํ ์ค์ณ๋ฅผ ํต์ผ๋ก ์ฌ์ฉํ๊ฒ ๋ค๋ ์๋ฏธ๋ก, ๋ง์ฝ ์ํ๋ผ์ค๊ฐ ์๋ ํ๋ํ๋์ ํ ์ค์ณ๋ก ์ด๋ฃจ์ด์ก๋ค๋ฉด single์ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
๋ค๋ฅธ ๊ฒ๋ค๋ ์๋์ ๊ฐ์ด ๋ณ๊ฒฝํด์ฃผ์ธ์.
- Pixels Per Unit : 32 (ํ ์ค์ฒ์ ๋ง๊ฒ)
- Filter Mode : Point
- Compression : None
์ด์ ์๋ผ๋ด ์๋ค.
Sprite Editor์ ๋๋ฌ๋ณด๋ฉด ์๋ก์ด ์ฐฝ์ด ๋น๋๋ค.
์ Slice๋ ์ด๋ค ๋ฐฉ์์ผ๋ก ์๋ฅผ์ง ๊ฒฐ์ ํด์ฃผ๋ ๋ชจ๋์ ๋๋ค.
- AutoMatic(์๋)
- Grid By Cell Size(์ ํฌ๊ธฐ์ ๋ฐ๋ผ)
- Grid By Cell Count (์ ์์ ๋ฐ๋ผ)
AutoMatic๋ก ์ ์๋ ค์ ธ ์์ผ์๋ฉด ๋๊ฐ์ ๋ ๋ฉ๋๋ค!
์ด์ Sprite๋ฅผ ํผ์ณ๋ณด๋ฉด ์๋ฆฐ ๋ชจ์ต์ ๋ณผ ์ ์์ต๋๋ค.
Animation
ํ๋ ์ด์ด ์ด๋(Run)
Run ์ ๋๋ฉ์ด์ ์ ์ฌ์ฉ๋๋ ์ด๋ฏธ์ง ์ ๋ถ ์ ํ(๋๋๊ทธ or ์ปจํธ๋กค) ํฉ๋๋ค.
์ด๋ฅผ ๊ทธ๋๋ก ์ ๋๋ฉ์ด์ ์ ์ ์ฉํ ์บ๋ฆญํฐ ์ค๋ธ์ ํธ์ ๋๋๊ทธํด์ ๋์ด๊ฐ์..
Asset์์๋ค๊ฐ ์๋ก์ด ํด๋ Animation์ ๋ง๋ค์ด Walk๋ก ์ ์ฅํด์ฃผ์์ต๋๋ค.
2๊ฐ๊ฐ ์๊ฒจ๋๊ฒ ๋ฉ๋๋ค.
- Animator(Animation controller) : ์ ๋๋ฉ์ด์ ์ ๊ด๋ฆฌํ๋ ์ปดํฌ๋ํธ
์ด ์ํ์์ ๊ฒ์์ ์คํํด๋ณด๋ฉด ์บ๋ฆญํฐ๊ฐ ์ ์๋ฆฌ์์ Run ์ ๋๋ฉ์ด์ ์ ์ํํฉ๋๋ค.
Window->Animation->Animation ์ ๋๋ฅธ ํ, ์บ๋ฆญํฐ ์ค๋ธ์ ํธ๋ฅผ ํด๋ฆญํ๋ฉด Run ์ ๋๋ฉ์ด์ ์ ๋ณผ ์ ์์ต๋๋ค.
Animation ์ ๋ณด์ด๋ ์ ๋ค์ Key Frame : ์ ๋๋ฉ์ด์ ๊ฐ์ ๊ฐ์ง ํ๋ ์ ์ ๋๋ค. (ํ๋ํ๋๊ฐ sprite)
์๊ฐ ๊ฐ๊ฒฉ์ ์กฐ์ ํจ์ผ๋ก์จ ์ ๋๋ฉ์ด์ ์ ์กฐ์ ๊ฐ๋ฅํฉ๋๋ค. (๊ฐ๊ฒฉ ์ข๊ฒํ๋ฉด ๋ฌ๋ฆฌ๊ธฐ, ๊ฐ๊ฒฉ ๋๊ฒํ๋ฉด ๊ฑท๊ธฐ ๋ฑ)
Animator ์ํ ๊ด๋ฆฌ
ํ Animator ์์์ ์ฌ๋ฌ ๊ฐ์ Animation ์ ์ ์ด ๊ฐ๋ฅํฉ๋๋ค.
์ ๋ Run(๋ฐ๊ธฐ)๊ณผ Idle(๊ฐ๋งํ ์์์) Animation ๋ค์ ์ ์ดํ๊ฒ ์ต๋๋ค.
Window > Animation > Animator ์ ๋ค์ด๊ฐ๋๋ค.
์ด ์ฐฝ์์ ์ด๋ค ์ํฉ์์ ์ด๋ค ์ ๋๋ฉ์ด์ ์ ๋ณด๋ผ์ง ์ ํ ์ ์์ต๋๋ค
- Entry : ๋งจ ์ฒ์ ์์ ์, ์ํํ ์ ๋๋ฉ์ด์
01) ์ ๋๋ฉ์ด์ ํ๋ผ๋ฏธํฐ ์ค์
- ์ข์ฐ, Run ์ํ ํ๋ผ๋ฏธํฐ
02) โจBlend Tree
๐Blend Tree : ํ๋ ์ญํ ์ด ๋น์ทํ ์ ๋ค๋ผ๋ฆฌ ๋ชจ์์ ๊ด๋ฆฌํด์ฃผ๋ ํธ๋ฆฌ
Blend Tree๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ๋ชจ๋ State๋ฅผ ์ง์๋๋ค.
์๋์ฒ๋ผ Blend Tree๋ฅผ ์์ฑํด์ค๋๋ค.
- Idle Tree
- Run Tree
๊ฐ ํธ๋ฆฌ ๋๋ธ ํด๋ฆญ
- 2D๋ก ๋ฐ๊ฟ์ฃผ๊ธฐ
์ด ์ํ๋ก ๋ชจ์ ์ ๋ง๋ค์ด ์ค๋๋ค.
๋ชจ์ ์ ์ฑ์๋ฃ์ต๋๋ค.
03) ์ํ ์ ์ด
์ํ ๋๋ฌ์ ๋, ๋ฐ๋ก ๋๋๋๋ก ์ฒดํฌ ํ๊ณ 0์ด๋ก ์ธํ ํ๊ธฐ
์คํฌ๋ฆฝํธ ์ ์ด
public Animator anim; // ์ ๋๋ฉ์ด์
private void Start() {
anim = GetComponent<Animator>();
}
public void Move() { // ์ด๋
// "Horizontal" : ์ฐ ๋ฐฉํฅํค(1), ์ข ๋ฐฉํฅํค(-1) ๋ฆฌํด
// "Vertical" : ์ ๋ฐฉํฅํค(1), ํ ๋ฐฉํฅํค(-1) ๋ฆฌํด
float x = Input.GetAxisRaw("Horizontal");
float y = Input.GetAxisRaw("Vertical");
// 1ํ๋ ์ ๋น ์ด๋๊ฑฐ๋ฆฌ ๊ณ์ฐ
float moveX = x * speed * Time.deltaTime;
float moveY = y * speed * Time.deltaTime;
// Idle
if (moveX == 0.0f) {
anim.SetBool("isRun", false);
}
// Run
else {
anim.SetBool("isRun", true);
}
anim.SetFloat("DirX", moveX);// -1์ด๋ฉด left, 1d์ด๋ฉด right
transform.Translate(new Vector3(moveX, moveY, 0));
}
๐ฆ๐ฆ๐ฆ