코루틴은 해당 코루틴을 동작시키는 스크립트가 달린 오브젝트가 비활성화 됐을 때 동작하지 않는다. 

 

 

 

public class ForCoroutineTest : MonoBehaviour
{

    // Use this for initialization
    void Start()
    {
        StartCoroutine(TestCoroutine());  // 코루틴 활성화
        Invoke("ActiveFalse", 3.0f);  // 3초후 비활성화
    }

    IEnumerator TestCoroutine()
    {
        while (true)
        {
            yield return null;

            Debug.Log("활성화");
        }
    }

    void ActiveFalse()
    {
        this.gameObject.SetActive(false);
    }

}

 

빈 오브젝트를 하나 만들어서 SoundManager로 설정한다.

오브젝트 밑에는 AudioSource를 가진 빈 오브젝트들을 설정한 후 각자의 용도에 맞게 사용한다.

 

 

ex)

더보기

 

SoundManager에 AudioClip들을 저장하는 스크립트들을 달아놓고

parent인 SoundManager에 child인 Source 오브젝트들을 연결시켜 준다. 

SoundManager의 스크립트에 발자국 소리를 내는 함수를 만든다면

Foot_Source의 AudioSource를 이용하여 만들고 

UI의 Sound를 담당하는 함수를 만든다면

UI_Source의 AudioSource를 이용한다.

 

 

 

 

분명히 stopcoroutine을 했음에도 코루틴이 중지되지 않을 때

 

 

1)

 

coroutine my_coroutine;

my_coroutine = 코루틴함수이름();

StartCoroutine(my_coroutine);

 

StopCoroutine(my_coroutine);

 

 

1을 이용했는데도 중지되지 않아서 아예 코루틴을 없애버리고

코루틴보다는 비효율적이지만 반복을 이용하기 위해 InvokeRepeating을 넣었다.

 

InvokeRepeating("함수이름", 처음 함수 호출 대기 시간, 함수 호출 반복 시킬 시간 간격);

 

그리고 stopcoroutine대신 Invoke되는 함수를 중지시키는 CancelInvoke("함수이름"); 을 이용했다.

 

 

처음에는 꺼놓은 오브젝트를 특정상황에 Active시키고 싶어서 Find를 이용했는데

Find가 안되길래 왜 안될까 하고 봤더니 inactive 해놓은 오브젝트는 Find가 안된다고 한다.

 

inactive한 오브젝트는 찾을 수 없으니 활성화 된 부모의 밑에 넣어주고

그 부모의 밑에 들어간 SetActive(false)된 자식을 찾는다.

 

 

GameObject.Find("부모").transform.FindChild("내가찾을비활성화오브젝트").gameObject.SetActive(true);

 

그런데 막상 위에 코드를 써보니까

 

 

초록색 밑줄과 함께 이런 안내가 뜬다.

 

그래서 FindChild대신 Find를 썼다.

GameObject.Find("부모").transform.Find("내가찾을비활성화오브젝트").gameObject.SetActive(true);

 

그런데 몇 번째에 붙은 자식인지 알거나 항상 정해져 있으면 굳이 Find("내가찾을비활성화오브젝트") 하지 말고 getchild(몇 번째 자식인지)가 더 낫다.

 

 

- Canvas에서 겹치는 Image들의 우선순위는 Hierarchy의 순서



- 만약 UI가 클릭되지 않을 경우 가장 기본적인 의심으로는 Event System을 지우지 않았는지 확인하기

 

 

GameObject Balloon;

 

-

 

Balloon = (GameObject)Instantiate(BalloonPrefab, new Vector3(...), Quaternion.identity);

Balloon.transform.parent = gameObject.transform;

 

 

자식으로 붙일 때 transform을 이용해서 붙임

 

+)

마찬가지로 생성 할 때가 아니더라도

ObjectA.transform.parent = ObjectB.transform; 하면 자식으로 변경되어 Hierarchy 창에서 확인할 수 있다.

+ Recent posts