상세 컨텐츠

본문 제목

1210 TIL - 가챠 연출

스파르타 코딩캠프/'24 Today I Learned

by lucar 2024. 12. 10. 21:26

본문

 

우선 캐릭터를 뽑으면 이미지를 보여주고 목록으로 재정리해주는 기능은 완성되었고

이제 연출만 만들면 된다.

 

어제 2번씩 눌리던 버그는 아마도 다른 스크립트에서도 Input.GetMouseButtonDown()을 같은 인덱스로 사용하고 있어서

그런것 같다.

 

IPointerClickHandler를 통해 클릭하면 부울 값이 true로 바뀌게끔 다시 작성했다.

 

private static bool isConfirm;

private WaitUntil click = new WaitUntil(() => //waitUntil로 참 일때 코루틴을 진행 가능하게 디자인
    {
        return isConfirm;
    });
    
public IEnumerator CoResult()
{
    while (true)
    {
        gachaBase.result.gameObject.SetActive(true);
        for (int i = 0; i < gachaResultList.Count; i++)
        {
            switch (gachaResultList[i].GetType().ToString())
            {
                case "SoulDB":
                    tempSoul = DataManager.Instance.SoulDB.GetByKey(gachaResultList[i].GetKey());
                    resultSprite.sprite = Resources.Load<Sprite>(tempSoul.SpritePath);
                    _name.text = tempSoul.Name;
                    description.text = tempSoul.Descripton;
                    break;
                case "ItemDB":
                    tempItem = DataManager.Instance.ItemDB.GetByKey(gachaResultList[i].GetKey());
                    resultSprite.sprite = Resources.Load<Sprite>(tempItem.SpritePath);
                    _name.text = tempItem.Name;
                    description.text = tempItem.Descripton;
                    break;
            }
            tempList.Add(gachaResultList[i]);
            isConfirm = false; //클릭하기 전에 false로 바꿔줌
            yield return click; //클릭하면 true 값을 반환하여 진행됨
        }
        this.gameObject.SetActive(false);
        gachaBase.grid.gameObject.SetActive(true);
        StopCoroutine(coResult);
        yield return null;
    }
}

public void OnPointerClick(PointerEventData eventData) //클릭하면 isConfirm을 true로 변환
{
    isConfirm = true;
}

 

그리고 코루틴을 실행하고 종료할때에

private void Start()
{
	StartCoroutine(CoRoutine());
}

public IEnumerator CoRoutine()
{
	while(true)
    {
    	StopCoroutine(CoRoutine());
    	yield return null;
    }
}

이런 식으로 작성했더니 외부에서 해당 코루틴을 가져오질 못해서 코루틴이 종료가 안됐다.

 

그래서 

public Coroutine coRoutine;

private void Start()
{
    coRoutine = StartCoroutine(CoRoutine());
    StartCoroutine(coRoutine());
}

private IEnumerator CoRoutine()
{
	while(true)
    {
    	StopCoroutine(coRoutine());
    	yield return null;
    }
}

Coroutine 형식으로 변수 선언 후에 해당 변수에 코루틴을 넣어주고

해당 변수에 접근하는 방식으로 처리했더니 정상 작동했다.

 

TTE

관련글 더보기