Итоговый код, который я тестировал:
[Serializable][StructLayout(LayoutKind.Sequential)]
public struct DataContainer
{
public bool isActive;
public int someNumber;
public override string ToString()
{
return "Is DataContainer";
}
}
public unsafe class TestJob : VulpesMonoBehaviour
{
[SerializeField] private DataContainer dataContainer;
private UnsafeTestJob job;
private JobHandle jobHandle;
public DataContainer* dataPtr;
void Start()
{
unsafe
{
fixed (DataContainer* ptr = &dataContainer)
{
dataPtr = ptr;
job = new UnsafeTestJob
{
dataPtr = ptr
};
}
}
StartCoroutine(RunJobRoutine());
}
[Button("Stop Job")]
public void StopJob()
{
dataContainer.isActive = false;
}
public void OnDestroy()
{
jobHandle.Complete();
}
IEnumerator RunJobRoutine()
{
jobHandle = job.Schedule();
Debug.Log("Job started!");
yield return new WaitUntil(() => jobHandle.IsCompleted);
jobHandle.Complete();
Debug.Log("Job completed!");
}
}