void showBodySettings() { if (wheelTransformPanel == false) { GUILayout.BeginHorizontal(); GUILayout.Label("Select Body Prefab ", EditorStyles.boldLabel); GUILayout.Label("Select Left Wheel Prefab ", EditorStyles.boldLabel); GUILayout.Label("Select Right Wheel Prefab", EditorStyles.boldLabel); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); // Body prefab bodyPrefab = EditorGUILayout.ObjectField(bodyPrefab, typeof(GameObject), true) as GameObject; if (bodyPrefab != null) { if (selectedBodyPrefab == false) { if (GUILayout.Button("Okey")) { bodyPrefab = Instantiate(bodyPrefab, gm.transform.Find("Body").transform) as GameObject; bodyPrefab.transform.localPosition = Vector3.zero; selectedBodyPrefab = true; } } if (GUILayout.Button("Edit")) { if (selectedBodyPrefab && bodyPrefab != null) { DestroyImmediate(bodyPrefab); } selectedBodyPrefab = false; bodyPrefab = null; } } // Left wheel leftWheelPrefab = EditorGUILayout.ObjectField(leftWheelPrefab, typeof(GameObject), true) as GameObject; if (leftWheelPrefab != null) { if (selectedLeftWheelPrefab == false) { if (GUILayout.Button("Okey")) { leftWheelObj = new GameObject[numberOfWheel / 2]; for (int i = 0; i < numberOfWheel / 2; i++) { leftWheelPrefab = Instantiate(leftWheelPrefab, gm.transform.Find("WheelMesh").transform) as GameObject; leftWheelObj[i] = leftWheelPrefab; leftWheelObj[i].name = "WheelMeshL" + i; } selectedLeftWheelPrefab = true; } } if (GUILayout.Button("Edit")) { if (selectedLeftWheelPrefab && leftWheelPrefab != null) { DestroyImmediate(leftWheelPrefab); for (int i = 0; i < leftWheelObj.Length; i++) { DestroyImmediate(leftWheelObj[i]); } } selectedLeftWheelPrefab = false; leftWheelPrefab = null; } } // Right wheel rightWheelPrefab = EditorGUILayout.ObjectField(rightWheelPrefab, typeof(GameObject), true) as GameObject; if (rightWheelPrefab != null) { if (selectedRightWheelPrefab == false) { if (GUILayout.Button("Okey")) { rightWheelObj = new GameObject[numberOfWheel / 2]; for (int i = 0; i < numberOfWheel / 2; i++) { rightWheelPrefab = Instantiate(rightWheelPrefab, gm.transform.Find("WheelMesh").transform) as GameObject; rightWheelObj[i] = rightWheelPrefab; rightWheelObj[i].name = "WheelMeshR" + i; } selectedRightWheelPrefab = true; } } if (GUILayout.Button("Edit")) { if (selectedRightWheelPrefab && rightWheelPrefab != null) { DestroyImmediate(rightWheelPrefab); for (int i = 0; i < rightWheelObj.Length; i++) { DestroyImmediate(rightWheelObj[i]); } } selectedRightWheelPrefab = false; rightWheelPrefab = null; } } GUILayout.EndHorizontal(); if (bodyPrefab != null && selectedBodyPrefab && rightWheelPrefab != null && selectedRightWheelPrefab && leftWheelPrefab != null && selectedLeftWheelPrefab) { if (GUILayout.Button("Select And Calculate Transform")) { wheelTransformPanel = true; // Estimated wheel position calculation for (int i = 0; i < leftWheelObj.Length; i++) { leftWheelObj[leftWheelObj.Length - i - 1].transform.localPosition = new Vector3(-1, -1, i); } for (int i = 0; i < rightWheelObj.Length; i++) { rightWheelObj[rightWheelObj.Length - i - 1].transform.localPosition = new Vector3(1, -1, i); } } } } if (bodyPrefab == null || rightWheelPrefab == null || leftWheelPrefab == null) { EditorGUILayout.HelpBox("Please select the objects => body,right wheel,left wheel", MessageType.Info); EditorGUILayout.HelpBox("Your choices should be in the form of prefab", MessageType.Warning); // Wheel transform kodu içerisinden çkeilde selectedWheelObj = new GameObject[numberOfWheel]; } if (wheelTransformPanel == false) { return; } if (wheelTransformPanel) { GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); GUILayout.Label("Select Wheel :", EditorStyles.boldLabel); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); for (int i = 0; i < leftWheelObj.Length; i++) { if (GUILayout.Button(leftWheelObj[i].name)) { if (selectedWheelObj[i] != leftWheelObj[i]) { selectedWheelObj[i] = leftWheelObj[i]; } else { selectedWheelObj[i] = null; } } } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); for (int i = 0; i < rightWheelObj.Length; i++) { if (GUILayout.Button(rightWheelObj[i].name)) { if (selectedWheelObj[numberOfWheel / 2 + i] != rightWheelObj[i]) { selectedWheelObj[numberOfWheel / 2 + i] = rightWheelObj[i]; } else { selectedWheelObj[numberOfWheel / 2 + i] = null; } } } GUILayout.EndHorizontal(); Tools.current = Tool.Move; GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); GUILayout.Label("Tools", EditorStyles.boldLabel); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); if (GUILayout.Button("Remove all")) { selectedWheelObj = new GameObject[numberOfWheel]; Selection.activeGameObject = null; } if (GUILayout.Button("Select all")) { selectedWheelObj = new GameObject[numberOfWheel]; for (int i = 0; i < leftWheelObj.Length; i++) { selectedWheelObj[i] = leftWheelObj[i]; } for (int i = 0; i < rightWheelObj.Length; i++) { selectedWheelObj[numberOfWheel / 2 + i] = rightWheelObj[i]; } } GUILayout.EndHorizontal(); Selection.objects = selectedWheelObj; } if (GUILayout.Button("Apply")) { VehicleFree gmVehicle = gm.GetComponent <VehicleFree>(); gmVehicle.whellCols = new WheelCollider[numberOfWheel]; gmVehicle.whellMeshs = new Transform[numberOfWheel]; for (int i = 0; i < numberOfWheel; i++) { gm.transform.Find("WheelCollider").GetChild(i).localPosition = gm.transform.Find("WheelMesh").GetChild(i).localPosition + new Vector3(0, 0.15f, 0); } // Adjust the left wheel for (int i = 0; i < numberOfWheel / 2; i++) { gmVehicle.whellCols[i * 2] = gm.transform.Find("WheelCollider").GetChild(i).GetComponent <WheelCollider>(); gmVehicle.whellMeshs[i * 2] = gm.transform.Find("WheelMesh").GetChild(i).GetComponent <Transform>(); } // Adjust the right wheel for (int i = numberOfWheel / 2; i < numberOfWheel; i++) { gmVehicle.whellCols[(i - numberOfWheel / 2) * 2 + 1] = gm.transform.Find("WheelCollider").GetChild(i).GetComponent <WheelCollider>(); gmVehicle.whellMeshs[(i - numberOfWheel / 2) * 2 + 1] = gm.transform.Find("WheelMesh").GetChild(i).GetComponent <Transform>(); } this.Close(); } }
void equalize() { // This section installs the features specified in your vehicle gm = new GameObject(); gm.AddComponent <Rigidbody>(); gm.AddComponent <VehicleFree>(); gm.GetComponent <Rigidbody>().mass = 1000; gm.GetComponent <Rigidbody>().drag = 0.015f; vehicle = gm.GetComponent <VehicleFree>(); gm.name = vehicleName; vehicle.m_controlType = VehicleFree.ControlType.semi_automatic; switch (tractionType) { case TractionType.all_whell_drive: vehicle.m_tractionType = VehicleFree.TractionType.all_whell_drive; break; case TractionType.front_wheel_drive: vehicle.m_tractionType = VehicleFree.TractionType.front_wheel_drive; break; case TractionType.rear_wheel_drive: vehicle.m_tractionType = VehicleFree.TractionType.rear_wheel_drive; break; case TractionType.custom_whell_drive: vehicle.m_tractionType = VehicleFree.TractionType.custom_whell_drive; vehicle.customWheelAxle = customTractionTypeAxle; break; } switch (speedType) { case SpeedType.kmh: vehicle.m_speedType = VehicleFree.SpeedType.kmh; break; case SpeedType.mph: vehicle.m_speedType = VehicleFree.SpeedType.mph; break; } vehicle.HP = HP; vehicle.motorTorqGraphic = value; switch (breakType) { case BreakType.all_whell_drive: vehicle.m_breakType = VehicleFree.BreakType.all_whell_drive; break; case BreakType.front_wheel_drive: vehicle.m_breakType = VehicleFree.BreakType.front_wheel_drive; break; case BreakType.rear_wheel_drive: vehicle.m_breakType = VehicleFree.BreakType.rear_wheel_drive; break; case BreakType.custom_whell_drive: vehicle.m_breakType = VehicleFree.BreakType.custom_whell_drive; vehicle.customWheelAxleBreak = customBreakTypeAxle; break; } vehicle.breakPower = breakPower; vehicle.gearRatios = gearRatios; vehicle.maxRpm = maxRpm; vehicle.startEngineRpm = startEngineRpm; //Center of gravty object GameObject centerOfGravityObj = new GameObject(); centerOfGravityObj.name = "CenterOfGravity"; centerOfGravityObj.transform.parent = gm.transform; GameObject centerOfGravityObj_Front = new GameObject(); centerOfGravityObj_Front.name = "Front"; centerOfGravityObj_Front.transform.parent = centerOfGravityObj.transform; centerOfGravityObj_Front.transform.localPosition = new Vector3(0, -0.2f, 1); centerOfGravityObj_Front.AddComponent <Rigidbody>().mass = 285; FixedJoint cogFFJ = centerOfGravityObj_Front.AddComponent <FixedJoint>(); cogFFJ.connectedBody = gm.GetComponent <Rigidbody>(); GameObject centerOfGravityObj_Back = new GameObject(); centerOfGravityObj_Back.name = "Back"; centerOfGravityObj_Back.transform.parent = centerOfGravityObj.transform; centerOfGravityObj_Back.transform.localPosition = new Vector3(0, -0.2f, -1); centerOfGravityObj_Back.AddComponent <Rigidbody>().mass = 185; FixedJoint cogBFJ = centerOfGravityObj_Back.AddComponent <FixedJoint>(); cogBFJ.connectedBody = gm.GetComponent <Rigidbody>(); //Body object GameObject body = new GameObject(); body.name = "Body"; body.transform.parent = gm.transform; //Collider object GameObject Collider = new GameObject(); Collider.name = "Collider"; Collider.transform.parent = gm.transform; Collider.AddComponent <BoxCollider>(); //Wheel collider object GameObject wheelCol = new GameObject(); wheelCol.name = "WheelCollider"; wheelCol.transform.parent = gm.transform; WheelFrictionCurve wfcForward = new WheelFrictionCurve(); wfcForward.extremumSlip = 1f; wfcForward.extremumValue = 2f; wfcForward.asymptoteSlip = 2f; wfcForward.asymptoteValue = 1f; wfcForward.stiffness = 1f; WheelFrictionCurve wfcSideway = new WheelFrictionCurve(); wfcSideway.extremumSlip = 0.5f; wfcSideway.extremumValue = 1f; wfcSideway.asymptoteSlip = 1f; wfcSideway.asymptoteValue = 0.5f; wfcSideway.stiffness = 1f; for (int i = 0; i < numberOfWheel; i++) { GameObject wheelC = new GameObject(); if (i >= numberOfWheel / 2) { wheelC.name = "WheelColliderR" + (i - numberOfWheel / 2); } else { wheelC.name = "WheelColliderL" + i; } wheelC.transform.parent = wheelCol.transform; WheelCollider wcol = wheelC.AddComponent <WheelCollider>(); wcol.mass = 20; wcol.forwardFriction = wfcForward; wcol.sidewaysFriction = wfcSideway; } //Wheel mesh object GameObject wheelMesh = new GameObject(); wheelMesh.name = "WheelMesh"; wheelMesh.transform.parent = gm.transform; }