๐Ÿ’ป My Work/๐ŸŽฎ Unity

[์œ ๋‹ˆํ‹ฐ] 2D๋„ํŠธ ์บ๋ฆญํ„ฐ ์• ๋‹ˆ๋ฉ”์ด์…˜

Jaeseo Kim 2023. 1. 6. 01:50

 

 

Box Collider 2D ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

ํฌ๊ธฐ๋ฅผ ์กฐ์ ˆํ•ด์ค๋‹ˆ๋‹ค.

 

๋ฌผ๋ฆฌ๋ฅผ ์ ์šฉ ์‹œ์ผœ์•ผ ํ•˜๋ฏ€๋กœ (์ค‘๋ ฅ ๋ฐ›๊ธฐ ์œ„ํ•จ) ์บ๋ฆญํ„ฐ์— rigid body 2D๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

 

 

๊ทธ๋Ÿผ ์ž˜ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด, ๊ฒŒ์ž„์„ ์‹œ์ž‘ํ–ˆ์„ ๋•Œ ์ƒ์ž์— ๋–จ์–ด์ง€๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

Bottom์ด๋ผ๋Š” ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ, Box Collider 2D ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

์˜ค ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค!

๊ทธ๋Ÿฐ๋ฐ, Collider size์กฐ์ ˆ๋„ ์ž˜ ํ–ˆ๋Š”๋ฐ๋„ ์บ๋ฆญํ„ฐ์™€ ์ƒ์ž ์‚ฌ์ด์— ์•„์ฃผ ๋ฏธ์„ธํ•œ ํ‹ˆ์ด ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์„ ๊ฒ๋‹ˆ๋‹ค.

๋„ํŠธ๊ฐ€ ๋งค์šฐ ์ž‘์€ ํ”ฝ์…€์ผ ๋•Œ ์ด๋Ÿฐ ํ˜„์ƒ์ด ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

์ด๋Š” Edit > Progject Setting > Physics 2D

Default Contact Offset์„ 0์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. (0.0001์ด ์ตœ์†Œ) 

 

 

์•„ํ‹€๋ผ์Šค

์•„ํ‹€๋ผ์Šค๋ž€ ํ…์Šค์ณ๋ฅผ ๋ชจ์•„๋†“์€ ์ปค๋‹ค๋ž€ ํ…์Šค์ณ์ž…๋‹ˆ๋‹ค.

๊ฒŒ์ž„์—์„œ๋Š” ์บ๋ฆญํ„ฐ ํ•œ ๊ฐœ๋งŒํ•ด๋„ ์ด๋™/๊ณต๊ฒฉ/์ ํ”„/์Šคํ‚ฌ์‚ฌ์šฉ ๋“ฑ๋“ฑ ๋‹ค์–‘ํ•œ ๋ชจ์…˜์ด ํ•„์š”ํ•˜์ฃ .

๋˜ํ•œ, ํ•œ ๋ชจ์…˜๋‹น ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ…์Šค์ณ๋กœ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ๊ตฌํ˜„๋˜๋ฏ€๋กœ ํ…์Šค์ณ๋“ค์„ ๊ฐœ๋ณ„์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๋น„ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํ…์Šค์ณ๋ฅผ ๋ชจ์•„ ํ•˜๋‚˜์˜ ์•„ํ‹€๋ผ์Šค๋กœ ๋งŒ๋“ ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์•„๋ž˜์ฒ˜๋Ÿผ์š”!

์ถœ์ฒ˜ : https://developer.playcanvas.com/en/user-manual/assets/texture-atlas/

 

 

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));
}

 

 

 

๐Ÿฆ•๐Ÿฆ•๐Ÿฆ•