2014-03-03 2 views
4

파일, 장면을로드하고 스레드에서 애니메이션을 재생해야합니다. Android에서 www를 통해 파일로드를 시도했습니다 ... 스레드를 통해 다른 작업을 수행하는 방법은 무엇입니까? 그러나 게임 엔진으로 어떻게 쓰레드를 만들 수 없습니까? 또는 내 이해가 잘못 되었습니까? 어떻게 UNITY3D에서 스레드를 만들 수 있습니까?안드로이드 플랫폼을위한 unity3d에서 C# 스레드를 사용하는 방법은 무엇입니까?

답변

5

당신은 유니티에서 스레드를 사용할 수 있지만 엔진이 스레드로부터 안전하지 않습니다. 보통 당신은 오래 실행중인 프로세스를 수행하고 결과를 확인하기 위해 분리 된 스레드 (Unity UI에서)를 실행합니다 (작업중인 스레드에서 Unity와 상호 작용할 수 없습니다). 일반적인 접근법은 Unity 메인 스레드에 의해 초기화 될 스레딩 작업을 나타내는 클래스를 사용하는 것입니다. 그런 다음 해당 클래스의 함수에 대한 작업자 스레드를 시작하여 작업을 수행하게하십시오 (Coroutines는 Unity 스레드에서 실행되므로 실제 스레드가 아닙니다.) Coroutines에 대한 최고의 기사는 here입니다.

설명 된 접근법의 예는 다음과 같습니다 위의 (허용 대답 참조)

http://answers.unity3d.com/questions/357033/unity3d-and-c-coroutines-vs-threading.html

당신은 또한 같은 효과를 얻을 수 있지만 편의를 (예 : 클로저 지원 등) 제공하는 UnityGems 패키지를 시도 할 수도 있습니다. this page

HTH를 참조하십시오. 최고!

+0

꽤 오래된 질문이지만, 여기에 모험을하고, 위의 링크 중 어떤 것이 나에게 도움이되지 않았기 때문에, 여기 내가 도움이된다고 말한 것이 있습니다. 1. [좋은 기사] (http://www.albahari.com/threading/); 2. Unity Wiki의 [job queue example] (http://wiki.unity3d.com/index.php/JobQueue) – FullStackForger

+0

끊어진 링크가 수정되었습니다. 베스트 – German

3

내 개인적인 경험으로 유니티의 API를 사용하지 않는 한 별도의 스레드를 만들거나 실행할 수 없습니다. 그래서 게임 오브젝트 나 비슷한 성격의 물건이 없다는 것을 의미합니다. 내 길 찾기가 성공적으로 끝났으므로 가능하다는 것을 알았습니다. 행운을 빕니다! 이게 도움이 되길 바란다.

+2

이것은 맞습니다. 클래스가 MonoBehaviour로부터 상속받지 않는 한 Unity에서 스레딩을 할 수 있습니다. – Esa

0

Unity3D에서 일반적으로 사용되는 접근 방법은 Coroutines입니다.

IEnumerator DoSth() 
{ 
    ... 
    yield retrun ... ;  
} 

는 전화/코 루틴을 소비하려면

StartCoroutine(DoSth()); // OK 
StartCoroutine("DoSth"); // Also fine 
StopCoroutine("DoSth"); // You can stop it as well 
+1

코 루틴은 실제 스레드가 아닙니다. 예를 들어, 단지 WWW- 기능성 만이 진정으로 스레드된다. – Esa

+0

코 루틴은 스레드가 아니며 병렬 프로그래밍을 수행하지 않습니다. –

관련 문제