매끄러운 좌우 이동

이번에 제가 실제로 제작한 게임 예를 들어 Coroutine와 IENumerator의 사용법을 소개합니다.

데이터 개요


노선은 차선으로 버튼을 누르면 옆 차선으로 순조롭게 이동할 수 있다.
시작된 움직임은 매우 빨라서 마지막에 천천히 움직였다.
gih라서 매끄럽지 않아 보이지만 더 매끄럽게 움직입니다.

Coroutine


코르크 단백질은 프레임을 뛰어넘어 끊기고 다시 처리를 시작할 수 있는 구조다.
예를 들어 일반적인 for 문장의 중복 처리를 30회 처리하려면 30회 처리가 모두 같은 프레임에서 진행된다.
연골소를 사용하면 30회 처리로 30프레임 등으로 나눌 수 있다.

게임 코드


십자 키를 누른 Right 키를 들어 보세요.
RightKey를 누른 후 (Horisontal1)라는 코르크를 실행합니다.
void Update ()
    {
        float pos_x = transform.position.x;

        if (Input.GetKeyDown (KeyCode.RightArrow)) {
            if (pos_x < 4) {
                StartCoroutine(Horizontal1());
            }
        }
    }
for 문장의 처리 횟수는 i가 10시, 9시, 8시...1시까지 10번 처리했습니다.
이번 열 번의 처리에서나는 오른쪽으로 이동하고 싶다.
3.7의 거리를 55, i를 10시 55 등분 중의 10으로 오른쪽으로 나누고 다음 i를 9시 55 등분 중의 9로 오른쪽으로 이동한 다음에 i를 8시로...이렇게 하면 딱 10번의 처리가 3.너는 오른쪽으로 가도 된다.
이렇게 천천히 전진하는 거리가 줄어들었기 때문에 처음에는 일찍, 마지막에는 천천히 전진했다.

private IEnumerator Horizontal1()
   {
        for (int i = 10; i > 0; i--) {
            float p = i * 3.7f / 55;
            Vector3 nowPos = transform.position;
            transform.position = new Vector3 (nowPos.x + p, nowPos.y, nowPos.z);
            yield return null;
         }
     }

또한 변수 p를 아래와 같이 등속 좌우로 이동할 수도 있고 for문장의 조건을 바꾸어 천천히 빠르게 이동할 수도 있다.
float p = 3.7f / 10;
for(i = 1; i <11; i++)
이것은'여기까지 한 프레임'이라는 뜻의 문장이다.

yield return null;
또한 위의 문장을 다음과 같이 함으로써 한 프레임에서 실행할 수 있을 뿐만 아니라 지정된 몇 초마다 실행할 수 있다.
yield return new WaitForSeconds(秒数);

좋은 웹페이지 즐겨찾기