public override void OnInspectorGUI() { //this is so that it always updates correct target childScript = (AIControllerChild)target; EditorGUILayout.LabelField("AI Property Controller"); EditorGUILayout.Space(); if(PrefabUtility.GetPrefabType(childScript.gameObject) == PrefabType.Prefab) { EditorGUILayout.LabelField("Parameters can't be edited using the Overview Panel if the AI is a prefab."); return; } showFoldout1 = EditorGUILayout.Foldout(showFoldout1, "Main Referencing Objects"); //main referencing objects if(showFoldout1) { EditorGUILayout.Space(); patrolManager = EditorGUILayout.ObjectField("Patrol Manager" ,patrolManager, typeof(Object), true) as GameObject; sensorParent = EditorGUILayout.ObjectField("Sensor Parent" ,sensorParent, typeof(Object), true) as GameObject; ears = EditorGUILayout.ObjectField("Ears Object" ,ears, typeof(Object), true) as GameObject; sight = EditorGUILayout.ObjectField("Sight Object" ,sight, typeof(Object), true) as GameObject; model = EditorGUILayout.ObjectField("Model Object" ,model, typeof(Object), true) as GameObject; EditorGUILayout.Space(); } showFoldout2 = EditorGUILayout.Foldout(showFoldout2, "Data About AI Character"); //Data About AI Character if(showFoldout2) { EditorGUILayout.Space(); eyeHeight = EditorGUILayout.Vector3Field("Relative Eye Height", eyeHeight); EditorGUILayout.Space(); health = EditorGUILayout.FloatField("Health", health); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Disengaging Hits To Knockout"); disengagingHitsToKnockout = EditorGUILayout.FloatField(disengagingHitsToKnockout); EditorGUILayout.EndHorizontal(); radius = EditorGUILayout.FloatField("Radius", radius); height = EditorGUILayout.FloatField("Height", height); EditorGUILayout.Space(); } showFoldout3 = EditorGUILayout.Foldout(showFoldout3, "Data About Enemies"); //Data About Enemies if(showFoldout3) { EditorGUILayout.Space(); tagOfEnemy = EditorGUILayout.TagField("Tag Of Enemy", tagOfEnemy); tagOfBullet = EditorGUILayout.TagField("Tag Of Bullet", tagOfBullet); enemyCriticalHeight = EditorGUILayout.Vector3Field("Enemy Critical Height", enemyCriticalHeight); EditorGUILayout.Space(); } showFoldout4 = EditorGUILayout.Foldout(showFoldout4, "Reaction Times"); //Reaction Times if(showFoldout4) { EditorGUILayout.Space(); shockTime = EditorGUILayout.FloatField("Reaction To Enemy", shockTime); freezeTime = EditorGUILayout.FloatField("Freeze Time To Bullet", freezeTime); minCoverTime = EditorGUILayout.FloatField("Minimum Time In Cover", minCoverTime); maxCoverTime = EditorGUILayout.FloatField("Maximum Time In Cover", maxCoverTime); timeBetweenEnemyChecks = EditorGUILayout.FloatField("Enemy Checks", timeBetweenEnemyChecks); timeForGivingUpDuringEngagement = EditorGUILayout.FloatField("Giving Up Engage Time", timeForGivingUpDuringEngagement); timeForGivingUpSeeking = EditorGUILayout.FloatField("(Frames)Give up Seeking", timeForGivingUpSeeking); EditorGUILayout.Space(); } showFoldout5 = EditorGUILayout.Foldout(showFoldout5, "Emotion Control"); //Emotion Control if(showFoldout5) { EditorGUILayout.Space(); initAndrenaline = EditorGUILayout.FloatField("Andrenaline", initAndrenaline); initFear = EditorGUILayout.FloatField("Fear", initFear); chanceForFight = EditorGUILayout.FloatField("ChanceForFight", chanceForFight); EditorGUILayout.Space(); } showFoldout6 = EditorGUILayout.Foldout(showFoldout6, "Weapons And Engagment"); //Weapons And Engagment if(showFoldout6) { EditorGUILayout.Space(); if(GUILayout.Button("Hold No Weapon")) { weapon = null; } weaponHoldingLocation = EditorGUILayout.ObjectField("Weapon Holding Location" ,weaponHoldingLocation, typeof(Transform), true) as Transform; weapon = EditorGUILayout.ObjectField("Main Weapon" ,weapon, typeof(Object), true) as GameObject; if(GUILayout.Button("Add more secondary weapons")) { otherWeapons.Add( null ); otherWeaponsMelee.Add( 0); } multipleWeaponsScroll = EditorGUILayout.BeginScrollView( multipleWeaponsScroll, GUILayout.Height(100f), GUILayout.Width(300f)); for(int x = 0; x < otherWeapons.Count; x++) { EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Weapon number: " + (x+1).ToString() ); otherWeapons[x] = EditorGUILayout.ObjectField( otherWeapons[x], typeof(Object), true) as GameObject; otherWeaponsMelee[x] = EditorGUILayout.Popup( otherWeaponsMelee[x], meleeOptions); if(GUILayout.Button("X")) { otherWeapons.RemoveAt(x); otherWeaponsMelee.RemoveAt(x); } EditorGUILayout.EndHorizontal(); } EditorGUILayout.EndScrollView(); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Engagement Script"); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginVertical(); if(GUILayout.Button("Add Script")) { targetCheck.Add("Empty"); targetVisualCheckChance.Add(0f); } EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Name Of Script"); EditorGUILayout.LabelField("% Chance"); EditorGUILayout.EndHorizontal(); for(int x = 0; x < targetCheck.Count; x++) { EditorGUILayout.BeginHorizontal(); targetCheck[x] = EditorGUILayout.TextField(targetCheck[x]); targetVisualCheckChance[x] = EditorGUILayout.FloatField(targetVisualCheckChance[x]); if(GUILayout.Button("X")) { targetCheck.RemoveAt(x); targetVisualCheckChance.RemoveAt(x); } EditorGUILayout.EndHorizontal(); } EditorGUILayout.EndVertical(); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Distance For Close Combat Logic"); distanceToEngageCloseCombatLogic = EditorGUILayout.FloatField(distanceToEngageCloseCombatLogic); EditorGUILayout.EndHorizontal(); initAmmo = EditorGUILayout.FloatField("Amount Of Ammo", initAmmo); EditorGUILayout.Space(); offsetFactor = EditorGUILayout.FloatField("Factor for accuracy", offsetFactor); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space(); } showFoldout7 = EditorGUILayout.Foldout(showFoldout7, "Speed References"); //Speed References if(showFoldout7) { EditorGUILayout.Space(); refSpeedPatrol = EditorGUILayout.FloatField("Patrol Reference Speed", refSpeedPatrol); refSpeedEngage = EditorGUILayout.FloatField("Engage Reference Speed", refSpeedEngage); refSpeedCover = EditorGUILayout.FloatField("Cover Reference Speed", refSpeedCover); refSpeedChase = EditorGUILayout.FloatField("Chase Reference Speed", refSpeedChase); EditorGUILayout.Space(); } showFoldout8 = EditorGUILayout.Foldout(showFoldout8, "Model Management"); //Model Management if(showFoldout8) { EditorGUILayout.Space(); //modelParentOfAllBones = EditorGUILayout.ObjectField("Parent Of Bones" , modelParentOfAllBones, typeof(Object), true) as GameObject; handToUseInCharacter = (HandToUse)EditorGUILayout.EnumPopup("Hand To Hold Gun", handToUseInCharacter); EditorGUILayout.Space(); } showFoldout9 = EditorGUILayout.Foldout(showFoldout9, "Patrol Management"); //Patrol Management if(showFoldout9) { EditorGUILayout.Space(); EditorGUILayout.LabelField("WAYPOINT MANAGEMENT IN PATROL MANAGER", EditorStyles.boldLabel); EditorGUILayout.Space(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Distance To Register Waypoint"); distanceToWaypointForRegistering = EditorGUILayout.FloatField(distanceToWaypointForRegistering); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Min Distance To Destination"); patrolMinDistanceToDestination = EditorGUILayout.FloatField(patrolMinDistanceToDestination); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Frames To Check Distance"); patrolFramesCriticalCheck = EditorGUILayout.FloatField(patrolFramesCriticalCheck); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Checks Until Registering Destination"); patrolChecksCritical = EditorGUILayout.FloatField(patrolChecksCritical); EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); } showFoldout10 = EditorGUILayout.Foldout(showFoldout10, "Optimisation"); //Optimisation if(showFoldout10) { EditorGUILayout.Space(); coverAmountOfRays = EditorGUILayout.FloatField("Cover: Amount Of Rays", coverAmountOfRays); coverFieldOfView = EditorGUILayout.FloatField("Cover: Fielf Of View", coverFieldOfView); coverDistanceToCheck = EditorGUILayout.FloatField("Cover: Distance To Check", coverDistanceToCheck); patrolTickBarrier = EditorGUILayout.FloatField("Patrol: Frames To Check", patrolTickBarrier); coverTrueCoverTest = EditorGUILayout.FloatField("Patrol: Extra Checks", coverTrueCoverTest); /* EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Cover Layermask: "); coverLayerMask = EditorGUILayout.MaskField( coverLayerMask, ); EditorGUILayout.EndHorizontal();*/ EditorGUILayout.Space(); } showFoldout11 = EditorGUILayout.Foldout(showFoldout11, "Melee Settings"); //melee stuff if(showFoldout11) { EditorGUILayout.Space(); meleeSetting = EditorGUILayout.Popup(meleeSetting, meleeOptions); if(meleeSetting != 0) { distanceForMeleeAttack = EditorGUILayout.FloatField("Distance for melee attack", distanceForMeleeAttack); } EditorGUILayout.Space(); } if(GUI.changed) { SetVariablesToChild(); } else { GetVariablesFromChild(); } }
public override void OnInspectorGUI() { //this is so that it always updates correct target childScript = (AIControllerChild)target; EditorGUILayout.LabelField("AI Property Controller"); EditorGUILayout.Space(); if (PrefabUtility.GetPrefabType(childScript.gameObject) == PrefabType.Prefab) { EditorGUILayout.LabelField("Parameters can't be edited using the Overview Panel if the AI is a prefab."); return; } showFoldout1 = EditorGUILayout.Foldout(showFoldout1, "Main Referencing Objects"); //main referencing objects if (showFoldout1) { EditorGUILayout.Space(); patrolManager = EditorGUILayout.ObjectField("Patrol Manager", patrolManager, typeof(Object), true) as GameObject; sensorParent = EditorGUILayout.ObjectField("Sensor Parent", sensorParent, typeof(Object), true) as GameObject; ears = EditorGUILayout.ObjectField("Ears Object", ears, typeof(Object), true) as GameObject; sight = EditorGUILayout.ObjectField("Sight Object", sight, typeof(Object), true) as GameObject; model = EditorGUILayout.ObjectField("Model Object", model, typeof(Object), true) as GameObject; EditorGUILayout.Space(); } showFoldout2 = EditorGUILayout.Foldout(showFoldout2, "Data About AI Character"); //Data About AI Character if (showFoldout2) { EditorGUILayout.Space(); eyeHeight = EditorGUILayout.Vector3Field("Relative Eye Height", eyeHeight); EditorGUILayout.Space(); health = EditorGUILayout.FloatField("Health", health); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Disengaging Hits To Knockout"); disengagingHitsToKnockout = EditorGUILayout.FloatField(disengagingHitsToKnockout); EditorGUILayout.EndHorizontal(); radius = EditorGUILayout.FloatField("Radius", radius); height = EditorGUILayout.FloatField("Height", height); EditorGUILayout.Space(); } showFoldout3 = EditorGUILayout.Foldout(showFoldout3, "Data About Enemies"); //Data About Enemies if (showFoldout3) { EditorGUILayout.Space(); tagOfEnemy = EditorGUILayout.TagField("Tag Of Enemy", tagOfEnemy); tagOfBullet = EditorGUILayout.TagField("Tag Of Bullet", tagOfBullet); enemyCriticalHeight = EditorGUILayout.Vector3Field("Enemy Critical Height", enemyCriticalHeight); EditorGUILayout.Space(); } showFoldout4 = EditorGUILayout.Foldout(showFoldout4, "Reaction Times"); //Reaction Times if (showFoldout4) { EditorGUILayout.Space(); shockTime = EditorGUILayout.FloatField("Reaction To Enemy", shockTime); freezeTime = EditorGUILayout.FloatField("Freeze Time To Bullet", freezeTime); minCoverTime = EditorGUILayout.FloatField("Minimum Time In Cover", minCoverTime); maxCoverTime = EditorGUILayout.FloatField("Maximum Time In Cover", maxCoverTime); timeBetweenEnemyChecks = EditorGUILayout.FloatField("Enemy Checks", timeBetweenEnemyChecks); timeForGivingUpDuringEngagement = EditorGUILayout.FloatField("Giving Up Engage Time", timeForGivingUpDuringEngagement); timeForGivingUpSeeking = EditorGUILayout.FloatField("(Frames)Give up Seeking", timeForGivingUpSeeking); EditorGUILayout.Space(); } showFoldout5 = EditorGUILayout.Foldout(showFoldout5, "Emotion Control"); //Emotion Control if (showFoldout5) { EditorGUILayout.Space(); initAndrenaline = EditorGUILayout.FloatField("Andrenaline", initAndrenaline); initFear = EditorGUILayout.FloatField("Fear", initFear); chanceForFight = EditorGUILayout.FloatField("ChanceForFight", chanceForFight); EditorGUILayout.Space(); } showFoldout6 = EditorGUILayout.Foldout(showFoldout6, "Weapons And Engagment"); //Weapons And Engagment if (showFoldout6) { EditorGUILayout.Space(); if (GUILayout.Button("Hold No Weapon")) { weapon = null; } weaponHoldingLocation = EditorGUILayout.ObjectField("Weapon Holding Location", weaponHoldingLocation, typeof(Transform), true) as Transform; weapon = EditorGUILayout.ObjectField("Main Weapon", weapon, typeof(Object), true) as GameObject; if (GUILayout.Button("Add more secondary weapons")) { otherWeapons.Add(null); otherWeaponsMelee.Add(0); } multipleWeaponsScroll = EditorGUILayout.BeginScrollView(multipleWeaponsScroll, GUILayout.Height(100f), GUILayout.Width(300f)); for (int x = 0; x < otherWeapons.Count; x++) { EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Weapon number: " + (x + 1).ToString()); otherWeapons[x] = EditorGUILayout.ObjectField(otherWeapons[x], typeof(Object), true) as GameObject; otherWeaponsMelee[x] = EditorGUILayout.Popup(otherWeaponsMelee[x], meleeOptions); if (GUILayout.Button("X")) { otherWeapons.RemoveAt(x); otherWeaponsMelee.RemoveAt(x); } EditorGUILayout.EndHorizontal(); } EditorGUILayout.EndScrollView(); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Engagement Script"); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginVertical(); if (GUILayout.Button("Add Script")) { targetCheck.Add("Empty"); targetVisualCheckChance.Add(0f); } EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Name Of Script"); EditorGUILayout.LabelField("% Chance"); EditorGUILayout.EndHorizontal(); for (int x = 0; x < targetCheck.Count; x++) { EditorGUILayout.BeginHorizontal(); targetCheck[x] = EditorGUILayout.TextField(targetCheck[x]); targetVisualCheckChance[x] = EditorGUILayout.FloatField(targetVisualCheckChance[x]); if (GUILayout.Button("X")) { targetCheck.RemoveAt(x); targetVisualCheckChance.RemoveAt(x); } EditorGUILayout.EndHorizontal(); } EditorGUILayout.EndVertical(); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Distance For Close Combat Logic"); distanceToEngageCloseCombatLogic = EditorGUILayout.FloatField(distanceToEngageCloseCombatLogic); EditorGUILayout.EndHorizontal(); initAmmo = EditorGUILayout.FloatField("Amount Of Ammo", initAmmo); EditorGUILayout.Space(); offsetFactor = EditorGUILayout.FloatField("Factor for accuracy", offsetFactor); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space(); } showFoldout7 = EditorGUILayout.Foldout(showFoldout7, "Speed References"); //Speed References if (showFoldout7) { EditorGUILayout.Space(); refSpeedPatrol = EditorGUILayout.FloatField("Patrol Reference Speed", refSpeedPatrol); refSpeedEngage = EditorGUILayout.FloatField("Engage Reference Speed", refSpeedEngage); refSpeedCover = EditorGUILayout.FloatField("Cover Reference Speed", refSpeedCover); refSpeedChase = EditorGUILayout.FloatField("Chase Reference Speed", refSpeedChase); EditorGUILayout.Space(); } showFoldout8 = EditorGUILayout.Foldout(showFoldout8, "Model Management"); //Model Management if (showFoldout8) { EditorGUILayout.Space(); //modelParentOfAllBones = EditorGUILayout.ObjectField("Parent Of Bones" , modelParentOfAllBones, typeof(Object), true) as GameObject; handToUseInCharacter = (HandToUse)EditorGUILayout.EnumPopup("Hand To Hold Gun", handToUseInCharacter); EditorGUILayout.Space(); } showFoldout9 = EditorGUILayout.Foldout(showFoldout9, "Patrol Management"); //Patrol Management if (showFoldout9) { EditorGUILayout.Space(); EditorGUILayout.LabelField("WAYPOINT MANAGEMENT IN PATROL MANAGER", EditorStyles.boldLabel); EditorGUILayout.Space(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Distance To Register Waypoint"); distanceToWaypointForRegistering = EditorGUILayout.FloatField(distanceToWaypointForRegistering); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Min Distance To Destination"); patrolMinDistanceToDestination = EditorGUILayout.FloatField(patrolMinDistanceToDestination); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Frames To Check Distance"); patrolFramesCriticalCheck = EditorGUILayout.FloatField(patrolFramesCriticalCheck); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Checks Until Registering Destination"); patrolChecksCritical = EditorGUILayout.FloatField(patrolChecksCritical); EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); } showFoldout10 = EditorGUILayout.Foldout(showFoldout10, "Optimisation"); //Optimisation if (showFoldout10) { EditorGUILayout.Space(); coverAmountOfRays = EditorGUILayout.FloatField("Cover: Amount Of Rays", coverAmountOfRays); coverFieldOfView = EditorGUILayout.FloatField("Cover: Fielf Of View", coverFieldOfView); coverDistanceToCheck = EditorGUILayout.FloatField("Cover: Distance To Check", coverDistanceToCheck); patrolTickBarrier = EditorGUILayout.FloatField("Patrol: Frames To Check", patrolTickBarrier); coverTrueCoverTest = EditorGUILayout.FloatField("Patrol: Extra Checks", coverTrueCoverTest); /* * EditorGUILayout.BeginHorizontal(); * EditorGUILayout.LabelField("Cover Layermask: "); * coverLayerMask = EditorGUILayout.MaskField( coverLayerMask, ); * EditorGUILayout.EndHorizontal();*/ EditorGUILayout.Space(); } showFoldout11 = EditorGUILayout.Foldout(showFoldout11, "Melee Settings"); //melee stuff if (showFoldout11) { EditorGUILayout.Space(); meleeSetting = EditorGUILayout.Popup(meleeSetting, meleeOptions); if (meleeSetting != 0) { distanceForMeleeAttack = EditorGUILayout.FloatField("Distance for melee attack", distanceForMeleeAttack); } EditorGUILayout.Space(); } if (GUI.changed) { SetVariablesToChild(); } else { GetVariablesFromChild(); } }
void OnEnable() { childScript = (AIControllerChild)target; GetVariablesFromChild(); }