Guest User

Unity Editor Script for BZA Hack&Slash series

a guest
Jun 3rd, 2012
289
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 18.30 KB | None | 0 0
  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. }
Add Comment
Please, Sign In to add comment