앱 만들기/유니티2D

유니티- 키보드로 오브젝트 움직이기. 상하좌우

나도 처음이야 2021. 5. 31.

게임을 만드는 기초 기술 중 하나는 바로 컨트롤이다.

일반적으로는 주인공이 되는 유닛을 내 마음대로 조정할 수 있어야한다. 

그럴때 비로서 게이머는 내가 게임을 하고있구나 하고 느낄 수 있다. 

그런면에서 오늘은 내 유닛을 컨트롤 해보자.

상.하.좌.우 움직임이며, 조작은 키보드를 우선으로 한다.

예시 영상은 하기와 같다.

 

https://youtu.be/h9tcdtR0VUw

 

위 조작을 위해서는 하기 스크립트가 동작해야 한다.

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
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class OnKeyPress : MonoBehaviour
{
    bool direction = false;
    float speedX = 0, speedY = 0;
 
    // Update is called once per frame
    void Update()
    {
        //키 값이 없을때는 움직이지 않도록.
        speedX = 0; speedY = 0;
        //오른쪽 설정
        if (Input.GetKey("right"))
        {
            direction = false;
            speedX = 2;
        }
        //왼쪽 설정
        if (Input.GetKey("left"))
        {
            direction = true;
            speedX = -2;
        }
        //위로 설정
        if (Input.GetKey("up"))
        {
            speedY = 2;
        }
        //아래로 설정
        if (Input.GetKey("down"))
        {
            speedY = -2;
        }
    }
    // 일정한 간격에 실행. 움직임 구현
    void FixedUpdate()
    {
        this.transform.Translate(speedX/50, speedY/500);
        this.GetComponent<SpriteRenderer>().flipX = direction;
 
    }
}
 
cs

신경써야 할 부부은

Update() 에서는 키 값을 입력받고,

FixedUpdate() 에서는 전달값 키 값을 세팅하여 실제 이동을 한다.

 

플랫폼 성능에 따라 실시간으로 실행되는 프레임 구조를 가진 Update()가 키 값을 입력받기에는 좋다.

50프레임의 일정한 실행 간격을 가지는 FixedUpdate()는

캐릭터를 움직이는 코드가 적절히 들어가는 것이 유효하다.

감사합니다 :)

반응형

댓글