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()를 호출하는 방법