Ssssong += Dev

[리듬게임] Bezier 곡선 , 코루틴 본문

개발/리듬게임에디터

[리듬게임] Bezier 곡선 , 코루틴

ssong_dev 2022. 4. 10. 20:50

 

이런 걸 해보고 싶었어서 배지어 곡선에 대해서 찾아보았다.

 

 

아래 포스팅에서 참고하여 만들었다. Bezier가 그려지는 방식이 재밌는 것 같다. 코드만 보고는 이게 무슨 말이지? 했다가

차근차근 그려보니 생각보다 간단했다. 중간점을 계속 찾아가면 되는 거였다.

https://blog.naver.com/jung_cpp/221194091067

 

[Unity] Bezier Curve(베지어 곡선)

시작위치과 종료위치 이외에 1개 이상의 추가위치 를 기준으로 곡선을 그리는 방법으로 여러 위치들에 대한...

blog.naver.com

 

사실 저래놓고 판정선도 같이 돌아가게 해버리니 배지어 곡선 상관없이 그냥 회전하는 게 되어버렸지만.... 아무튼 공부했으니 괜찮아! ^^

만들어놓고 보니 양손으로 돌릴 때에만 판정선 회전이 있는 것도 괜찮겠다.

 

 

 

저러고 나서 회전하라는 노트가 생기면 축이 자동으로 돌아가게 하려고 했는데, 

 

???

 

다시 중앙으로 돌아온 후 키가 꺼져야 하는데 꺼지지 않는다.... 어째서 이런??

 

IEnumerator CreateCurveNote(Transform noteGoal,bool ifKey)
    {
        noteGoal.gameObject.SetActive(true);

        //string noteName = noteGoal.gameObject.name;

        while (m_rate > 0)
        {
            yield return new WaitForFixedUpdate();
            m_rate -= noteSpeed * Time.deltaTime;
            handleLeft.GetComponent<BezierController>().m_rate = m_rate;
        }
        yield return new WaitForSeconds(0.2f);
        while (m_rate < 0.5)
        {
            yield return new WaitForFixedUpdate();
            m_rate += noteSpeed * Time.deltaTime;
            handleLeft.GetComponent<BezierController>().m_rate = m_rate;
        }

        handleLeft.GetComponent<BezierController>().m_rate = 0.5f;
        m_rate = 0.5f;
        if(ifKey)
        {
            ifKey = false; //왜 이게 안돌아가지???
        }
        noteGoal.gameObject.SetActive(false);
    }

 

앗 그러고보니 저 ifKey가 매개변수로 들어가 있어서 원본이 바뀌지 않는구나! 하는 생각이 뒤늦게 들었다.

학원에서 콜바이밸류 콜바이레퍼런스를 그렇게 계속 썼는데도 이걸 놓치다니.....

어? 그런데 앞에 ref를 붙이니 바로 에러가 떠버린다. 검색을 해 보니....

 

 

http://theeye.pe.kr/archives/2725

 

Unity C# – Coroutine 알아보기 | 아이군의 블로그

유니티에서 사용되는 코루틴(Coroutine)은 왜 필요한가? 유니티에서 화면의 변화를 일으키기 위해서는 Update() 함수 내에서 작업을 하게 됩니다. 이 Update() 함수는 매 프레임을 그릴때마다 호출되며

theeye.pe.kr

 

이런 글이 나왔고.... 코루틴에는 ref, out을 쓸 수가 없는 것이었다. 아니 이럴수가.

그래도 이유가 뭔진 알았으니 좀 건드리면 되겠다.