CharacterManager_inspector.cs 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEditor;
  5. namespace SoftKitty.MasterCharacterCreator
  6. {
  7. [CustomEditor(typeof(CharacterManager))]
  8. public class CharacterManager_inspector : Editor
  9. {
  10. Color _activeColor = new Color(0.1F, 0.7F, 1F,1F);
  11. Color _disableColor = new Color(0.5F, 0.8F, 1F,1F);
  12. Color _buttonColor = new Color(0F, 0.8F, 0.3F);
  13. int _selMorph = 0;
  14. GUIStyle _titleButtonStyle;
  15. private bool _emotionFold = false;
  16. private bool _settingFold = false;
  17. private bool _textureToolFold = false;
  18. private bool _modelToolFold = false;
  19. private CharacterDataSetting.CharacterTextureNames selectedTextureType;
  20. private OutfitSlots selectedSlot;
  21. private Sex selectedTextureSex;
  22. private Sex selectedOutfitSex;
  23. private Texture selectedTexture;
  24. private GameObject selectedPrefab;
  25. private CharacterDataSetting DataScript;
  26. private string _packResourcePath;
  27. private Texture selectedOutfitTexture;
  28. private GameObject selectedOutfitFbx;
  29. private Material selectedOutfitMaterial;
  30. private string[] OutfitFolderName = new string[7]{
  31. "Armor",
  32. "Helmet",
  33. "Glove",
  34. "Boot",
  35. "Armor",
  36. "Back",
  37. "Tail"
  38. };
  39. private string[] OutfitName = new string[7]{
  40. "Armor",
  41. "Helmet",
  42. "Glove",
  43. "Boot",
  44. "Pants",
  45. "Back",
  46. "Tail"
  47. };
  48. public override void OnInspectorGUI()
  49. {
  50. GUI.changed = false;
  51. bool _valueChanged = false;
  52. _titleButtonStyle = new GUIStyle(GUI.skin.button);
  53. _titleButtonStyle.alignment = TextAnchor.MiddleLeft;
  54. Color _backgroundColor = GUI.backgroundColor;
  55. var script = MonoScript.FromScriptableObject(this);
  56. CharacterManager myTarget = (CharacterManager)target;
  57. DataScript = myTarget.GetComponent<CharacterDataSetting>();
  58. string _thePath = AssetDatabase.GetAssetPath(script);
  59. _thePath = _thePath.Replace("CharacterManager_inspector.cs", "");
  60. _packResourcePath = _thePath.Replace("Editor/", "Resources/");
  61. Texture logoIcon = (Texture)AssetDatabase.LoadAssetAtPath(_thePath + "Logo.png", typeof(Texture));
  62. Texture warningIcon = (Texture)AssetDatabase.LoadAssetAtPath(_thePath + "warning.png", typeof(Texture));
  63. GUILayout.BeginHorizontal();
  64. GUILayout.Box(logoIcon);
  65. GUILayout.EndHorizontal();
  66. GUILayout.BeginHorizontal();
  67. GUI.backgroundColor = _buttonColor;
  68. if (GUILayout.Button("User Guide", GUILayout.Width(100)))
  69. {
  70. Application.OpenURL(Application.dataPath.Replace("Assets", "") + _thePath.Replace("Editor/", "Documentation/") + "UserGuide.pdf");
  71. }
  72. GUI.backgroundColor = Color.white;
  73. GUILayout.EndHorizontal();
  74. GUILayout.BeginHorizontal();
  75. GUI.color = _buttonColor;
  76. GUILayout.Label("Player's Blueprint Path in the [Character Customization] Interface:");
  77. GUI.color = Color.white;
  78. GUILayout.EndHorizontal();
  79. GUILayout.BeginHorizontal();
  80. myTarget.useRelativePathToGameInstallFolder = GUILayout.Toggle(myTarget.useRelativePathToGameInstallFolder, "Use the relative path of [Game Install Folder]");
  81. GUILayout.EndHorizontal();
  82. if (myTarget.useRelativePathToGameInstallFolder)
  83. {
  84. GUILayout.BeginHorizontal();
  85. GUILayout.Label("Relative Path:", GUILayout.Width(100));
  86. myTarget.CharacterBlueprintRootPath = GUILayout.TextArea(myTarget.CharacterBlueprintRootPath);
  87. GUILayout.EndHorizontal();
  88. GUI.color = _activeColor;
  89. GUILayout.BeginHorizontal();
  90. GUILayout.Label("Editor: Assets/"+ myTarget.CharacterBlueprintRootPath+"/");
  91. GUILayout.EndHorizontal();
  92. GUILayout.BeginHorizontal();
  93. GUILayout.Label("Build: [Game Install Folder]/" + myTarget.CharacterBlueprintRootPath + "/");
  94. GUILayout.EndHorizontal();
  95. GUI.color = Color.white;
  96. }
  97. else{
  98. GUILayout.BeginHorizontal();
  99. GUILayout.Label("Absolute Path:", GUILayout.Width(100));
  100. myTarget.CharacterBlueprintRootPath = GUILayout.TextArea(myTarget.CharacterBlueprintRootPath);
  101. GUILayout.EndHorizontal();
  102. }
  103. EditorGUILayout.Separator();
  104. GUILayout.BeginHorizontal();
  105. myTarget.CacheMeshTexture = GUILayout.Toggle(myTarget.CacheMeshTexture, "Keep loaded meshes and textures in memory.");
  106. GUILayout.EndHorizontal();
  107. GUILayout.BeginHorizontal();
  108. EditorGUILayout.HelpBox("This will use more memory in exchange of significantly reduce the performance cost when loading character.\n" +
  109. "Call CharacterManager.ClearLoadedAssets() to free the used memory when necessary.", MessageType.Info, true);
  110. GUILayout.EndHorizontal();
  111. EditorGUILayout.Separator();
  112. GUILayout.BeginHorizontal();
  113. GUI.color = _emotionFold ? _activeColor : _disableColor;
  114. _emotionFold = EditorGUILayout.Foldout(_emotionFold, "Character Emotion Settings");
  115. GUI.color = Color.white;
  116. GUILayout.EndHorizontal();
  117. if (_emotionFold)
  118. {
  119. GUILayout.BeginHorizontal();
  120. GUILayout.Space(15);
  121. EditorGUILayout.HelpBox("Use <CharacterEntity>().SetEmotion(string _uid, float _length) to play the emotion, use <CharacterEntity>().StopEmotion() to reset the emotion.", MessageType.Info,true);
  122. GUILayout.EndHorizontal();
  123. GUILayout.BeginHorizontal();
  124. GUILayout.Space(15);
  125. GUILayout.Label("Emotions List ("+myTarget.EmotionSettings.Count.ToString()+"):",GUILayout.Width(120));
  126. GUI.backgroundColor = _buttonColor;
  127. if (GUILayout.Button("Add",GUILayout.Width(70))) {
  128. EmotionSetting _newSetting = new EmotionSetting();
  129. _newSetting.uid = "NewEmotion" + myTarget.EmotionSettings.Count.ToString();
  130. _newSetting.HeadMorphs.Clear();
  131. myTarget.EmotionSettings.Add(_newSetting);
  132. }
  133. GUI.backgroundColor = Color.white;
  134. GUILayout.EndHorizontal();
  135. for (int i=0;i<myTarget.EmotionSettings.Count;i++) {
  136. for (int u = 0; u < myTarget.EmotionSettings.Count; u++){
  137. if (myTarget.EmotionSettings[u].uid == myTarget.EmotionSettings[i].uid && i!=u)
  138. {
  139. myTarget.EmotionSettings[i].uid += "(Clone)";
  140. }
  141. }
  142. GUILayout.BeginHorizontal();
  143. GUILayout.Space(30);
  144. myTarget.EmotionSettings[i].fold = EditorGUILayout.Foldout(myTarget.EmotionSettings[i].fold, myTarget.EmotionSettings[i].uid, true);
  145. GUILayout.EndHorizontal();
  146. if (myTarget.EmotionSettings[i].fold) {
  147. GUILayout.BeginHorizontal();
  148. GUILayout.Space(50);
  149. GUILayout.Label("UID:", GUILayout.Width(100));
  150. myTarget.EmotionSettings[i].uid = GUILayout.TextField(myTarget.EmotionSettings[i].uid.Replace(" ",""), GUILayout.Width(150));
  151. GUI.backgroundColor = Color.red;
  152. if (GUILayout.Button("Delete", GUILayout.Width(50)))
  153. {
  154. myTarget.EmotionSettings.RemoveAt(i);
  155. return;
  156. }
  157. GUI.backgroundColor = Color.white;
  158. GUILayout.EndHorizontal();
  159. GUILayout.BeginHorizontal();
  160. GUILayout.Space(50);
  161. GUILayout.Label("Blend Shapes:",GUILayout.Width(100));
  162. GUI.backgroundColor = _activeColor;
  163. _selMorph = EditorGUILayout.Popup(_selMorph, EmotionSetting.MorphName, GUILayout.Width(150));
  164. GUI.backgroundColor = _buttonColor;
  165. if (GUILayout.Button("Active", GUILayout.Width(50)))
  166. {
  167. foreach (var obj in myTarget.EmotionSettings[i].HeadMorphs) {
  168. if (Mathf.FloorToInt(obj.x) == _selMorph) return;
  169. }
  170. myTarget.EmotionSettings[i].HeadMorphs.Add(new Vector2( _selMorph,100F));
  171. }
  172. GUI.backgroundColor = Color.white;
  173. GUILayout.EndHorizontal();
  174. for (int u = 0; u < myTarget.EmotionSettings[i].HeadMorphs.Count; u++) {
  175. GUILayout.BeginHorizontal();
  176. GUILayout.Space(70);
  177. GUILayout.Label(EmotionSetting.GetEmotionName(Mathf.FloorToInt(myTarget.EmotionSettings[i].HeadMorphs[u].x)), GUILayout.Width(100));
  178. myTarget.EmotionSettings[i].HeadMorphs[u] = new Vector2(myTarget.EmotionSettings[i].HeadMorphs[u].x, GUILayout.HorizontalSlider(myTarget.EmotionSettings[i].HeadMorphs[u].y, 0F, 100F, GUILayout.Width(100)));
  179. GUILayout.Label(Mathf.FloorToInt(myTarget.EmotionSettings[i].HeadMorphs[u].y).ToString()+"%",GUILayout.Width(45));
  180. GUI.backgroundColor = Color.red;
  181. if (GUILayout.Button("X", GUILayout.Width(30)))
  182. {
  183. myTarget.EmotionSettings[i].HeadMorphs.RemoveAt(u);
  184. return;
  185. }
  186. GUI.backgroundColor = Color.white;
  187. GUILayout.EndHorizontal();
  188. }
  189. }
  190. }
  191. }
  192. GUILayout.BeginHorizontal();
  193. GUI.color = _settingFold ? _activeColor : _disableColor;
  194. _settingFold = EditorGUILayout.Foldout(_settingFold, "Creation Interface Settings");
  195. GUI.color = Color.white;
  196. GUILayout.EndHorizontal();
  197. if (_settingFold)
  198. {
  199. GUILayout.BeginHorizontal();
  200. GUILayout.Space(15);
  201. GUILayout.Label("General Setting:");
  202. GUILayout.EndHorizontal();
  203. GUILayout.BeginHorizontal();
  204. GUILayout.Space(30);
  205. myTarget.RaceSettingVisible = GUILayout.Toggle(myTarget.RaceSettingVisible, "", GUILayout.Width(20));
  206. GUILayout.Label("Race setting visible.");
  207. GUILayout.EndHorizontal();
  208. GUILayout.BeginHorizontal();
  209. GUILayout.Space(30);
  210. myTarget.BackCategoryVisible = GUILayout.Toggle(myTarget.BackCategoryVisible, "", GUILayout.Width(20));
  211. GUILayout.Label("Back category visible.");
  212. GUILayout.EndHorizontal();
  213. GUILayout.BeginHorizontal();
  214. GUILayout.Space(30);
  215. myTarget.TailCategoryVisible = GUILayout.Toggle(myTarget.TailCategoryVisible, "", GUILayout.Width(20));
  216. GUILayout.Label("Tail category visible.");
  217. GUILayout.EndHorizontal();
  218. EditorGUILayout.Separator();
  219. GUILayout.BeginHorizontal();
  220. GUILayout.Space(15);
  221. GUILayout.Label("When player customize existing character:");
  222. GUILayout.EndHorizontal();
  223. GUILayout.BeginHorizontal();
  224. GUILayout.Space(30);
  225. myTarget.AllowChangeNameWhenCustomize = GUILayout.Toggle(myTarget.AllowChangeNameWhenCustomize, "", GUILayout.Width(20));
  226. GUILayout.Label("Allow change name.");
  227. GUILayout.EndHorizontal();
  228. GUILayout.BeginHorizontal();
  229. GUILayout.Space(30);
  230. myTarget.AllowChangeSexWhenCustomize = GUILayout.Toggle(myTarget.AllowChangeSexWhenCustomize, "", GUILayout.Width(20));
  231. GUILayout.Label("Allow change sex.");
  232. GUILayout.EndHorizontal();
  233. GUILayout.BeginHorizontal();
  234. GUILayout.Space(30);
  235. myTarget.AllowChangeRaceWhenCustomize = GUILayout.Toggle(myTarget.AllowChangeRaceWhenCustomize, "", GUILayout.Width(20));
  236. GUILayout.Label("Allow change race.");
  237. GUILayout.EndHorizontal();
  238. GUILayout.BeginHorizontal();
  239. GUILayout.Space(30);
  240. myTarget.AllowOutfitsWhenCustomize = GUILayout.Toggle(myTarget.AllowOutfitsWhenCustomize, "", GUILayout.Width(20));
  241. GUILayout.Label("Allow change outfit.");
  242. GUILayout.EndHorizontal();
  243. EditorGUILayout.Separator();
  244. GUILayout.BeginHorizontal();
  245. GUILayout.Space(15);
  246. GUILayout.Label("When player create new character:");
  247. GUILayout.EndHorizontal();
  248. GUILayout.BeginHorizontal();
  249. GUILayout.Space(30);
  250. myTarget.AllowOutfitsWhenCreate = GUILayout.Toggle(myTarget.AllowOutfitsWhenCreate, "", GUILayout.Width(20));
  251. GUILayout.Label("Allow change outfit.");
  252. GUILayout.EndHorizontal();
  253. GUILayout.BeginHorizontal();
  254. GUILayout.Space(30);
  255. myTarget.AllowChangeSexWhenCreate = GUILayout.Toggle(myTarget.AllowChangeSexWhenCreate, "", GUILayout.Width(20));
  256. GUILayout.Label("Allow change sex.");
  257. GUILayout.EndHorizontal();
  258. EditorGUILayout.Separator();
  259. }
  260. if ((_valueChanged || GUI.changed) && !Application.isPlaying) EditorUtility.SetDirty(myTarget);
  261. if (DataScript == null) return;
  262. GUILayout.BeginHorizontal();
  263. GUI.color = _textureToolFold ? _activeColor : _disableColor;
  264. _textureToolFold = EditorGUILayout.Foldout(_textureToolFold, "Add new body customizations");
  265. GUI.color = Color.white;
  266. GUILayout.EndHorizontal();
  267. if (_textureToolFold)
  268. {
  269. GUILayout.BeginHorizontal();
  270. GUILayout.Space(15);
  271. GUILayout.Label("Type:", GUILayout.Width(60));
  272. selectedTextureType = (CharacterDataSetting.CharacterTextureNames)EditorGUILayout.EnumPopup(selectedTextureType, GUILayout.Width(150));
  273. GUI.backgroundColor = _buttonColor;
  274. if (GUILayout.Button("Help", GUILayout.Width(50)))
  275. {
  276. if (selectedTextureType == CharacterDataSetting.CharacterTextureNames.HairID || selectedTextureType == CharacterDataSetting.CharacterTextureNames.BeardID)
  277. {
  278. Application.OpenURL(Application.dataPath.Replace("Assets", "") + _thePath.Replace("Editor/", "Documentation/") + "HowToCreateHeadAccessories.pdf");
  279. }
  280. else
  281. {
  282. Application.OpenURL(Application.dataPath.Replace("Assets", "") + _thePath.Replace("Editor/", "Documentation/") + "HowToCreateCustomizationTextures.pdf");
  283. }
  284. }
  285. GUI.backgroundColor = Color.white;
  286. GUILayout.EndHorizontal();
  287. if (selectedTextureType == CharacterDataSetting.CharacterTextureNames.HairID || selectedTextureType == CharacterDataSetting.CharacterTextureNames.BeardID
  288. || selectedTextureType == CharacterDataSetting.CharacterTextureNames.Back || selectedTextureType == CharacterDataSetting.CharacterTextureNames.Tail)
  289. {
  290. PrefabTool(selectedTextureType);
  291. }
  292. else if (selectedTextureType != CharacterDataSetting.CharacterTextureNames.None)
  293. {
  294. TextureTool(selectedTextureType);
  295. }
  296. EditorGUILayout.Separator();
  297. }
  298. GUILayout.BeginHorizontal();
  299. GUI.color = _modelToolFold ? _activeColor : _disableColor;
  300. _modelToolFold = EditorGUILayout.Foldout(_modelToolFold, "Add new outfits");
  301. GUI.color = Color.white;
  302. GUILayout.EndHorizontal();
  303. if (_modelToolFold)
  304. {
  305. GUILayout.BeginHorizontal();
  306. GUILayout.Space(15);
  307. GUILayout.Label("Type:", GUILayout.Width(60));
  308. string[] _slotPop = new string[5] { "Armor", "Helmet", "Gauntlet", "Boot", "Pants" };
  309. selectedSlot = (OutfitSlots)EditorGUILayout.Popup((int)selectedSlot, _slotPop, GUILayout.Width(150));
  310. GUI.backgroundColor = _buttonColor;
  311. if (GUILayout.Button("Help", GUILayout.Width(50)))
  312. {
  313. Application.OpenURL(Application.dataPath.Replace("Assets", "") + _thePath.Replace("Editor/", "Documentation/") + "HowToCreateOutfits.pdf");
  314. }
  315. GUI.backgroundColor = Color.white;
  316. GUILayout.EndHorizontal();
  317. GUILayout.BeginHorizontal();
  318. GUILayout.Space(15);
  319. GUILayout.Label("Add [" + selectedSlot.ToString() + "] mesh for ", GUILayout.Width(145));
  320. selectedOutfitSex = (Sex)EditorGUILayout.EnumPopup(selectedOutfitSex, GUILayout.Width(65));
  321. GUILayout.EndHorizontal();
  322. GUILayout.BeginHorizontal();
  323. GUILayout.Space(15);
  324. GUILayout.Label("FBX:", GUILayout.Width(60));
  325. selectedOutfitFbx = (GameObject)EditorGUILayout.ObjectField(selectedOutfitFbx, typeof(GameObject), false, GUILayout.Width(150));
  326. GUILayout.EndHorizontal();
  327. GUILayout.BeginHorizontal();
  328. GUILayout.Space(15);
  329. GUILayout.Label("Material:", GUILayout.Width(60));
  330. selectedOutfitMaterial = (Material)EditorGUILayout.ObjectField(selectedOutfitMaterial, typeof(Material), false, GUILayout.Width(150));
  331. GUILayout.EndHorizontal();
  332. GUILayout.BeginHorizontal();
  333. GUILayout.Space(15);
  334. GUILayout.Label("Thumb:", GUILayout.Width(60));
  335. selectedOutfitTexture = (Texture)EditorGUILayout.ObjectField(selectedOutfitTexture, typeof(Texture), false, GUILayout.Width(150));
  336. GUILayout.EndHorizontal();
  337. GUILayout.BeginHorizontal();
  338. GUILayout.Space(15);
  339. bool _go = (selectedOutfitFbx != null && selectedOutfitFbx.GetComponentInChildren<SkinnedMeshRenderer>(true) && selectedOutfitMaterial != null && selectedOutfitTexture != null);
  340. GUI.color = _go ? Color.white : Color.gray;
  341. GUI.backgroundColor = _go ? _buttonColor : Color.gray;
  342. if (GUILayout.Button("Add", GUILayout.Width(210)))
  343. {
  344. if (_go)
  345. {
  346. int _newId = GetOutfitSetting().Length;
  347. string _meshPath = _packResourcePath + "MasterCharacterCreator/Player/" +
  348. OutfitFolderName[(int)selectedSlot] + "/" + selectedOutfitSex.ToString() + OutfitName[(int)selectedSlot] + "_" + _newId.ToString()+".mesh";
  349. string _matPath = _packResourcePath + "MasterCharacterCreator/Player/" +
  350. OutfitFolderName[(int)selectedSlot] + "/" + selectedOutfitSex.ToString() + OutfitFolderName[(int)selectedSlot] + "Mat_" + _newId.ToString() + ".mat";
  351. string _thumbPath = _packResourcePath.Replace("Resources/", "Textures/Icons/") + selectedOutfitSex.ToString()+ selectedSlot.ToString()+"/"+
  352. selectedOutfitSex.ToString() + selectedSlot.ToString() + _newId.ToString() + System.IO.Path.GetExtension(AssetDatabase.GetAssetPath(selectedOutfitTexture));
  353. try
  354. {
  355. Mesh _mesh = selectedOutfitFbx.GetComponentInChildren<SkinnedMeshRenderer>(true).sharedMesh;
  356. Mesh _newMesh = Object.Instantiate(_mesh) as Mesh;
  357. AssetDatabase.CreateAsset(_newMesh, _meshPath);
  358. AssetDatabase.CopyAsset(AssetDatabase.GetAssetPath(selectedOutfitMaterial), _matPath);
  359. AssetDatabase.CopyAsset(AssetDatabase.GetAssetPath(selectedOutfitTexture), _thumbPath);
  360. AssetDatabase.Refresh();
  361. OutfitInfo _newInfo = new OutfitInfo();
  362. _newInfo.DisplayName = selectedOutfitSex.ToString() + " " + OutfitName[(int)selectedSlot] + " " + _newId.ToString();
  363. _newInfo.Icon = (Texture)AssetDatabase.LoadAssetAtPath(_thumbPath,typeof(Texture));
  364. _newInfo.Slot = selectedSlot;
  365. _newInfo.MeshPath = "MasterCharacterCreator/Player/" +
  366. OutfitFolderName[(int)selectedSlot] + "/" + selectedOutfitSex.ToString() + OutfitName[(int)selectedSlot] + "_" + _newId.ToString();
  367. _newInfo.MaterialPath = "MasterCharacterCreator/Player/" +
  368. OutfitFolderName[(int)selectedSlot] + "/" + selectedOutfitSex.ToString() + OutfitFolderName[(int)selectedSlot] + "Mat_" + _newId.ToString();
  369. _newInfo.ColorSetting = new OutfitColorSetting();
  370. if (selectedOutfitMaterial.shader.name.Contains("CharacterSkin"))
  371. {
  372. if (selectedOutfitMaterial.GetTexture("_MaskMap1") != null)
  373. {
  374. _newInfo.ColorSetting.ToggleCustomColor1 = true;
  375. _newInfo.ColorSetting.DefaultColor1 = selectedOutfitMaterial.GetColor("_Color1");
  376. }
  377. if (selectedOutfitMaterial.GetTexture("_MaskMap2") != null)
  378. {
  379. _newInfo.ColorSetting.ToggleCustomColor2 = true;
  380. _newInfo.ColorSetting.DefaultColor2 = selectedOutfitMaterial.GetColor("_Color2");
  381. }
  382. if (selectedOutfitMaterial.GetTexture("_MaskMap3") != null)
  383. {
  384. _newInfo.ColorSetting.ToggleCustomColor3 = true;
  385. _newInfo.ColorSetting.DefaultColor3 = selectedOutfitMaterial.GetColor("_Color3");
  386. }
  387. }
  388. _newInfo.BoneNames = new string[selectedOutfitFbx.GetComponentInChildren<SkinnedMeshRenderer>(true).bones.Length];
  389. for (int i=0;i< _newInfo.BoneNames.Length;i++) {
  390. _newInfo.BoneNames[i] = selectedOutfitFbx.GetComponentInChildren<SkinnedMeshRenderer>(true).bones[i].name;
  391. }
  392. List<OutfitInfo> _infoList = new List<OutfitInfo>();
  393. _infoList.AddRange(GetOutfitSetting());
  394. _infoList.Add(_newInfo);
  395. switch (selectedSlot)
  396. {
  397. default:
  398. if(selectedOutfitSex == Sex.Male )
  399. DataScript.MaleArmorSetting= _infoList.ToArray();
  400. else
  401. DataScript.FemaleArmorSetting = _infoList.ToArray();
  402. break;
  403. case OutfitSlots.Helmet:
  404. if (selectedOutfitSex == Sex.Male)
  405. DataScript.MaleHelmetSetting = _infoList.ToArray();
  406. else
  407. DataScript.FemaleHelmetSetting = _infoList.ToArray();
  408. break;
  409. case OutfitSlots.Boot:
  410. if (selectedOutfitSex == Sex.Male)
  411. DataScript.MaleBootSetting = _infoList.ToArray();
  412. else
  413. DataScript.FemaleBootSetting = _infoList.ToArray();
  414. break;
  415. case OutfitSlots.Gauntlet:
  416. if (selectedOutfitSex == Sex.Male)
  417. DataScript.MaleGloveSetting = _infoList.ToArray();
  418. else
  419. DataScript.FemaleGloveSetting = _infoList.ToArray();
  420. break;
  421. case OutfitSlots.Pants:
  422. if (selectedOutfitSex == Sex.Male)
  423. DataScript.MalePantsSetting = _infoList.ToArray();
  424. else
  425. DataScript.FemalePantsSetting = _infoList.ToArray();
  426. break;
  427. }
  428. EditorUtility.DisplayDialog("Add new [" + selectedSlot.ToString() + "] mesh", "Successfully added (" + _newInfo.DisplayName + ") " , "OK");
  429. EditorUtility.SetDirty(DataScript);
  430. selectedOutfitFbx = null;
  431. selectedOutfitMaterial = null;
  432. selectedOutfitTexture = null;
  433. }
  434. catch
  435. {
  436. EditorUtility.DisplayDialog("Add new [" + selectedSlot.ToString()+ "] mesh", "Failed to add (" + selectedOutfitFbx.name + ")", "OK");
  437. }
  438. }
  439. }
  440. GUILayout.EndHorizontal();
  441. EditorGUILayout.Separator();
  442. }
  443. }
  444. private OutfitInfo[] GetOutfitSetting()
  445. {
  446. switch (selectedSlot)
  447. {
  448. default:
  449. return selectedOutfitSex == Sex.Male ? DataScript.MaleArmorSetting : DataScript.FemaleArmorSetting;
  450. case OutfitSlots.Helmet:
  451. return selectedOutfitSex == Sex.Male ? DataScript.MaleHelmetSetting : DataScript.FemaleHelmetSetting;
  452. case OutfitSlots.Boot:
  453. return selectedOutfitSex == Sex.Male ? DataScript.MaleBootSetting : DataScript.FemaleBootSetting;
  454. case OutfitSlots.Gauntlet:
  455. return selectedOutfitSex == Sex.Male ? DataScript.MaleGloveSetting : DataScript.FemaleGloveSetting;
  456. case OutfitSlots.Pants:
  457. return selectedOutfitSex == Sex.Male ? DataScript.MalePantsSetting : DataScript.FemalePantsSetting;
  458. }
  459. }
  460. private void PrefabTool(CharacterDataSetting.CharacterTextureNames _type)
  461. {
  462. GUILayout.BeginHorizontal();
  463. GUILayout.Space(15);
  464. GUILayout.Label("Add [" + _type.ToString().Replace("ID","") + "] prefab for ", GUILayout.Width(145));
  465. selectedTextureSex = (Sex)EditorGUILayout.EnumPopup(selectedTextureSex, GUILayout.Width(65));
  466. GUILayout.EndHorizontal();
  467. GUILayout.BeginHorizontal();
  468. GUILayout.Space(15);
  469. GUILayout.Label("Prefab:", GUILayout.Width(60));
  470. selectedPrefab = (GameObject)EditorGUILayout.ObjectField(selectedPrefab, typeof(GameObject), false, GUILayout.Width(150));
  471. GUILayout.EndHorizontal();
  472. GUILayout.BeginHorizontal();
  473. GUILayout.Space(15);
  474. GUILayout.Label("Thumb:", GUILayout.Width(60));
  475. selectedTexture = (Texture)EditorGUILayout.ObjectField(selectedTexture, typeof(Texture), false, GUILayout.Width(150));
  476. GUILayout.EndHorizontal();
  477. GUILayout.BeginHorizontal();
  478. GUILayout.Space(15);
  479. GUI.color = (selectedPrefab != null && selectedTexture!=null) ? Color.white : Color.gray;
  480. GUI.backgroundColor = (selectedPrefab != null && selectedTexture != null) ? _buttonColor : Color.gray;
  481. if (GUILayout.Button("Add", GUILayout.Width(210)))
  482. {
  483. if (selectedPrefab != null && selectedTexture != null)
  484. {
  485. (selectedTextureSex == Sex.Male ? DataScript.MaleAccessorySettings : DataScript.FemaleAccessorySettings)[(int)_type - 8].MaxValue += 1;
  486. int _newId = (selectedTextureSex == Sex.Male ? DataScript.MaleAccessorySettings : DataScript.FemaleAccessorySettings)[(int)_type - 8].MaxValue;
  487. string _basePath = (selectedTextureSex == Sex.Male ? DataScript.MaleAccessorySettings : DataScript.FemaleAccessorySettings)[(int)_type - 8].PrefabPath;
  488. string _thumbPath = (selectedTextureSex == Sex.Male ? DataScript.MaleAccessorySettings : DataScript.FemaleAccessorySettings)[(int)_type - 8].ThumbPath;
  489. string _sourcePath = AssetDatabase.GetAssetPath(selectedPrefab);
  490. string _targetPath = _packResourcePath + _basePath + _newId.ToString("00") + System.IO.Path.GetExtension(_sourcePath);
  491. string _sourceThumb = AssetDatabase.GetAssetPath(selectedTexture);
  492. string _targetThumb = _packResourcePath + _thumbPath + _newId.ToString() + System.IO.Path.GetExtension(_sourceThumb);
  493. if (AssetDatabase.CopyAsset(_sourcePath, _targetPath) && AssetDatabase.CopyAsset(_sourceThumb, _targetThumb))
  494. {
  495. EditorUtility.DisplayDialog("Add new [" + _type.ToString().Replace("ID", "") + "] prefab", "Successfully added ("+ _type.ToString().Replace("ID", "") + _newId.ToString("00") + ") to " + selectedTextureSex.ToString() + " prefabs.", "OK");
  496. EditorUtility.SetDirty(DataScript);
  497. selectedPrefab = null;
  498. selectedTexture = null;
  499. }
  500. else
  501. {
  502. EditorUtility.DisplayDialog("Add new [" + _type.ToString().Replace("ID", "") + "] prefab", "Failed to add (" + selectedPrefab.name + ")", "OK");
  503. }
  504. }
  505. }
  506. GUI.color = Color.white;
  507. GUI.backgroundColor = Color.white;
  508. GUILayout.EndHorizontal();
  509. GUILayout.BeginHorizontal();
  510. GUILayout.Space(15);
  511. EditorGUILayout.HelpBox("Don't forget Apply this prefab after added textures.", MessageType.Info);
  512. GUILayout.EndHorizontal();
  513. }
  514. private void TextureTool(CharacterDataSetting.CharacterTextureNames _type)
  515. {
  516. GUILayout.BeginHorizontal();
  517. GUILayout.Space(15);
  518. GUILayout.Label("Add ["+ _type.ToString()+"] texture for ",GUILayout.Width(145));
  519. selectedTextureSex = (Sex)EditorGUILayout.EnumPopup(selectedTextureSex, GUILayout.Width(65));
  520. GUILayout.EndHorizontal();
  521. GUILayout.BeginHorizontal();
  522. GUILayout.Space(15);
  523. GUILayout.Label("Texture:", GUILayout.Width(60));
  524. selectedTexture = (Texture)EditorGUILayout.ObjectField(selectedTexture, typeof(Texture), false, GUILayout.Width(150));
  525. GUILayout.EndHorizontal();
  526. GUILayout.BeginHorizontal();
  527. GUILayout.Space(15);
  528. GUI.color= selectedTexture != null ? Color.white : Color.gray;
  529. GUI.backgroundColor = selectedTexture != null ? _buttonColor : Color.gray;
  530. if (GUILayout.Button("Add", GUILayout.Width(210)))
  531. {
  532. if (selectedTexture != null) {
  533. (selectedTextureSex == Sex.Male ? DataScript.MaleMaterialSettings : DataScript.FemaleMaterialSettings)[(int)_type + 8].TextureIdMax += 1;
  534. int _newId = (selectedTextureSex == Sex.Male ? DataScript.MaleMaterialSettings : DataScript.FemaleMaterialSettings)[(int)_type + 8].TextureIdMax;
  535. string _basePath = (selectedTextureSex == Sex.Male ? DataScript.MaleMaterialSettings : DataScript.FemaleMaterialSettings)[(int)_type + 8].TextureBaseName;
  536. string _sourcePath = AssetDatabase.GetAssetPath(selectedTexture);
  537. string _targetPath = _packResourcePath + _basePath + _newId.ToString("00")+System.IO.Path.GetExtension(_sourcePath);
  538. if (AssetDatabase.CopyAsset(_sourcePath, _targetPath))
  539. {
  540. EditorUtility.DisplayDialog("Add new [" + _type.ToString() + "] texture", "Successfully added (" + _type.ToString()+ _newId.ToString("00") + ") to " + selectedTextureSex.ToString() + " textures.", "OK");
  541. EditorUtility.SetDirty(DataScript);
  542. selectedTexture = null;
  543. }
  544. else
  545. {
  546. EditorUtility.DisplayDialog("Add new [" + _type.ToString() + "] texture", "Failed to add (" + selectedTexture.name+")", "OK");
  547. }
  548. }
  549. }
  550. GUI.color = Color.white;
  551. GUI.backgroundColor = Color.white;
  552. GUILayout.EndHorizontal();
  553. GUILayout.BeginHorizontal();
  554. GUILayout.Space(15);
  555. EditorGUILayout.HelpBox("Don't forget Apply this prefab after added textures.", MessageType.Info);
  556. GUILayout.EndHorizontal();
  557. EditorGUILayout.Separator();
  558. }
  559. }
  560. }