prefab工具

main
tengwei 2024-06-25 18:49:09 +08:00
parent 276e8bc18a
commit 3dda2bbe23
2 changed files with 154 additions and 91 deletions

View File

@ -1,3 +1,4 @@
using NPOI.OpenXmlFormats.Dml;
using UnityEditor;
using UnityEngine;
@ -6,13 +7,62 @@ namespace PersonBrowser
public class PlayerInfo
{
private string m_Name;
private Transform m_Asset;
public GameObject Player { get; }
private Transform m_Asset
{
get
{
try { return Player.transform.GetChild(0); }
catch { return null; }
}
}
public GameObject Player { get; set; } // zheli;
public GameObject Skill { get; }
public Object Player_ac { get; }
public GameObject Emoji { get; }
public GameObject Gun { get; }
public GameObject Bag { get; }
public GameObject Emoji
{
get
{
try
{
return m_Asset.Find("Root/Bip001/Bip001 Spine/Bip001 Spine1/Bip001 Neck/Bip001 Head/G_emoji/").gameObject;
}
catch
{
return null;
}
}
}
public GameObject Gun
{
get
{
// Get gun
try
{
Transform grip = m_Asset.Find("Root/Bip001/Bip001 Spine/Bip001 Spine1/Bip001 R Clavicle/Bip001 R UpperArm/Bip001 R Forearm/Bip001 R Hand/Grip_point01/");
return grip.GetChild(0).gameObject;
}
catch
{
return null;
}
}
}
public GameObject Bag
{
get
{ // Get bag
try
{
Transform point1 = m_Asset.Find("Root/Bip001/Bip001 Spine/Mount_point01/");
return point1.GetChild(0).gameObject;
}
catch
{
return null;
}
}
}
public GameObject Display { get; }
public Object Display_ac { get; }
public GameObject AutoGen { get; }
@ -53,12 +103,10 @@ namespace PersonBrowser
{
string path = $"Assets/Art/Character/Prefabs/Players/P_{m_Name}.prefab";
Player = AssetDatabase.LoadAssetAtPath<GameObject>(path);
m_Asset = Player.transform.GetChild(0);
}
catch
{
Player = null;
m_Asset = null;
}
// Get skill animation
@ -82,38 +130,6 @@ namespace PersonBrowser
Player_ac = null;
}
// Get emoji
try
{
Emoji = m_Asset.Find("Root/Bip001/Bip001 Spine/Bip001 Spine1/Bip001 Neck/Bip001 Head/G_emoji/").gameObject;
}
catch
{
Emoji = null;
}
// Get gun
try
{
Transform grip = m_Asset.Find("Root/Bip001/Bip001 Spine/Bip001 Spine1/Bip001 R Clavicle/Bip001 R UpperArm/Bip001 R Forearm/Bip001 R Hand/Grip_point01/");
Gun = grip.GetChild(0).gameObject;
}
catch
{
Gun = null;
}
// Get bag
try
{
Transform point1 = m_Asset.Find("Root/Bip001/Bip001 Spine/Mount_point01/");
Bag = point1.GetChild(0).gameObject;
}
catch
{
Bag = null;
}
// Get player_s prefab
try
{

View File

@ -6,63 +6,110 @@ using UnityEditor;
using UnityEditor.UIElements;
using UnityEngine.UIElements;
public class PlayerEditor : EditorWindow
namespace PersonBrowser
{
ObjectField charaField = null;
ObjectField gunField = null;
ObjectField bagField = null;
[MenuItem("Test/prefab¹¤¾ß/Player Editor")]
public static void ShowWindow()
public class PlayerEditor : EditorWindow
{
GetWindow<PlayerEditor>("Player Editor");
}
ObjectField charaField = null;
ObjectField gunField = null;
ObjectField bagField = null;
public void CreateGUI()
{
VisualElement root = rootVisualElement;
Label label1 = new Label("Edit Player");
root.Add(label1);
charaField = new ObjectField("player prefab") { objectType = typeof(GameObject), allowSceneObjects = false };
root.Add(charaField);
gunField = new ObjectField("add gun") { objectType = typeof(GameObject), allowSceneObjects = false };
root.Add(gunField);
bagField = new ObjectField("add bag") { objectType = typeof(GameObject), allowSceneObjects = false };
root.Add(bagField);
Button button1 = new()
Box box1;
[MenuItem("Test/prefab¹¤¾ß/Player Editor")]
public static void ShowWindow()
{
name = "button1",
text = "applay"
};
root.Add(button1);
button1.RegisterCallback<ClickEvent>(EditPlayer);
TextElement textElement = new() { text = "µ÷ÕûºÃ±³°üλÖúó, Apply Overrides" };
root.Add(textElement);
}
private void EditPlayer(ClickEvent evt)
{
GameObject prefabRoot = (GameObject)PrefabUtility.InstantiatePrefab(charaField.value);
Transform assetInstance = prefabRoot.transform.GetChild(0);
Debug.Log(assetInstance.name);
if (bagField.value != null)
{
Transform point01 = assetInstance.Find("Root/Bip001/Bip001 Spine/Mount_point01/");
GameObject bag = (GameObject)PrefabUtility.InstantiatePrefab(bagField.value, point01);
bag.transform.localEulerAngles = new Vector3(90, 0, 0);
GetWindow<PlayerEditor>("Player Editor");
}
if (gunField.value != null)
public void CreateGUI()
{
Transform grip = assetInstance.Find("Root/Bip001/Bip001 Spine/Bip001 Spine1/Bip001 R Clavicle/Bip001 R UpperArm/Bip001 R Forearm/Bip001 R Hand/Grip_point01/");
GameObject gun = (GameObject)PrefabUtility.InstantiatePrefab(gunField.value, grip);
gun.transform.localEulerAngles = new Vector3(90, 0, 0);
VisualElement root = rootVisualElement;
Label label1 = new Label("Edit Player");
root.Add(label1);
charaField = new ObjectField("player prefab") { objectType = typeof(GameObject), allowSceneObjects = false };
root.Add(charaField);
gunField = new ObjectField("add gun") { objectType = typeof(GameObject), allowSceneObjects = false };
root.Add(gunField);
bagField = new ObjectField("add bag") { objectType = typeof(GameObject), allowSceneObjects = false };
root.Add(bagField);
Button button1 = new()
{
name = "button1",
text = "applay"
};
root.Add(button1);
button1.RegisterCallback<ClickEvent>(EditPlayer);
TextElement textElement = new() { text = "µ÷ÕûºÃ±³°üλÖúó, Apply Overrides" };
root.Add(textElement);
box1 = new Box();
root.Add(box1);
}
public void OnSelectionChange()
{
ShowSelected();
}
private void ShowSelected()
{
box1.Clear();
GameObject selected = Selection.activeObject as GameObject;
try
{
selected.transform.GetChild(0);
}
catch
{
return;
}
PlayerInfo info = new(selected.transform.GetChild(0).name);
info.Player = selected;
ObjectField playerField = new("Player");
playerField.value = info.Player;
box1.Add(playerField);
ObjectField skillField = new("----skill");
skillField.value = info.Skill;
box1.Add(skillField);
ObjectField emojiField = new("----emoji");
emojiField.value = info.Emoji;
box1.Add(emojiField);
ObjectField gunField = new("----gun");
gunField.value = info.Gun;
box1.Add(gunField);
ObjectField bagField = new("----bag");
bagField.value = info.Bag;
box1.Add(bagField);
}
private void EditPlayer(ClickEvent evt)
{
GameObject prefabRoot = (GameObject)PrefabUtility.InstantiatePrefab(charaField.value);
Transform assetInstance = prefabRoot.transform.GetChild(0);
Debug.Log(assetInstance.name);
if (bagField.value != null)
{
Transform point01 = assetInstance.Find("Root/Bip001/Bip001 Spine/Mount_point01/");
GameObject bag = (GameObject)PrefabUtility.InstantiatePrefab(bagField.value, point01);
bag.transform.localEulerAngles = new Vector3(90, 0, 0);
}
if (gunField.value != null)
{
Transform grip = assetInstance.Find("Root/Bip001/Bip001 Spine/Bip001 Spine1/Bip001 R Clavicle/Bip001 R UpperArm/Bip001 R Forearm/Bip001 R Hand/Grip_point01/");
GameObject gun = (GameObject)PrefabUtility.InstantiatePrefab(gunField.value, grip);
gun.transform.localEulerAngles = new Vector3(90, 0, 0);
}
}
}
}
}