//创建货物停放平台 #region Create_PlatForm public static void Create_PlatForm(RollerConveyor_Parameter RCP, Vector3 CargoSize, GameObject PlatForm) { float PlatFormHigh = RCP.RCHigh - RCP.RollerRadius / 8; //平台的高度 float PlatFormWidth_X = RCP.RCWidth; //X向宽度 float PlatFormWidth_Z = CargoSize.z + CargoSize.z / 10; //GameObject obj1 = Resources.Load(GlobalVariable.RootName+"/RollerConveyor/Belt") as GameObject; }
//创建滚筒输送机边板部分 #region Create_SideBoard public static void Create_SideBoard(RollerConveyor_Parameter RCP, GameObject SideBoard) { //创建滚筒输送机边板部分 float RCLength = RCP.RCLength; //滚筒输送机长度 float RollerR = RCP.RollerRadius; //滚筒输送机半径 float RCWidth = RCP.RCWidth; //滚筒输送机宽度 float BoardHigh = 2.25f * RCP.RollerRadius; //边板部分的高度为滚筒半径的2.25倍 float BoardWidth = RCP.RollerRadius; //单边板的宽度设为滚筒半径 Vector3 SideBoard1_size = new Vector3(BoardWidth, BoardHigh, RCLength); //边板1的尺寸 GameObject SB1 = Resources.Load(Varibles.GlobalVariable.RootName + "/RollerConveyor/Sideboard1") as GameObject; //加载边板1的组件 GameObject SideBoard1 = Instantiate(SB1); SideBoard1.transform.localScale = SideBoard1_size; Vector3 SideBoard2_size1 = new Vector3(BoardWidth, BoardWidth / 10, RCLength); //边板2组件1的尺寸 Vector3 SideBoard2_size2 = new Vector3(BoardWidth / 10, BoardHigh, RCLength); //边板2组件1的尺寸 Vector3 SideBoard2_size3 = new Vector3(BoardWidth, BoardWidth / 10, RCLength); //边板3组件1的尺寸 GameObject SideBoard2 = new GameObject(); GameObject SideBoard2_1 = Instantiate(SB1); SideBoard2_1.transform.localScale = SideBoard2_size1; GameObject SideBoard2_2 = Instantiate(SB1); SideBoard2_2.transform.localScale = SideBoard2_size2; GameObject SideBoard2_3 = Instantiate(SB1); SideBoard2_3.transform.localScale = SideBoard2_size3; SideBoard2_1.transform.parent = SideBoard2.transform; SideBoard2_1.transform.localPosition = new Vector3(-SideBoard2_size1.x / 2, -SideBoard2_size1.y / 2, SideBoard2_size1.z / 2); SideBoard2_2.transform.parent = SideBoard2.transform; SideBoard2_2.transform.localPosition = new Vector3(-SideBoard2_size2.x / 2, -SideBoard2_size2.y / 2, SideBoard2_size2.z / 2); SideBoard2_3.transform.parent = SideBoard2.transform; SideBoard2_3.transform.localPosition = new Vector3(-SideBoard2_size3.x / 2, -SideBoard2_size2.y + SideBoard2_size3.y / 2, SideBoard2_size3.z / 2); SideBoard1.transform.parent = SideBoard.transform; SideBoard2.transform.parent = SideBoard.transform; SideBoard1.transform.localPosition = new Vector3(-RCWidth / 2 + SideBoard1_size.x / 2, -SideBoard1_size.y / 2, SideBoard1_size.z / 2); SideBoard2.transform.localPosition = new Vector3(RCWidth / 2, 0, 0); //GameObject.Find("ScriptsContainer").GetComponent<MyClass>().Create2(SideBoard); }
//创建皮带式输送机的皮带部分 #region Create_BeltPart public static void Create_BeltPart(RollerConveyor_Parameter RCP, GameObject BeltPart) { //创建滚筒输送部分 float RCLength = RCP.RCLength; //滚筒输送机长度 float RCWidth = RCP.RCWidth; //滚筒输送机宽度 float RollerR = RCP.RollerRadius; //滚筒输送机半径 float RollerLength = RCWidth - 0.002f; float BoardHigh = 2 * RCP.RollerRadius; //边板的高度设为滚筒输送机半径的2.25倍 float interval = 4 * RollerR / 3; //初始化滚筒间距离 float rn = RCLength / (2 * RollerR + interval); //浮点数不能做求余运算 int RollerNum = (int)Math.Ceiling(rn); float thickness = RollerR / 10; //皮带厚度 interval = RCLength / RollerNum - 2 * RollerR; //根据滚筒输送机长度调整后的滚筒间距 GameObject Roller = Resources.Load(Varibles.GlobalVariable.RootName + "/RollerConveyor/RollerX") as GameObject; for (int i = 0; i < RollerNum; i++) { GameObject clone = Instantiate(Roller); clone.name = "Roller" + (i + 1).ToString(); clone.transform.localScale = new Vector3(RollerLength, 2 * RollerR, 2 * RollerR); clone.transform.parent = BeltPart.transform; clone.transform.localPosition = new Vector3(0, -BoardHigh / 2, interval / 2 + RollerR + i * (2 * RollerR + interval)); } //增加皮带部分 GameObject Belt = Resources.Load(Varibles.GlobalVariable.RootName + "/RollerConveyor/Belt") as GameObject; GameObject Belt1 = Instantiate(Belt); float BeltLength = RCLength - interval - RollerR * 2; Belt1.transform.localScale = new Vector3(RollerLength - 2 * RollerR, thickness, BeltLength); GameObject Belt2 = Instantiate(Belt1); Belt1.transform.parent = BeltPart.transform; Belt2.transform.parent = BeltPart.transform; Belt1.transform.localPosition = new Vector3(0, -BoardHigh / 2 + RollerR - thickness / 2, interval / 2 + RollerR + BeltLength / 2); Belt2.transform.localPosition = new Vector3(0, -BoardHigh / 2 - RollerR + thickness / 2, RCLength / 2); }
//创建滚筒输送机支撑部分 #region Create_SupportFoot public static void Create_SupportFoot(RollerConveyor_Parameter RCP, GameObject SupportFoot) { //创建滚筒输送机的支撑架 float RCWith = RCP.RCWidth; //输送机的宽度 float SupportHigh = RCP.RCHigh - 2.25f * RCP.RollerRadius; //支撑架的高度=输送机高度-边板高度 float SupportWidth = RCP.RollerRadius; //支撑架的宽度=边板宽度 Vector3 UprightSupport_size = new Vector3(SupportWidth, SupportHigh, 2 * SupportWidth); //支撑架立柱的尺寸 Vector3 HorizontalSupport_size = new Vector3(RCWith, SupportWidth, 2 * SupportWidth); //支撑架水平支柱尺寸 GameObject SF = Resources.Load(Varibles.GlobalVariable.RootName + "/RollerConveyor/SupportFoot") as GameObject; //加载构件 GameObject obj1 = Instantiate(SF); obj1.transform.localScale = UprightSupport_size; //创建立柱 GameObject obj2 = Instantiate(obj1); GameObject obj3 = Instantiate(SF); obj3.transform.localScale = HorizontalSupport_size; //创建水平支柱 GameObject obj4 = Instantiate(obj3); obj1.transform.parent = SupportFoot.transform; obj1.transform.localPosition = new Vector3(RCWith / 2 - SupportWidth / 2, SupportHigh / 2, SupportWidth); obj2.transform.parent = SupportFoot.transform; obj2.transform.localPosition = new Vector3(-RCWith / 2 + SupportWidth / 2, SupportHigh / 2, SupportWidth); obj3.transform.parent = SupportFoot.transform; obj3.transform.localPosition = new Vector3(0, SupportHigh / 5 + SupportWidth / 2, SupportWidth); obj4.transform.parent = SupportFoot.transform; obj4.transform.localPosition = new Vector3(0, 4 * SupportHigh / 5 - SupportWidth / 2, SupportWidth); //GameObject.Find("ScriptsContainer").GetComponent<MyClass>().Create2(SupportFoot); }
//创建滚筒输送机 #region Create_RollerConveyor public static void Create_RollerConveyor(RollerConveyor_Parameter RCP, GameObject OBJ, RollerConveyorType type) { //type指的是滚筒输送机的类型 //"Intact"完整型;"Origion"起点型;"Terminus"终点型;"Transition"过渡型 float BoardWidth = RCP.RollerRadius; GameObject RollerPart = new GameObject(); RollerPart.name = "RollerPart";//滚筒部分 Create_RollerPart(RCP, RollerPart); GameObject SideBoard = new GameObject(); SideBoard.name = "SideBoard";//边板部分 Create_SideBoard(RCP, SideBoard); GameObject SupportFoot = new GameObject(); SupportFoot.name = "SupportFoot";//支撑架 Create_SupportFoot(RCP, SupportFoot); GameObject SupportFoot2 = Instantiate(SupportFoot); SupportFoot2.name = SupportFoot.name + 2.ToString(); //创建不同类型的滚筒输送机 switch (type) { case RollerConveyorType.Intact: RollerPart.transform.parent = OBJ.transform; RollerPart.transform.localPosition = new Vector3(0, RCP.RCHigh, 0); SideBoard.transform.parent = OBJ.transform; SideBoard.transform.localPosition = new Vector3(0, RCP.RCHigh, 0); SupportFoot.transform.parent = OBJ.transform; SupportFoot.transform.localPosition = new Vector3(0, 0, 0); SupportFoot2.transform.parent = OBJ.transform; SupportFoot2.transform.localPosition = new Vector3(0, 0, RCP.RCLength - 2 * BoardWidth); OBJ.name = "IntactRollerConveyor"; break; case RollerConveyorType.Origion: RollerPart.transform.parent = OBJ.transform; RollerPart.transform.localPosition = new Vector3(0, RCP.RCHigh, 0); SideBoard.transform.parent = OBJ.transform; SideBoard.transform.localPosition = new Vector3(0, RCP.RCHigh, 0); SupportFoot.transform.parent = OBJ.transform; SupportFoot.transform.localPosition = new Vector3(0, 0, 0); //SupportFoot2.transform.parent = OBJ.transform; SupportFoot2.transform.localPosition = new Vector3(0, 0, RCP.RCLength - BoardWidth); DestroyImmediate(SupportFoot2); OBJ.name = "OrigionRollerConveyor"; break; case RollerConveyorType.Terminus: RollerPart.transform.parent = OBJ.transform; RollerPart.transform.localPosition = new Vector3(0, RCP.RCHigh, 0); SideBoard.transform.parent = OBJ.transform; SideBoard.transform.localPosition = new Vector3(0, RCP.RCHigh, 0); SupportFoot.transform.parent = OBJ.transform; SupportFoot.transform.localPosition = new Vector3(0, 0, -BoardWidth); //SupportFoot2.transform.parent = OBJ.transform; SupportFoot2.transform.localPosition = new Vector3(0, 0, RCP.RCLength - BoardWidth); DestroyImmediate(SupportFoot2); OBJ.name = "TerminusRollerConveyor"; break; case RollerConveyorType.Transition: RollerPart.transform.parent = OBJ.transform; RollerPart.transform.localPosition = new Vector3(0, RCP.RCHigh, 0); SideBoard.transform.parent = OBJ.transform; SideBoard.transform.localPosition = new Vector3(0, RCP.RCHigh, 0); SupportFoot.transform.parent = OBJ.transform; SupportFoot.transform.localPosition = new Vector3(0, 0, -BoardWidth); SupportFoot2.transform.parent = OBJ.transform; SupportFoot2.transform.localPosition = new Vector3(0, 0, RCP.RCLength - 2 * BoardWidth); OBJ.name = "TransitionRollerConveyor"; break; } //GameObject.Find("ScriptsContainer").GetComponent<MyClass>().Create2(OBJ); }
//创建输送线 #region Create_Conveyors public static void Create_Conveyors(Conveyor_Parameter CP, GameObject Conveyors) { RollerConveyor_Parameter RCP = CP.RCP; RCP.RCLength = CP.Length / CP.Num; switch (CP.Type) { case ConveyorType.RollerConveyor: if (CP.Num == 1) { GameObject OBJ1 = new GameObject(); Create_RollerConveyor(RCP, OBJ1, RollerConveyorType.Intact); //完整型 OBJ1.transform.parent = Conveyors.transform; OBJ1.transform.localPosition = new Vector3(0, 0, 0); } if (CP.Num == 2) { GameObject OBJ1 = new GameObject(); Create_RollerConveyor(RCP, OBJ1, RollerConveyorType.Origion); //起点型 OBJ1.transform.parent = Conveyors.transform; OBJ1.transform.localPosition = new Vector3(0, 0, 0); GameObject OBJ2 = new GameObject(); Create_RollerConveyor(RCP, OBJ2, RollerConveyorType.Transition); //终点型 OBJ2.transform.parent = Conveyors.transform; OBJ2.transform.localPosition = new Vector3(0, 0, CP.Length / CP.Num); } if (CP.Num > 2) { GameObject OBJ1 = new GameObject(); Create_RollerConveyor(RCP, OBJ1, RollerConveyorType.Origion); //起点型 OBJ1.transform.parent = Conveyors.transform; OBJ1.transform.localPosition = new Vector3(0, 0, 0); GameObject OBJ2 = new GameObject(); Create_RollerConveyor(RCP, OBJ2, RollerConveyorType.Transition); //终点型 OBJ2.transform.parent = Conveyors.transform; OBJ2.transform.localPosition = new Vector3(0, 0, CP.Length - RCP.RCLength); GameObject OBJ3 = new GameObject(); Create_RollerConveyor(RCP, OBJ3, RollerConveyorType.Terminus); for (int i = 0; i < CP.Num - 2; i++) { GameObject clone = Instantiate(OBJ3); clone.name = OBJ3.name + (i + 1).ToString(); clone.transform.parent = Conveyors.transform; clone.transform.localPosition = new Vector3(0, 0, (i + 1) * RCP.RCLength); } DestroyImmediate(OBJ3); } else { Debug.Log("The Number of Conveyors is invalid!"); } break; case ConveyorType.BeltConveyor: GameObject obj1 = new GameObject(); Create_BeltConveyor(RCP, obj1); for (int i = 0; i < CP.Num; i++) { GameObject clone = Instantiate(obj1); clone.name = obj1.name + (i + 1).ToString(); clone.transform.parent = Conveyors.transform.parent; clone.transform.localPosition = new Vector3(0, 0, i * RCP.RCLength); } break; } }
//创建皮带式输送机 #region Create_BeltConveyor public static void Create_BeltConveyor(RollerConveyor_Parameter RCP, GameObject OBJ) { float BoardWidth = RCP.RollerRadius; GameObject BeltPart = new GameObject(); BeltPart.name = "BeltPart";//滚筒部分 Create_BeltPart(RCP, BeltPart); GameObject SideBoard = new GameObject(); SideBoard.name = "SideBoard";//边板部分 Create_SideBoard(RCP, SideBoard); GameObject SupportFoot = new GameObject(); SupportFoot.name = "SupportFoot";//支撑架 Create_SupportFoot(RCP, SupportFoot); GameObject SupportFoot2 = Instantiate(SupportFoot); SupportFoot2.name = SupportFoot.name + 2.ToString(); //构造皮带式输送机 BeltPart.transform.parent = OBJ.transform; BeltPart.transform.localPosition = new Vector3(0, RCP.RCHigh, 0); SideBoard.transform.parent = OBJ.transform; SideBoard.transform.localPosition = new Vector3(0, RCP.RCHigh, 0); SupportFoot.transform.parent = OBJ.transform; SupportFoot.transform.localPosition = new Vector3(0, 0, 0); SupportFoot2.transform.parent = OBJ.transform; SupportFoot2.transform.localPosition = new Vector3(0, 0, RCP.RCLength - 2 * BoardWidth); }