์ค๋์ GamePiece Move๋ฅผ ์์ ํด๋ดค๋ค.ย
์ข๋ ๊น๋ํ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํด ์ฌ๋ฌ๊ฐ์ง๋ฅผ ์๋ํ๋ค๊ฐ ์ค๋ ํ๋ฃจ ์๊ฐ์ด ๋ค ๊ฐ๋ฏ ์ถ๋ค.
GamePieceMoveSystem ์์ Job์ ์์ฑํ๊ณ ย ScheduleParallel๋ก ๋ฉํฐ์ฐ๋ ๋์์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ๋ค.
ย ย [BurstCompile]
ย ย public void OnUpdate(ref SystemState state)
ย ย {
ย ย ย ย var ecbSingleton = SystemAPI.GetSingleton<BeginSimulationEntityCommandBufferSystem.Singleton>();
ย ย ย ย var ecb = ecbSingleton.CreateCommandBuffer(state.WorldUnmanaged);
ย ย ย ย var deltaTime = SystemAPI.Time.DeltaTime;
ย ย ย ย var gamePieceMoveJob = new GamePieceMoveJob
ย ย ย ย {
ย ย ย ย ย ย ECB = ecb.AsParallelWriter(),
ย ย ย ย ย ย DeltaTime= deltaTime,
ย ย ย ย };
ย ย ย ย gamePieceMoveJob.ScheduleParallel(movePieceQuery, state.Dependency);
ย ย }
Job ๋ด์ฉ์ ๋งค์ฐ ๊น๋ํ๋ค. ๊ตฌํ ๋ถ๋ถ์ IAspect์์ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ด๋ค.
[WithAll(typeof(IsMoveData))]
[BurstCompile]
partial struct GamePieceMoveJob : IJobEntity
{
ย ย public EntityCommandBuffer.ParallelWriter ECB;
ย ย public float DeltaTime;
ย ย void Execute([ChunkIndexInQuery] int chunkIndex, PieceMoveAspect pieceMove)
ย ย {
ย ย ย ย pieceMove.MoveGamePiece(chunkIndex, ECB, DeltaTime);
ย ย }
}
IApect์์ ์ด๋์ ๋ํ ๊ตฌํ์ ํ๋ค. IAspect๊ฐ 1.0 ๋ฒ์ ์ ์๋ก ์๊ธด๊ฑด๋ฐ ์ฒ์์๋ ๋ฏ์ ๊ธฐ๋ฅ์ด๋ผ ๋ถํธํ๊ณ ์ด๊ฑธ ์ ๋ง๋ค์์๊น ์ถ์๋๋ฐ ์์ ์ ์ธ๊ณ๋ค. ์ด๋ ์ ๋๋ถ์ ์ฝ๋ ์ต์ ํ๊ฐ ์์ฐ์ค๋ฝ๊ฒ ๋๋ค. ๊ฐ์ฒด์งํฅ ์ค๊ณ๋ฅผ ๋ฅ์ํ๊ฒ ํ์ง ๋ชปํด ํญ์ ์ฝ๋๊ฐ ๊ฐํ์ธ ๋์๊ฒ DOTS๋ ์ ๋ํฐ๊ฐ ์ค ์ ๋ฌผ์ด๋ ๋ง์ฐฌ๊ฐ์ง๋ค.ย ย
ย ย public void MoveGamePiece(int chunkIndex, EntityCommandBuffer.ParallelWriter ECB, float DeltaTime)
ย ย {
ย ย ย ย var Destination = new float3(Coord.x, Coord.y, 0);
ย ย ย ย if (math.distance(Destination, transform.Position) > 0.1f)
ย ย ย ย {
ย ย ย ย ย ย var direction = Destination - transform.Position;
ย ย ย ย ย ย transform.Position += math.normalize(direction) * DeltaTime * BoardData.GAME_PIECE_MOVE_SPEED;
ย ย ย ย }
ย ย ย ย else
ย ย ย ย {
ย ย ย ย ย ย transform.Position = Destination;
ย ย ย ย ย ย ECB.SetComponentEnabled<IsMoveData>(chunkIndex, Entity, false);
ย ย ย ย }
ย ย }
์ ๋ํฐ๋ก ํ๋ก๊ทธ๋จ์ ๊ณต๋ถํ ๋น์ ๊ณต์ด๋ผ ๋ด ์ฝ๋์ ์์ ์ด ์์ง ์๋ค. DOTS๋ ๊ณต๋ถ์ค์ด๋ผ ์.. ์ด๊ฑฐ๋ณด๋ค ๋ ์ข์ ์ฝ๋๊ฐ ์์ง ์์๊น ์ถ๋ค. ๊ณ์ ํฌ๋ผ๊ฐ์ ์ธ๊ตญ์ธ๋ค ์ด์ผ๊ธฐํ๋๊ฑฐ ๋ณด๋ฉด์ ํ์ ์ป์ด๋ด๊ณ ๋ฌผ์ด๋ณด๋ฉด์ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์๋ค. ์ ๋ํฐ API์ ์์ ์ฝ๋ ์ข ๋ฃ์ด์คฌ์ผ๋ฉด ์ข๊ฒ ๋ค. ๋ธ๋ ๊ตฌ์กฐ๋ง ์ ์ด๋๊ณ ์ค๋ช ์ด ์๋ ๊ฒ๋ ๋ง๊ณ ใ ๊ณ ์๋ค์ ๊ทธ๊ฑฐ๋ณด๋ฉด์ ์ด๋ป๊ฒ ๊ณต๋ถํ๋๊ฑด์ง ์ ๊ธฐํ ๋ฟ์ด๋ค;
์ํผ DOTS๋ ์ฌ๋ฏธ๋๋ค.ย
ย
๋ฅ๋ ฅ์
ใดใด DOTS๊ฐ ์ด๋ ต์ง ์์. ๋ ํผ๋ฐ์ค๊ฐ ์์ด์ ๋นก์ผ๊ฑฐ์ง ใ
๋๋ฌด ์ด๋ ค์ด๊ฒ...
์ต์ํ์ง ์์์ ๊ทธ๋ฐ๊ฑฐ์ง! - dc App
์ ๋ํฐ๋๋ค ์ ๊ฑธ๋ก ๊ฒ์ํ๋ ์ ๋๋ก ์ถ์๋ฅผ ์ข ํด์ฃผ์ง... ์์ง DOTS๋ก ๋ณผ๋งํ ๋ ํผ๋ฐ์ค๊ฐ ์์. ๋ง ๋นํ๊ธฐ 10000๋ง๋ฆฌ ์คํฐํ๋ด์ ๋ฟ ๋ฟ ์ดํ๋๋ฐ ํผํฌ๋จผ์ค ์กฐํ ์ด๋ฐ๊ฑฐ ๋ง๊ณ , ์ ์ด๋ ๊ธฐ๋ณธ ๋์๋ธ๋ก ์ ๋์ ์์คํ ์ด ๋ค์ด๊ฐ RPG ๋ ํผ๋ฐ์ค์ข ํ๋ ์์์ผ๋ฉด์ข๊ฒ ์...
๊ฐ๋ฐ ์ค์ด๋ผ ๊ทธ๋ฐ๋ฏ.. ์ด๊ฑฐ ๋ค ๋ง๋ค๋ฉด ๋ธ๋ก๊ทธ์ ์ฝ๋ ์ฌ๋ฆด์๊ฐ์ค - dc App