コード例 #1
0
    protected override JobHandle OnUpdate(JobHandle inputDeps)
    {
        UnitMovementJob moveJob = new UnitMovementJob
        {
            deltaTime = Time.deltaTime
        };
        JobHandle MoveHandle = moveJob.Schedule(this, inputDeps);

        return(MoveHandle);
    }
コード例 #2
0
    private void FixedUpdate()
    {
        int unitCount = 0;

        positionsArray.Clear();
        directionArray.Clear();
        float3  direction = float3.zero;
        Vector2 unitSize = Vector2.zero, offset = Vector2.zero;

        for (int i = 0; i < GameData.Instance.kingdoms.Count; ++i)
        {
            Kingdom kingdom = GameData.Instance.kingdoms [i];

            for (int a = 0; a < kingdom.units.Count; ++a)
            {
                Unit unit = kingdom.units [a];

                if (unit.health <= 0)
                {
                    continue;
                }

                unitSize    = unit.unitMB.size;
                offset      = unit.unitMB.offset;
                direction.x = unit.unitMB.movingTo.x;
                direction.y = unit.unitMB.movingTo.y;
                direction.z = unit.unitMB.moving ? unit.unitMB.speed : 0;
                positionsArray.Add(unit.position);
                directionArray.Add(direction);
                unitCount++;
            }

            for (int a = 0; a < kingdom.peasants.Count; ++a)
            {
                Unit unit = kingdom.peasants [a];

                if (unit.health <= 0)
                {
                    continue;
                }

                unitSize    = unit.unitMB.size;
                offset      = unit.unitMB.offset;
                direction.x = unit.unitMB.movingTo.x;
                direction.y = unit.unitMB.movingTo.y;
                direction.z = unit.unitMB.moving ? unit.unitMB.speed : 0;
                positionsArray.Add(unit.position);
                directionArray.Add(direction);
                unitCount++;
            }
        }

        if (newPositionsArray.Length < unitCount)
        {
            newPositionsArray.Dispose();
            newPositionsArray = new NativeArray <float2> (unitCount * 2, Allocator.Persistent);
        }

        UnitMovementJob unitMovementJob = new UnitMovementJob {
            units      = positionsArray,
            positions  = newPositionsArray,
            directions = directionArray,
            unitSize   = unitSize,
            offset     = offset,
            gameSpeed  = GameData.Instance.gameSpeed,
            random     = new Unity.Mathematics.Random((uint)UnityEngine.Random.Range(0, 10000000))
        };

        JobHandle jobHandle             = unitMovementJob.Schedule(unitCount, 100);

        jobHandle.Complete();
        unitCount = 0;
        Vector3 position = Vector3.zero;

        for (int i = 0; i < GameData.Instance.kingdoms.Count; ++i)
        {
            Kingdom kingdom = GameData.Instance.kingdoms [i];

            for (int a = 0; a < kingdom.units.Count; ++a)
            {
                Unit unit = kingdom.units [a];

                if (unit.health <= 0)
                {
                    continue;
                }

                unit.position            += unit.unitMB.CheckPosition(newPositionsArray [unitCount]);
                position.x                = unit.position.x + unit.unitMB.jumpVector.x + unit.unitMB.attackVector.x;
                position.y                = unit.position.y + unit.unitMB.jumpVector.y + unit.unitMB.attackVector.y;
                unit.unitMB.body.position = position;
                unitCount++;
            }

            for (int a = 0; a < kingdom.peasants.Count; ++a)
            {
                Unit unit = kingdom.peasants [a];

                if (unit.health <= 0)
                {
                    continue;
                }

                unit.position            += unit.unitMB.CheckPosition(newPositionsArray [unitCount]);
                position.x                = unit.position.x + unit.unitMB.jumpVector.x + unit.unitMB.attackVector.x;
                position.y                = unit.position.y + unit.unitMB.jumpVector.y + unit.unitMB.attackVector.y;
                unit.unitMB.body.position = position;
                unitCount++;
            }
        }
    }
コード例 #3
0
    protected override JobHandle OnUpdate(JobHandle inputDeps)
    {
        var job = new UnitMovementJob();

        return(job.Schedule(this, inputDeps));
    }