Pastebin launched a little side project called VERYVIRAL.com, check it out ;-) Want more features on Pastebin? Sign Up, it's FREE!
Guest

Unity Editor Script for BZA Hack&Slash series

By: a guest on Jun 3rd, 2012  |  syntax: C#  |  size: 18.30 KB  |  views: 148  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. /// <summary>
  2. /// Hack And Slash Quick Mob Maker
  3. /// RJ Mitchell - 21 August 2011
  4. /// YouTube Channel - RJ36UK
  5. /// The object of this class is to help simplify the process of creating new mobs for the Hack and Slash series currently being run by Burgzerg Arcade.
  6. /// I highly recommend that you make a new folder in your Assets directory for saving the prefabs to, aside from making it easy for you to locate
  7. /// those models straight away it will help prevent any accidental overwrite of any previous prefabs you may have made with the same name.
  8. ///
  9. /// When using this Editor script I suggest you use an empty scene with nothing in the heirarchy other than the main camera if you wish.  You do not need to keep the scene after
  10. /// you have finished setting up your mobs as it is only there to help avoid any cross references from other models in the heirarchy.
  11. /// All models once generated will be saved into either your Assets folder by default or to a pre-designated folder assigned in the interface.
  12. /// UPDATE: Updated the prefab save to use the new PrefabUtility command. 03/06/12
  13. ///  </summary>
  14. ///
  15. using UnityEngine;
  16. using UnityEditor;
  17.  
  18. public class HackAndSlashMobMaker : EditorWindow
  19. {
  20.         // GUI Layout predifined positions for easier placements
  21.         private const float NAME_X_POS = 5F;
  22.         private const float NAME_Y_POS = 20F;
  23.         private const float NAME_WIDTH = 100F;
  24.         private const float NAME_HEIGHT = 20F;
  25.         private const float NAME_X_OFFSET = 0F;
  26.         private const float NAME_Y_OFFSET = 25F;       
  27.         private const float FIELD_X_POS = 110F;
  28.         private const float FIELD_Y_POS = 20F;
  29.         private const float FIELD_WIDTH = 150F;
  30.         private const float FIELD_HEIGHT = 20F;
  31.         private const float FIELD_X_OFFSET = 0F;
  32.         private const float FIELD_Y_OFFSET = 25F;
  33.         private const string DEFAULT_NAME = "Enter Name";
  34.        
  35.         // Mount point names (exposed in interface to allow for different naming conventions via Get/Set)
  36.         private string _mpWeaponMount = "WeaponMount";
  37.         private string _mpOffHandMount = "OffHandMount";
  38.         private string _mpHairMount = "HairMount";
  39.         private string _mpHelmetMount = "HelmetMount";
  40.         private string _mpCMatMesh = "CharacterMaterialMeshMount";
  41.         private string _mpNameText = "Name";
  42.         private string _mpTagName = "Enemy";
  43.        
  44.         #region Object variables
  45.         // Mob stat variables, If the mob is at these defaults it will prevent a mob from being generated.
  46.         public GameObject createdChar;
  47.         private int _hitPoints = 0;
  48.         private int _mana = 0;
  49.         private string _name = "Enter Name";
  50.        
  51.         // Precheck variables
  52.         private bool[] _pregenCheck = new bool[4] {false, false, false, false};
  53.         private string[] _checkName = new string[4] {"Mob Name", "Hit Points", "Mana", "Mob Model"};
  54.        
  55.         // Mount point holders
  56.         private Object _mobGO = null;
  57.         private Object _mobWM = null;
  58.         private Object _mobOH = null;
  59.         private Object _mobHairMount = null;
  60.         private Object _mobHelmetMount = null;
  61.         private Object _mobCMMesh = null;
  62.         private Object _mobNP = null;
  63.  
  64.         // Misc Variables
  65.         private bool _generateMob = false;
  66.         private bool _warnMSG = false;
  67.         private string _errorCheckName = "";
  68.         private string _saveFolder = "";
  69.         private bool _reset = false;
  70.         private bool _defaults = false;
  71.         #endregion
  72.        
  73.         // Public Variables    
  74.         #region Getters & Setters
  75.         public int HitPoints {
  76.                 get {
  77.                         return this._hitPoints;
  78.                 }
  79.                 set {
  80.                         _hitPoints = value;
  81.                 }
  82.         }
  83.  
  84.         public int Mana {
  85.                 get {
  86.                         return this._mana;
  87.                 }
  88.                 set {
  89.                         _mana = value;
  90.                 }
  91.         }
  92.  
  93.         public string Name {
  94.                 get {
  95.                         return this._name;
  96.                 }
  97.                 set {
  98.                         _name = value;
  99.                 }
  100.         }
  101.  
  102.         public Object MobPrefab {
  103.                 get {
  104.                         return this._mobGO;
  105.                 }
  106.                 set {
  107.                         _mobGO = value;
  108.                 }
  109.         }
  110.  
  111.         public Object MobWeaponMount {
  112.                 get {
  113.                         return this._mobWM;
  114.                 }
  115.                 set {
  116.                         _mobWM = value;
  117.                 }
  118.         }
  119.  
  120.         public Object MobOffHandMount {
  121.                 get {
  122.                         return this._mobOH;
  123.                 }
  124.                 set {
  125.                         _mobOH = value;
  126.                 }
  127.         }
  128.  
  129.         public Object MobCharacterMaterialMesh {
  130.                 get {
  131.                         return this._mobCMMesh;
  132.                 }
  133.                 set {
  134.                         _mobCMMesh = value;
  135.                 }
  136.         }
  137.  
  138.         public Object MobHairMount {
  139.                 get {
  140.                         return this._mobHairMount;
  141.                 }
  142.                 set {
  143.                         _mobHairMount = value;
  144.                 }
  145.         }
  146.  
  147.         public Object MobHelmetMount {
  148.                 get {
  149.                         return this._mobHelmetMount;
  150.                 }
  151.                 set {
  152.                         _mobHelmetMount = value;
  153.                 }
  154.         }
  155.  
  156.         public Object MobTextName {
  157.                 get {
  158.                         return this._mobNP;
  159.                 }
  160.                 set {
  161.                         _mobNP = value;
  162.                 }
  163.         }
  164.  
  165.         public string MpTagName {
  166.                 get {
  167.                         return this._mpTagName;
  168.                 }
  169.                 set {
  170.                         _mpTagName = value;
  171.                 }
  172.         }
  173.  
  174.         public string MpCMatMesh {
  175.                 get {
  176.                         return this._mpCMatMesh;
  177.                 }
  178.                 set {
  179.                         _mpCMatMesh = value;
  180.                 }
  181.         }
  182.  
  183.         public string MpHairMount {
  184.                 get {
  185.                         return this._mpHairMount;
  186.                 }
  187.                 set {
  188.                         _mpHairMount = value;
  189.                 }
  190.         }
  191.  
  192.         public string MpHelmetMount {
  193.                 get {
  194.                         return this._mpHelmetMount;
  195.                 }
  196.                 set {
  197.                         _mpHelmetMount = value;
  198.                 }
  199.         }
  200.  
  201.         public string MpTextName {
  202.                 get {
  203.                         return this._mpNameText;
  204.                 }
  205.                 set {
  206.                         _mpNameText = value;
  207.                 }
  208.         }
  209.  
  210.         public string MpOffHandMount {
  211.                 get {
  212.                         return this._mpOffHandMount;
  213.                 }
  214.                 set {
  215.                         _mpOffHandMount = value;
  216.                 }
  217.         }
  218.  
  219.         public string MpWeaponMount {
  220.                 get {
  221.                         return this._mpWeaponMount;
  222.                 }
  223.                 set {
  224.                         _mpWeaponMount = value;
  225.                 }
  226.         }
  227.  
  228.         public string SaveFolder {
  229.                 get {
  230.                         return this._saveFolder;
  231.                 }
  232.                 set {
  233.                         _saveFolder = value;
  234.                 }
  235.         }
  236.  
  237.         #endregion
  238.         public GUISkin EdGuiSkin;
  239.  
  240.        
  241.         // Link to this tool in Windows Toolbar option
  242.     [MenuItem ("Window/Hack And Slash Mob Maker")]
  243.        
  244.         // Initialize our window when we call
  245.     static void Init()
  246.     {
  247.                 GetWindow(typeof(HackAndSlashMobMaker));
  248.     }
  249.        
  250.         public HackAndSlashMobMaker()
  251.         {
  252.         }
  253.  
  254.         #region Update
  255.         void Update()
  256.         {
  257.                 if(_reset)
  258.                 {
  259.                         Name = DEFAULT_NAME;
  260.                         HitPoints = 0;
  261.                         Mana = 0;
  262.                         MobPrefab = null;
  263.                         _generateMob = false;
  264.                         _warnMSG = false;
  265.                 }
  266.                
  267.                 if(_defaults)
  268.                 {
  269.                         Name = DEFAULT_NAME;
  270.                         HitPoints = 0;
  271.                         Mana = 0;
  272.                         MobPrefab = null;
  273.                         _generateMob = false;
  274.                         _warnMSG = false;                      
  275.                         _mpWeaponMount = "WeaponMount";
  276.                         _mpOffHandMount = "OffHandMount";
  277.                         _mpHairMount = "HairMount";
  278.                         _mpHelmetMount = "HelmetMount";
  279.                         _mpCMatMesh = "CharacterMaterialMeshMount";
  280.                         _mpNameText = "Name";
  281.                         _mpTagName = "Enemy";
  282.                         _saveFolder = "";
  283.                 }
  284.                
  285.                 if(_generateMob)
  286.                         GenerateMob();
  287.         }
  288.         #endregion
  289.        
  290.         public void OnGUI()
  291.         {
  292.                 GUI.skin = EdGuiSkin;
  293.                
  294.                 // Set background colour of Editor Panel
  295.                 EditorGUIUtility.DrawColorSwatch(new Rect(0F, 0F, Screen.width, Screen.height), new Color(0.16F, 0.17F, 0.16F));
  296.                
  297.                 // Main Header
  298.                 GUI.Label(new Rect(NAME_X_POS, NAME_Y_POS*0.5F, NAME_WIDTH*2.35F, NAME_HEIGHT+5), " Hack & Slash Mob Maker - RJM36UK", GUI.skin.GetStyle("Box"));
  299.                
  300.                 // Area Box outliner
  301.                 GUI.Box(new Rect(0F, NAME_Y_POS+NAME_Y_OFFSET -5F, NAME_WIDTH + FIELD_WIDTH +15F, NAME_Y_OFFSET*3F+5F), "");
  302.                
  303.                 GUI.Label (new Rect(NAME_X_POS, NAME_Y_POS + NAME_Y_OFFSET, NAME_WIDTH, NAME_HEIGHT), "Mob Name ", GUI.skin.GetStyle("Box"));
  304.                 Name = EditorGUI.TextField(new Rect(FIELD_X_POS, FIELD_Y_POS + FIELD_Y_OFFSET, FIELD_WIDTH, FIELD_HEIGHT), Name, GUI.skin.GetStyle("TextField"));
  305.                 if(Name != DEFAULT_NAME)
  306.                 {
  307.                         _pregenCheck[0] = true;
  308.                 }
  309.                
  310.                 GUI.Label (new Rect(NAME_X_POS, NAME_Y_POS + (NAME_Y_OFFSET*2F), NAME_WIDTH, NAME_HEIGHT), "Hit Points ", GUI.skin.GetStyle("Box"));
  311.                 HitPoints = EditorGUI.IntField (new Rect(FIELD_X_POS, FIELD_Y_POS + (FIELD_Y_OFFSET*2F), FIELD_WIDTH, FIELD_HEIGHT), HitPoints, GUI.skin.GetStyle("TextField"));
  312.                 if(HitPoints > 1)
  313.                         _pregenCheck[1] = true;
  314.                 else
  315.                         _pregenCheck[1] = false;
  316.                
  317.                 GUI.Label (new Rect(NAME_X_POS, NAME_Y_POS + (NAME_Y_OFFSET*3F), NAME_WIDTH, NAME_HEIGHT), "Mana Points ", GUI.skin.GetStyle("Box"));
  318.                 Mana = EditorGUI.IntField (new Rect(FIELD_X_POS, FIELD_Y_POS + (FIELD_Y_OFFSET*3F), FIELD_WIDTH, FIELD_HEIGHT), Mana, GUI.skin.GetStyle("TextField"));
  319.                 if(Mana <= -1)
  320.                         _pregenCheck[2] = false;
  321.                 else
  322.                         _pregenCheck[2] = true;
  323.                
  324.                 // Area Box outline
  325.                 GUI.Box(new Rect(0F, NAME_Y_POS+NAME_Y_OFFSET*5F -5F, NAME_WIDTH + FIELD_WIDTH +15F, NAME_Y_OFFSET*9F+5F), "");
  326.                
  327.                 // Header
  328.                 GUI.Label(new Rect(NAME_X_POS, NAME_Y_POS + (NAME_Y_OFFSET*5F), NAME_WIDTH, NAME_HEIGHT), "MOB OBJECTS", GUI.skin.GetStyle("Box"));
  329.                
  330.                 GUI.Label(new Rect(NAME_X_POS, NAME_Y_POS + (NAME_Y_OFFSET*6F), NAME_WIDTH, NAME_HEIGHT), "Mob Model", GUI.skin.GetStyle("Box"));
  331.                
  332.                 // Object Selecter with Text Field backdrop
  333.                 GUI.Label(new Rect(FIELD_X_POS, FIELD_Y_POS + (FIELD_Y_OFFSET*6F), FIELD_WIDTH, FIELD_HEIGHT), "", GUI.skin.GetStyle("TextField"));
  334.                 MobPrefab = EditorGUI.ObjectField(new Rect(FIELD_X_POS+1F, FIELD_Y_POS+1F + FIELD_Y_OFFSET*6F, FIELD_WIDTH-1F, FIELD_HEIGHT-1F), MobPrefab, typeof(GameObject), true);
  335.                 if(MobPrefab != null)
  336.                         _pregenCheck[3] = true;
  337.                 else
  338.                         _pregenCheck[3] = false;
  339.                
  340.                 // Mount Points
  341.                 GUI.Label(new Rect(NAME_X_POS, NAME_Y_POS + (NAME_Y_OFFSET*7F), NAME_WIDTH, NAME_HEIGHT), "Weapon Mount", GUI.skin.GetStyle("Box"));
  342.                 if(!_generateMob)
  343.                 {
  344.                         MpWeaponMount = GUI.TextField(new Rect(FIELD_X_POS+1F, FIELD_Y_POS+1F + FIELD_Y_OFFSET*7F, FIELD_WIDTH-1F, FIELD_HEIGHT-1F), MpWeaponMount);
  345.                 }
  346.                 else
  347.                 {
  348.                         GUI.Label(new Rect(FIELD_X_POS, FIELD_Y_POS + (FIELD_Y_OFFSET*7F), FIELD_WIDTH, FIELD_HEIGHT), "", GUI.skin.GetStyle("TextField"));            
  349.                         MobWeaponMount = EditorGUI.ObjectField(new Rect(FIELD_X_POS+1F, FIELD_Y_POS+1F + FIELD_Y_OFFSET*7F, FIELD_WIDTH-1F, FIELD_HEIGHT-1F), MobWeaponMount, typeof(GameObject ), true);
  350.                 }
  351.                
  352.                 GUI.Label(new Rect(NAME_X_POS, NAME_Y_POS + (NAME_Y_OFFSET*8F), NAME_WIDTH, NAME_HEIGHT), "Off Hand Mount", GUI.skin.GetStyle("Box"));
  353.                 if(!_generateMob)
  354.                 {
  355.                         MpOffHandMount = GUI.TextField(new Rect(FIELD_X_POS+1F, FIELD_Y_POS+1F + FIELD_Y_OFFSET*8F, FIELD_WIDTH-1F, FIELD_HEIGHT-1F), MpOffHandMount);
  356.                 }
  357.                 else
  358.                 {
  359.                         GUI.Label(new Rect(FIELD_X_POS, FIELD_Y_POS + (FIELD_Y_OFFSET*8F), FIELD_WIDTH, FIELD_HEIGHT), "", GUI.skin.GetStyle("TextField"));
  360.                         MobOffHandMount = EditorGUI.ObjectField(new Rect(FIELD_X_POS+1F, FIELD_Y_POS+1F + FIELD_Y_OFFSET*8F, FIELD_WIDTH-1F, FIELD_HEIGHT-1F), MobOffHandMount, typeof(GameObject), true);
  361.                 }
  362.                
  363.                 GUI.Label(new Rect(NAME_X_POS, NAME_Y_POS + (NAME_Y_OFFSET*9F), NAME_WIDTH, NAME_HEIGHT), "Hair Mount", GUI.skin.GetStyle("Box"));             
  364.                 if(!_generateMob)
  365.                 {
  366.                         MpHairMount = GUI.TextField(new Rect(FIELD_X_POS+1F, FIELD_Y_POS+1F + FIELD_Y_OFFSET*9F, FIELD_WIDTH-1F, FIELD_HEIGHT-1F), MpHairMount);                       
  367.                 }
  368.                 else
  369.                 {
  370.                         GUI.Label(new Rect(FIELD_X_POS, FIELD_Y_POS + (FIELD_Y_OFFSET*9F), FIELD_WIDTH, FIELD_HEIGHT), "", GUI.skin.GetStyle("TextField"));
  371.                         MobHairMount = EditorGUI.ObjectField(new Rect(FIELD_X_POS+1F, FIELD_Y_POS+1F + FIELD_Y_OFFSET*9F, FIELD_WIDTH-1F, FIELD_HEIGHT-1F), MobHairMount, typeof(GameObject), true);
  372.                 }
  373.                
  374.                 GUI.Label(new Rect(NAME_X_POS, NAME_Y_POS + (NAME_Y_OFFSET*10F), NAME_WIDTH, NAME_HEIGHT), "Helmet Mount", GUI.skin.GetStyle("Box"));
  375.                 if(!_generateMob)
  376.                 {
  377.                         MpHelmetMount = GUI.TextField(new Rect(FIELD_X_POS+1F, FIELD_Y_POS+1F + FIELD_Y_OFFSET*10F, FIELD_WIDTH-1F, FIELD_HEIGHT-1F), MpHelmetMount);                  
  378.                 }
  379.                 else
  380.                 {
  381.                         GUI.Label(new Rect(FIELD_X_POS, FIELD_Y_POS + (FIELD_Y_OFFSET*10F), FIELD_WIDTH, FIELD_HEIGHT), "", GUI.skin.GetStyle("TextField"));
  382.                         MobHelmetMount = EditorGUI.ObjectField(new Rect(FIELD_X_POS+1F, FIELD_Y_POS+1F + FIELD_Y_OFFSET*10F, FIELD_WIDTH-1F, FIELD_HEIGHT-1F), MobHelmetMount, typeof(GameObject), true);
  383.                 }
  384.                
  385.                 GUI.Label(new Rect(NAME_X_POS, NAME_Y_POS + (NAME_Y_OFFSET*11F), NAME_WIDTH, NAME_HEIGHT), "Char Mat Mesh", GUI.skin.GetStyle("Box"));         
  386.                 if(!_generateMob)
  387.                 {
  388.                         MpCMatMesh = GUI.TextField(new Rect(FIELD_X_POS+1F, FIELD_Y_POS+1F + FIELD_Y_OFFSET*11F, FIELD_WIDTH-1F, FIELD_HEIGHT-1F), MpCMatMesh);                                        
  389.                 }
  390.                 else
  391.                 {
  392.                         GUI.Label(new Rect(FIELD_X_POS, FIELD_Y_POS + (FIELD_Y_OFFSET*11F), FIELD_WIDTH, FIELD_HEIGHT), "", GUI.skin.GetStyle("TextField"));
  393.                         MobCharacterMaterialMesh = EditorGUI.ObjectField(new Rect(FIELD_X_POS+1F, FIELD_Y_POS+1F + FIELD_Y_OFFSET*11F, FIELD_WIDTH-1F, FIELD_HEIGHT-1F), MobCharacterMaterialMesh, typeof(GameObject), true);
  394.                 }
  395.                
  396.                 GUI.Label(new Rect(NAME_X_POS, NAME_Y_POS + (NAME_Y_OFFSET*12F), NAME_WIDTH, NAME_HEIGHT), "3D Text Mount", GUI.skin.GetStyle("Box"));
  397.                 if(!_generateMob)
  398.                 {
  399.                         MpTextName = GUI.TextField(new Rect(FIELD_X_POS+1F, FIELD_Y_POS+1F + FIELD_Y_OFFSET*12F, FIELD_WIDTH-1F, FIELD_HEIGHT-1F), MpTextName);                                                                
  400.                 }
  401.                 else
  402.                 {
  403.                         GUI.Label(new Rect(FIELD_X_POS, FIELD_Y_POS + (FIELD_Y_OFFSET*12F), FIELD_WIDTH, FIELD_HEIGHT), "", GUI.skin.GetStyle("TextField"));
  404.                         MobTextName = EditorGUI.ObjectField(new Rect(FIELD_X_POS+1F, FIELD_Y_POS+1F + FIELD_Y_OFFSET*12F, FIELD_WIDTH-1F, FIELD_HEIGHT-1F), MobTextName, typeof(GameObject), true);
  405.                 }
  406.                
  407.                 GUI.Label(new Rect(NAME_X_POS, NAME_Y_POS + (NAME_Y_OFFSET*13F), NAME_WIDTH, NAME_HEIGHT), "Mob Tag Name", GUI.skin.GetStyle("Box"));
  408.                 if(!_generateMob)
  409.                 {
  410.                         MpTagName = GUI.TextField(new Rect(FIELD_X_POS+1F, FIELD_Y_POS+1F + FIELD_Y_OFFSET*13F, FIELD_WIDTH-1F, FIELD_HEIGHT-1F), MpTagName);                                                                  
  411.                 }
  412.                 else
  413.                 {
  414.                         GUI.Label(new Rect(FIELD_X_POS, FIELD_Y_POS + (FIELD_Y_OFFSET*13F), FIELD_WIDTH, FIELD_HEIGHT), MpTagName , GUI.skin.GetStyle("TextField"));
  415.                 }              
  416.                
  417.                
  418.                 GUI.Label(new Rect(NAME_X_POS, NAME_Y_POS + NAME_Y_OFFSET *15F, NAME_WIDTH, NAME_HEIGHT), "Save Folder", GUI.skin.GetStyle("Box"));
  419.                 SaveFolder = GUI.TextField(new Rect(FIELD_X_POS, FIELD_Y_POS + FIELD_Y_OFFSET*15F, FIELD_WIDTH, FIELD_HEIGHT), SaveFolder);
  420.                 _generateMob = GUI.Button(new Rect(NAME_X_POS, NAME_Y_POS + NAME_Y_OFFSET *16F , NAME_WIDTH+30F, NAME_HEIGHT), "GENERATE MOB");
  421.                 _reset = GUI.Button(new Rect(FIELD_X_POS+30F, FIELD_Y_POS+FIELD_Y_OFFSET*16F, FIELD_WIDTH-30F, FIELD_HEIGHT),"RESET");
  422.                 _defaults = GUI.Button(new Rect(FIELD_X_POS+30F, FIELD_Y_POS+FIELD_Y_OFFSET*17F, FIELD_WIDTH-30F, FIELD_HEIGHT),"DEFAULTS");
  423.                
  424.                 if(_warnMSG == true)
  425.                          GUI.Label(new Rect(5F, NAME_Y_POS + NAME_Y_OFFSET * 18F, 240F, 20F), "Please Assign: " + _errorCheckName);
  426.                
  427.                 var createdChar = GameObject.Find(_name);
  428.                 if(createdChar != null)
  429.                         SearchModelMountPoints();
  430.         }
  431.        
  432.         void GenerateMob()
  433.         {
  434.                 int cnt = 0;
  435.                 // Check slots before creating
  436.                 for(int i = 0; i < _pregenCheck.Length; i++)
  437.                 {
  438.                         if(_pregenCheck[i] == false)
  439.                         {
  440.                                 _errorCheckName = _checkName[i];
  441.                                 _generateMob = false;
  442.                                 _warnMSG = true;                       
  443.                                 break;
  444.                         }
  445.                         else
  446.                         {
  447.                                 cnt++;
  448.                                 if(cnt == _pregenCheck.Length)
  449.                                 {
  450.                                         _errorCheckName = "";
  451.                                         _warnMSG = false;
  452.                                         CreateMobObject();
  453.                                 }
  454.                         }
  455.                 }
  456.         }
  457.        
  458.         void CreateMobObject()
  459.         {
  460.                 createdChar = null;
  461.                
  462.                 if(MobPrefab == null)
  463.                 {
  464.                         _generateMob = false;
  465.                         _errorCheckName = "Mob Model";
  466.                         return;
  467.                 }
  468.                 else
  469.                         createdChar = GameObject.Instantiate(MobPrefab) as GameObject;
  470.                
  471.                 if(createdChar != null)
  472.                 {
  473.                         createdChar.name = _name;
  474.                        
  475.                         // Check to see if we need to add a MeshRenderer component to the mob
  476.                         if(createdChar.GetComponent<MeshRenderer>() == null)
  477.                                 if(createdChar.transform.GetChildCount() >=1)
  478.                                         if(createdChar.GetComponentInChildren<MeshRenderer>() == null)
  479.                                                 createdChar.AddComponent("MeshRenderer");
  480.                        
  481.                         // Check to see if we need to add a MeshFilter component to the mob
  482.                         if(createdChar.GetComponent<MeshFilter>() == null)
  483.                                 if(createdChar.transform.GetChildCount() >=1)
  484.                                         if(createdChar.GetComponentInChildren<MeshFilter>() == null)
  485.                                                 createdChar.AddComponent("MeshFilter");
  486.                        
  487.                         // Check to see if we need to add an Animation component to the mob
  488.                         if(createdChar.GetComponent<Animation>() == null)
  489.                                 if(createdChar.transform.GetChildCount() >=1)
  490.                                         if(createdChar.GetComponentInChildren<Animation>() == null)
  491.                                                 createdChar.AddComponent("Animation");
  492.                        
  493.                         // Add H&S Scripts
  494.                         createdChar.AddComponent("CharacterController");
  495.                         createdChar.AddComponent("AdvancedMovement");
  496.                         createdChar.AddComponent("AI");
  497.                         createdChar.AddComponent("Mob");
  498.                         // Set mob tag
  499.                         createdChar.tag = MpTagName;
  500.                         // Set mob hit points
  501.                         createdChar.GetComponent<Mob>().maxHealth = HitPoints;
  502.                         createdChar.GetComponent<Mob>().curHealth = HitPoints;
  503.        
  504.                         // This at end of function to avoid multiple copies
  505.                         _generateMob = false;
  506.                 }
  507.                
  508.         }
  509.        
  510.         void SearchModelMountPoints()
  511.         {
  512.                 if(createdChar != null)
  513.                 {
  514.                         if(createdChar.transform.GetChildCount() >=1)
  515.                         {
  516.                                 var wm = GameObject.Find(_mpWeaponMount);
  517.                                
  518.                                 if(wm !=null)
  519.                                 {                              
  520.                                         MobWeaponMount = wm;
  521.                                         createdChar.GetComponent<Mob>().weaponMount = MobWeaponMount as GameObject;
  522.                                 }
  523.                                 else
  524.                                         Debug.Log("Unable to find Weapon Mount");      
  525.                                
  526.                                 var oh = GameObject.Find(_mpOffHandMount);
  527.                                
  528.                                 if(oh !=null)
  529.                                 {                              
  530.                                         MobOffHandMount = oh;
  531.                                         createdChar.GetComponent<Mob>().offHandMount = MobOffHandMount as GameObject;
  532.                                 }
  533.                                 else
  534.                                         Debug.Log("Unable to find OffHand Mount");     
  535.                                
  536.                                 var hm = GameObject.Find(_mpHairMount);
  537.                                
  538.                                 if(hm !=null)
  539.                                 {                              
  540.                                         MobHairMount = hm;
  541.                                         createdChar.GetComponent<Mob>().hairMount = MobHairMount as GameObject;
  542.                                 }
  543.                                 else
  544.                                         Debug.Log("Unable to find Hair Mount");
  545.                                
  546.                                 var helm = GameObject.Find(_mpHelmetMount);
  547.                                
  548.                                 if(helm !=null)
  549.                                 {                              
  550.                                         MobHelmetMount = helm;
  551.                                         createdChar.GetComponent<Mob>().helmetMount = MobHelmetMount as GameObject;
  552.                                 }
  553.                                 else
  554.                                         Debug.Log("Unable to find Helmet Mount");      
  555.        
  556.                                 var cmm = GameObject.Find(_mpCMatMesh);
  557.                                
  558.                                 if(cmm !=null)
  559.                                 {                              
  560.                                         MobCharacterMaterialMesh = cmm;
  561.                                         createdChar.GetComponent<Mob>().characterMaterialMesh = MobCharacterMaterialMesh as GameObject;
  562.                                 }
  563.                                 else
  564.                                         Debug.Log("Unable to find Character Material Mesh Mount");     
  565.                                
  566.                                 var nm = GameObject.Find(_mpNameText);
  567.                                
  568.                                 if(nm !=null)
  569.                                 {                              
  570.                                         MobTextName = nm;
  571.                                         nm.GetComponent<TextMesh>().text = Name;
  572.                                 }
  573.                                 else
  574.                                         Debug.Log("Unable to find Name 3DText");       
  575.                         }
  576.                        
  577.                         CreatePrefabFromMob();
  578.                 }
  579.         }
  580.        
  581.         void CreatePrefabFromMob()
  582.         {
  583.                 // Save a prefab of our newly configured mob in the assigned folder
  584.                 string localPath = "Assets/";
  585.                
  586.                 if(SaveFolder != "")
  587.                         localPath = "Assets/" + SaveFolder + "/" + createdChar.name + ".prefab";
  588.                 else
  589.                         localPath = "Assets/" + createdChar.name + ".prefab";                          
  590.  
  591.                 PrefabUtility.CreatePrefab(localPath, createdChar);
  592.                 AssetDatabase.Refresh();
  593.                        
  594.                 DestroyImmediate(createdChar);
  595.                 Name = DEFAULT_NAME;
  596.                 HitPoints = 0;
  597.                 Mana = 0;
  598.                 createdChar = null;
  599.                 MobPrefab = null;
  600.                 EditorApplication.RepaintProjectWindow();
  601.         }
  602. }