코루틴을 이해하고 있는지 알아보는 문제.

만들었던 나조차 한번 틀렸다-_-...


아래와 같은 코드가 있다고 가정하고

콘솔에 찍히는 숫자를 순서대로 나열하면? (당연히 머리로만 계산해서+_+)


using System.Collections;

using UnityEngine;



public class Test: MonoBehaviour

{

    private void Start()

    {

        StartCoroutine(Test1());

    }


    IEnumerator Test1()

    {

        Debug.Log("1");

        IEnumerator enumerator = A();


        Debug.Log("2");

        while (enumerator.MoveNext())

        {

            Debug.Log("3");

            yield return null;

            Debug.Log("4");

        }

        Debug.Log("5");

    }


    IEnumerator A()

    {

        Debug.Log("6");


        yield return false;


        Debug.Log("7");


        yield break;


        Debug.Log("8");

    }

}




WRITTEN BY
빨강꼬마

,

프로젝트 작업중에 순차적으로 처리할 코드를 줄이다 보니 아래의 테스트코드를 작성하게 되었음.

왜 싱글턴을 사용했는지가 중요한게 아니므로 넘어가고 흐름만 보도록 하자.


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test : MonoBehaviour
{
IEnumerator Start()
{
yield return null;
bool checkSum = false;
for (int i = 0; i < 10; i++)
{
checkSum = false;
Test1.Instance.CallBackTest((success) => { checkSum = success; });
yield return new WaitUntil(()=>checkSum);
}
}
}
public class Test1 : MonoBehaviour
{
#region singleton
private static volatile Test1 instance;
private Test1() { }
public static Test1 Instance
{
get
{
if (instance == null)
{
GameObject go = new GameObject();
instance = go.AddComponent<Test1>();
}
return instance;
}
}
#endregion
Action<bool> mCB;
public void CallBackTest(Action<bool> _cb)
{
mCB = _cb;
StopCoroutine("StartCallBack");
StartCoroutine("StartCallBack");
}
IEnumerator StartCallBack()
{
yield return new WaitForSeconds(UnityEngine.Random.Range(0.5f, 3f));
if (mCB != null)
mCB.Invoke(true);
}
}

흐름은 Test 클래스 Start 함수에서 반복문으로 시작.

이후 지역변수 checkSum을 이용해 Test1쪽 콜백을 받으면 true로 변경되기 전까지 waituntil에서 대기하고,

checksum이 true로 되면 다음으로 진행되는 구조.


뭐 팁이랄것도 없이 아주 간단한 구조이긴한데, 눈으로 봐야 직성이 풀리는 성격이기도 하고 생존기록으로 남기고자..'ㅅ';


WRITTEN BY
빨강꼬마

,
  1. float duration = 5; // This will be your time in seconds.
  2. float smoothness = 0.02f; // This will determine the smoothness of the lerp. Smaller values are smoother. Really it's the time between updates.
  3. Color currentColor = Color.white; // This is the state of the color in the current interpolation.
  4. void Start()
  5. {
  6. StartCoroutine("LerpColor");
  7. }
  8. IEnumerator LerpColor()
  9. {
  10. float progress = 0; //This float will serve as the 3rd parameter of the lerp function.
  11. float increment = smoothness/duration; //The amount of change to apply.
  12. while(progress < 1)
  13. {
  14. currentColor = Color.Lerp(Color.red, Color.blue, progress);
  15. progress += increment;
  16. yield return new WaitForSeconds(smoothness);
  17. }
  18. return true;
  19. }


출처

http://answers.unity3d.com/questions/328891/controlling-duration-of-colorlerp-in-seconds.html

'Unity > 스크립트' 카테고리의 다른 글

코루틴 문제  (0) 2018.06.21
코루틴과 플래그 처리를 이용한 순차처리 구조.  (0) 2017.11.30
Facebook 초기화시 accesstoken 문제  (0) 2016.08.23
Delegate 비교  (1) 2016.05.17
Unity 에서의 멀티쓰레드 구현  (0) 2016.04.20

WRITTEN BY
빨강꼬마

,

Facebook Unity SDK 적용할때 이슈.


Facebook 초기화시 이전에 로그인한 기록이 있는 상태에서 로그아웃 처리를 따로하지 않고 앱을 종료하고나서 다시 Facebook을 초기화할 경우 초기화완료와 함께 AccessToken이 있는 상태로 떨어짐.


즉, 로그인상태로 떨어지는데, 이때 초기화이후에도 AccessToken이 null일 경우가 있다.


Android에서는 별 영향이 없지만 iOS는 PlayerPrefs.DeleteAll()을 호출할 경우 유니티 버젼문제인지는 모르겠지만 Facebook의 AccessToken까지 날려버린다-_- 이것때메 몇일을 고생... 이ㅏㅓㅁㅈ;ㄷ럼ㅈㄷㅎㅁㅈ





WRITTEN BY
빨강꼬마

,

Delegate 비교

Unity/스크립트 2016. 5. 17. 19:53
private bool CompareDelegate(Delegate action)
{
        //함수 등록이 중복이 되었는지 검사
        Delegate[] dels = action.GetInvocationList(); 

        for (int i = 0; dels.Length > i; i++)
        {
                Delegate del = dels[i];

                if (del.Target == action.Target && del.Method.Name == action.Method.Name)
                return true;
        }
        return false;
}

WRITTEN BY
빨강꼬마

,

Tween기능을 이용해 로딩 이미지의 애니메이션을 구현하고 데이터의 연산이 많은 작업을 시도할 경우 이미지의 애니메이션이 멈추는 현상이 있다.

이를 멀티쓰레드로 처리할수 있는데, Unity는 기본적으로 메인스레드 하나에서 동작하므로 연산되는 부분을 별도의 쓰레드로 처리하면 애니메이션이 멈추지 않고 동작함과 동시에 연산을 수행할 수 있다.


http://www.wolfpack.pe.kr/123?category=2


0422 추가

- Monobehavior의 코루틴은 메인스레드에서만 돌아감. 코루틴은 스레드를 나누어 작업하는데에 있어 정상적으로 동작하지 않으므로, 유의해서 사용해야함.


WRITTEN BY
빨강꼬마

,

ios는 상관없지만.. android의 경우 시간을 사용자 임의로 변경할 수 있기 때문에, 시간과 관련하여 컨텐츠의 변경이 필요할 경우 정확한 시간의 정보가 필요함.


이럴때, 미국 국립표준 연구소의 시간을 받아와서 사용하는 방법이 있다.


출처는 - http://stackoverflow.com/questions/6435099/how-to-get-datetime-from-the-internet 요기

실제 수정해서 사용한 코드는 다음과 같음.

TcpClient tcpClient = new TcpClient("time.nist.gov", 13);

StreamReader sr = new StreamReader(tcpClient.GetStream());

        

// 형태 57486 16-04-08 08:53:18 50 0 0 737.0 UTC(NIST) * 

string readData = sr.ReadToEnd();

// 형태 16-04-08 08:57:07

string _time = readData.Substring(readData.IndexOf(" ") + 1, 17);


// 대한민국은 UTC 기준 +9시간.

Datetime currentTime = Convert.ToDateTime(_time).AddHours(9);


// Debug.Log("현재 시간 : " + currentTime.ToString("yyyy-MM-dd HH:mm:ss"));


'Unity > 스크립트' 카테고리의 다른 글

Delegate 비교  (1) 2016.05.17
Unity 에서의 멀티쓰레드 구현  (0) 2016.04.20
앱안에서의 웹뷰처리  (0) 2016.03.28
직렬화의 이해  (0) 2016.03.24
Reactive Extension  (0) 2015.12.11

WRITTEN BY
빨강꼬마

,

https://github.com/gree/unity-webview


1. 위 링크에서 파일을 다운로드 받고, dist 폴더안의 패키지 파일을 임포트.

2. 웹뷰로 사용할 객체를 미리 만들던, 그때 생성하고 삭제하던 편한 방법을 선택해도됨. 

3. 유니티 윈도우에디터에서는 에러나므로, 전처리기를 사용하거나, Application.platform 을 사용해서 분기처리를 반드시 해야함.

4. 아래의 코드로 웹뷰 온/오프 처리.


끝.


참조 블로그. http://blog.usagination.com/58


WRITTEN BY
빨강꼬마

,

https://docs.com/sunnykwak/7250/java-serialization


사전적 정의는 객체의 상태 혹은 데이터 구조를 기록할 수 있는 포맷으로 변환하고 추후 동일 혹은 다른 컴퓨터 환경에서 재구성할 수 있게끔 하는 절차.


직렬화가 중요한 것은 인터넷이 보편화된 시대에 네트워크를 통해 데이터를 주고 받아야 하니까.


직렬화는 네트워크 의존성이 높은 소프트웨어라면 성능을 좌우할 수 있음.


마샬링과 직렬화의 차이점
마샬링은 A -> B로 파라메터를 전달하는 작업
직렬화는 구조적인 데이터를 원시형 형태에서 바이트 스트림과 같은 형식으로 복사하는 작업.
즉 직렬화는 마샬링의 pass by value 개념을 구현하는 수단.


직렬화는 파일 저장소, 네트워크 통신, 데이터베이스, 웹환경에 적용할 수 있음.


직렬화 데이터 형식은
- Binary
- JSON
- XML
- YAML


WRITTEN BY
빨강꼬마

,

우연찮게 slideshare 문서를 보다가 RX를 봄.

얼마전 아는 후배녀석이 새롭게 이직한 회사에서 UniRx라는 것을 쓰는데 들어본적이 있냐고..
물론 들어본적이 없어서 그때 잠깐 찾아보고 slide를 보면서 느낀 생각은..


이 패턴을 꼭 공부해둬야겠다는 생각이 문득든다.


프로젝트를 하다보면 이벤트를 활용한다 하더라도 콜백이 콜백을 부르고... 그 콜백이 또 콜백을 부르는 무한(?) 콜백사태가 나버리면 노가다에 가까운 코딩이 필요하고, 사람이 하는 것이다 보니 버그도 나오기 마련...


우선 필수적으로 람다식의 이해가 필요하고, 열거자에 대한 이해가 필요해보인다.


20160324 추가.

- 음.. 이벤트 처리할때 람다식을 몇번써봤는데 그냥 편한 문법.. 뭐 이해하고 자시고가 없네..ㄷㄷ.. 역시 직접 몇번 사용해보면 바로 이해됨 ㅋ

'Unity > 스크립트' 카테고리의 다른 글

앱안에서의 웹뷰처리  (0) 2016.03.28
직렬화의 이해  (0) 2016.03.24
Raycast시 원하는 충돌레이어 지정  (0) 2015.10.16
Swipe 판별  (0) 2015.07.20
Android 국가코드 정보  (0) 2015.06.07

WRITTEN BY
빨강꼬마

,