Files
gpd-925-en/UnityMultithreading/Assets/Scripts/Animations/AsyncTween.cs
T

46 lines
1.3 KiB
C#

using System.Threading.Tasks;
using Cysharp.Threading.Tasks;
using UnityEngine;
namespace Animations
{
public class AsyncTween : MonoBehaviour
{
private async void Start()
{
await Animate();
// transform.position = await AnimateTask(transform.forward);
}
private async Task Animate()
{
float time = 0.0f;
while (time < 1.0f)
{
transform.position = Vector3.Lerp(Vector3.zero, transform.forward * 5.0f, time);
transform.localScale = Vector3.Lerp(Vector3.one, Vector3.one * 2.0f, time);
// await Task.Yield(); // wait for next frame
await UniTask.DelayFrame(1); // wait for next frame
time += Time.deltaTime;
}
}
private async Task<Vector3> AnimateTask(Vector3 forward)
{
float time = 0.0f;
Vector3 position = Vector3.zero;
while (time < 1.0f)
{
position = Vector3.Lerp(Vector3.zero, transform.forward * 5.0f, time);
await Task.Yield(); // wait for next frame
time += Time.deltaTime;
}
return position;
}
}
}