Unity ECS ScheduleParallel で 値を抽出したい (備忘)
(追記:修正 2021/10/06)
結論は出来て出来ん。
Job理解しきれてなかった。
スケジュール(Schedule/ScheduleParallel)をやってる時点で
メインスレッドからはずれて別の時に実行されます。
1.スケジュールが完了していれば(1~2フレーム待てば)使える。
2.JobをCompleteさせる。(スケジュールの恩寵が薄れる)
横と縦だけじゃなくて時間軸まで意識しないといけなくてワイ、泣きそう。
~~~~やり方~~~~
WithNativeDisableParallelForRestriction()と
WithNativeDisableContainerSafetyRestriction()を使ってください。
・WithNativeDisableParallelForRestriction(myvar)
⇒複数のスレッドが同じ書き込み可能なネイティブコンテナーにアクセスすることを許可。
・WithNativeDisableContainerSafetyRestriction(myvar)
⇒ネイティブコンテナへの危険なアクセスを防ぐ通常の安全制限を無効。
System.cs
public enum TradeResult{ Success = 0, Fail = 1 }
protected override void OnUpdate()
{
var results = new NativeArray<TradeResult>(2, Allocator.TempJob, NativeArrayOptions.UninitializedMemory);
var members = new NativeArray<Entity>(2, Allocator.TempJob, NativeArrayOptions.UninitializedMemory);
Dependency = Entities.
WithNativeDisableParallelForRestriction(results). // 重要なところ
WithNativeDisableContainerSafetyRestriction(results). // 重要なところ
WithNativeDisableParallelForRestriction(members). // 重要なところ
WithNativeDisableContainerSafetyRestriction(members). // 重要なところ
ForEach((Entity member) => {
~~~~~~~~~~~~ なんやかんやの処理 ~~~~~~~~~~~
members[0] = member;
results[0] = TradeResult.Success;
members[1] = member;
results[1] = TradeResult.Fail;
~~~~~~~~~~~~ なんやかんやの処理 ~~~~~~~~~~~
}).ScheduleParallel(Dependency);
var dataFromEquipment = GetComponentDataFromEntity<Translation>();
Dependency.Complete(); // 2.JobをCompleteさせる
Debug.Log($"{results[0]}-{results[1]}"); // => Success - Fail
if (dataFromEquipment.HasComponent(members[0])) Debug.Log($"Exist Position {dataFromEquipment[members[0]]}");
if (dataFromEquipment.HasComponent(members[1])) Debug.Log($"Exist Position {dataFromEquipment[members[1]]}");
results.Dispose();
members.Dispose();
}
Author And Source
この問題について(Unity ECS ScheduleParallel で 値を抽出したい (備忘)), 我々は、より多くの情報をここで見つけました https://qiita.com/AllNight/items/d7ea63021b874787573d著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .