비동기식 메서드에서 프로세스를 FixedUpdate()에 바인딩하여 실행하는 방법

FixedUpdate를 호출할 수 있으면 FixedUpdate 메서드가 포함된 단일 동작 스크립트를 추가하는 대신 메서드에서 FixedUpdate의 기능을 구현할 수 있습니다!
이러한 방식으로 보다 복잡한 논리를 구현하기 위해 스크립트가 사용됩니다.

실현 방법:

  • 1. 비동기 대기 사용
  • 2. await UniTask.WaitForFixedUpdate()

사례:

 public async UniTask FlowAsync(CancellationToken ctk)
    {
    
    

        //更新物体的方向
        Func<UniTask> Loop = async () =>
        {
    
    
            while (true)
            {
    
    
                if (ctk.IsCancellationRequested) return;               
                await UniTask.WaitForFixedUpdate(cancellationToken:ctk);//固定更新
                pole.LookAt(dir);
            }
        };
        Loop();//同步执行
    }

이는 ctk라는 CancellationToken 매개 변수가 있는 UniTask 개체를 반환하는 FlowAsync라는 C# 메서드입니다. LookAt() 메서드를 반복적으로 호출하고 dir 매개 변수를 전달하여 극의 방향을 업데이트합니다.

이 메서드는 UniTask 객체를 반환하고 async/await 패턴을 사용하여 다음 고정 업데이트까지 기다린 다음 극 객체의 방향을 업데이트하는 Loop라는 네이티브 함수를 정의합니다. 그런 다음 메서드는 루프를 시작하고 즉시 호출자에게 제어를 반환하는 이 네이티브 함수 Loop()를 기다리지 않고 동기적으로 호출합니다.

ctk 매개변수는 호출자가 필요한 경우 작업을 취소할 수 있도록 하는 취소 토큰입니다. 토큰의 IsCancellationRequested 속성이 true이면 루프가 일찍 종료되고 메서드는 완료된 UniTask 개체를 반환합니다.

이 기사에서 사용된 패키지: UniTask

using Cysharp.Threading.Tasks;
using Cysharp.Threading.Tasks.Linq;

부록: 메서드에서 Update()를 호출하는 방법

UniTask에서 Update()를 기다리는 방법 - 카메라 움직임을 예로 들어 보겠습니다.

おすすめ

転載: blog.csdn.net/dzj2021/article/details/131035794