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); }
//创建顶升移栽组合 #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); }
//创建仓库场景 #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; }