Add PlayerLoopHelper.Initialize(InbjectPlayerLoopTimings)

master
neuecc 2021-02-25 19:26:37 +09:00
parent cae512e4de
commit 4710268e0a
5 changed files with 177 additions and 77 deletions

View File

@ -101,7 +101,9 @@ namespace Cysharp.Threading.Tasks
[Flags] [Flags]
public enum InjectPlayerLoopTimings public enum InjectPlayerLoopTimings
{ {
// Preset /// <summary>
/// Preset: All loops(default).
/// </summary>
All = All =
Initialization | LastInitialization | Initialization | LastInitialization |
EarlyUpdate | LastEarlyUpdate | EarlyUpdate | LastEarlyUpdate |
@ -114,6 +116,9 @@ namespace Cysharp.Threading.Tasks
TimeUpdate | LastTimeUpdate, TimeUpdate | LastTimeUpdate,
#endif #endif
/// <summary>
/// Preset: All without last except LastPostLateUpdate.
/// </summary>
Standard = Standard =
Initialization | Initialization |
EarlyUpdate | EarlyUpdate |
@ -126,6 +131,9 @@ namespace Cysharp.Threading.Tasks
TimeUpdate, TimeUpdate,
#endif #endif
/// <summary>
/// Preset: Minimum pattern, Update | FixedUpdate | LastPostLateUpdate
/// </summary>
Minimum = Minimum =
Update | FixedUpdate | LastPostLateUpdate, Update | FixedUpdate | LastPostLateUpdate,
@ -167,6 +175,9 @@ namespace Cysharp.Threading.Tasks
public static class PlayerLoopHelper public static class PlayerLoopHelper
{ {
static readonly ContinuationQueue ThrowMarkerContinuationQueue = new ContinuationQueue(PlayerLoopTiming.Initialization);
static readonly PlayerLoopRunner ThrowMarkerPlayerLoopRunner = new PlayerLoopRunner(PlayerLoopTiming.Initialization);
public static SynchronizationContext UnitySynchronizationContext => unitySynchronizationContetext; public static SynchronizationContext UnitySynchronizationContext => unitySynchronizationContetext;
public static int MainThreadId => mainThreadId; public static int MainThreadId => mainThreadId;
internal static string ApplicationDataPath => applicationDataPath; internal static string ApplicationDataPath => applicationDataPath;
@ -220,10 +231,7 @@ namespace Cysharp.Threading.Tasks
}; };
// Remove items from previous initializations. // Remove items from previous initializations.
var source = loopSystem.subSystemList var source = RemoveRunner(loopSystem, loopRunnerYieldType, loopRunnerType);
.Where(ls => ls.type != loopRunnerYieldType && ls.type != loopRunnerType)
.ToArray();
var dest = new PlayerLoopSystem[source.Length + 2]; var dest = new PlayerLoopSystem[source.Length + 2];
Array.Copy(source, 0, dest, injectOnFirst ? 2 : 0, source.Length); Array.Copy(source, 0, dest, injectOnFirst ? 2 : 0, source.Length);
@ -241,6 +249,13 @@ namespace Cysharp.Threading.Tasks
return dest; return dest;
} }
static PlayerLoopSystem[] RemoveRunner(PlayerLoopSystem loopSystem, Type loopRunnerYieldType, Type loopRunnerType)
{
return loopSystem.subSystemList
.Where(ls => ls.type != loopRunnerYieldType && ls.type != loopRunnerType)
.ToArray();
}
static PlayerLoopSystem[] InsertUniTaskSynchronizationContext(PlayerLoopSystem loopSystem) static PlayerLoopSystem[] InsertUniTaskSynchronizationContext(PlayerLoopSystem loopSystem)
{ {
var loop = new PlayerLoopSystem var loop = new PlayerLoopSystem
@ -357,6 +372,22 @@ namespace Cysharp.Threading.Tasks
throw new Exception("Target PlayerLoopSystem does not found. Type:" + systemType.FullName); throw new Exception("Target PlayerLoopSystem does not found. Type:" + systemType.FullName);
} }
static void InsertLoop(PlayerLoopSystem[] copyList, InjectPlayerLoopTimings injectTimings, Type loopType, InjectPlayerLoopTimings targetTimings,
int index, bool injectOnFirst, Type loopRunnerYieldType, Type loopRunnerType, PlayerLoopTiming playerLoopTiming)
{
var i = FindLoopSystemIndex(copyList, loopType);
if ((injectTimings & targetTimings) == targetTimings)
{
copyList[i].subSystemList = InsertRunner(copyList[i], injectOnFirst,
loopRunnerYieldType, yielders[index] = new ContinuationQueue(playerLoopTiming),
loopRunnerType, runners[index] = new PlayerLoopRunner(playerLoopTiming));
}
else
{
copyList[i].subSystemList = RemoveRunner(copyList[i], loopRunnerYieldType, loopRunnerType);
}
}
public static void Initialize(ref PlayerLoopSystem playerLoop, InjectPlayerLoopTimings injectTimings = InjectPlayerLoopTimings.All) public static void Initialize(ref PlayerLoopSystem playerLoop, InjectPlayerLoopTimings injectTimings = InjectPlayerLoopTimings.All)
{ {
#if UNITY_2020_2_OR_NEWER #if UNITY_2020_2_OR_NEWER
@ -369,60 +400,82 @@ namespace Cysharp.Threading.Tasks
var copyList = playerLoop.subSystemList.ToArray(); var copyList = playerLoop.subSystemList.ToArray();
var i = FindLoopSystemIndex(copyList, typeof(PlayerLoopType.Initialization)); // Initialization
if (injectTimings | InjectPlayerLoopTimings. InsertLoop(copyList, injectTimings, typeof(PlayerLoopType.Initialization),
InjectPlayerLoopTimings.Initialization, 0, true,
typeof(UniTaskLoopRunners.UniTaskLoopRunnerYieldInitialization), typeof(UniTaskLoopRunners.UniTaskLoopRunnerInitialization), PlayerLoopTiming.Initialization);
InsertLoop(copyList, injectTimings, typeof(PlayerLoopType.Initialization),
InjectPlayerLoopTimings.LastInitialization, 1, false,
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastYieldInitialization), typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastInitialization), PlayerLoopTiming.LastInitialization);
copyList[i].subSystemList = InsertRunner(copyList[i], typeof(UniTaskLoopRunners.UniTaskLoopRunnerYieldInitialization), yielders[0] = new ContinuationQueue(PlayerLoopTiming.Initialization),
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastYieldInitialization), yielders[1] = new ContinuationQueue(PlayerLoopTiming.LastInitialization),
typeof(UniTaskLoopRunners.UniTaskLoopRunnerInitialization), runners[0] = new PlayerLoopRunner(PlayerLoopTiming.Initialization),
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastInitialization), runners[1] = new PlayerLoopRunner(PlayerLoopTiming.LastInitialization));
// EarlyUpdate // EarlyUpdate
i = FindLoopSystemIndex(copyList, typeof(PlayerLoopType.EarlyUpdate)); InsertLoop(copyList, injectTimings, typeof(PlayerLoopType.EarlyUpdate),
copyList[i].subSystemList = InsertRunner(copyList[i], typeof(UniTaskLoopRunners.UniTaskLoopRunnerYieldEarlyUpdate), yielders[2] = new ContinuationQueue(PlayerLoopTiming.EarlyUpdate), InjectPlayerLoopTimings.EarlyUpdate, 2, true,
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastYieldEarlyUpdate), yielders[3] = new ContinuationQueue(PlayerLoopTiming.LastEarlyUpdate), typeof(UniTaskLoopRunners.UniTaskLoopRunnerYieldEarlyUpdate), typeof(UniTaskLoopRunners.UniTaskLoopRunnerEarlyUpdate), PlayerLoopTiming.EarlyUpdate);
typeof(UniTaskLoopRunners.UniTaskLoopRunnerEarlyUpdate), runners[2] = new PlayerLoopRunner(PlayerLoopTiming.EarlyUpdate),
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastEarlyUpdate), runners[3] = new PlayerLoopRunner(PlayerLoopTiming.LastEarlyUpdate)); InsertLoop(copyList, injectTimings, typeof(PlayerLoopType.EarlyUpdate),
InjectPlayerLoopTimings.LastEarlyUpdate, 3, false,
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastYieldEarlyUpdate), typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastEarlyUpdate), PlayerLoopTiming.LastEarlyUpdate);
// FixedUpdate // FixedUpdate
i = FindLoopSystemIndex(copyList, typeof(PlayerLoopType.FixedUpdate)); InsertLoop(copyList, injectTimings, typeof(PlayerLoopType.FixedUpdate),
copyList[i].subSystemList = InsertRunner(copyList[i], typeof(UniTaskLoopRunners.UniTaskLoopRunnerYieldFixedUpdate), yielders[4] = new ContinuationQueue(PlayerLoopTiming.FixedUpdate), InjectPlayerLoopTimings.FixedUpdate, 4, true,
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastYieldFixedUpdate), yielders[5] = new ContinuationQueue(PlayerLoopTiming.LastFixedUpdate), typeof(UniTaskLoopRunners.UniTaskLoopRunnerYieldFixedUpdate), typeof(UniTaskLoopRunners.UniTaskLoopRunnerFixedUpdate), PlayerLoopTiming.FixedUpdate);
typeof(UniTaskLoopRunners.UniTaskLoopRunnerFixedUpdate), runners[4] = new PlayerLoopRunner(PlayerLoopTiming.FixedUpdate),
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastFixedUpdate), runners[5] = new PlayerLoopRunner(PlayerLoopTiming.LastFixedUpdate)); InsertLoop(copyList, injectTimings, typeof(PlayerLoopType.FixedUpdate),
InjectPlayerLoopTimings.LastFixedUpdate, 5, false,
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastYieldFixedUpdate), typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastFixedUpdate), PlayerLoopTiming.LastFixedUpdate);
// PreUpdate // PreUpdate
i = FindLoopSystemIndex(copyList, typeof(PlayerLoopType.PreUpdate)); InsertLoop(copyList, injectTimings, typeof(PlayerLoopType.PreUpdate),
copyList[i].subSystemList = InsertRunner(copyList[i], typeof(UniTaskLoopRunners.UniTaskLoopRunnerYieldPreUpdate), yielders[6] = new ContinuationQueue(PlayerLoopTiming.PreUpdate), InjectPlayerLoopTimings.PreUpdate, 6, true,
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastYieldPreUpdate), yielders[7] = new ContinuationQueue(PlayerLoopTiming.LastPreUpdate), typeof(UniTaskLoopRunners.UniTaskLoopRunnerYieldPreUpdate), typeof(UniTaskLoopRunners.UniTaskLoopRunnerPreUpdate), PlayerLoopTiming.PreUpdate);
typeof(UniTaskLoopRunners.UniTaskLoopRunnerPreUpdate), runners[6] = new PlayerLoopRunner(PlayerLoopTiming.PreUpdate),
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastPreUpdate), runners[7] = new PlayerLoopRunner(PlayerLoopTiming.LastPreUpdate)); InsertLoop(copyList, injectTimings, typeof(PlayerLoopType.PreUpdate),
InjectPlayerLoopTimings.LastPreUpdate, 7, false,
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastYieldPreUpdate), typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastPreUpdate), PlayerLoopTiming.LastPreUpdate);
// Update // Update
i = FindLoopSystemIndex(copyList, typeof(PlayerLoopType.Update)); InsertLoop(copyList, injectTimings, typeof(PlayerLoopType.Update),
copyList[i].subSystemList = InsertRunner(copyList[i], typeof(UniTaskLoopRunners.UniTaskLoopRunnerYieldUpdate), yielders[8] = new ContinuationQueue(PlayerLoopTiming.Update), InjectPlayerLoopTimings.Update, 8, true,
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastYieldUpdate), yielders[9] = new ContinuationQueue(PlayerLoopTiming.LastUpdate), typeof(UniTaskLoopRunners.UniTaskLoopRunnerYieldUpdate), typeof(UniTaskLoopRunners.UniTaskLoopRunnerUpdate), PlayerLoopTiming.Update);
typeof(UniTaskLoopRunners.UniTaskLoopRunnerUpdate), runners[8] = new PlayerLoopRunner(PlayerLoopTiming.Update),
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastUpdate), runners[9] = new PlayerLoopRunner(PlayerLoopTiming.LastUpdate)); InsertLoop(copyList, injectTimings, typeof(PlayerLoopType.Update),
InjectPlayerLoopTimings.LastUpdate, 9, false,
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastYieldUpdate), typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastUpdate), PlayerLoopTiming.LastUpdate);
// PreLateUpdate // PreLateUpdate
i = FindLoopSystemIndex(copyList, typeof(PlayerLoopType.PreLateUpdate)); InsertLoop(copyList, injectTimings, typeof(PlayerLoopType.PreLateUpdate),
copyList[i].subSystemList = InsertRunner(copyList[i], typeof(UniTaskLoopRunners.UniTaskLoopRunnerYieldPreLateUpdate), yielders[10] = new ContinuationQueue(PlayerLoopTiming.PreLateUpdate), InjectPlayerLoopTimings.PreLateUpdate, 10, true,
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastYieldPreLateUpdate), yielders[11] = new ContinuationQueue(PlayerLoopTiming.LastPreLateUpdate), typeof(UniTaskLoopRunners.UniTaskLoopRunnerYieldPreLateUpdate), typeof(UniTaskLoopRunners.UniTaskLoopRunnerPreLateUpdate), PlayerLoopTiming.PreLateUpdate);
typeof(UniTaskLoopRunners.UniTaskLoopRunnerPreLateUpdate), runners[10] = new PlayerLoopRunner(PlayerLoopTiming.PreLateUpdate),
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastPreLateUpdate), runners[11] = new PlayerLoopRunner(PlayerLoopTiming.LastPreLateUpdate)); InsertLoop(copyList, injectTimings, typeof(PlayerLoopType.PreLateUpdate),
InjectPlayerLoopTimings.LastPreLateUpdate, 11, false,
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastYieldPreLateUpdate), typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastPreLateUpdate), PlayerLoopTiming.LastPreLateUpdate);
// PostLateUpdate // PostLateUpdate
i = FindLoopSystemIndex(copyList, typeof(PlayerLoopType.PostLateUpdate)); InsertLoop(copyList, injectTimings, typeof(PlayerLoopType.PostLateUpdate),
copyList[i].subSystemList = InsertRunner(copyList[i], typeof(UniTaskLoopRunners.UniTaskLoopRunnerYieldPostLateUpdate), yielders[12] = new ContinuationQueue(PlayerLoopTiming.PostLateUpdate), InjectPlayerLoopTimings.PostLateUpdate, 12, true,
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastYieldPostLateUpdate), yielders[13] = new ContinuationQueue(PlayerLoopTiming.LastPostLateUpdate), typeof(UniTaskLoopRunners.UniTaskLoopRunnerYieldPostLateUpdate), typeof(UniTaskLoopRunners.UniTaskLoopRunnerPostLateUpdate), PlayerLoopTiming.PostLateUpdate);
typeof(UniTaskLoopRunners.UniTaskLoopRunnerPostLateUpdate), runners[12] = new PlayerLoopRunner(PlayerLoopTiming.PostLateUpdate),
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastPostLateUpdate), runners[13] = new PlayerLoopRunner(PlayerLoopTiming.LastPostLateUpdate)); InsertLoop(copyList, injectTimings, typeof(PlayerLoopType.PostLateUpdate),
InjectPlayerLoopTimings.LastPostLateUpdate, 13, false,
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastYieldPostLateUpdate), typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastPostLateUpdate), PlayerLoopTiming.LastPostLateUpdate);
#if UNITY_2020_2_OR_NEWER #if UNITY_2020_2_OR_NEWER
// TimeUpdate // TimeUpdate
i = FindLoopSystemIndex(copyList, typeof(PlayerLoopType.TimeUpdate)); InsertLoop(copyList, injectTimings, typeof(PlayerLoopType.TimeUpdate),
copyList[i].subSystemList = InsertRunner(copyList[i], typeof(UniTaskLoopRunners.UniTaskLoopRunnerYieldTimeUpdate), yielders[14] = new ContinuationQueue(PlayerLoopTiming.TimeUpdate), InjectPlayerLoopTimings.TimeUpdate, 14, true,
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastYieldTimeUpdate), yielders[15] = new ContinuationQueue(PlayerLoopTiming.LastTimeUpdate), typeof(UniTaskLoopRunners.UniTaskLoopRunnerYieldTimeUpdate), typeof(UniTaskLoopRunners.UniTaskLoopRunnerTimeUpdate), PlayerLoopTiming.TimeUpdate);
typeof(UniTaskLoopRunners.UniTaskLoopRunnerTimeUpdate), runners[14] = new PlayerLoopRunner(PlayerLoopTiming.TimeUpdate),
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastTimeUpdate), runners[15] = new PlayerLoopRunner(PlayerLoopTiming.LastTimeUpdate)); InsertLoop(copyList, injectTimings, typeof(PlayerLoopType.TimeUpdate),
InjectPlayerLoopTimings.LastTimeUpdate, 15, false,
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastYieldTimeUpdate), typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastTimeUpdate), PlayerLoopTiming.LastTimeUpdate);
#endif #endif
// Insert UniTaskSynchronizationContext to Update loop // Insert UniTaskSynchronizationContext to Update loop
i = FindLoopSystemIndex(copyList, typeof(PlayerLoopType.Update)); var i = FindLoopSystemIndex(copyList, typeof(PlayerLoopType.Update));
copyList[i].subSystemList = InsertUniTaskSynchronizationContext(copyList[i]); copyList[i].subSystemList = InsertUniTaskSynchronizationContext(copyList[i]);
playerLoop.subSystemList = copyList; playerLoop.subSystemList = copyList;
@ -431,12 +484,27 @@ namespace Cysharp.Threading.Tasks
public static void AddAction(PlayerLoopTiming timing, IPlayerLoopItem action) public static void AddAction(PlayerLoopTiming timing, IPlayerLoopItem action)
{ {
runners[(int)timing].AddAction(action); var runner = runners[(int)timing];
if (runner == null)
{
ThrowInvalidLoopTiming(timing);
}
runner.AddAction(action);
}
static void ThrowInvalidLoopTiming(PlayerLoopTiming playerLoopTiming)
{
throw new InvalidOperationException("Target playerLoopTiming is not injected. Please check PlayerLoopHelper.Initialize. PlayerLoopTiming:" + playerLoopTiming);
} }
public static void AddContinuation(PlayerLoopTiming timing, Action continuation) public static void AddContinuation(PlayerLoopTiming timing, Action continuation)
{ {
yielders[(int)timing].Enqueue(continuation); var q = yielders[(int)timing];
if (q == null)
{
ThrowInvalidLoopTiming(timing);
}
q.Enqueue(continuation);
} }
// Diagnostics helper // Diagnostics helper

View File

@ -11,29 +11,29 @@ public class Test1
public static async UniTaskVoid TestFunc() public static async UniTaskVoid TestFunc()
{ {
await DoSomeThing(); await DoSomeThing();
string[] scenes = new string[] //string[] scenes = new string[]
{ //{
"Assets/Scenes/SandboxMain.unity", // "Assets/Scenes/SandboxMain.unity",
}; //};
try //try
{ //{
Debug.Log("Build Begin"); // Debug.Log("Build Begin");
BuildPipeline.BuildPlayer(scenes, Application.dataPath + "../target", BuildTarget.StandaloneWindows, BuildOptions.CompressWithLz4); // BuildPipeline.BuildPlayer(scenes, Application.dataPath + "../target", BuildTarget.StandaloneWindows, BuildOptions.CompressWithLz4);
Debug.Log("Build After"); // Debug.Log("Build After");
} //}
catch (Exception e) //catch (Exception e)
{ //{
Debug.LogError(e.Message); // Debug.LogError(e.Message);
} //}
} }
public static async UniTask DoSomeThing() public static async UniTask DoSomeThing()
{ {
Debug.Log("Dosomething"); Debug.Log("Dosomething");
await UniTask.Delay(1500, DelayType.Realtime); await UniTask.Delay(1500, DelayType.DeltaTime);
Debug.Log("Dosomething 2"); Debug.Log("Dosomething 2");
await UniTask.Delay(1000, DelayType.Realtime); await UniTask.Delay(1000, DelayType.DeltaTime);
Debug.Log("Dosomething 3"); Debug.Log("Dosomething 3");
} }
} }

View File

@ -549,19 +549,51 @@ public class SandboxMain : MonoBehaviour
async UniTaskVoid Start() async UniTaskVoid Start()
{ {
var defaultLoop = PlayerLoop.GetDefaultPlayerLoop();
PlayerLoopHelper.Initialize(ref defaultLoop, InjectPlayerLoopTimings.All);
var cts = new CancellationTokenSource(); var cts = new CancellationTokenSource();
TestAsync(cts.Token).Forget(); // TestAsync(cts.Token).Forget();
okButton.onClick.AddListener(UniTask.UnityAction(async () => okButton.onClick.AddListener(UniTask.UnityAction(async () =>
{ {
cts.Cancel(); PlayerLoopHelper.DumpCurrentPlayerLoop();
await UniTask.Yield(); await UniTask.Yield();
})); }));
cancelButton.onClick.AddListener(UniTask.UnityAction(async () =>
{
await UniTask.Yield(PlayerLoopTiming.Initialization);
RunCheck(PlayerLoopTiming.Initialization).Forget();
RunCheck(PlayerLoopTiming.LastInitialization).Forget();
RunCheck(PlayerLoopTiming.EarlyUpdate).Forget();
RunCheck(PlayerLoopTiming.LastEarlyUpdate).Forget();
RunCheck(PlayerLoopTiming.FixedUpdate).Forget();
RunCheck(PlayerLoopTiming.LastFixedUpdate).Forget();
RunCheck(PlayerLoopTiming.PreUpdate).Forget();
RunCheck(PlayerLoopTiming.LastPreUpdate).Forget();
RunCheck(PlayerLoopTiming.Update).Forget();
RunCheck(PlayerLoopTiming.LastUpdate).Forget();
RunCheck(PlayerLoopTiming.PreLateUpdate).Forget();
RunCheck(PlayerLoopTiming.LastPreLateUpdate).Forget();
RunCheck(PlayerLoopTiming.PostLateUpdate).Forget();
RunCheck(PlayerLoopTiming.LastPostLateUpdate).Forget();
}));
await UniTask.Yield(); await UniTask.Yield();
} }
async UniTaskVoid RunCheck(PlayerLoopTiming timing)
{
//await UniTask.Yield(timing);
//UnityEngine.Debug.Log("Yield:" + timing);
await UniTask.DelayFrame(1, timing);
UnityEngine.Debug.Log("Delay:" + timing);
}
private void Application_logMessageReceived2(string condition, string stackTrace, LogType type) private void Application_logMessageReceived2(string condition, string stackTrace, LogType type)
{ {
throw new NotImplementedException(); throw new NotImplementedException();

View File

@ -12,16 +12,16 @@ public class FooMonoBehaviour : MonoBehaviour
} }
private async UniTask Download(UnityWebRequest req, string filePath) //private async UniTask Download(UnityWebRequest req, string filePath)
{ //{
_ = req.SendWebRequest(); // _ = req.SendWebRequest();
// var aaa = await foo; // // var aaa = await foo;
// Debug.Log(aaa); // // Debug.Log(aaa);
await UniTask.Yield(); // await UniTask.Yield();
//File.WriteAllText(filePath, req.downloadHandler.text ?? string.Empty); // //File.WriteAllText(filePath, req.downloadHandler.text ?? string.Empty);
} //}
} }

View File

@ -1,2 +1,2 @@
m_EditorVersion: 2020.2.0f1 m_EditorVersion: 2020.2.1f1
m_EditorVersionWithRevision: 2020.2.0f1 (3721df5a8b28) m_EditorVersionWithRevision: 2020.2.1f1 (270dd8c3da1c)