public static void CreateTransPort(GameObject RollerPart, GameObject LiftPart, ref LiftTransferParameter LTP)
    {
        float GearDiameter = LTP.GearDiameter;
        float Width        = LTP.Width;
        float High         = LTP.High;
        float RollerRadius = LTP.RollerRadius;
        //创建滚筒
        GameObject obj0   = Resources.Load <GameObject>("Scene/ChainEquipment/Roller");
        GameObject Roller = Instantiate(obj0); Roller.name = obj0.name;

        Roller.transform.localScale = new Vector3(RollerRadius, RollerRadius, Width);
        //创建滚筒输送部分
        float interval  = 4 * RollerRadius / 3;                      //初始化滚筒间距离
        float TempWidth = Width;
        float rn        = TempWidth / (2 * RollerRadius + interval); //浮点数不能做求余运算
        int   RollerNum = (int)Mathf.Ceil(rn);

        interval = TempWidth / RollerNum - 2 * RollerRadius;//根据滚筒输送机长度调整后的滚筒间距
        //float tempPositionX = -Width / 2 + 0.05f;
        for (int i = 0; i < RollerNum; i++)
        {
            GameObject clone = Instantiate(Roller); clone.name = "Roller" + (i + 1).ToString();
            clone.transform.parent        = RollerPart.transform;
            clone.transform.localPosition = new Vector3(-Width / 2 + interval / 2 + RollerRadius + i * (2 * RollerRadius + interval), -RollerRadius / 2, 0);
        }

        //创建顶升链条
        GameObject LiftChain = new GameObject(); LiftChain.name = "LiftChain";

        CreateLiftChain(LiftChain, ref LTP);
        //创建链条部分
        GameObject ChainPart = new GameObject(); ChainPart.name = "ChainPart";

        for (int i = 0; i < RollerNum - 1; i++)
        {
            GameObject clone = Instantiate(LiftChain); clone.name = LiftChain.name + (i + 1).ToString();
            clone.transform.parent        = ChainPart.transform;
            clone.transform.localPosition = new Vector3(-Width / 2 + interval + 2 * RollerRadius + i * (2 * RollerRadius + interval), 0, 0);
        }

        //创建顶升部分
        GameObject obj       = Resources.Load <GameObject>("Scene/ChainEquipment/Board");
        GameObject Board     = Instantiate(obj);
        Vector3    BoardSize = new Vector3((RollerNum - 2) * (2 * RollerRadius + interval), GearDiameter / 2, GearDiameter / 2);

        Board.transform.localScale = BoardSize;
        GameObject Board2 = Instantiate(Board);

        ChainPart.transform.parent        = LiftPart.transform;
        ChainPart.transform.localPosition = new Vector3(0, 0, 0);
        float TempValue2 = LTP.UnitChainSize.y / 2 + GearDiameter / 2 + (2 - 1 / 4) * GearDiameter;
        float TempValue3 = LTP.TempLength / 2 - LTP.UnitChainSize.y / 2 - GearDiameter / 2;

        Board.transform.parent         = LiftPart.transform;
        Board.transform.localPosition  = new Vector3(0, -TempValue2 + BoardSize.y, TempValue3);
        Board2.transform.parent        = LiftPart.transform;
        Board2.transform.localPosition = new Vector3(0, -TempValue2 + BoardSize.y, -TempValue3);
        DestroyImmediate(Roller); DestroyImmediate(LiftChain);
        ///////////////////修改部分
    }
    public static void CreateFrame(GameObject Frame, ref LiftTransferParameter LTP)
    {
        float      High = LTP.High; float Width = LTP.Width;
        float      BoardWidth = LTP.RollerRadius;
        float      BoardHigh  = LTP.High * 2 / 3;
        float      BoardHigh2 = BoardHigh - 2 * LTP.RollerRadius;
        float      FootHigh   = LTP.High / 3;
        GameObject obj        = Resources.Load <GameObject>("Scene/ChainEquipment/Board");
        //创建框架1
        GameObject Board  = Instantiate(obj); Board.transform.localScale = new Vector3(BoardWidth, BoardHigh2, Width);
        GameObject Board2 = Instantiate(Board); Board2.transform.Rotate(0, 180, 0);

        GameObject Board3 = Instantiate(obj); Board3.transform.localScale = new Vector3(Width, BoardHigh, BoardWidth);
        GameObject Board4 = Instantiate(Board3); Board4.transform.Rotate(0, 180, 0);
        GameObject Frame1 = new GameObject(); Frame1.name = "Frame1";

        Board.transform.parent  = Frame1.transform; Board.transform.localPosition = new Vector3(Width / 2 - BoardWidth / 2, BoardHigh2 / 2, 0);
        Board2.transform.parent = Frame1.transform; Board2.transform.localPosition = new Vector3(-Width / 2 + BoardWidth / 2, BoardHigh2 / 2, 0);
        Board3.transform.parent = Frame1.transform; Board3.transform.localPosition = new Vector3(0, BoardHigh / 2, Width / 2 - BoardWidth / 2);
        Board4.transform.parent = Frame1.transform; Board4.transform.localPosition = new Vector3(0, BoardHigh / 2, -Width / 2 + BoardWidth / 2);
        //创建框架2(脚架)
        GameObject Foot = Instantiate(Board); Foot.transform.localScale = new Vector3(BoardWidth, FootHigh, BoardWidth);
        GameObject Foot2 = Instantiate(Foot); GameObject Foot3 = Instantiate(Foot); GameObject Foot4 = Instantiate(Foot);
        GameObject Frame2 = new GameObject(); Frame2.name = "Foots"; float TempValue = Width / 2 - BoardWidth / 2;

        Foot.transform.parent  = Frame2.transform; Foot.transform.localPosition = new Vector3(TempValue, 0, TempValue);
        Foot2.transform.parent = Frame2.transform; Foot2.transform.localPosition = new Vector3(TempValue, 0, -TempValue);
        Foot3.transform.parent = Frame2.transform; Foot3.transform.localPosition = new Vector3(-TempValue, 0, TempValue);
        Foot4.transform.parent = Frame2.transform; Foot4.transform.localPosition = new Vector3(-TempValue, 0, -TempValue);
        //创建框架
        Frame1.transform.parent = Frame.transform; Frame1.transform.localPosition = new Vector3(0, FootHigh, 0);
        Frame2.transform.parent = Frame.transform; Frame2.transform.localPosition = new Vector3(0, FootHigh / 2, 0);
    }
    public static void CreateGearChain(GameObject GearChain, ref LiftTransferParameter LTP)
    {
        float      GearDiameter  = LTP.GearDiameter;  //齿轮半径
        Vector3    UnitChainSize = LTP.UnitChainSize; //单节链条实际尺寸
        GameObject Chain         = new GameObject(); Chain.name = "Chain";

        CreateChain(Chain, ref LTP);
        float TempLength = LTP.TempLength;//链条实际长度(投影长度)
        //添加齿轮信息
        GameObject obj      = Resources.Load <GameObject>("Scene/ChainEquipment/Gear");
        Vector3    obj_size = obj.GetComponent <MeshFilter>().sharedMesh.bounds.size;//齿轮模型尺寸
        float      Scale1   = GearDiameter / obj_size.y;
        GameObject Gear     = Instantiate(obj); Gear.name = obj.name;

        Gear.transform.localScale = new Vector3(Scale1, Scale1, Scale1);
        LTP.GearSize = new Vector3(Scale1 * obj_size.x, GearDiameter, GearDiameter); //齿轮实际尺寸
        GameObject Gear2 = Instantiate(Gear); Gear2.name = Gear.name + 2.ToString(); //第二个齿轮

        //链条添加齿轮设计
        Chain.transform.parent        = GearChain.transform;
        Chain.transform.localPosition = new Vector3(0, 0, 0);
        Gear.transform.parent         = GearChain.transform;
        Gear.transform.localPosition  = new Vector3(0, 0, -TempLength / 2 + GearDiameter / 2 + LTP.UnitChainSize.y / 2); //第一个齿轮位置设计
        Gear2.transform.parent        = GearChain.transform;
        Gear2.transform.localPosition = new Vector3(0, 0, TempLength / 2 - GearDiameter / 2 - LTP.UnitChainSize.y / 2);  //第二个齿轮位置设计
    }
    public static void CreateLiftTransfer(GameObject LiftChain, ref LiftTransferParameter LTP)
    {
        //创建框架
        GameObject Frame = new GameObject(); Frame.name = "Frame";

        CreateFrame(Frame, ref LTP);
        //创建滚筒部分和顶升部分
        GameObject RollerPart = new GameObject(); RollerPart.name = "RollerPart";
        GameObject LiftPart   = new GameObject(); LiftPart.name = "LiftPart";

        CreateTransPort(RollerPart, LiftPart, ref LTP);
        //创建顶升移载机
        Frame.transform.parent      = LiftChain.transform; Frame.transform.localPosition = new Vector3(0, 0, 0);
        RollerPart.transform.parent = LiftChain.transform; RollerPart.transform.localPosition = new Vector3(0, LTP.High, 0);
        LiftPart.transform.parent   = LiftChain.transform; LiftPart.transform.localPosition = new Vector3(0, LTP.High, 0);
    }
    public static void CreateLiftChain(GameObject LiftChain, ref LiftTransferParameter LTP)
    {
        //创建齿轮链条
        GameObject GearChain = new GameObject(); GearChain.name = "GearChain";//创建齿轮链条

        CreateGearChain(GearChain, ref LTP);
        //设计顶升固定
        float      BoardThickness = 0.005f;                                                    //采用的边板厚度
        float      BoardHigh      = 2 * LTP.GearDiameter;                                      //采用的边板高度
        float      BoardWidth     = LTP.GearDiameter / 2;                                      //采用的边板的宽度
        GameObject obj1           = Resources.Load <GameObject>("Scene/ChainEquipment/Board"); //加载边板构件
        GameObject Board          = Instantiate(obj1);

        Board.transform.localScale = new Vector3(BoardThickness, BoardHigh, BoardWidth);//修改边板尺寸为实际尺寸
        GameObject Board2     = Instantiate(Board);
        GameObject Board3     = Instantiate(Board);
        GameObject Board4     = Instantiate(Board);
        GameObject Board0     = Instantiate(obj1);
        Vector3    Board0Size = new Vector3(LTP.GearSize.x, LTP.GearDiameter / 2, LTP.Width);//底板设计

        Board0.transform.localScale = Board0Size;

        GameObject LiftBoards = new GameObject(); LiftBoards.name = "LiftBoards";

        Board0.transform.parent        = LiftBoards.transform;
        Board0.transform.localPosition = new Vector3(0, Board0Size.y / 2, 0);
        float TempValue1 = Board0Size.x / 2 + BoardThickness / 2;
        float TempValue2 = LTP.TempLength / 2 - LTP.UnitChainSize.y / 2 - LTP.GearDiameter / 2;

        Board.transform.parent         = LiftBoards.transform;
        Board.transform.localPosition  = new Vector3(TempValue1, BoardHigh / 2, TempValue2);
        Board2.transform.parent        = LiftBoards.transform;
        Board2.transform.localPosition = new Vector3(TempValue1, BoardHigh / 2, -TempValue2);
        Board3.transform.parent        = LiftBoards.transform;
        Board3.transform.localPosition = new Vector3(-TempValue1, BoardHigh / 2, -TempValue2);
        Board4.transform.parent        = LiftBoards.transform;
        Board4.transform.localPosition = new Vector3(-TempValue1, BoardHigh / 2, TempValue2);
        //组件顶升链条
        float TempValue3 = LTP.UnitChainSize.y / 2 + LTP.GearDiameter / 2;

        GearChain.transform.parent         = LiftChain.transform;
        GearChain.transform.localPosition  = new Vector3(0, -TempValue3, 0);
        LiftBoards.transform.parent        = LiftChain.transform;
        LiftBoards.transform.localPosition = new Vector3(0, -TempValue3 - BoardHigh + BoardWidth / 2, 0);
    }
Exemple #6
0
    //创建顶升移栽组合
    #region Create_LiftTransferGroup
    public void Create_LiftTransferGroup(ParametersList1 PL, GameObject LiftTransferGroup)
    {
        LiftTransferParameter LTP = new LiftTransferParameter();

        LTP.High         = PL.RCP.RCHigh - 0.1f;
        LTP.Width        = PL.RCP.RCWidth;
        LTP.RollerRadius = PL.RCP.RollerRadius;
        LTP.GearDiameter = PL.RCP.RollerRadius * 2;

        GameObject LiftTransfer = new GameObject(); LiftTransfer.name = "LiftTransfer";

        LiftTransfer1.CreateLiftTransfer(LiftTransfer, ref LTP);
        for (int i = 0; i < (PL.MHP.Num + 1) / 2; i++)
        {
            GameObject clone = Instantiate(LiftTransfer); clone.name = LiftTransfer.name + (i + 1).ToString();
            clone.transform.parent = LiftTransferGroup.transform;
            float TempValue = PL.RCP.RCWidth / 2 - ((2 * i + 1) * PL.HP.Size.x + i * PL.MHP.TunnelWidth + i * PL.MHP.HookupDistance);
            clone.transform.localPosition = new Vector3(TempValue, 0, 0);
        }
        DestroyImmediate(LiftTransfer);
    }
Exemple #7
0
    //创建仓库场景
    #region Create_Scene
    public void Create_Scene(ParametersList1 PL, PositionsList POL, string Path)
    {
        HighStoreShelf_Parameter HP  = PL.HP;
        MultiHighBay_Parameter   MHP = PL.MHP;
        RollerConveyor_Parameter RCP = PL.RCP;
        float      TempValue1        = RCP.RCLength;
        float      TempValue2        = RCP.RCWidth;
        float      TempValue3        = TempValue2 - HP.Size.x;
        GameObject WarehouseScene    = new GameObject(); WarehouseScene.name = Name;//创建场景
        //存放货物
        GameObject Cargos = new GameObject();

        Cargos.name = "Cargos"; Cargos.transform.parent = WarehouseScene.transform;
        Cargos.transform.localPosition = new Vector3(0, 0, 0);
        //添加地面
        GameObject obj    = (GameObject)Resources.Load("Scene/Dimian");
        GameObject dimian = Instantiate(obj);
        float      Width  = HP.Size.z + 8 * RCP.RCLength;

        dimian.transform.localScale    = new Vector3(Width, 0.1f, Width);
        dimian.transform.parent        = WarehouseScene.transform;
        dimian.transform.localPosition = new Vector3(-(Width / 2 - RCP.RCLength * 4), -0.05f, -(Width / 2 - 2 * RCP.RCLength));
        //添加入口滚筒输送机
        GameObject               EnterRollerConveyor = new GameObject();
        RollerConveyorType       type = RollerConveyorType.Intact;
        RollerConveyor_Parameter RCP2 = new RollerConveyor_Parameter();

        RCP2          = PL.RCP; RCP2.RCHigh = RCP2.RCHigh - 0.1f;
        RCP2.RCLength = enterRollerLength;//长度自定义
        //RCP2.RCLength = PL.HP.Size.x * 2 + PL.MHP.HookupDistance + PL.MHP.TunnelWidth - RCP2.RCWidth;
        RollerConveyor.Create_RollerConveyor(RCP2, EnterRollerConveyor, type);
        EnterRollerConveyor.name             = "EnterRollerConveyor";
        EnterRollerConveyor.transform.parent = WarehouseScene.transform;
        EnterRollerConveyor.transform.Rotate(0, -90, 0);
        EnterRollerConveyor.transform.localPosition = new Vector3((RCP2.RCLength + TempValue3), 0, -TempValue2 / 2);
        //添加入口顶升移栽机
        LiftTransferParameter LTP = new LiftTransferParameter();

        LTP.High         = PL.RCP.RCHigh - 0.1f;
        LTP.Width        = PL.RCP.RCWidth;
        LTP.RollerRadius = PL.RCP.RollerRadius;
        LTP.GearDiameter = PL.RCP.RollerRadius * 2;
        GameObject enterLiftTransfer = new GameObject();

        LiftTransfer1.CreateLiftTransfer(enterLiftTransfer, ref LTP);
        enterLiftTransfer.name             = "EnterLiftTransfer";
        enterLiftTransfer.transform.parent = WarehouseScene.transform;
        float tempEnterX = RCP2.RCLength - (PL.HP.Size.x - LTP.Width) + LTP.Width / 2;//入口顶升的X坐标

        enterLiftTransfer.transform.localPosition = new Vector3(tempEnterX, 0, -TempValue2 / 2);
        //添加入口皮带输送机
        GameObject EnterBeltConveyors = new GameObject(); EnterBeltConveyors.name = "EnterBeltConveyors";

        Create_EnterBeltConveyors(PL, EnterBeltConveyors);
        EnterBeltConveyors.transform.parent        = WarehouseScene.transform;
        EnterBeltConveyors.transform.localPosition = new Vector3(tempEnterX, 0, 0);
        //添加顶升移载机设备
        GameObject LiftTransferGroup = new GameObject(); LiftTransferGroup.name = "LiftTransferGroup";

        Create_LiftTransferGroup(PL, LiftTransferGroup);
        LiftTransferGroup.transform.parent        = WarehouseScene.transform;
        LiftTransferGroup.transform.localPosition = new Vector3(0, 0, -TempValue2 / 2);
        //添加滚筒输送机(垂直于高架库方向)
        GameObject RollerConveyorGroup = new GameObject(); RollerConveyorGroup.name = "RollerConveyorGroup";

        Create_RollerConveyorGroup(PL, RollerConveyorGroup);
        RollerConveyorGroup.transform.parent        = WarehouseScene.transform;
        RollerConveyorGroup.transform.localPosition = new Vector3(0, 0, -TempValue2 / 2);
        //添加皮带输送机(平行于高架库方向)
        GameObject BeltConveyorGroup = new GameObject(); BeltConveyorGroup.name = "BeltConveyorGroup";

        Create_BeltConveyorGroup(PL, BeltConveyorGroup);
        BeltConveyorGroup.transform.parent        = WarehouseScene.transform;
        BeltConveyorGroup.transform.localPosition = new Vector3(0, 0, -TempValue2);
        //为场景添加高架库设备
        GameObject HighBays1 = new GameObject(); HighBays1.name = "HighBayGroup";

        HighBay2.Create_HighBays(HP, MHP, HighBays1);
        HighBays1.transform.parent        = WarehouseScene.transform;
        HighBays1.transform.localPosition = new Vector3(0, 0, -(3 * TempValue1 + TempValue2));
        //为场景添加堆垛机设备
        GameObject PilerGroup = new GameObject(); PilerGroup.name = "PilerGroup";

        Create_Pilers(PL, PilerGroup);
        PilerGroup.transform.parent        = WarehouseScene.transform;
        PilerGroup.transform.localPosition = new Vector3(0, 0, -(TempValue1 + TempValue2));
        //添加出口滚筒输送机
        GameObject ExitRollerConveyor    = new GameObject();
        RollerConveyor_Parameter exitRCP = PL.RCP;

        exitRCP.RCLength = exitRollerLength; exitRCP.RCHigh = PL.RCP.RCHigh - 0.1f;
        RollerConveyor.Create_RollerConveyor(exitRCP, ExitRollerConveyor, RollerConveyorType.Intact);
        ExitRollerConveyor.name             = "ExitRollerConveyor";
        ExitRollerConveyor.transform.parent = WarehouseScene.transform;
        int   j         = (PL.MHP.Num + 1) / 2 - 1;
        float tempExitX = -PL.HP.Size.x - j * (PL.HP.Size.x * 2 + PL.MHP.HookupDistance + PL.MHP.TunnelWidth);

        ExitRollerConveyor.transform.Rotate(0, -90, 0);
        ExitRollerConveyor.transform.localPosition = new Vector3(tempExitX, 0, -TempValue2 / 2);
        //添加出口顶升移栽机
        GameObject ExitLiftTransfer = new GameObject();

        ExitLiftTransfer.name = "ExitLiftTransfer";
        LiftTransfer1.CreateLiftTransfer(ExitLiftTransfer, ref LTP);
        ExitLiftTransfer.transform.parent = WarehouseScene.transform;
        tempExitX = tempExitX - exitRollerLength - LTP.Width / 2;
        ExitLiftTransfer.transform.localPosition = new Vector3(tempExitX, 0, -TempValue2 / 2);
        //添加出口皮带输送线
        GameObject ExitBeltConveyors = new GameObject();

        ExitBeltConveyors.name = "ExitBeltConveyors";
        Create_ExitBeltConveyors(PL, ExitBeltConveyors);
        ExitBeltConveyors.transform.parent        = WarehouseScene.transform;
        ExitBeltConveyors.transform.localPosition = new Vector3(tempExitX, 0, 0);
        //给场景添加Message
        WarehouseScene.AddComponent <ShowKeyPositionData>();
        ShowKeyPositionData ShowKeyData = WarehouseScene.GetComponent <ShowKeyPositionData>();
        KeyPositionsData    KPD         = new KeyPositionsData();

        //float[] HighValues = { 1.2f, 1.1f };
        //SI.HighValues = HighValues;
        Create_SceneInfo(ref PL, out KPD);
        ShowKeyData.KeyPositionsData = KPD;
        //Debug.Log(KPD.ConveyorLengths);
        //WarehouseScene.AddComponent<SceneData>();
        //SceneData SD = WarehouseScene.GetComponent<SceneData>();
        //Information sd = new Information(); sd.Name = "Name"; sd.Num = 2;
        ////WarehouseScene.GetComponent<SceneData>().
        //SD.IN = sd;
        GameObject Cargo = new GameObject(); Cargo.name = "Cargo";

        Cargo1.Create_Cargo(KPD.CargoSize, Cargo);
        //SD.IN.Num = 2; SD.IN.Name = "A";
        //输出场景
        MyClass.CreatePrefab(WarehouseScene, Path);
        MyClass.CreatePrefab(Cargo, path2 + Cargo.name);

        //根据参数预创建一个存储状态面板
        //GameObject StorageStateInterface = new GameObject();
        //StorageStateInterface.name = "StorageStateInterface";
        BinsPanel.Ajustment(MHP.Num, HP.FloorsNum, HP.ColumnsNum);
        BinsPanel.Ajustment2(MHP.Num, HP.FloorsNum, HP.ColumnsNum);
        //GameObject.Find("ScriptsContainer").GetComponent<MyClass>().CreatePrefab(StorageStateInterface, path2 +"Simulation/" +StorageStateInterface.name);
    }
    public static void CreateChain(GameObject Chain, ref LiftTransferParameter LTP)
    {
        //GearDiameter为齿轮直径
        //ChainLength为链条长度
        //float High = 0.1f;
        //链条水平长度
        //float ChainLength = 1.2f;
        //链条轴承直径
        //float GearDiameter = 0.1f;//链条轴承直径
        //采用八边形方法设计弧形区域,根据设计思想计算链条关节的尺寸
        float GearDiameter = LTP.GearDiameter;
        float ChainLength  = LTP.Width - 2 * 0.05f;
        float length0;//链条关节有效计算长度(链条关节长度的2/3)

        length0 = GearDiameter * Mathf.Tan(22.5f * (Mathf.PI / 180f));
        //计算链条关节的尺寸
        float      UnitLength = length0 * 3 / 2;                                               //链条关节实际长度
        GameObject obj0       = Resources.Load <GameObject>("Scene/ChainEquipment/UnitChain"); //加载链条关节小构件模型
        Vector3    obj0_size  = obj0.GetComponent <MeshFilter>().sharedMesh.bounds.size;       //构件模型的尺寸
        float      Scale0     = UnitLength / obj0_size.z;                                      //根据需要的实际尺寸计算Scale值
        GameObject obj        = Instantiate(obj0);                                             //实例化模型

        obj.transform.localScale = new Vector3(Scale0, Scale0, Scale0);                        //实例化模型的尺寸符合要求
        Vector3 UnitChainSize = new Vector3(Scale0 * obj0_size.x, Scale0 * obj0_size.y, UnitLength);

        LTP.UnitChainSize = UnitChainSize;                                      //单节链条的实际尺寸
        //计算链条水平长度及链条关节数目
        float Length0 = ChainLength - GearDiameter - length0 - UnitChainSize.y; //链条水平设计部分长度
        int   Num     = (int)(Length0 / length0);                               //Debug.Log(Scale0);
        float Length1 = Num * length0;                                          //链条水平设计部分的有效长度

        LTP.TempLength = Length1 + GearDiameter + length0 + UnitChainSize.y;
        //Debug.Log(LTP.TempLength);
        //拐弯处弧形链条设计
        GameObject OBJ1 = new GameObject();//弧形链条设计(八边形模拟设计)

        OBJ1.name = "huxing";
        GameObject obj01 = Instantiate(obj); obj01.transform.parent = OBJ1.transform;

        obj01.transform.localPosition = new Vector3(0, GearDiameter / 2, 0);
        GameObject obj02 = Instantiate(obj01); obj02.transform.parent = OBJ1.transform;

        obj02.transform.RotateAround(new Vector3(0, 0, 0), new Vector3(1, 0, 0), -45f);
        GameObject obj03 = Instantiate(obj01); obj03.transform.parent = OBJ1.transform;

        obj03.transform.RotateAround(new Vector3(0, 0, 0), new Vector3(1, 0, 0), -90f);
        GameObject obj04 = Instantiate(obj01); obj04.transform.parent = OBJ1.transform;

        obj04.transform.RotateAround(new Vector3(0, 0, 0), new Vector3(1, 0, 0), -135f);
        GameObject obj05 = Instantiate(obj01); obj05.transform.parent = OBJ1.transform;

        obj05.transform.RotateAround(new Vector3(0, 0, 0), new Vector3(1, 0, 0), -180f);

        //设计链条的水平部分
        GameObject OBJ2 = new GameObject();//链条水平部分(一条)

        OBJ2.name = "shuiping";
        Vector3 position0 = new Vector3(0, 0, -Length1 / 2);

        for (int i = 0; i < Num; i++)
        {
            GameObject clone = Instantiate(obj); clone.transform.parent = OBJ2.transform; clone.name = OBJ2.name + "0" + (i + 1).ToString();
            clone.transform.localPosition = new Vector3(0, 0, position0.z + (length0 / 2 + i * length0));
        }
        //GameObject obj_ = OBJ2.transform.Find("shuiping01");
        //组件单条链条
        //GameObject OBJ = new GameObject();
        OBJ1.transform.parent = Chain.transform; OBJ1.transform.localPosition = new Vector3(0, 0, -Length1 / 2 - length0 / 2);
        OBJ2.transform.parent = Chain.transform; OBJ2.transform.localPosition = new Vector3(0, GearDiameter / 2, 0);
        GameObject OBJ3 = Instantiate(OBJ1); OBJ3.transform.Rotate(180f, 0, 0);

        OBJ3.transform.parent = Chain.transform; OBJ3.transform.localPosition = new Vector3(0, 0, Length1 / 2 + length0 / 2);
        GameObject OBJ4 = Instantiate(OBJ2); OBJ4.transform.Rotate(180f, 0, 0);

        OBJ4.transform.parent = Chain.transform; OBJ4.transform.localPosition = new Vector3(0, -GearDiameter / 2, 0);

        DestroyImmediate(obj);
        //ChainLength = Length1 + length0 + GearDiameter;
    }