public override void OnInspectorGUI() { vehicleData = (VehicleData)target; BaseGUI(); if (GUILayout.Button("Open Edit Mode")) { LockEditor(); OpenEditorScene(); TankInitSystem VehicleInstance = InitTankPrefabs(); //SetLOD (VehicleInstance); } if (GUILayout.Button("Pack Asset")) { TankInitSystem VehicleInstance = InitTankPrefabs(); //SetLOD (VehicleInstance); PackAsset(VehicleInstance); } //EditorGUILayout.TextField ("Layout number", gd.); base.OnInspectorGUI(); if (GUI.changed) { EditorUtility.SetDirty(target); } }
public void OnVehicleLoaded(int instanceID) { foreach (var vehicle in GameObject.FindObjectsOfType <TankInitSystem>()) { if (vehicle.gameObject.GetInstanceID() == instanceID) { if (vehicle._InstanceNetType == InstanceNetType.GameNetWorkOffline) { playerVehicle = vehicle; var defaultReloadTime = playerVehicle.vehicleComponents.mainTankFire.tankFireParams.ReloadTime; var defaultAdvanceReloadTime = playerVehicle.vehicleComponents.mainTankFire.tankFireParams.advanceFireClass.LargeReloadTime; //Fast Reload Binding PlaygroundCheater.OnToggleFastReload = (state) => { if (state) { playerVehicle.vehicleComponents.mainTankFire.tankFireParams.ReloadTime = 0.5f; playerVehicle.vehicleComponents.mainTankFire.tankFireParams.advanceFireClass.LargeReloadTime = 0.5f; } else { playerVehicle.vehicleComponents.mainTankFire.tankFireParams.ReloadTime = defaultReloadTime; playerVehicle.vehicleComponents.mainTankFire.tankFireParams.advanceFireClass.LargeReloadTime = defaultAdvanceReloadTime; } }; } } } }
public static void PackAsset(VehicleData vehicleData) { string CurrentAssetName = vehicleData.vehicleTextData.AssetName; string Path = "Assets/res/Cooked/" + CurrentAssetName.ToLower(); TankInitSystem tankInitSystem = InitTankPrefabs(vehicleData, false); GameObject Prefab = tankInitSystem.transform.GetChild(0).gameObject; #region 游戏内模型 预制体处理 var vehiclePrefab = AssetDatabase.LoadAssetAtPath <Object>(Path + "_Pre.prefab"); if (vehiclePrefab != null) { vehiclePrefab = PrefabUtility.ReplacePrefab(Prefab, vehiclePrefab, ReplacePrefabOptions.ReplaceNameBased); } else { vehiclePrefab = PrefabUtility.SaveAsPrefabAsset(Prefab, Path + "_Pre.prefab"); } #region 客户端打包文件 AssetImporter assetImporter = AssetImporter.GetAtPath(AssetDatabase.GetAssetPath(vehiclePrefab)); assetImporter.assetBundleName = CurrentAssetName + "_Pre"; assetImporter.assetBundleVariant = "clientextramesh"; #endregion ProjectWindowUtil.ShowCreatedAsset(tankInitSystem.gameObject); #endregion #region 务器资源处理 foreach (MeshRenderer meshRenderer in Prefab.GetComponentsInChildren <MeshRenderer>()) { DestroyImmediate(meshRenderer); } foreach (MeshFilter mesh in Prefab.GetComponentsInChildren <MeshFilter>()) { DestroyImmediate(mesh); } #region 务器打包文件 GameObject DelicateAsset = PrefabUtility.CreatePrefab("Assets/res/Cooked/DelicatedServer/" + CurrentAssetName.ToLower() + "_Pre" + ".prefab", Prefab); assetImporter = AssetImporter.GetAtPath(AssetDatabase.GetAssetPath(DelicateAsset)); assetImporter.SetAssetBundleNameAndVariant(CurrentAssetName + "_Pre", "masterextramesh"); #endregion #endregion DestroyImmediate(Prefab); DestroyImmediate(tankInitSystem.gameObject); }
void PackAsset(TankInitSystem tankInitSystem) { string CurrentAssetName = tankInitSystem.transform.GetChild(0).name; string Path = "Assets/res/Cooked/" + CurrentAssetName.ToLower(); // // //System.IO.DirectoryInfo folder = new System.IO.DirectoryInfo ("Assets/Resources/ExtraPackage/TankModel/" + CurrentAssetName); // if (!folder.Exists) // folder.Create (); //PrefabUtility.CreatePrefab (Path + "_PreBak.prefab", ((TankInitSystem)target).gameObject); GameObject Prefab = tankInitSystem.transform.GetChild(0).gameObject; #region 游戏内模型 预制体处理 GameObject Origin = PrefabUtility.CreatePrefab(Path + "_Pre.prefab", Prefab); // 要打包的物体 #region 客户端打包文件 AssetImporter assetImporter = AssetImporter.GetAtPath(AssetDatabase.GetAssetPath(Origin)); assetImporter.assetBundleName = CurrentAssetName + "_Pre"; assetImporter.assetBundleVariant = "clientextramesh"; #endregion ProjectWindowUtil.ShowCreatedAsset(tankInitSystem.gameObject); #endregion #region 务器资源处理 foreach (MeshRenderer meshRenderer in Prefab.GetComponentsInChildren <MeshRenderer>()) { DestroyImmediate(meshRenderer); } foreach (MeshFilter mesh in Prefab.GetComponentsInChildren <MeshFilter>()) { DestroyImmediate(mesh); } #region 务器打包文件 GameObject DelicateAsset = PrefabUtility.CreatePrefab("Assets/res/Cooked/DelicatedServer/" + CurrentAssetName.ToLower() + "_Pre" + ".prefab", Prefab); assetImporter = AssetImporter.GetAtPath(AssetDatabase.GetAssetPath(DelicateAsset)); assetImporter.SetAssetBundleNameAndVariant(CurrentAssetName + "_Pre", "masterextramesh"); #endregion #endregion DestroyImmediate(Prefab); DestroyImmediate(tankInitSystem.gameObject); }
public void OnVehicleLoaded(int instanceID) { foreach (var vehicle in GameObject.FindObjectsOfType <TankInitSystem>()) { if (vehicle.gameObject.GetInstanceID() == instanceID) { if (vehicle._InstanceNetType == InstanceNetType.GameNetWorkOffline) { playerVehicle = vehicle; } } } }
void Start() { GameObject newVehicle = new GameObject("Vehicle"); GameDataManager.OfflineMode = true; TankInitSystem initSystem = newVehicle.AddComponent <TankInitSystem>(); initSystem.VehicleName = "FT_17"; initSystem._InstanceNetType = InstanceNetType.GameNetWorkOffline; initSystem.BulletCountList = new int[3] { 35, 15, 5 }; initSystem.InitTankInitSystem(); }
void OnTriggerEnter(Collider cl) { #if ClientCode //if(GameNetwork.OfflineMode){ // TankInitSystem tankInitSystem = cl.GetComponentInParent<TankInitSystem> (); // if (tankInitSystem) { // switch (PointFunction) { // case Function.SupplyAmmo: // tankInitSystem.GetComponentInChildren<PlayerState>().StartCoroutine(tankInitSystem.GetComponentInChildren<PlayerState>().UpdateAmmo(this.gameObject)); // break; // case Function.CaptureArea: // tankInitSystem.GetComponentInChildren<PlayerState>().StartCoroutine(tankInitSystem.GetComponentInChildren<PlayerState>().Capture(this.gameObject)); // break; // case Function.EventCall: // //EventManager.TriggerEvent (EventCallName); // break; // case Function.RepairTank: // tankInitSystem.GetComponentInChildren<PlayerState>().StartCoroutine(tankInitSystem.GetComponentInChildren<PlayerState>().RepairTank(this.gameObject)); // break; // } // } //} #else TankInitSystem tankInitSystem = cl.GetComponentInParent <TankInitSystem> (); if (tankInitSystem) { switch (PointFunction) { case Function.SupplyAmmo: GetComponent <PhotonView> ().RPC("OnSupplyAmmo", PhotonTargets.All, tankInitSystem.PlayerID); break; case Function.CaptureArea: GetComponent <PhotonView> ().RPC("OnCapturePoint", PhotonTargets.All, tankInitSystem.PlayerID); break; case Function.EventCall: EventManager.TriggerEvent(EventCallName); break; case Function.RepairTank: GetComponent <PhotonView> ().RPC("OnRepairTank", PhotonTargets.All, tankInitSystem.PlayerID); break; } } #endif }
public static void RemoveVehicle(TankInitSystem vehicle) { var isVehicleLoaded = vehicle.vehicleComponents?.playerTracksController != null; //Be sure to Avoid AssetBundle Loading Error! if (isVehicleLoaded) { GameObject.Destroy(vehicle.gameObject); } else { vehicle.onVehicleLoaded += () => { GameObject.Destroy(vehicle.gameObject); }; } }
void SetLOD(TankInitSystem root) { Transform vehicleComponentRoot = root.transform.GetChild(0); //主要组件位置 MeshFilter[] OriginalMeshes = root.GetComponentsInChildren <MeshFilter>(); if (vehicleData.modelData.LOD == null) { return; } GameObject VehicleLOD = Instantiate(vehicleData.modelData.LOD); VehicleLOD.name = vehicleData.modelData.LOD.name; VehicleLOD.transform.SetParent(vehicleComponentRoot); LODGroup MainLODgroup = vehicleComponentRoot.gameObject.AddComponent <LODGroup>(); List <Renderer> MainMainMeshes = new List <Renderer>(); List <Renderer> MainLODMeshes = new List <Renderer>(); GetRenderByName(vehicleComponentRoot.transform, ref MainMainMeshes, "MainBody", "TankTransform", "TurretTransform"); GetRenderByName(VehicleLOD.transform, ref MainLODMeshes, "LeftUpperWheel", "LeftWheel", "MainBody", "RightUpperWheel", "RightWheel", "Turret"); MainLODgroup.SetLODs(new LOD[] { new LOD(0.25f, MainMainMeshes.ToArray()), new LOD(0, MainLODMeshes.ToArray()) }); Transform TurretTransform = vehicleComponentRoot.transform.Find("TurretTransform"); Transform Turret = TurretTransform.Find("Turret"); Transform Gun = TurretTransform.Find("GunTransform/Gun"); Transform Dym = TurretTransform.Find("GunTransform/GunDym/Dym"); Transform LODTurret = VehicleLOD.transform.Find("Turret_LOD"); Transform LODGun = LODTurret.GetChild(0); Transform LODDym = LODGun.GetChild(0); LODTurret.SetParent(Turret.parent); LODGun.SetParent(Gun.parent); LODDym.SetParent(Dym.parent); }
public override void OnInspectorGUI() { vehicleData = (VehicleData)target; BaseGUI(); if (InEditingSceneObject) { EditorGUILayout.HelpBox("Press Key [K] to save the position and rotation of the selected dump to the cache", MessageType.Error); } if (GUILayout.Button("Open Edit Mode")) { LockEditor(); OpenEditorScene(); TankInitSystem VehicleInstance = InitTankPrefabs(); //SetLOD (VehicleInstance); } if (GUILayout.Button("Pack Asset")) { TankInitSystem VehicleInstance = InitTankPrefabs(); //SetLOD (VehicleInstance); PackAsset(VehicleInstance); } //EditorGUILayout.TextField ("Layout number", gd.); base.OnInspectorGUI(); if (GUI.changed) { EditorUtility.SetDirty(target); } }
public GeneratePlayerVehicle(int vehicleID, string vehicleName, int ownerPlayerID, TankInitSystem tankInitSystem) { VehicleID = vehicleID; VehicleName = vehicleName; OwnerPlayerID = ownerPlayerID; this.tankInitSystem = tankInitSystem; }
TankInitSystem InitTankPrefabs() { #region Collision Detect if (vehicleData.modelData.MainModel.GetComponentsInChildren <BoxCollider>().Length == 0) { if (EditorUtility.DisplayDialog("Error", "Collision should be set.We will redirct you to it.", "OK,l will set it now!", "No,l will choose another one")) { EditorGUIUtility.PingObject(vehicleData.modelData.MainModel.GetInstanceID()); OpenEditorScene(); GameObject EditColliderInstance = Instantiate <GameObject>(vehicleData.modelData.MainModel); EditColliderInstance.name = vehicleData.modelData.MainModel.name; string TempPath = System.IO.Path.GetDirectoryName(AssetDatabase.GetAssetPath(vehicleData.modelData.MainModel.GetInstanceID())); string PrefabStoreDir = System.IO.Directory.CreateDirectory(string.Format(TempPath + "/Collisions_{0}", vehicleData.modelData.MainModel.name)).FullName; AssetDatabase.Refresh(); return(null); //PrefabUtility.CreatePrefab (string.Format (PrefabStoreDir + "/{0}.prefab", vehicleData.modelData.MainModel.name),EditColliderInstance); } else { return(null); } } #endregion GameObject TankPrefabs = new GameObject(); GameObject InstanceMesh = Instantiate(vehicleData.modelData.MainModel); try { #region Init InstanceMesh.name = vehicleData.modelData.MainModel.name; #endregion TankPrefabs.name = InstanceMesh.name + "_Pre"; InstanceMesh.transform.parent = TankPrefabs.transform; GameObject TankTransform = new GameObject("TankTransform"); TankTransform.transform.parent = InstanceMesh.transform; Transform RightWheel, LeftWheel, RightUpperWheels, LeftUpperWheels, Turret, Gun, GunDym; #region Find Dumps RightWheel = InstanceMesh.transform.Find("RightWheel"); LeftWheel = InstanceMesh.transform.Find("LeftWheel"); Turret = InstanceMesh.transform.Find("Turret"); Gun = Turret.transform.Find("Gun"); GunDym = Gun.GetChild(0); RightUpperWheels = InstanceMesh.transform.Find("RightUpperWheel"); LeftUpperWheels = InstanceMesh.transform.Find("LeftUpperWheel"); #endregion RightWheel.parent = TankTransform.transform; LeftWheel.parent = TankTransform.transform; LeftUpperWheels.parent = TankTransform.transform; RightUpperWheels.parent = TankTransform.transform; GameObject TurretTransform = new GameObject("TurretTransform"); GameObject GunTransform = new GameObject("GunTransform"); GameObject GunDymTransform = new GameObject("GunDym"); VehicleComponentsReferenceManager referenceManager = InstanceMesh.AddComponent <VehicleComponentsReferenceManager>(); TurretTransform.transform.SetParent(InstanceMesh.transform); TurretTransform.transform.position = Turret.transform.position; GunTransform.transform.position = Gun.transform.position; Turret.parent = TurretTransform.transform; Gun.parent = GunTransform.transform; GunTransform.transform.SetParent(TurretTransform.transform); GunDymTransform.transform.position = GunDym.transform.position; GunDymTransform.transform.SetParent(GunTransform.transform); GunDym.SetParent(GunDymTransform.transform); #region Add fire animation Animator FireAnimator = GunDymTransform.AddComponent <Animator>(); FireAnimator.runtimeAnimatorController = vehicleData.vehicleTextData.TFParameter.GymAnimation; #endregion AddDumpNode("FFPoint", GunTransform.transform, true, referenceManager); AddDumpNode("EffectStart", GunTransform.transform, true, referenceManager); AddDumpNode("FireForceFeedbackPoint", GunTransform.transform, true, referenceManager); AddDumpNode("EngineSmoke", InstanceMesh.transform, true, referenceManager); AddDumpNode("EngineSound", InstanceMesh.transform, true, referenceManager); AddDumpNode("MainCameraFollowTarget", InstanceMesh.transform, true, referenceManager); AddDumpNode("MainCameraGunner", GunTransform.transform, true, referenceManager); AddDumpNode("MachineGunFFPoint", TurretTransform.transform, true, referenceManager); AddDumpNode("CenterOfGravity", InstanceMesh.transform, true, referenceManager); referenceManager.LeftTrack = InstanceMesh.transform.Find("LeftTrack").gameObject; referenceManager.RightTrack = InstanceMesh.transform.Find("RightTrack").gameObject; GameObject HitBoxInstance = Instantiate <GameObject>(vehicleData.modelData.HitBox.HitBoxPrefab); HitBoxInstance.transform.Find("Main").name = "MainHitBox"; HitBoxInstance.transform.Find("MainHitBox").SetParent(InstanceMesh.transform); HitBoxInstance.transform.Find("Turret").name = "TurretHitBox"; HitBoxInstance.transform.Find("TurretHitBox").SetParent(TurretTransform.transform); HitBoxInstance.transform.Find("Gun").name = "GunHitBox"; HitBoxInstance.transform.Find("GunHitBox").SetParent(GunTransform.transform); HitBoxInstance.transform.Find("Dym").name = "DymHitBox"; HitBoxInstance.transform.Find("DymHitBox").SetParent(GunDymTransform.transform); DestroyImmediate(HitBoxInstance); Restore(LeftWheel.GetComponentsInChildren <Transform>()); Restore(RightWheel.GetComponentsInChildren <Transform>()); Restore(LeftUpperWheels.GetComponentsInChildren <Transform>()); Restore(RightUpperWheels.GetComponentsInChildren <Transform>()); new GameObject("MainCameraTarget").transform.SetParent(TurretTransform.transform); TankInitSystem initySystem = TankPrefabs.AddComponent <TankInitSystem>(); initySystem.PSParameter = vehicleData.vehicleTextData.PSParameter; initySystem.TFParameter = vehicleData.vehicleTextData.TFParameter; initySystem.MTParameter = vehicleData.vehicleTextData.MTParameter; initySystem.PTCParameter = vehicleData.vehicleTextData.PTCParameter; return(initySystem); } catch (System.Exception exception) { EditorUtility.DisplayDialog("Exception", exception.Message + "\n" + exception.StackTrace, "OK"); DestroyImmediate(TankPrefabs); throw exception; return(null); } }
public static TankInitSystem InitTankPrefabs(VehicleData vehicleData, bool isPreviewMode) { #region Collision Detect if (vehicleData.modelData.MainModel.GetComponentsInChildren <BoxCollider>().Length == 0) { if (EditorUtility.DisplayDialog("Error", "Collision should be set.We will redirct you to it.", "OK,l will set it now!", "No,l will choose another one")) { EditorGUIUtility.PingObject(vehicleData.modelData.MainModel.GetInstanceID()); OpenEditorScene(); GameObject EditColliderInstance = Instantiate <GameObject>(vehicleData.modelData.MainModel); EditColliderInstance.name = vehicleData.modelData.MainModel.name; string TempPath = System.IO.Path.GetDirectoryName(AssetDatabase.GetAssetPath(vehicleData.modelData.MainModel.GetInstanceID())); string PrefabStoreDir = System.IO.Directory.CreateDirectory(string.Format(TempPath + "/Collisions_{0}", vehicleData.modelData.MainModel.name)).FullName; AssetDatabase.Refresh(); return(null); //PrefabUtility.CreatePrefab (string.Format (PrefabStoreDir + "/{0}.prefab", vehicleData.modelData.MainModel.name),EditColliderInstance); } else { return(null); } } #endregion GameObject TankPrefabs = new GameObject(); GameObject InstanceMesh = Instantiate(vehicleData.modelData.MainModel); try { #region Init InstanceMesh.name = vehicleData.vehicleTextData.AssetName; #endregion TankPrefabs.name = vehicleData.vehicleTextData.AssetName + "_Pre"; InstanceMesh.transform.parent = TankPrefabs.transform; InstanceMesh.transform.localPosition = vehicleData.cacheData.StartPoint; GameObject VehicleDynamics = new GameObject("VehicleDynamics"); VehicleDynamics.transform.parent = InstanceMesh.transform; Transform RightWheel, LeftWheel, RightUpperWheels, LeftUpperWheels, Turret, Gun, GunDym; #region Find Dumps RightWheel = InstanceMesh.transform.Find("RightWheel"); LeftWheel = InstanceMesh.transform.Find("LeftWheel"); Turret = InstanceMesh.transform.Find("Turret"); Gun = Turret.transform.Find("Gun"); GunDym = Gun.GetChild(0); RightUpperWheels = InstanceMesh.transform.Find("RightUpperWheel"); LeftUpperWheels = InstanceMesh.transform.Find("LeftUpperWheel"); #endregion RightWheel.parent = VehicleDynamics.transform; LeftWheel.parent = VehicleDynamics.transform; LeftUpperWheels.parent = VehicleDynamics.transform; RightUpperWheels.parent = VehicleDynamics.transform; #region FireSystem VehicleComponentsReferenceManager referenceManager = InstanceMesh.AddComponent <VehicleComponentsReferenceManager>(); var mutiTurretTransList = new List <FireSystemTransform>(); //多炮塔配置 foreach (var multiTurret in vehicleData.vehicleTextData.MultiFireSystemData) { var mTurret = InstanceMesh.transform.Find(multiTurret.turretPath); var mGun = mTurret.Find(multiTurret.gunPath); var mDym = mGun.Find(multiTurret.dymPath); var turretParent = mTurret.parent; CreateWrapper(mDym, true); CreateWrapper(mGun, true); CreateWrapper(mTurret, true); mDym.parent.SetParent(mGun.parent); mGun.parent.SetParent(mTurret.parent); mTurret.parent.SetParent(turretParent); var gunFollowerTrans = new GameObject("GunFollowerTrans").transform; gunFollowerTrans.SetParent(mGun.parent); gunFollowerTrans.localPosition = multiTurret.gunFollowerOffSet; var turretFollowerTrans = new GameObject("TurretFollowerTrans").transform; turretFollowerTrans.SetParent(mGun.parent); turretFollowerTrans.localPosition = multiTurret.turretFollowerOffSet; //多炮塔毕竟少数 var mffpoint = new GameObject("FFPoint").transform; mffpoint.SetParent(mDym.parent); mffpoint.rotation = mDym.parent.rotation; mffpoint.position = mDym.parent.position + mDym.parent.forward * multiTurret.ffPointOffSet; var meffectStart = new GameObject("EffectStart").transform; meffectStart.SetParent(mDym.parent); meffectStart.rotation = mDym.parent.rotation; meffectStart.position = mDym.parent.position + mDym.parent.forward * multiTurret.effectStartOffSet; //但是 我们依然设置 Icon 方便编辑 IconManager.SetIcon(mffpoint.gameObject, IconManager.LabelIcon.Red); IconManager.SetIcon(meffectStart.gameObject, IconManager.LabelIcon.Red); mutiTurretTransList.Add( new FireSystemTransform { turret = mTurret.parent, gun = mGun.parent, dym = mDym.parent, ffPoint = mffpoint, fireEffectPoint = meffectStart, gunFollowerTrans = gunFollowerTrans, }); } referenceManager.mutiTurretTrans = mutiTurretTransList; GameObject TurretTransform = new GameObject("TurretTransform"); GameObject GunTransform = new GameObject("GunTransform"); GameObject GunDymTransform = new GameObject("GunDym"); TurretTransform.transform.SetParent(InstanceMesh.transform); TurretTransform.transform.position = Turret.transform.position; GunTransform.transform.position = Gun.transform.position; Turret.parent = TurretTransform.transform; Gun.parent = GunTransform.transform; GunTransform.transform.SetParent(TurretTransform.transform); GunDymTransform.transform.position = GunDym.transform.position; GunDymTransform.transform.SetParent(GunTransform.transform); GunDym.SetParent(GunDymTransform.transform); #endregion AddDumpNode("FFPoint", GunTransform.transform, vehicleData, true, referenceManager); AddDumpNode("EffectStart", GunTransform.transform, vehicleData, true, referenceManager); AddDumpNode("FireForceFeedbackPoint", GunTransform.transform, vehicleData, true, referenceManager); AddDumpNode("EngineSmoke", InstanceMesh.transform, vehicleData, true, referenceManager); AddDumpNode("EngineSound", InstanceMesh.transform, vehicleData, true, referenceManager); AddDumpNode("MainCameraFollowTarget", InstanceMesh.transform, vehicleData, true, referenceManager); AddDumpNode("MainCameraGunner", GunTransform.transform, vehicleData, true, referenceManager); AddDumpNode("CenterOfGravity", InstanceMesh.transform, vehicleData, true, referenceManager); AddDumpNode("BotPoint", InstanceMesh.transform, vehicleData, true, referenceManager); referenceManager.LeftTrack = InstanceMesh.transform.Find("LeftTrack").gameObject; referenceManager.RightTrack = InstanceMesh.transform.Find("RightTrack").gameObject; referenceManager.LeftWheels = ResortWheelTrans(GetChilds(LeftWheel)); referenceManager.RightWheels = ResortWheelTrans(GetChilds(RightWheel)); referenceManager.LeftUpperWheels = ResortWheelTrans(GetChilds(LeftUpperWheels)); referenceManager.RightUpperWheels = ResortWheelTrans(GetChilds(RightUpperWheels)); GameObject HitBoxInstance = Instantiate <GameObject>(vehicleData.modelData.HitBox.HitBoxPrefab); HitBoxInstance.transform.position += vehicleData.cacheData.StartPoint; referenceManager.MainHitBox = HitBoxInstance.transform.Find("Main").gameObject; referenceManager.TurretHitBox = HitBoxInstance.transform.Find("Turret").gameObject; referenceManager.GunHitBox = HitBoxInstance.transform.Find("Gun").gameObject; referenceManager.DymHitBox = HitBoxInstance.transform.Find("Dym").gameObject; HitBoxInstance.transform.Find("Main").name = "MainHitBox"; HitBoxInstance.transform.Find("MainHitBox").SetParent(InstanceMesh.transform); HitBoxInstance.transform.Find("Turret").name = "TurretHitBox"; HitBoxInstance.transform.Find("TurretHitBox").SetParent(TurretTransform.transform); HitBoxInstance.transform.Find("Gun").name = "GunHitBox"; HitBoxInstance.transform.Find("GunHitBox").SetParent(GunTransform.transform); HitBoxInstance.transform.Find("Dym").name = "DymHitBox"; HitBoxInstance.transform.Find("DymHitBox").SetParent(GunDymTransform.transform); DestroyImmediate(HitBoxInstance); new GameObject("MainCameraTarget").transform.SetParent(TurretTransform.transform); TankInitSystem initySystem = TankPrefabs.AddComponent <TankInitSystem>(); initySystem.vehicleTextData = vehicleData.vehicleTextData; #region Vehicle Physic var vehiclePhysic = InstanceMesh.AddComponent <Rigidbody>(); vehiclePhysic.mass = vehicleData.vehicleTextData.PTCParameter.Mass; vehiclePhysic.drag = 0.1f; vehiclePhysic.angularDrag = 2.5f; vehiclePhysic.useGravity = true; referenceManager.VehiclePhysic = vehiclePhysic; #endregion referenceManager.VehicleDynamics = VehicleDynamics; referenceManager.TurretGameObject = TurretTransform; referenceManager.GunGameObject = GunTransform; referenceManager.GunDymGameObject = GunDymTransform; if (!isPreviewMode) { CreateWrapper(referenceManager.MainCameraFollowTarget.transform); CreateWrapper(referenceManager.MainCameraGunner.transform); } return(initySystem); } catch (System.Exception exception) { EditorUtility.DisplayDialog("Exception", exception.Message + "\n" + exception.StackTrace, "OK"); DestroyImmediate(TankPrefabs); throw exception; } }
TankInitSystem InitTankPrefabs() { #region 碰撞检测 if (vehicleData.modelData.MainModel.GetComponentsInChildren <BoxCollider> ().Length == 0) { if (EditorUtility.DisplayDialog("错误", "坦克模型必须设置完毕碰撞数据", "好的,立刻去设置", "重新选择资源")) { EditorGUIUtility.PingObject(vehicleData.modelData.MainModel.GetInstanceID()); OpenEditorScene(); GameObject EditColliderInstance = Instantiate <GameObject> (vehicleData.modelData.MainModel); EditColliderInstance.name = vehicleData.modelData.MainModel.name; string TempPath = System.IO.Path.GetDirectoryName(AssetDatabase.GetAssetPath(vehicleData.modelData.MainModel.GetInstanceID())); string PrefabStoreDir = System.IO.Directory.CreateDirectory(string.Format(TempPath + "/Collisions_{0}", vehicleData.modelData.MainModel.name)).FullName; AssetDatabase.Refresh(); //PrefabUtility.CreatePrefab (string.Format (PrefabStoreDir + "/{0}.prefab", vehicleData.modelData.MainModel.name),EditColliderInstance); } else { return(null); } } #endregion #region 初始化 坦克物体变量 GameObject TankPrefabs = new GameObject(); GameObject InstanceMesh = Instantiate(vehicleData.modelData.MainModel); InstanceMesh.name = vehicleData.modelData.MainModel.name; #endregion TankPrefabs.name = InstanceMesh.name + "_Pre"; InstanceMesh.transform.parent = TankPrefabs.transform; GameObject TankTransform = new GameObject("TankTransform"); TankTransform.transform.parent = InstanceMesh.transform; Transform RightWheel, LeftWheel, RightUpperWheels, LeftUpperWheels, Turret, Gun, GunDym; #region 在模型上寻找虚拟对象 RightWheel = InstanceMesh.transform.Find("RightWheel"); LeftWheel = InstanceMesh.transform.Find("LeftWheel"); Turret = InstanceMesh.transform.Find("Turret"); Gun = Turret.transform.Find("Gun"); GunDym = Gun.GetChild(0); RightUpperWheels = InstanceMesh.transform.Find("RightUpperWheel"); LeftUpperWheels = InstanceMesh.transform.Find("LeftUpperWheel"); #endregion RightWheel.parent = TankTransform.transform; LeftWheel.parent = TankTransform.transform; LeftUpperWheels.parent = TankTransform.transform; RightUpperWheels.parent = TankTransform.transform; #region 实例化坦克的附加物体 坦克控制器 坦克脚本 坦克ui 坦克瞄准镜 主摄像机 坦克引擎声音 坦克引擎烟雾 死亡效果 //EngineSmoke = new GameObject("EngineSmoke"); //LeftTrackEffect = new GameObject("LeftTrackEffect"); //RightTrackEffect=new GameObject("RightTrackEffect"); #endregion GameObject TurretTransform = new GameObject("TurretTransform"); GameObject GunTransform = new GameObject("GunTransform"); GameObject GunDymTransform = new GameObject("GunDym"); VehicleComponentsReferenceManager referenceManager = InstanceMesh.AddComponent <VehicleComponentsReferenceManager>(); //GameObject MainHitBox = new GameObject ("MainHitBox"); //GameObject TurretHitBox = new GameObject ("TurretHitBox"); TurretTransform.transform.SetParent(InstanceMesh.transform); TurretTransform.transform.position = Turret.transform.position; GunTransform.transform.position = Gun.transform.position; Turret.parent = TurretTransform.transform; Gun.parent = GunTransform.transform; GunTransform.transform.SetParent(TurretTransform.transform); GunDymTransform.transform.position = GunDym.transform.position; GunDymTransform.transform.SetParent(GunTransform.transform); GunDym.SetParent(GunDymTransform.transform); #region 发射动画 Animator FireAnimator = GunDymTransform.AddComponent <Animator> (); FireAnimator.runtimeAnimatorController = vehicleData.vehicleTextData.TFParameter.GymAnimation; #endregion AddDumpNode("FFPoint", GunTransform.transform, true, referenceManager); AddDumpNode("EffectStart", GunTransform.transform, true, referenceManager); AddDumpNode("FireForceFeedbackPoint", InstanceMesh.transform, true, referenceManager); AddDumpNode("EngineSmoke", InstanceMesh.transform, true, referenceManager); AddDumpNode("EngineSound", InstanceMesh.transform, true, referenceManager); AddDumpNode("MainCameraFollowTarget", InstanceMesh.transform, true, referenceManager); AddDumpNode("MainCameraGunner", GunTransform.transform, true, referenceManager); AddDumpNode("MachineGunFFPoint", TurretTransform.transform, true, referenceManager); AddDumpNode("CenterOfGravity", InstanceMesh.transform, true, referenceManager); //MainHitBox.transform.parent = TankModel.transform; //TurretHitBox.transform.parent = TurretTransform.transform; //EngineSmoke.transform.parent = TankModel.transform; //EngineSmoke.tag = "EngineSmoke"; // GameObject LODMesh = new GameObject ("LODMesh"); // LODMesh.transform.SetParent (TankModel.transform); // LODMesh.tag = "LODMesh"; GameObject HitBoxInstance = Instantiate <GameObject> (vehicleData.modelData.HitBox.HitBoxPrefab); HitBoxInstance.transform.Find("Main").name = "MainHitBox"; HitBoxInstance.transform.Find("MainHitBox").SetParent(InstanceMesh.transform); HitBoxInstance.transform.Find("Turret").name = "TurretHitBox"; HitBoxInstance.transform.Find("TurretHitBox").SetParent(TurretTransform.transform); HitBoxInstance.transform.Find("Gun").name = "GunHitBox"; HitBoxInstance.transform.Find("GunHitBox").SetParent(GunTransform.transform); HitBoxInstance.transform.Find("Dym").name = "DymHitBox"; HitBoxInstance.transform.Find("DymHitBox").SetParent(GunDymTransform.transform); DestroyImmediate(HitBoxInstance); //HitBoxInstance.transform.Find("Dym").SetParent() Restore(LeftWheel.GetComponentsInChildren <Transform> ()); Restore(RightWheel.GetComponentsInChildren <Transform> ()); Restore(LeftUpperWheels.GetComponentsInChildren <Transform> ()); Restore(RightUpperWheels.GetComponentsInChildren <Transform> ()); new GameObject("MainCameraTarget").transform.SetParent(TurretTransform.transform); TankInitSystem initySystem = TankPrefabs.AddComponent <TankInitSystem>(); initySystem.PSParameter = vehicleData.vehicleTextData.PSParameter; initySystem.TFParameter = vehicleData.vehicleTextData.TFParameter; initySystem.MTParameter = vehicleData.vehicleTextData.MTParameter; initySystem.PTCParameter = vehicleData.vehicleTextData.PTCParameter; return(initySystem); }