유니티 연습) 애니메이션과 플레이어 움직임

2017. 12. 7. 20:02프로그래밍(이전)/UNITY2D


연속된 이미지를 에셋으로 넣어 애니메이션을 만들고,

애니메이터에서 그 이리저리 조건에 맞게 흔들었더니 잘 움직인다.


기본 상태는 TinaStayAni 눈을 깜빡이는 애니메이션이다.

여기서 좌우로 움직이는 상태가 되면(isMoving 함수가 true가 되면) TinaMoveAni를 실행한다

이 애니메이션은 발을 움직이는 애니메이션이다.

점프키가 입력되면 doJumping트리거를 통하여 점프를 하며 손을 내리고 올리는 TinaJumpAni를 실행한다.


좌우 움직임은 단순히 Vector2, 3을 조합해 만들었다. 점프는 Impulse를 주어 단순한 위치 변경이 아닌 힘을 준 상태를 만들어줬다.


코드:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class playerMove : MonoBehaviour {
 
    public float movePower = 1f;
    public float jumpPower = 1f;
 
    Rigidbody2D rigidbody2;
 
    Vector3 movement;
 
    SpriteRenderer renderer;
 
    Animator animator;
 
    bool isJumping;
 
    // Use this for initialization
    void Start () {
        rigidbody2 = gameObject.GetComponent<Rigidbody2D> ();
        renderer = gameObject.GetComponentInChildren<SpriteRenderer> ();
        animator = gameObject.GetComponentInChildren<Animator> ();
    }
    
    // Update is called once per frame
    void Update () {
        if(Input.GetButtonDown ("Jump")) {
            isJumping = true;
            animator.SetTrigger ("doJumping");
        }
 
 
        if(Input.GetAxisRaw ("Horizontal"== 0) {
            animator.SetBool("isMoving",false);
        }
        else {
            animator.SetBool("isMoving",true);
        }
 
    }
 
    void FixedUpdate()
    {
        Move();
        Jump();
    }
 
    //사용자함수
 
    void Move() 
    {
        Vector3 moveVelocity = Vector3.zero;
 
        if(Input.GetAxisRaw ("Horizontal"< 0)
        {
            moveVelocity = Vector3.left;
            renderer.flipX = true;
        }
        else if(Input.GetAxisRaw ("Horizontal"> 0)
        {
            moveVelocity = Vector3.right;
            renderer.flipX = false;
        }
 
        transform.position += moveVelocity * movePower * Time.deltaTime;
    }
 
    void Jump () 
    {
        if(!isJumping)
            return;
        
        rigidbody2.velocity = Vector2.zero;
 
        Vector2 jumpVelocity = new Vector2 (0, jumpPower);
        rigidbody2.AddForce (jumpVelocity, ForceMode2D.Impulse);
 
        isJumping = false;
    }
    
}
 
cs