Unity DOTS/TIP

UNITY DOTS - JobHandle.CombineDependencies

개양반 2022. 11. 29.
728x90

1. 코드 설명

두 개의 종속성을 하나로 합칠 때 사용하는 코드이다.  

// 반환 타입은 JobHandle
JobHandle.CombineDependencies(JobHandle, JobHandle);

 

2. 필요 이유

Job은 필요에 따라 비동기로 진행되어야 하고 어느 시점에서 앞의 Job들이 완료되면 실행되게끔 처리해야 할 때가 있다. 이때, JobHandle.CombineDependencies 로 앞의 Job들의 종속성을 합쳐서 동기 시점을 맞출 수 있다.

 

3. 예제 코드

아래의 코드는 Job을 Schedule할 때 앞의 Job의 종속성을 매개변수로 전달하여 동기 방식으로 코드가 실행된다.

 A가 끝나면 B가 실행되고   //   B가 끝나면 C가 실행된다.

var jobHandleA = new JobA(){

     }.Schedule(state.Dependency);

var jobHandleB = new JobB(){

    //job1의 종속성을 넣어줬음.
    //Job1이 완료되면 Job2가 실행됨
    
    }.Schedule(jobHandle1 );

var state.Dependency = new JobC(){

    // Job2의 종속성을 넣어줬음.
    // Job2가 완료되면 Job3가 실행됨
    
    }.Schedule(jobHandle2 );

 

아래의 코드는 Job을 예약할 때 시스템의 종속성을 매개변수로 넣어 실행하여  A와 B가 비 동기 방식으로 코드가 실행된다. 그리고 CombineDependencies으로 두개의 종속성을 합친 combinedDepency을 C의 스케쥴의 매개변수로 전달하여 앞의 A와 B가 완료되어야 C가 실행된다.

var jobHandle1 = new JobA(){

    // State의 종속성을 Schedule의 매개변수로 넣었다.
    }.Schedule(state.Dependency);

var jobHandle2 = new JobB(){

    // State의 종속성을 Schedule의 매개변수로 넣었다.
    }.Schedule(state.Dependency);


// 두개의 종속성을 합친다.
var combinedDepency = JobHandle.CombineDependencies(jobHandle1, jobHandle2);


var state.Dependency = new JobC(){

    // A와 B의 종속성을 합친 combinedDepency을 Schedule의 매개변수로 넣었다.
    // A와 B가 끝나야 C가 실행된다.
    }.Schedule(combinedDepency );

댓글

💲 추천 글