์ด๋ฒ์ UniTask ์๊ฒ๋์ ๊ณต๊ฒฉ์๋ ๊ธฐ๋ฐ์ผ๋ก ๋งค๋ฒ ๊ณต๊ฒฉํด์ผ ๋๋ ์๊ณ ๋ฆฌ์ฆ ๊ฐ์๊ฑฐ ์ฝ๋ฃจํด ์ฐ๋ค๊ฐ ์ ๋ํ์คํฌ๋ก ๋์ฒดํ๋ ค๊ณ ํ๋๊ฑด๋ฐ...
์ ๋ํ์คํฌ ์ ์ฉํด์ ์๋ํฐ์์ ๋๋ ค๋ณด๋ CPU๋ FPS๊ฐ ๋๋ฌด ๋๊ฒจ์ ํ๋กํ์ผ๋ฌ ํ์ธํด๋ณด๋ ํ๋ ์๋ง๋ค GC๊ฐ ๋๋ฌด ๋์ค๋๋ผ๊ณ ...
๊ทธ๋์ UniTask ํ ์คํธ ํด๋ณด๋ ค๊ณ ๊ฐ๋จํ๊ฒ ์๋ ์ฝ๋๋ฅผ ๋๋ ค๋ดค๋๋ฐ Deep ํ๋กํ์ผ ํด๋ณด๋ ๊ฒฐ๊ณผ๊ฐ ์ ๋...
์ ์ด๋ด๊น? ๊ณ ์๋๋ค ๋์์ค....
์ ๋ํฐ ๋ฒ์ ์ 2022.3.25f1์ด๊ณ , UniTask๋ ์ ์ผ ์ต์ ๋ฒ์ 2.5.4์ผ.
์ด๋ฒ์ ์๋ก ๊ฒ์ ๋ง๋๋๊ฑฐ๋ผ ๊ทธ๋ฅ ์ ๋ํฐ LTS ์ต์ ๋ฒ์ ๋์ค๋ฉด ๋ฐ๊พธ๊ณ ์๋๋ฐ ์ ๋ํฐ ๋ฒ์ ๋๋ฌธ์ผ๊น?
using System.Threading;
using Cysharp.Threading.Tasks;
using Sirenix.OdinInspector;
using UnityEngine;
ย
public class CoroutineUniTaskTest : MonoBehaviour
{
ย ย float _duration = 1f;
ย ย private CancellationTokenSource _cts = new();
ย ย private void Start()
ย ย {
ย ย ย ย ObjectRotateUniTaskByToken().Forget();
ย ย }
ย ย private async UniTask ObjectRotateUniTaskByToken()
ย ย {
ย ย ย ย while (true)
ย ย ย ย {
ย ย ย ย ย ย transform.Rotate(Vector3.one * Time.deltaTime * 60);
ย ย ย ย ย ย await UniTask.Yield(_cts.Token);
ย ย ย ย }
ย ย }
ย ย [Button]
ย ย public void EndToken()
ย ย {
ย ย ย ย _cts.Cancel();
ย ย ย ย _cts.Dispose();
ย ย }
}
๋น๋ํ๊ณ ํ ์คํธํด๋ณด์ธ์.
์๋๋ก์ด๋ ํ๊ฒ์ธ๋ฐ, ์๋๋ก์ด๋ ๋น๋ ํ ์คํธ ํด๋ณด๋ผ๋ ์๊ธฐ์ง์??
๋น.
https://github.com/Cysharp/UniTask?tab=readme-ov-file#allocation-on-profiler
ํ์ธํด๋ณด๋ await UniTask.Delay(TimeSpan.FromSeconds(tick),cancellationToken: CtsSkillAlived.Token); ์์๋ GC๊ฐ ๋ฐ์ํ๊ณ , await UniTask.Yield(PlayerLoopTiming.Update); ์ฌ๊ธฐ์๋ ๊ด์ฐฎ๋ค์.. ์คํ๋ ค DamageNumber Pro ์์ ์ ์ฌ์ฉํด์ ๋ฐ๋ฏธ์ง ์ถ๋ ฅํ๊ณ ์๋๋ฐ ์ด๋์ด GC ๋ฌด์ง์ฅ ๋ง๋๋ค์.. ๊ฐ์ฌํฉ๋๋ค ใ ใ