Coroutine Manager Pro 1.0
https://assetstore.unity.com/packages/templates/systems/coroutine-manager-pro-53120
## 씬 이동을 하면 CM_ 시리즈가 사용이 안되는데 어딘가 최초 로딩하는 부분에서
CM_Dispatcher.DontDestroyOnLoad(CM_Dispatcher.instance);
이렇게 한줄 넣어주면 된다
질문이나 개선을위한 제안이 있으면
please email robert.wells@gandhigames.co.uk.
Overview
코 루틴 관리자는 CM_Job, CM_JobManager, 그리고 세 가지 주요 클래스 / 모듈을 포함합니다. CM_JobQueue. 아래에 간략히 설명 된대로 각 모듈에는 다른 작업이 있습니다.
CM_Job 클래스는 코 루틴 작업 생성을 캡슐화합니다. 이 수업을 사용하면 일시 중지 (지연 유무에 관계없이), 재개 할 수있는 코 루틴을 쉽고 빠르게 생성합니다. 삭제, 반복 가능 등
CM_JobManager 클래스는 생성 한 코 루틴에 대한 전역 명명 된 액세스를 제공하고 코드베이스 어디에서나 코 루틴을 일시 중지, 재개 및 종료 할 수 있습니다.
CM_JobQueue를 사용하면 다음 작업이 수행되지 않는 코 루틴 대기열을 만들 수 있습니다. 이전이 끝날 때까지 시작되었습니다. 이 대기열은 반복 가능하게 만들 수 있습니다. 일시 중지됩니다. 언제든지 재개되거나 죽습니다.
이러한 모듈을 사용하는 방법에 대한 개요는 예제 스크립트를 참조하십시오.
(ExampleJobTest, ExampleJobManagerTest 및 ExampleJobQueueTest) 및 관련 예제 장면 (JobTestScene, JobManagerTestScene 및 JobQueueTestScene). 이들 각 모듈의 메서드를 호출하는 방법에 대한 높은 수준의 예를 제공합니다.
테스트 장면뿐만 아니라 작은 장면을 포함하는 여러 예제 장면이 있습니다. 코 루틴 관리자를 사용할 수있는 방법의 예. 그들은 아래에 있습니다 CM / 예제 / 장면 / 예제. 여기에는 다음이 포함됩니다.
• ExampleCharacterMovement : CM_JobQueue 스크립트를 사용하여 캐릭터 이동 화면 주위.
• ExampleCharacterDamage : 플레이어에 대한 작업 대기열을 만드는 방법을 보여줍니다. 이 대기열에 작업을 추가하면 작업이 순서대로 실행됩니다. 1 번을 눌러 키보드는 화재 피해를 시뮬레이션하고 2는 독 피해를 시뮬레이션하고 3은 치유를 시뮬레이션합니다.
• ExampleSpawner : CM_Job 스크립트를 사용하여 개체가 지속적으로 생성됩니다.
• ExampleJobManagerPauseResume : 여러 타이머가 화면에 표시됩니다. 그들의 텍스트는 글로벌 작업 관리자에 추가 된 작업을 사용하여 업데이트됩니다. 작업을 일시 중지하려면 왼쪽 클릭 작업을 재개하려면 마우스 오른쪽 버튼을 클릭합니다.
• ExampleGUI : 간단한 GUI를 사용하여 CM_JobQueue가 어떻게 될 수 있는지 보여줍니다. GUI를 애니메이션하기 위해 구현되었습니다.
Quick Start
이 섹션에는 각 모듈에 대한 여러 공통 명령이 포함되어 있습니다. 이 명령 (및 기타)는 테스트 장면 (JobTestScene, JobManagerTestScene 및 JobQueueTestScene).
CM_Job
var job = CM_Job.Make (CoroutineMethod());
여기서 "CoroutineMethod"는 저장하려는 작업입니다. 이것은에 대한 참조를 반환합니다. 나중에 일시 중지 / 재개 / 종료 등을 수행 할 수 있습니다.
Job.Start();
Job.Start(2f);
첫 번째는 즉시 작업을 시작하는 반면 두 번째는 2 후에 참조 된 작업을 시작합니다. 두 번째 지연.
Job.Pause();
Job.Pause(2f);
첫 번째는 작업을 즉시 일시 중지하는 반면 두 번째는 작업 후 참조 된 작업을 일시 중지합니다. 2 초 지연.
Job.Resume();
Job.Resume(2f);
첫 번째는 작업을 즉시 재개하는 반면 두 번째는 다음 작업 후에 참조 된 작업을 재개합니다. 2 초 지연.
job.AddChild(CoroutineMethod());
여기서 "CoroutineMethod"는 저장하려는 하위 작업입니다. 주된 직업은 모든 하위 작업이 처리를 완료 할 때까지 완료됩니다. 이 시스템을 사용하여 다음을 추가 할 수 있습니다. 주요 직업에 종속 된 자식 직업.
var newJob = job.Clone();
CM_Job[] newJobs = job.Clone(5);
첫 번째는 작업의 사본을 만들고 두 번째는 지정된 작업의 5 개의 사본을 만듭니다.
job.Repeat(5);
이렇게하면 작업이 5 번 반복됩니다.
job.Repeat().StopRepeat(5f);
이렇게하면 작업이 5 초가 지나서 종료 될 때까지 반복되도록 설정됩니다.
job.NotifyOnJobStarted(EventMethod).NotifyOnJobComplete(EventMethod2);
여기서“EventMethod”는 작업이 시작될 때 호출 할 메서드입니다. 처리하고 "EventMethod2"는 작업에 완료 처리. 이 두 이벤트를 구독합니다.
CM_Job.Make(CoroutineMethod()).Start().Pause(1f).Resume(3f);
여기서“CoroutineMethod”는 시작하려는 코 루틴입니다. 체인도 가능합니다 위에 표시된 방법. 이것은 코 루틴이 1 초 후에 일시 중지되도록 설정합니다. 3 초 후에 다시 시작됩니다.
CM_JobManager
Var testJob = CM_Job.Make(CoroutineMethod(), “coroutine_id”);
CM_JobManager.Global.AddJob(testJob);
여기서“CoroutineMethod”는 작업 관리자에 추가하려는 코 루틴입니다. "coroutine_id"는 스크립트에서 코 루틴을 참조하는 데 사용할 ID입니다. 위의 두 줄은 새 작업을 만들고 작업 관리자에 추가합니다.
CM_JobManager.Global.StartCoroutine("coroutine_id");
이렇게하면 이전에 작업에 추가 된 "coroutine_id"라는 이름으로 코 루틴이 시작됩니다. 매니저.
CM_JobManager.Global.PauseCoroutine("coroutine_id");
이렇게하면 이전에 "coroutine_id"라는 이름으로 코 루틴이 일시 중지됩니다. 직업 관리자.
CM_JobManager.Global.ResumeCoroutine("coroutine_id");
이것은 이전에 "coroutine_id"라는 이름으로 코 루틴을 재개합니다. 직업 관리자.
CM_JobManager.Global.StopCoroutine("coroutine_id");
이렇게하면 이전에 추가 된 "coroutine_id"라는 이름의 코 루틴이 중지 / 종료됩니다. 작업 관리자.
CM_JobManager.Global.StartAll();
CM_JobManager.Global.StartAll(1f);
첫 번째 줄은 전역 작업 관리자와 관련된 모든 코 루틴을 시작하고 두 번째 줄은 라인은 동일하지만 1 초 지연됩니다.
CM_JobManager.Global.PauseAll();
CM_JobManager.Global.PauseAll(1f);
첫 번째 줄은 전역 작업 관리자와 관련된 모든 코 루틴을 일시 중지하고 두 번째 줄은 라인은 동일하지만 1 초 지연됩니다.
CM_JobManager.Global.ResumeAll()
CM_JobManager.Global.ResumeAll(1f)
첫 번째 줄은 전역 작업 관리자와 관련된 모든 코 루틴을 다시 시작하고 두 번째 줄은 라인은 동일하지만 1 초 지연됩니다.
CM_JobManager.Global
.NotifyOnJobAdded((object sender, CM_JobManagerJobEditedEventArgs e) => {
Debug.Log("Job added to global manager: " + e.jobEdited.id);
}).NotifyOnJobRemoved ((object sender, CM_JobManagerJobEditedEventArgs e) => {
Debug.Log("Job removed from the global manager: " + e.jobEdited.id);
}).NotifyOnAllJobsKilled ((object sender, CM_JobManagerEventArgs e) => {
Debug.Log("All jobs killed");
}).NotifyOnAllJobsResumed ((object sender, CM_JobManagerEventArgs e) => {
Debug.Log("All jobs resumed");
}).NotifyOnAllJobsPaused ((object sender, CM_JobManagerEventArgs e) => {
Debug.Log("All jobs paused");
}).NotifyOnAllJobsCleared ((object sender, CM_JobManagerEventArgs e) => {
Debug.Log("All jobs cleared");
});
글로벌 작업 관리자가 제공하는 모든 이벤트를 구독합니다.
var localJobManager = CM_JobManager.Make();
위와 같이 로컬 작업 관리자를 만들 수도 있습니다. 모든 작업을 수행 할 수 있습니다. 이전에 작업 관리자의이 로컬 사본으로 활동을 설명했습니다.
CM_JobQueue
작업을 대기열에 추가하는 방법에는 여러 가지가 있습니다. 작업을 개별적으로 추가하거나 목록 / 배열은 아래와 같습니다.
var jobsToQueue = new List<CM_Job>() {
CM_Job.Make (CoroutineMethod1()), "job_1"),
CM_Job.Make (CoroutineMethod2()), "job_2"),
CM_Job.Make (CoroutineMethod3()), "job_3")};
CM_JobQueue.Global.Enqueue(jobsToQueue).Start();
첫 번째 줄은 대기열에 추가 할 작업 목록을 만듭니다 (여기서 "CoroutineMethod1", "CoroutineMethod2"및 "CoroutineMethod3"은 코 루틴 메서드의 이름입니다. 추가하려는 경우 "job_1", "job_2"및 "job_3"은 작업의 이름입니다). 목록 그런 다음 두 번째 줄의 전역 대기열에 추가되고 대기열이 시작됩니다.
CM_JobQueue.Global.Start();
CM_JobQueue.Global.Start(1f);
첫 번째 줄은 전역 대기열을 시작하고 두 번째 줄은 동일하지만 한 줄 뒤에 두 번째 지연
CM_JobQueue.Global.Pause();
CM_JobQueue.Global.Pause(1f);
첫 번째 줄은 전역 대기열을 일시 중지하고 두 번째 줄은 동일하지만 한 줄 후에 두 번째 지연
CM_JobQueue.Global.Resume();
CM_JobQueue.Global.Resume(1f);
첫 번째 줄은 전역 대기열을 다시 시작하고 두 번째 줄은 동일하지만 한 줄 후에 두 번째 지연.
CM_JobQueue.Global.KillCurrent();
CM_JobQueue.Global.KillCurrent(1f);
첫 번째 줄은 현재 실행중인 작업을 종료하고 두 번째 줄은 동일한 작업을 수행하지만 1 초 지연.
CM_JobQueue.Global.KillAll();
CM_JobQueue.Global.KillAll(1f);
첫 번째 줄은 현재 대기중인 모든 작업을 종료하고 두 번째 줄은 동일한 작업을 수행하지만 1 초 지연.
CM_JobQueue.Global.Repeat();
CM_JobQueue.Global.Repeat().StopRepeat(5f);
CM_JobQueue.Global.Repeat(5);
첫 번째 줄은 대기열을 무한 반복하도록 설정하고 두 번째 줄은 대기열을 반복하도록 설정합니다. 마지막 줄은 대기열을 5 번 반복하도록 설정합니다.
CM_JobQueue.Global.Start(1f).Pause(2f).Resume(3f);
CM_Job과 마찬가지로 CM_queue에 메서드 호출을 연결할 수도 있습니다. 위의 줄은 1 초가 지난 후 글로벌 대기열이 2 초 후에 일시 중지 된 다음 다시 시작됩니다. 3 초 후에 대기합니다.
CM_JobQueue.Global
.NotifyOnQueueStarted ((object sender, CM_QueueEventArgs e) => {
Debug.Log ("Global queue started processing. " +
"Number in queue: " + (e.hasJobsInQueue ? e.queuedJobs.Length.ToString () : "0"));
})
.NotifyOnJobProcessed ((object sender, CM_QueueEventArgs e) => {
if (e.hasCompletedJobs) {
Debug.Log ("Finished processing global job queue: "
+ e.completedJobs [e.completedJobs.Length - 1].id);
}
})
.NotifyOnQueueComplete ((object sender, CM_QueueEventArgs e) => {
if (e.hasCompletedJobs) {
int numOfJobsKilled = e.completedJobs.Where (i => i.jobKilled == true).Count ();
Debug.Log ("Global queue started processing. " +
"Number of jobs completed successfully: "
+ (e.completedJobs.Length - numOfJobsKilled)
+ ", number of jobs killed: " + numOfJobsKilled);
}
});
위의 행은 CM_Queue에서 제공하는 모든 이벤트를 구독합니다.
var localQueue = CM_JobQueue.Make();
localQueue.Enqueue (CoroutineMethod1())
.Enqueue (CoroutineMethod2())
.Enqueue (CoroutineMethod3())
.Start();
위에 표시된대로 원하는 수의 로컬 대기열을 만들 수도 있습니다. 로컬 대기열은 자신의 작업을 수행하고 글로벌 대기열 및 서로 별도로 실행됩니다.
var clonedQueue = CM_JobQueue.Global.Clone();
CM_Queue[] clonedQueues = CM_JobQueue.Global.Clone(5);
마지막으로 모든 대기열을 복제 할 수 있습니다. 위의 첫 번째 줄은 전역 대기열의 복사본 하나를 복제합니다. 두 번째 줄은 5 개의 복사본을 복제합니다.
Events
구독 할 수있는 많은 이벤트는 설명이 필요하지 않지만 아래에 표시된 이벤트는 참고를 위해 각 이벤트의 개요.
CM_Job
이러한 이벤트를 구독하는 방법에 대한 예는 ExampleJobTest 클래스를 참조하십시오.
NotifyOnJobFinishedRunning
작업 실행이 완료되면 발생합니다. 이것은 NotifyOnJobComplete와 다릅니다. NotifyOnJobFinishedRunning 이벤트는 작업 반복이 완료된 경우에만 발생합니다. (즉, 작업이 5 회 반복되는 경우 작업이 수행 될 때마다 NotifyOnJobComplete가 호출됩니다.
NotifyOnJobStarted
작업이 처리를 시작할 때 발생합니다.
NotifyOnJobPaused
작업이 일시 중지되면 발생합니다.
NotifyOnJobResumed
작업이 재개되면 발생합니다. 작업이 이전에 일시 중지되지 않은 경우에도 발생하지만 이력서가 호출됩니다.
NotifyOnJobComplete
작업이 완료되면 발생합니다. 작업이 완료 될 때마다 호출됩니다. 반복됩니다.
NotifyOnChildJobStarted
코 루틴 자식 작업이 처리를 시작하면 발생합니다.
NotifyOnChildJobComplete
코 루틴 자식 작업이 처리를 완료하면 발생합니다.
CM_JobManager
이러한 이벤트를 구독하는 방법에 대한 예는 ExampleJobManagerTest를 참조하십시오. 수업.
NotifyOnJobAdded
작업이 작업 관리자에 추가되면 발생합니다.
NotifyOnJobRemoved
작업 관리자에서 작업이 제거되면 발생합니다.
NotifyOnAllJobsPaused
모든 작업이 일시 중지되었을 때 발생합니다. 모든 작업이 한 번에 일시 중지 된 경우에만 발생합니다. 개별적으로보다는.
NotifyOnAllJobsResumed
모든 작업이 재개되면 발생합니다. 모든 작업이 일시 중지 된 경우에만 발생합니다. 개별적으로가 아니라 한 번.
NotifyOnAllJobsKilled
모든 작업이 죽었을 때 발생합니다. 모든 작업이 한 번에 일시 중지 된 경우에만 발생합니다. 개별적으로보다는.
NotifyOnAllJobsCleared
작업 관리자의 소유 작업 목록이 지워지면 발생합니다.
CM_JobQueue
이러한 이벤트를 구독하는 방법에 대한 예는 ExampleJobQueueTest 클래스를 참조하십시오.
NotifyOnQueueStarted
작업 대기열이 시작될 때 발생합니다.
NotifyOnQueueComplete
작업 대기열이 처리를 완료하면 발생합니다.
NotifyOnJobProcessed
대기열의 작업이 완료 될 때마다 발생합니다.
각 이벤트에는 이벤트를 제거하는 해당 RemoveNotify 메서드도 포함됩니다. 경청자.
'프로그래밍 > Unity' 카테고리의 다른 글
JobQueue (0) | 2020.12.27 |
---|---|
UGUI Sprite 늘리기 (0) | 2020.10.19 |
유니티에서 Dictionary 가 Clear 되는 현상 (0) | 2020.09.29 |
로컬 데이터 저장 (0) | 2020.09.28 |
NGUI 스크롤뷰 만들기 (0) | 2020.09.23 |
댓글