Job System
Job System
Job์ด๋?
- ๋จ์ผ ์์ ์ ์ํํ๋ ์์ ๋จ์
Job System์ด๋?
- ์ค๋ ๋๋ฅผ ๋์ ํด ํ์คํฌ๋ฅผ ๋ง๋ค์ด ๋ฉํฐ์ค๋ ๋ ์ฝ๋๋ฅผ ๊ด๋ฆฌ
- ์ฌ๋ฌ ์ฝ์ด์ ๊ฑธ์ณ ์์ปค ์ค๋ ๋ ๊ทธ๋ฃน์ ๊ด๋ฆฌ
- ์ผ๋ฐ์ ์ผ๋ก ์ปจํ ์คํธ ๋ณ๊ฒฝ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฝ์ด๋น ํ๋์ ์์ปค ์ค๋ ๋๊ฐ ์์ผ๋ ์ฌ์ฉํ ์ฝ์ด ์์ฝ๋ ๊ฐ๋ฅ
- ์ก ๋๊ธฐ์ด์ ์์๋๋ก ์ก์ ๋ฐฐ์นํ์ฌ ์คํ
public class RotationSpeedSystem : JobComponentSystem
{
[BurstCompile]
struct RotationSpeedRotation : IJobForEach<Rotation, RotationSpeed>
{
public float dt;
public void Execute(ref Rotation rotation, [ReadOnly]ref RotationSpeed speed)
{
rotation.value = math.mul(math.normalize(rotation.value), quaternion.axisAngle(math.up(), speed.speed * dt));
}
}
// Any previously scheduled jobs reading/writing from Rotation or writing to RotationSpeed
// will automatically be included in the inputDeps dependency.
protected override JobHandle OnUpdate(JobHandle inputDeps)
{
var job = new RotationSpeedRotation() { dt = Time.deltaTime };
return job.Schedule(this, inputDeps);
}
}
- ๋ค๋ฅธ ์์คํ ์์์ ์ฌ๋ฌ job๋ ๋ณ๋ ฌ ์ํ์ IComponentData๋ฅผ ์์ํ Data๋ก๋ถํฐ read ์์ ์ ์ํํ ์ ์๋ค
- ์ด๋ค job์ด Data์ write ์์ ์ ์ํํ๋ ์ค์๋ ๋ค๋ฅธ job๋ค์ ์์ ์ ์ํํ ์ ์์ผ๋ฉฐ, ์์ ์ค์ผ์ค๋ง์ ๊ฑธ์ด๋๋ค
์๋ ๋ฐฉ์
- ๋ชจ๋ job ๊ทธ๋ฆฌ๊ณ system์ ์ด๋ค ComponentType์ ๋ํ์ฌ ์์ ์ ์ํํ ๊ฒ์ธ์ง๋ฅผ ์ ์ธํ๋ค
- JobComponentSystem์ JobHandle์ ๋ฐํํ๊ณ , EntityManager๋ฅผ ํตํด raed ์ค์ธ์ง write ์ค์ธ์ง ์๋์ผ๋ก ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค
- ํ system์ด A ์ปดํฌ๋ํธ์ ๋ํด write ์์ ์ค์ด๊ณ , ๋ ๋ค๋ฅธ system์ด A ์ปดํฌ๋ํธ ์ฝ๊ธฐ ์์ ์ ํ๋ ค ํ๋ค๋ฉด, JobComponentSystem์ด ์์ ํ์ ๋ฆฌ์คํธ๋ฅผ ์ดํด๋ณด๊ณ write ์์ ์ค์ธ ์์คํ ์ด ์์์ ์๋ฆด ๊ฒ์ด๋ค.
์์ ์์คํ
- ๋ฐ๋๋ฝ ๋ฐฉ์ง๋ฅผ ์ํด ๋ฐ์ดํฐ์ ๋ ํผ๋ฐ์ค๊ฐ ์๋ ๋ณต์ฌ๋ณธ์ ์ด์ฉํด ์ฒ๋ฆฌ
- bittable ๋ฐ์ดํฐ ํ์ ์๋ง ์์ธ์ค ๊ฐ๋ฅ
- memcopy๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌ
NativeContainer
- ๋ค์ดํฐ๋ธ ๋ฉ๋ชจ๋ฆฌ์ ๋น๊ต์ ์์ ํ C# Wrapper ๋ฅผ ์ ๊ณตํ์ฌ ๊ด๋ฆฌ๋๋ ๊ฐ ํ์
- NavtiveContainer๋ฅผ ์ฌ์ฉํ๋ฉด Job์ ํตํด ์ฌ๋ณธ์ผ๋ก ์์ ํ๋ ๋์ ์ฃผ ์ค๋ ๋์ ๊ณต์ ๋ ๋ฐ์ดํฐ์ ์ ๊ทผ
- ๊ธฐ๋ณธ ์ ๊ณต๋๋ ํ์
์ NativeArray