앱 만들기/유니티2D

유니티-키보드로 오브젝트 움직이기(2)

나도 처음이야 2021. 6. 6.

지난 시간과 유사하게 키보드로 오브젝트를 움직여봅니다.

하지만 가장 다른 점은 바로, 물리엔진의 속도를 이용한 이동입니다.

즉, 좌표점을 이동하기 보다는 속도값을 직접 제어하여 보다 스무스한 현실세계(?)의 감을 더 가미했다고 볼 수 있습니다.

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
// 키를 누르면 스프라이트가 이동한다
public class OnKeyPress_MoveSprite : MonoBehaviour
{
 
    public float speed = 2// 속도:Inspector에 지정
 
    float vx = 0;
    float vy = 0;
    bool leftFlag = false;
    Rigidbody2D rbody;
 
    private void Start()
    {
//오브젝트의 리디지바디 컴포넌트를 불어옵니다.
       rbody = GetComponent<Rigidbody2D>();       
    }
 
    void Update()
    { // 계속 시행한다
        vx = 0;
        vy = 0;
        if (Input.GetKey("right"))// 만약 오른쪽 키가 눌리면
        { 
            vx = speed; // 오른쪽으로 나아가는 이동량을 넣는다
            leftFlag = false;
        }
        if (Input.GetKey("left"))// 만약 왼쪽 키가 눌리면
        { 
            vx = -speed; // 왼쪽으로 나아가는 이동량을 넣는다
            leftFlag = true;
        }
        if (Input.GetKey("up"))// 만약 위 키가 눌리면
        { 
            vy = speed; // 위로 나아가는 이동량을 넣는다
        }
        if (Input.GetKey("down"))// 만약 아래 키가 눌리면
        { 
            vy = -speed; // 아래로 나아가는 이동량을 넣는다
        }
    }
    void FixedUpdate()// 계속 시행한다(일정 시간마다)
    {
        // 좌표값으로 이동한다
        //  this.transform.Translate(vx / 50, vy / 50, 0);
        // 리디지 바디 중력값을 이용한다.
        rbody.velocity = new Vector2(vx, vy);
        // 왼쪽 오른쪽 방향을 바꾼다
        this.GetComponent<SpriteRenderer>().flipX = leftFlag;
    }
}
 
cs

FixedUpdate() 함수안에서

rbody.velocity 속도 값에 키보드로 입력된 속도를 Vector 로 표현해주는 것이 가장 주요한 포인트 입니다.

이렇게 구현된 동작은 하기 영상처럼 움직이기 됩니다.

 

 

 

반응형

댓글