- using Godot;
-
- public class TestNavigation2 : Node2D
- {
- private Navigation2D _navigation2D;
-
-
- private Sprite _enemy;
- private NavigationAgent2D _navigationAgent2D;
-
- public override void _Ready()
- {
- _navigation2D = GetNode<Navigation2D>("Navigation2D");
- _enemy = _navigation2D.GetNode<Sprite>("Enemy");
- _navigationAgent2D = _enemy.GetNode<NavigationAgent2D>("NavigationAgent2D");
-
- _navigationAgent2D.SetTargetLocation(GetGlobalMousePosition());
-
- }
-
- public override void _PhysicsProcess(float delta)
- {
- if (_navigationAgent2D.IsNavigationFinished())
- {
- return;
- }
-
- var pos = _navigationAgent2D.GetNextLocation();
- _enemy.GlobalPosition = _enemy.GlobalPosition.MoveToward(pos, 100 * delta);
-
- }
-
- public override void _Process(float delta)
- {
- Update();
- }
-
- public override void _Draw()
- {
- var points = _navigationAgent2D.GetNavPath();
- if (points != null && points.Length >= 2)
- {
- DrawPolyline(points, Colors.Red);
- //DrawMultiline(points, Colors.Red);
- }
- }
-
- private void _on_Timer_timeout()
- {
- var target = GetGlobalMousePosition();
- if (_navigationAgent2D.GetTargetLocation() != target)
- {
- GD.Print("更新目标位置...");
- _navigationAgent2D.SetTargetLocation(target);
- }
- }
- }