【37】將系統轉換為任務 Converting System to Job
【Unity6】使用DOTS制作RTS游戲|17小時完整版|CodeMonkey|【37】將系統轉換為任務 Converting System to Job_嗶哩嗶哩_bilibili
a. 將普通的方法,轉化成job。第一個是寫一個partial struct xxx;第二個是繼承IJobEntity接口;第三個編寫Execute方法。第四個,是為在結構體上啟用BurstCompile,使得這個job得到更快的執行。如下:
普通系統中的方法如下:它是將遍歷所有ShootAttack組件,將其屬性isTriggered置為false。
將其轉為job如下:partial struct這是第一個注意點。然后繼承IJobEntity接口。
然后再編寫Execute方法,注意這個方法名是固定的,但是參數是不固定。還有一個注意點就是Job中,不能訪問托管的數據,只能是值類型的數據。同時和系統中有所區別的是,Execute方法中的參數是ref或者in類型。
b. 特殊查詢的方法改下成job,如下:這個方法對那些啟用或者禁用的Selected都要操作。
改成Job之后,應該是這樣:加上一個標簽:IgnoreComponentEnabledState。表示忽略組件的開啟或者禁用狀態。
c. 執行job
new xxxJob(),然后調用ScheduleParallel()方法即可。
d. 在Job中不能使用SystemAPI,比如:這里使用SystemAPI的Exist方法和HasComponent方法。但是提示報錯。
解決方法:使用ComponentLookUp 來代替SystemAPI.HasComponent。用EntityStorageInfoLookup代替SystemAPI.Exists方法。