응용프로그램/유니티(Unity)

Unity2D IEnumerator , 점프

zelkova 2017. 2. 11. 10:32

<목차로 돌아가기>


 IEnumerator , 점프

게임을 제작하다보면 천천히 화면이 어두워진다거나 서서히 높아져야 할때가 있습니다.


Update 시점함수에 while같은 반복문을 사용하면 프레임이 너무 빠르게 지나가서 순식간에 일어난 것처럼 처리됩니다.


이럴때 사용하는것이 바로 Corutine입니다.


   StartCoroutine (함수명);


    IEnumerator 함수명

    {  

        int power=10;

        while (power >= 1)

        {

            power-=10;

            yield return 지연 값;

        }

    }


여기서 지연값에 WaitForSeconds(1f)를 넣으면 1초지연후 다음 프레임에서 호출하는 방식입니다.


이를 활용하여 Jump모션을 만들었습니다.




동그란 객체는 Sprite(그림),Rigidbody2D(물리엔진), Colilision(충돌체), C#스크립트 컴포넌트만 넣었습니다.





  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;

  4. public class Player : MonoBehaviour {

  5. Rigidbody2D rb2d;
  6. public float jumpPower=100f;

  7. void Start () 
  8. {
  9. rb2d = GetComponent<Rigidbody2D> ();

  10. animator = GetComponent<Animator> (); 

  11. }

  12. void Update () 
  13. {
  14.       if (Input.GetButtonDown ("Jump"))
  15. {

  16.       StartCoroutine (jumping());

  17. }

  18. }

  19. IEnumerator jumping()
  20. {
  21.       float power = jumpPower;
  22. while (power >= 1){

  23.       power-=4;

  24. rb2d.AddForce (Vector2.up * jumpPower);

  25. Debug.Log (power);

  26. yield return null;

  27.        }
  28. }
  29. }


IEnumerator 한번 써볼려고 이렇게 썻지만 원래 소스는 아래와 같이 간단히 사용할 수 있습니다.


  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;

  4. public class Controll : MonoBehaviour {
  5.     Rigidbody2D rb2d;
  6.     public float jumpPower=200f;

  7.     void Start () 
  8.     {
  9.         rb2d = GetComponent<Rigidbody2D> ();

  10.     }

  11.     void Update () 
  12.     {
  13.         if (Input.GetButtonDown ("Jump"))
  14.         {
  15.             rb2d.AddForce (new Vector2 (0f, jumpPower));
  16.         }
  17.     }
  18. }
반응형