IEnumerator , 점프
|
게임을 제작하다보면 천천히 화면이 어두워진다거나 서서히 높아져야 할때가 있습니다.
Update 시점함수에 while같은 반복문을 사용하면 프레임이 너무 빠르게 지나가서 순식간에 일어난 것처럼 처리됩니다.
이럴때 사용하는것이 바로 Corutine입니다.
StartCoroutine (함수명);
IEnumerator 함수명
{
int power=10;
while (power >= 1)
{
power-=10;
yield return 지연 값;
}
}
여기서 지연값에 WaitForSeconds(1f)를 넣으면 1초지연후 다음 프레임에서 호출하는 방식입니다.
이를 활용하여 Jump모션을 만들었습니다.
동그란 객체는 Sprite(그림),Rigidbody2D(물리엔진), Colilision(충돌체), C#스크립트 컴포넌트만 넣었습니다.
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- public class Player : MonoBehaviour {
- Rigidbody2D rb2d;
- public float jumpPower=100f;
- void Start ()
- {
-
rb2d = GetComponent<Rigidbody2D> ();
animator = GetComponent<Animator> ();
- }
- void Update ()
- {
- if (Input.GetButtonDown ("Jump"))
-
{
StartCoroutine (jumping());
}
- }
- IEnumerator jumping()
- {
- float power = jumpPower;
while (power >= 1){
power-=4;
rb2d.AddForce (Vector2.up * jumpPower);
Debug.Log (power);
yield return null;
- }
- }
- }
IEnumerator 한번 써볼려고 이렇게 썻지만 원래 소스는 아래와 같이 간단히 사용할 수 있습니다.
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- public class Controll : MonoBehaviour {
- Rigidbody2D rb2d;
- public float jumpPower=200f;
- void Start ()
- {
- rb2d = GetComponent<Rigidbody2D> ();
- }
- void Update ()
- {
- if (Input.GetButtonDown ("Jump"))
- {
- rb2d.AddForce (new Vector2 (0f, jumpPower));
- }
- }
- }
반응형
'응용프로그램 > 유니티(Unity)' 카테고리의 다른 글
Unity2D_UI_Canvas 설정하기 (0) | 2017.02.14 |
---|---|
Unity2D_Player에 카메라 붙이기 (0) | 2017.02.14 |
Unity2D 애니메이션 편집하기 (0) | 2017.02.10 |
Unity2D_착지 애니메이션, 충돌체(Collider) (0) | 2017.02.10 |
Unity2D_횡스크롤 게임 지형만들기 (0) | 2017.02.08 |