最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Godot4 實現(xiàn)自動尋路 2D C#版

2023-05-17 14:20 作者:CG游戲  | 我要投稿

1.添加節(jié)點:

????NavigationRegion2D(2D導(dǎo)航地圖)

????Sprite2D(要移動的元素,圖片替代)

????Line2D(顯示路徑用)


2.代碼正文:

????float speed = 400;//移動速度

???? NavigationRegion2D navmesh;

???? Rid map;

???? bool isAc = false;

???? public Vector2 dhzb = new Vector2(0, 0);//要導(dǎo)航的終點坐標(biāo)

???? Line2D line;

???? List<Vector2> path;

???? Vector2 start_position;//起點

????Sprite2D spdh;//開始點


// Called when the node enters the scene tree for the first time.

public override void _Ready()

{

???? CallDeferred("setup_navserver");

???? line = GetNode<Line2D>("Line2D");

???? start_position = GetNode<Sprite2D>("SPDMD").Position;

???? spdh = GetNode<Sprite2D>("SPDH");

???? navmesh = GetNode<NavigationRegion2D>("Navmesh");

}


// Called every frame. 'delta' is the elapsed time since the previous frame.

public override void _Process(double delta)

{

???? if (isAc)

???? {

???????? var walk_distance = speed *(float)delta;

???????? move_along_path(walk_distance);

???? }

}

//開始導(dǎo)航

public void SetDaoHang(Vector2 dhzb)

{

???? //start_position = start_position - pianyi;

???? spdh.Position = start_position;

???? line.ClearPoints();

???? path = NavigationServer2D.MapGetPath(map, spdh.Position, dhzb, true).ToList();

???? for (int i = 0; i < path.Count; i++)

???? {

???? line.AddPoint(path[i]);

???? }

???? path.RemoveAt(0);

???? isAc = true;

}

#region? 導(dǎo)航函數(shù)

//初始化

private void setup_navserver()

{

???? map = NavigationServer2D.MapCreate();

???? NavigationServer2D.MapSetActive(map, true);

???? //create a new navigation region and add it to the map

???? var region = NavigationServer2D.RegionCreate();//

???? NavigationServer2D.RegionSetTransform(region, Transform2D.Identity);//

???? NavigationServer2D.RegionSetMap(region, map);//

???? //sets navigation mesh for the region

???? NavigationServer2D.RegionSetNavigationPolygon(region, navmesh.NavigationPolygon);

???? // wait for Navigation2DServer sync to adapt to made changes

}

//移動函數(shù)

private void move_along_path(float distance)

{

???? var last_point = spdh.Position;

???? for (int i = 0; i < path.Count; i++)

???? {

???????? float distance_between_points = last_point.DistanceTo(path[0]);

???????? if (distance <= distance_between_points)

???????? {

???????????? //The position to move to falls between two points.

???????????? spdh.Position = last_point.Lerp(path[0], distance / distance_between_points);

???????????? //isAc = false;

???????????? return;

???????? }

???????? distance -= distance_between_points;

???????? last_point = path[0];

???????? //line.AddPoint(last_point);

???????? path.RemoveAt(0);

???? }

???? spdh.Position = last_point;

???? if (path.Count == 0)

???? {

???? ???? isAc = false;

???? }

}

#endregion


//外部調(diào)用函數(shù)

public void ZBSetDH(string szb)

{

????SetDaoHang(GetNode<Sprite2D>(szb).Position);

}


Godot4 實現(xiàn)自動尋路 2D C#版的評論 (共 條)

分享到微博請遵守國家法律
聂拉木县| 安义县| 鄄城县| 建阳市| 英德市| 镇原县| 阿拉善左旗| 视频| 建昌县| 安康市| 双柏县| 张家界市| 宽甸| 措勤县| 开原市| 邵武市| 金平| 浦北县| 丽江市| 昌图县| 修武县| 长宁区| 德安县| 定兴县| 天全县| 沾益县| 鄂尔多斯市| 营口市| 宣汉县| 长乐市| 苍山县| 福建省| 游戏| 常山县| 绥芬河市| 北宁市| 余干县| 青海省| 甘南县| 玉溪市| 泸水县|