//运动到某个位置
 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;
     }
 }
Пример #2
0
 //运动到某个位置
 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;
     }
 }
Пример #3
0
    //模拟小车的直线运动
    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;
        }
    }
Пример #5
0
    //运动到某个点
    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;
        }
    }