コード例 #1
0
    private void Invalidate()
    {
        positionLastFrame = transform.localPosition;
        rotationLastFrame = transform.localRotation;
        scaleLastFrame    = transform.localScale;

        if (collider)
        {
            foreach (var controller in cellController)
            {
                controller.RemoveCollider(collider);
                controller.Invalidate();
            }
            cellController = new List <NavCellController>();
            foreach (var controller in NavCellController.GetCellsInBounds(collider, mesh))
            {
                cellController.Add(controller);
                controller.AddCollider(collider);
                controller.Invalidate();
            }
        }
        else
        {
            foreach (Transform child in transform)
            {
                child.GetComponent <NavMeshTracker>()?.Invalidate();
            }
        }
    }
コード例 #2
0
 private bool _QueueCell(float priority, NavCellController cellController)
 {
     lock (queueLock)
     {
         if (!queuedCells.Contains(cellController))
         {
             queuedCells.Add(cellController);
             queue.Enqueue(priority, cellController);
             return(true);
         }
         else
         {
             return(false);
         }
     }
 }
コード例 #3
0
 private IEnumerator Generate()
 {
     isRunning = true;
     while (QueueHasElements)
     {
         float             key  = -1f;
         NavCellController cell = null;
         lock (queueLock)
         {
             (key, cell) = queue.Dequeue();
             queuedCells.Remove(cell);
         }
         yield return(cell.Generate(navMeshGenerationSettings));
     }
     isRunning = false;
 }
コード例 #4
0
 public static bool QueueCell(float priority, NavCellController cellController)
 {
     return(instance._QueueCell(priority, cellController));
 }