Ejemplo n.º 1
0
    protected void Update()
    {
        ProcessInputAndUpdateUi();

        // Enqueue a path queries using FindPath. Checking start or goal changed
        // is omitted for clarity. Use Pathfinder recalculate flags to indicate which
        // states trigger automatic recalculation of an agent's path.
        _agent.FindPath(_start.position.xz(), _goal.position.xz());

        // Manually trigger navmesh and pathfinder update to ensure the visuals line up
        Navmesh.ProcessModifications();

        // A ray cast, make sure to dispose of the RayCastResult returned from
        // Navmesh.CastSegment or Navmesh.CastRay
        var rbs = FindObjectsOfType <RaycastBehaviour>();

        foreach (var rb in rbs)
        {
            var from = rb.GetStart();
            var to   = rb.GetGoal();

            if (!Navmesh.Contains(from) || !Navmesh.Contains(to))
            {
                continue;
            }

            var pointSize = .1f * _cameraController.Zoom;

            using (var result = Navmesh.CastSegment(from, to, true))
            {
                _lineDrawer.DrawLine(from, to, result.CollisionDetected ? CastHitColor : CastColor);
                var hits = result.Hits;
                for (int i = 0; i < hits.Length; i++)
                {
                    _lineDrawer.DrawPoint(hits[i].Position, i == 0 ? CastHitColor : CastColor, pointSize);
                }
            }
        }

        // A disc cast, make sure to dispose of the DiscCastResult returned from
        // Navmesh.CastDisc
        var dbs = FindObjectsOfType <DiscCastBehaviour>();

        foreach (var db in dbs)
        {
            if (!Navmesh.Contains(db.Centre))
            {
                continue;
            }
            using (var result = Navmesh.CastDisc(db.Centre, db.Radius, false))
                _lineDrawer.DrawCircle(db.Centre, new Vector2(0, db.Radius), 2 * Mathf.PI, result.CollisionDetected ? CastHitColor : CastColor, res: 200);
        }
    }
Ejemplo n.º 2
0
    protected void Update()
    {
        ProcessInputAndUpdateUi();
        _agent.FindPath(_goal.position);

        var rbs = FindObjectsOfType <RaycastBehaviour>();

        foreach (var rb in rbs)
        {
            var from = rb.GetStart();
            var to   = rb.GetGoal();

            if (!Plane.Contains(from) || !Plane.Contains(to))
            {
                continue;
            }

            var pointSize = .1f * _cameraController.Zoom;

            using (var result = _navmesh.CastSegment(from, to, true))
            {
                _lineDrawer.DrawLine(from, to, result.CollisionDetected ? CastHitColor : CastColor);
                var hits = result.Hits;
                for (int i = 0; i < hits.Length; i++)
                {
                    _lineDrawer.DrawPoint(hits[i].Position, i == 0 ? CastHitColor : CastColor, pointSize);
                }
            }
        }

        var dbs = FindObjectsOfType <DiscCastBehaviour>();

        foreach (var db in dbs)
        {
            if (!Plane.Contains(db.Centre))
            {
                continue;
            }
            using (var result = _navmesh.CastDisc(db.Centre, db.Radius, false))
                _lineDrawer.DrawCircle(db.Centre, new Vector2(0, db.Radius), 2 * Mathf.PI, result.CollisionDetected ? CastHitColor : CastColor, res: 200);
        }
    }