NO MOVING?
3354252–262507–Unity-Multithreaded-Job-System-master.rar (35.7 KB)
You are not using new Unity.Job system, so I can’t help you.
how to enable it?
Unity Technologies will let us know during 2018.1 beta.
Here is their statement regarding C# Job System in 2018, copied from their recent 2018.1 beta blog-post:
https://blogs.unity3d.com/2018/01/10/get-early-access-to-unity-2018-1-the-beta-is-out/
Once they make this officially available, they are most likely provide (more) information how to use it.
Job system is already available in the 2018.1 beta ![]()
just use the relevant using statement!
just download unity 2018.1 and use Unity.Jobs
https://docs.unity3d.com/2018.1/Documentation/ScriptReference/Unity.Jobs.IJob.html
HI,can u make my uploaded example works? thanks a lot!
I really think you should be trying basic tutorials first, the job system is an advanced threaded solution and you should probably get a grip with unity first before getting comfortable with these.
the code posted on the docs is more than enough to work out what to do, so probably if you cant work it out from that you should try looking at:
OK,My mistake,this example is not the c# job system…and ijob is very easy to use…
using UnityEngine;
using Unity.Collections;
using Unity.Jobs;
class ApplyVelocitySample : MonoBehaviour
{
struct VelocityJob : IJob
{
// Jobs declare all data that will be accessed in the job
// By declaring it as read only, multiple jobs are allowed to access the data in parallel
[ReadOnly]
public NativeArray<Vector3> velocity;
// By default containers are assumed to be read & write
public NativeArray<Vector3> position;
// Delta time must be copied to the job since jobs generally don't have concept of a frame.
// The main thread waits for the job on the same frame or the next frame, but the job should
// perform work in a deterministic and independent way when running on worker threads.
public float deltaTime;
// The code actually running on the job
public void Execute()
{
// Move the positions based on delta time and velocity
for (var i = 0; i < position.Length; i++)
position[i] = position[i] + velocity[i] * deltaTime;
}
}
public void Update()
{
var position = new NativeArray<Vector3>(500, Allocator.Persistent);
var velocity = new NativeArray<Vector3>(500, Allocator.Persistent);
for (var i = 0; i < velocity.Length; i++)
velocity[i] = new Vector3(0, 10, 0);
// Initialize the job data
var job = new VelocityJob()
{
deltaTime = Time.deltaTime,
position = position,
velocity = velocity
};
// Schedule the job, returns the JobHandle which can be waited upon later on
JobHandle jobHandle = job.Schedule();
// Ensure the job has completed
// It is not recommended to Complete a job immediately,
// since that gives you no actual parallelism.
// You optimally want to schedule a job early in a frame and then wait for it later in the frame.
jobHandle.Complete();
// Debug.Log(job.position[0]);
transform.position = job.position[0];//main thread to use worker thread data need after complet.
// Native arrays must be disposed manually
position.Dispose();
velocity.Dispose();
}
}
I actually really like this execution of thread handling. It’s quite elegant. Kudos, Unity, you’ve just won a new user.