본문 바로가기

Project/우다다다 고영희

[우다다다 고영희] Unity: 플레이어 움직이기

728x90

가장 중요한 고영희를 움직이게 해주겠습니다.

 

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
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class Player : MonoBehaviour
{
    public int maxSpeed;
    public int jumpPower;
 
    Rigidbody2D rigid;
    Animator anim;
 
    void Start()
    {
        rigid = GetComponent<Rigidbody2D>();
        anim = GetComponent<Animator>();
 
    void Update()
    {
        Move();
        Walk();
        Jump();
    }
 
    void FixedUpdate()
    {
        LandingJump();
        MaxSpeed();
    }

 

  • maxSpeed - 최대 속력을 저장할 변수이다.
  • jumpPower - 점프 힘을 저장할 변수이다.
  • rigid - 이동과 점프의 힘을 적용시켜줄 변수이다.
  • anim - 이동과 점프에 따른 애니메이션을 재생시켜줄 변수이다.

 

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
 void Walk()
    {
        if (rigid.velocity.x == 0)
        {
            anim.SetBool("isRun"false);
        }
        else
        {
            anim.SetBool("isRun"true);
        }
    }
 
    void Move()
    {
        float h = Input.GetAxisRaw("Horizontal");
 
        rigid.AddForce(Vector2.right * h, ForceMode2D.Impulse);
    }
 
    void MaxSpeed()
    {
        if (rigid.velocity.x > maxSpeed)
        {
            rigid.velocity = new Vector2(maxSpeed, rigid.velocity.y);
        }
        else if (rigid.velocity.x < maxSpeed * (-1))
        {
            rigid.velocity = new Vector2(maxSpeed * (-1), rigid.velocity.y);
        }
    }

 

15행의 h의 값에 따라 Walk 함수에서는 애니메이션을 조절해주고, Move 함수에서는 rigid에 힘을 가해준다. 그리고 MaxSpeed에서는 Move 함수를 통해 계속 올라가는 속도를 최대 속도에 맞게 조절해주는 역할을 한다.

 

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
void Jump()
    {
        if (Input.GetButtonDown("Jump"&& !anim.GetBool("isJump"))
        {
            rigid.AddForce(Vector2.up * jumpPower, ForceMode2D.Impulse);
            anim.SetBool("isJump"true);
        }
    }
 
    void LandingJump()
    {
        if (rigid.velocity.y < 0)
        {
            Debug.DrawRay(rigid.position, Vector2.down * 1f, Color.green);
            RaycastHit2D raycastHit = Physics2D.Raycast(rigid.position, Vector2.down, 1, LayerMask.GetMask("Ground"));
 
            if (raycastHit.collider != null)
            {
                if (raycastHit.distance <= 1f)
                {
                    anim.SetBool("isJump"false);
                }
            }
        }
    }
}

 

Jump 함수는 점프키가 눌리고 현재 점프 중이 아니라면 힘을 가해주는 것과 애니메이션을 재생시켜주는 것을 한다.

 

LandingJump 함수는 RayCastHit2D를 사용해서 레이캐스트에 조건에 맞는 콜라이더가 발견이 된다면 점프 애니메이션을 중지시켜준다.

728x90