Hi all, I've bumped in to another problem. So I have a variable here:
private var currentNode : GameObject;
And I have two functions:
function MarkingCurrentAsClosed()
{
var nodeInfo : NodeInfo = currentNode.GetComponent(NodeInfo);
nodeInfo.isCurrent = true;
nodeInfo.Closed = true;
}
#------------------------------------------
public function PickAndMove()
{
var leastFCost : int;
var leastCostNode : GameObject;
for(Node in openList)
{
var nodeInfo : NodeInfo = Node.GetComponent(NodeInfo);
if(leastFCost == 0)
{
leastFCost = nodeInfo.F;
leastCostNode = Node;
}
else
{
if(leastFCost > nodeInfo.F)
{
leastFCost = nodeInfo.F;
leastCostNode = Node;
}
if(leastFCost <= nodeInfo.F)
{
leastFCost = leastFCost;
}
}
}
var currentNodeInfo : NodeInfo = currentNode.GetComponent(NodeInfo);
currentNodeInfo.isCurrent = false;
currentNode = leastCostNode;
}
As you can see, in the function "PickAndMove" I have changed the value of "currentNode" to the value in "leastCostNode".
currentNode = leastCostNode;
And when I tested this, I discovered that the value of currentNode is not changing, do I have to make something like Global or Public, And what am I doing wrong? Any Answer or related unity Forms will be appreciated.
Full script:
import System.Collections.Generic;
private var Nodes : GameObject[];
private var currentNode : GameObject;
private var targetNode : GameObject;
private var Coordinates = new Array ();
private var reachTarget : boolean = false;
public var startProject : boolean = false;
private var firstEntering : boolean = true;
private var Update : boolean = false;
private var openList : List. = new List.();
function Start()
{
AssignCoords();
Nodes = GameObject.FindGameObjectsWithTag("Node");
}
function FixedUpdate ()
{
if(startProject == true)
{
if(reachTarget == false)
{
Astar_Pathfinding();
}
}
}
function Initialize()
{
for(Node in Nodes)
{
var nodeInfo : NodeInfo = Node.GetComponent(NodeInfo);
if(nodeInfo.isStart == true)
{
currentNode = Node;
}
if(nodeInfo.isEnd == true)
{
targetNode = Node;
}
}
}
function AssignCoords()
{
Coordinates.length = 8;
Coordinates[0] = Vector3(0,0,1);
Coordinates[1] = Vector3(1,0,1);
Coordinates[2] = Vector3(1,0,0);
Coordinates[3] = Vector3(1,0,-1);
Coordinates[4] = Vector3(0,0,-1);
Coordinates[5] = Vector3(-1,0,-1);
Coordinates[6] = Vector3(-1,0,0);
Coordinates[7] = Vector3(-1,0,1);
}
function Astar_Pathfinding()
{
if(firstEntering == true)
{
Initialize();
firstEnetering = false;
}
MarkingCurrentAsClosed();
AnalyzeAdjacentsBlocks();
PickAndMove();
}
function MarkingCurrentAsClosed()
{
var nodeInfo : NodeInfo = currentNode.GetComponent(NodeInfo);
nodeInfo.isCurrent = true;
nodeInfo.Closed = true;
}
function AnalyzeAdjacentsBlocks()
{
var currentNodeInfo : NodeInfo = currentNode.GetComponent(NodeInfo);
for(i = 0; i < Coordinates.length; i++)
{
for(Node in Nodes)
{
var nodeInfo : NodeInfo = Node.GetComponent(NodeInfo);
if(Node.transform.position == currentNode.transform.position + Coordinates[i] && nodeInfo.Closed == false)
{
if(nodeInfo.Opened == true)
{
var beforeG : int = nodeInfo.G;
var beforeF : int = nodeInfo.F;
nodeInfo.FindingH(targetNode);
nodeInfo.FindingG(i);
nodeInfo.FindingF(currentNodeInfo.F);
if(Update == true)
{
nodeInfo.UpdatingCosts();
Update = false;
}
CompareNode(Node, nodeInfo.tG, nodeInfo.tF, beforeG, beforeF);
}
else
{
nodeInfo.Opened = true;
openList.Add(Node);
nodeInfo.Parent = currentNode;
if(targetNode != null)
{
nodeInfo.FindingH(targetNode);
nodeInfo.FindingG(i);
nodeInfo.FindingF(currentNodeInfo.F);
nodeInfo.UpdatingCosts();
}
}
}
}
}
}
function CompareNode(Node, newG, newF, beG, beF)
{
if(newF > beF)
{
return;
}
else
{
Update = true;
}
}
public function PickAndMove()
{
var leastFCost : int;
var leastCostNode : GameObject;
for(Node in openList)
{
var nodeInfo : NodeInfo = Node.GetComponent(NodeInfo);
if(leastFCost == 0)
{
leastFCost = nodeInfo.F;
leastCostNode = Node;
}
else
{
if(leastFCost > nodeInfo.F)
{
leastFCost = nodeInfo.F;
leastCostNode = Node;
}
if(leastFCost <= nodeInfo.F)
{
leastFCost = leastFCost;
}
}
}
var currentNodeInfo : NodeInfo = currentNode.GetComponent(NodeInfo);
currentNodeInfo.isCurrent = false;
currentNode = leastCostNode;
}
↧