//运动到某个位置 public void gotoPos(Vector3 position) { position.y = transform.localPosition.y; if (!VectorTool.IsCloseEnough(position, transform.localPosition, carMessage.speed)) { //判断车在直线还是曲线 if (carMessage.carEdge.lineType.Equals(LineType.Curve)) { //旋转运动 MyRotateAround(carMessage.carEdge.curveCenter, new Vector3(0, 1, 0), carMessage.speed * Time.deltaTime); carMessage.carPos = transform.localPosition; } else if (carMessage.carEdge.lineType.Equals(LineType.Straight)) { //直线运动 transform.localPosition = Vector3.MoveTowards(transform.localPosition, position, carMessage.speed * Time.deltaTime); carMessage.carPos = transform.localPosition; } else { } } else//已经到达该点 { transform.localPosition = position; carMessage.carPos = transform.localPosition; return; } }
//运动到某个位置 public void gotoPos(Vector3 position) { position.y = carMessage.carPos.y; if (!VectorTool.IsCloseEnough(position, carMessage.carPos, carMessage.speed)) { //判断车在直线还是曲线 if (carMessage.carEdge.lineType.Equals(LineType.Curve)) { //模拟旋转运动 SimuRotateAround(curveRadius, carMessage.carEdge.curveCenter, carMessage.speed * GlobalVaribles.frameTime); } else if (carMessage.carEdge.lineType.Equals(LineType.Straight)) { //模拟直线运动 SimuMoveTowards(position, carMessage.speed * GlobalVaribles.frameTime); } else { } } else//说明已经到达该点 { carMessage.carPos = position; //退出该方法 return; } }
//模拟小车的直线运动 public void SimuMoveTowards(Vector3 endPos, float speed) { if (VectorTool.IsCloseEnough(carMessage.carPos, endPos, carMessage.speed)) { carMessage.carPos = endPos; return; } Vector3 moveVector3 = VectorTool.vectorSub(endPos, carMessage.carPos).normalized *speed; carMessage.carPos += moveVector3; }
//运动到某个点 public void gotoVertex(TrailerGraph.Vertex vertex) { Vector3 vPos1 = vertex.vertexPos; vPos1.y = transform.localPosition.y; if (!VectorTool.IsCloseEnough(vPos1, transform.localPosition, carMessage.speed)) { //判断车在直线还是曲线 if (carMessage.carEdge.lineType.Equals(LineType.Curve))//曲线 { //旋转运动 MyRotateAround(carMessage.carEdge.curveCenter, new Vector3(0, 1, 0), carMessage.speed * Time.deltaTime); carMessage.carPos = transform.localPosition; } else if (carMessage.carEdge.lineType.Equals(LineType.Straight)) { //直线运动 transform.localPosition = Vector3.MoveTowards(transform.localPosition, vPos1, carMessage.speed * Time.deltaTime); carMessage.carPos = transform.localPosition; } else { } } else//已经到达该点 { transform.localPosition = vPos1; carMessage.carPos = transform.localPosition; carPathData = GlobalVaribles.trailerGraph.pathMap[vertex.index, carPathData.pathList[carPathData.pathList.Count - 1].index]; if (carMessage.workState == WorkState.WayToLoad && vertex.index == task.loadGoods_Edge.vertexNum1) { carMessage.carEdge = GlobalVaribles.trailerGraph.adjMatrix[vertex.index, task.loadGoods_Edge.vertexNum2]; } else if (carMessage.workState == WorkState.WayToUnload && vertex.index == task.unloadGoods_Edge.vertexNum1) { carMessage.carEdge = GlobalVaribles.trailerGraph.adjMatrix[vertex.index, task.unloadGoods_Edge.vertexNum2]; } else { carMessage.carEdge = GlobalVaribles.trailerGraph.adjMatrix[carPathData.pathList[0].index, carPathData.pathList[1].index]; } //进入新的曲线, 更新angled carMessage.angled = carMessage.carEdge.startDeg; //旋转值的修正 Vector3 rotation = transform.localEulerAngles; rotation.y = carMessage.carEdge.endDeg; transform.localEulerAngles = rotation; return; } }
//运动到某个点 public void gotoVertex(TrailerGraph.Vertex vertex) { Vector3 vPos1 = vertex.vertexPos; vPos1.y = carMessage.carPos.y; if (!VectorTool.IsCloseEnough(vPos1, carMessage.carPos, carMessage.speed)) { //判断车在直线还是曲线 if (carMessage.carEdge.lineType.Equals(LineType.Curve))//曲线 { //模拟旋转运动 SimuRotateAround(curveRadius, carMessage.carEdge.curveCenter, carMessage.speed * GlobalVaribles.frameTime); } else if (carMessage.carEdge.lineType.Equals(LineType.Straight)) { //模拟直线运动 SimuMoveTowards(vPos1, carMessage.speed * GlobalVaribles.frameTime); } else { } } else//已经到达该点 { carMessage.carPos = vPos1; carPathData = GlobalVaribles.trailerGraph.pathMap[vertex.index, carPathData.pathList[carPathData.pathList.Count - 1].index]; if (carMessage.workState == WorkState.WayToLoad && vertex.index == task.loadGoods_Edge.vertexNum1) { carMessage.carEdge = GlobalVaribles.trailerGraph.adjMatrix[vertex.index, task.loadGoods_Edge.vertexNum2]; } else if (carMessage.workState == WorkState.WayToUnload && vertex.index == task.unloadGoods_Edge.vertexNum1) { carMessage.carEdge = GlobalVaribles.trailerGraph.adjMatrix[vertex.index, task.unloadGoods_Edge.vertexNum2]; } else { carMessage.carEdge = GlobalVaribles.trailerGraph.adjMatrix[carPathData.pathList[0].index, carPathData.pathList[1].index]; } carMessage.angled = carMessage.carEdge.startDeg; return; } }