Character Move02

¾î¼Â½ºÅä¾î¿¡¼­ "Unity-chan!" Model¸¦ ´Ù¿î·Îµå ¹Þ¾Æ¼­ ÀÓÆ÷Æ® ÇÑ´Ù.
¾î¼Â½ºÅä¾î¿¡¼­ °Ë»ö Å°¿öµå´Â Unity-chan!ÀÌ´Ù.

unityChan¿¡ Rigidbody¸¦ Ãß°¡ÇÏ¿© ij¸¯Å͸¦ Á¦¾îÇغ¸ÀÚ.



1. ÇÁ·ÎÁ§Æ®ºä >> Create >> Animator Controller¸¦ ¸¸µç´Ù.
À̸§Àº "UnityChanAction"À¸·Î ÇÑ´Ù.

2.  "UnityChanAction"À» ¼±ÅÃÈÄ Animatorºä¸¦ ¶ç¿î´Ù.
¸Þ´º >> Window >> Animator¸¦ ½ÇÇàÇÑ´Ù.

3. Idle, Run, Jump »óŸ¦ ¸¸µç´Ù.



4. ¾Ö´Ï¸ÞÀÌ¼Ç »óÅ¿¡ ¾Ö´Ï¸ÞÀÌ¼Ç Å¬¸³À» Ãß°¡ÇÑ´Ù.

Idle
WAIT00
Run
RUN00_F
Jump
JUMP00

5. ¾Ö´Ï¸ÞÀÌ¼Ç ÆĶó¸ÞÅÍ Jumping, RunningÀ» bool ŸÀÔÀ¸·Î Ãß°¡ÇÑ´Ù.



6. Idle <--> Run Æ®·£Áö¼ÇÀ» ¸¸µç´Ù.

7. Idle --> Run Æ®·£Áö¼ÇÀ» ¼³Á¤ÇÑ´Ù.



"Has Exit Time" üũ¸¦ ÇØÁ¦ ÇÑ´Ù.
Running »óŸ¦ true·Î ÁöÁ¤ÇÑ´Ù.

8. Run --> Idle  Æ®·£Áö¼ÇÀ» ¼³Á¤ÇÑ´Ù.
"Has Exit Time" üũ¸¦ ÇØÁ¦ ÇÑ´Ù.
Running »óŸ¦ false·Î ÁöÁ¤ÇÑ´Ù.

9. Run <--> Jump Æ®·£Áö¼ÇÀ» ¸¸µç´Ù.

10. Run --> Jump Æ®·£Áö¼ÇÀ» ¼³Á¤ÇÑ´Ù.
"Has Exit Time" üũ¸¦ ÇØÁ¦ ÇÑ´Ù.
Jumping »óŸ¦ true·Î ÁöÁ¤ÇÑ´Ù.

11. Jump --> Run Æ®·£Áö¼ÇÀ» ¼³Á¤ÇÑ´Ù.
"Has Exit Time" üũ¸¦ ÇØÁ¦ ÇÑ´Ù.
Jumping »óŸ¦ false·Î ÁöÁ¤ÇÑ´Ù.

12.. Idle <--> Jump Æ®·£Áö¼ÇÀ» ¸¸µç´Ù.

13. Idle --> Jump
"Has Exit Time" üũ¸¦ ÇØÁ¦ ÇÑ´Ù.
Jumping »óŸ¦ true·Î ÁöÁ¤ÇÑ´Ù.

13. Jump --> Idle
"Has Exit Time" üũ¸¦ ÇØÁ¦ ÇÑ´Ù.
Jumping »óŸ¦ false·Î ÁöÁ¤ÇÑ´Ù.

14. Project View >> UnityChan >> Models >> unitychan.fbxÀ» Hierarchy View·Î µå·¡±×

15. UnityChanActionÀ» unitychanÀÇ Animator-Controller¿¡ µå·¡±× ÇÑ´Ù.



Tip) "Main Camera"¸¦ ¾Àºä Ä«¸Þ¶ó °ªÀ¸·Î ¼³Á¤Çϱâ
¾Àºä·Î Ä«¸Þ¶ó¸¦ Á¶Á¤ ÈÄ¿¡ "Main Camera"¸¦ ¼±ÅÃÇÑ´Ù.
¸Þ´º >> GameObject >> "Align With View"¸¦ ¼±ÅÃÇÑ´Ù.

16. UnityChan¿¡ Rigidbody¸¦ ÄÄÆ÷³ÍÆ®·Î Ãß°¡ÇÑ´Ù.
x, z´Â ȸÀü ÇÒ¼ö ¾øµµ·Ï üũÇÑ´Ù.

Velocity¿Í AddForce·Î À̵¿Çϱ⠶§¹®¿¡ Rigidbody¸¦ Ãß°¡ÇÑ´Ù.



17. UnityChan¿¡ "Capsule Collider"¸¦ ÄÄÆ÷³ÍÆ®·Î Ãß°¡ÇÑ´Ù.
¼³Á¤À» ¾Æ·¡±×¸²Ã³·³ ¼³Á¤ÇÑ´Ù.



18. Apply Root Motion üũ¸¦ ÇØÁ¦ÇÑ´Ù.


19. ÇÁ·ÎÁ§Æ® ºä¿¡¼­ unityChan¿¡ ´ÙÀ½ ½ºÅ©¸³Æ®¸¦ Ãß°¡ÇÑ´Ù.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{

    Rigidbody rb;
    public float speed = 2f;
    public float thrust = 100;
    private Animator animator;
    bool ground;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
        animator = GetComponent<Animator>();
    }

    void Update()
    {
        if (ground)
        {
            if (Input.GetKey(KeyCode.RightArrow))
            {
                rb.velocity = new Vector3(speed, 0, 0);
                transform.rotation = Quaternion.Euler(0, 90, 0);
                animator.SetBool("Running", true);
            }
            else if (Input.GetKey(KeyCode.LeftArrow))
            {
                rb.velocity = new Vector3(-speed, 0, 0);
                transform.rotation = Quaternion.Euler(0, 270, 0);
                animator.SetBool("Running", true);
            }
            else if (Input.GetKey(KeyCode.UpArrow))
            {
                rb.velocity = new Vector3(0, 0, speed);
                transform.rotation = Quaternion.Euler(0, 0, 0);
                animator.SetBool("Running", true);
            }

            else if (Input.GetKey(KeyCode.DownArrow))
            {
                rb.velocity = new Vector3(0, 0, -speed);
                transform.rotation = Quaternion.Euler(0, 180, 0);
                animator.SetBool("Running", true);
            }
            else
            {
                animator.SetBool("Running", false);
            }

            if (Input.GetKey(KeyCode.Space))
            {
                animator.SetBool("Jumping", true);
                rb.AddForce(new Vector3(0, thrust, 0));
                ground = false;
            }
            else
            {
                animator.SetBool("Jumping", false);
            }
        }
    }

     void OnCollisionStay(Collision col)
    {
        ground = true;
    }
}

Âü°í)
http://unity-shoshinsha.biz/archives/189