优化hierarchy
即时生成和删除tab(不会做动态刷新 基本上hierarchy的性能就到这了,之后还是做点辅助工具防止1000+的栏展开吧 (重要)bug测试不完全,需要再加改进
This commit is contained in:
@@ -279,4 +279,7 @@ MonoBehaviour:
|
||||
- {fileID: 5741821785853804139, guid: 840aa07c7d6e64d8c97767f94cdc6d3e, type: 3}
|
||||
- {fileID: 2800000, guid: f20112bdeec2e8d4d9f80e8390e37263, type: 3}
|
||||
- {fileID: 11500000, guid: 3312d7739989d2b4e91e6319e9a96d76, type: 3}
|
||||
_Values: 526a8851fe85233e7cc810cd2b8a733faa68e71a62b99912cf2f06228873853005edfb00aa354575a31cc8ad1ac7b966f52afefc8351b636e2b71574be99675b6400dfc3607f0069e96d5112b3681f5fcf550a7f3749f10c2c006f2e23d1db370e64801184e106752a681216ffa3837998b5a5688fe7245230fcd93d5728ea479cf46b8ba7516b16ed2e96b5bbb6e20e0c6272c125d7806f67cd366983232521642549cf9088373b29cf12c86a843666a9d2726c53c784328db49f8d499d2140c6bf413c35ce7d12821326d7a7c36313210e18f42f147d60db1f64f3ada3bb2d6666d31a094491222bbde8f495825a4e2f05ece33b3881253ca117543370bf2531ac8ebf10b7f565a03ac9712b88ca58c516c5a7b6d8f161d84e972e95f1f208f318fcbd24a42f1a1594d13a0cca1e4d0b9a28c0e4238a4cd5432183fe0a3d37c5600352a5affe32a0f1cca64d60c95d6de43a2f1ab3ec2f8dafe7e182ac1c0b579975acc6cca75b9cf61ff356e4ff757ac4f0e2446c5178b3cc3b0938e3500b2c3eb04c15e369388d95cb10d3df8656069a951142fc403ed6b4a90102e5146519f66f6d35134e18b132d9ec6c3ec954f282992fe09c9f2a9752fc7c47b5d52b06e06eab61a6d10e4d7cc274d62caa67eb540f7f4be5844b6a66281ce82d2f664f7483a3a0ebff69576b98633aaa8921a5ddbe04814bd97aac297cdb1235373261c4cec06828ec556592c57c95cb2c5c853ad052230733029b09f8776f245772a3ca0276dcc8b833ca146a1411560f76a926a9289a1bf169092fa58ddf9c3a7517c82635364a7f4df403890f9d1ef144fb812196cd7f0c77286780f491baec2cdaf4fd482fda400ba6f61b9da4000716c29e6ca1845b5768bcaf0ecfc98bbb39185d35a921a8142041153dc39aaa1c286f97b630278db035fff6d32e0ef214326ce60b1f02d1fa3100beb18fe2b7e76ee911c7c76ae00c14c122f29acc03601a51f08a4016e1082f6d7eea356c2d4766a7c4e03aa5e33455a9d65f214d9d8402a2681f2dbdd87b070a985bebf6d6a81097a7bf6f1b653f6d44ca68c07e191e3105186bfcf1e65731b726cef277b7a02e2f4f8ba6de14e73c29b17188403b8622b78df10f42a4017cfff026423332e5732a39eecea4c4101a0158da5ca71f8e0cacf1a805a8b07076b2f15811115bf709cdfeb27a2a54c77a62f3f016365a2b209de610da2415e4793787e44c9401f65bb01b6f5693eb1d01b923a2b5bf5a3f57c537732b4a1ce41e1dd3bc5c8f84196316b39ae5142b724ec80f2101722eba6ec83b11cc7422a66c365139bf2fc07134f6c0358c0bda930f573d9dc4051c541157fd8ac87b1d9952a64ba6e19ca69e2499417fddbe2caa24c1a561f21387762d2def8c67a4f06e2bc76e0cb0d75f9409b22d34593aa82d7ba7ae89207f8b652d5f423bce6076d56121e00caac4b88c2c7dcb083a94c883285aa4d5c6ce0a8162bfdd6753d123843ddced44e075745b023dbb7e5b896e8269c01328054c9b302a1ab4da484855f13539de7736f3892f04d9f6479188c48f2cd00d4fa9d9c99a7201753abb270b443240a506dad2e62f21bcf924dbc733497deec366e53a852b5d6e466fed752cfb7898b19bdc423679483d7065d2ed753932d34255148ed5933b2f9bb6e6a9e268170b63bcea6793c524c3515736dfa68f07f4c3e5cd2819166dba29f321139f0d5a074dc689b94fcb3f83cf281fd236e5292abdda6dc835402586d5d0c1605cee625fb13d2d6d18c0428f254a59f1f69a0ef2e209aa3a5f6e2ef35ef170e07360261e3a3ede074843437e1dfbee809a1671c43e2f82acbcd800430f3a0f274f621bc623782b35791639d9b3d6a7a4a251738a9dcae15d1d2c629ec1dee87cac94318016b3a41242a73e5469a8f9e5305b1a9e52653be5bb871d51da8e739a2dbc794808278eefad6148f68c8cf374337c311ef987ce12cf173b716a0b132fe4277edbdd4e22f732d40ef01d45592e93a97ca93fa95e5a129817e09c00a6478b8824b30bce51819f29142579bf2f14716a04ec784291717a27138999bca5ced2397ca56aa623c557fa0aea6b7c2b2d37d36ecd046c4031e66938e3bac7e8e2834609b33cd57e178eca6b83c7852308adbe3e94d428359a07b5400093c0f470edd76c4e79870e9eaba95c32283d069372be6e79067bb6ab7ca454796a807a3129056bd4516d76698e182e2bcd6bccd4d0d55bd256e985ffc3c546e2bb353081161d28e9f2b17c68842a61ffbca8999ef095525156bae067ce736817b45824c349af41156b1c1de1a70c577fb57abce4d3570d25e2df2a5b3cc1489ae5994cd4f9624895167ccd2c878e56b79ca0e2b6cfb2425d4b4aa628d99c27562c7d03f23f7d7819c328ce578ae1527135e0f7dda3ff6a97dca81f440971457a5478000a8b6376e1d8360c581b142d9608e7a1456bfa07b651858937153a686575e98014203e3e284564acf772d0414ace1d3510e7224a5ade01287e0be64f896976eb354cd453dd6c74b85fa2e828b9d4c8b9fdf7d24683ea1f5d51667f1d5e15238dfce40c6aa371127c5bdaaa470b279155bdd3ad6d9730674a2c76017713a8a6b681a4d32ac75e5c6e094fa25e94676779f8d5da313d6e0934833ec218748a6ab334f3c665ab98e2e4d0e388478e09b6c50e887e177c2785ed64615806e08b1e6b46aa6d77d33232a00d0a9e1f09ae3d730b78d804f67dd0a3864c364a40dbc45b01f48e388ad267be45e0da793a5a1c4adc1a0557652262c47b11fe1e96831e163005de15e0fb03221f68b5285849dde06880275b1fe340dba9ac4b77d44955c8fff1aa3ec7ce951ee81cc70492c6e23b11207815a53ccaebba464132d331f694d66968042f655630447ceb4524f930ad89858d64d39f505d3e46807a1100bbe767782751b8dbae93ee5fc7226db8ffaccc4a55445f1007aba41b4260bcb047a020454d5b
|
||||
- {fileID: 2800000, guid: 188dfe7e559f13248ba2c41eb5a59328, type: 3}
|
||||
- {fileID: 2800000, guid: ee148e281f3c41c5b4ff5f8a5afe5a6c, type: 3}
|
||||
- {fileID: 2800000, guid: 93f09189124b21e479fc891dbc1b93bf, type: 3}
|
||||
_Values: 526a8851fe85233e7cc810cd2b8a733faa68e71a62b99912cf2f06228873853005edfb00aa354575a31cc8ad1ac7b966f52afefc8351b636e2b71574be99675b6400dfc3607f0069e96d5112b3681f5fcf550a7f3749f10c2c006f2e23d1db370e64801184e106752a681216ffa3837998b5a5688fe7245230fcd93d5728ea479cf46b8ba7516b16ed2e96b5bbb6e20e0c6272c125d7806f67cd366983232521642549cf9088373b29cf12c86a843666a9d2726c53c784328db49f8d499d2140c6bf413c35ce7d12821326d7a7c36313210e18f42f147d60db1f64f3ada3bb2d6666d31a094491222bbde8f495825a4e2f05ece33b3881253ca117543370bf2531ac8ebf10b7f565a03ac9712b88ca58c516c5a7b6d8f161d84e972e95f1f208f318fcbd24a42f1a1594d13a0cca1e4d0b9a28c0e4238a4cd5432183fe0a3d37c5600352a5affe32a0f1cca64d60c95d6de43a2f1ab3ec2f8dafe7e182ac1c0b579975acc6cca75b9cf61ff356e4ff757ac4f0e2446c5178b3cc3b0938e3500b2c3eb04c15e369388d95cb10d3df8656069a951142fc403ed6b4a90102e5146519f66f6d35134e18b132d9ec6c3ec954f282992fe09c9f2a9752fc7c47b5d52b06e06eab61a6d10e4d7cc274d62caa67eb540f7f4be5844b6a66281ce82d2f664f7483a3a0ebff69576b98633aaa8921a5ddbe04814bd97aac297cdb1235373261c4cec06828ec556592c57c95cb2c5c853ad052230733029b09f8776f245772a3ca0276dcc8b833ca146a1411560f76a926a9289a1bf169092fa58ddf9c3a7517c82635364a7f4df403890f9d1ef144fb812196cd7f0c77286780f491baec2cdaf4fd482fda400ba6f61b9da4000716c29e6ca1845b5768bcaf0ecfc98bbb39185d35a921a8142041153dc39aaa1c286f97b630278db035fff6d32e0ef214326ce60b1f02d1fa3100beb18fe2b7e76ee911c7c76ae00c14c122f29acc03601a51f08a4016e1082f6d7eea356c2d4766a7c4e03aa5e33455a9d65f214d9d8402a2681f2dbdd87b070a985bebf6d6a81097a7bf6f1b653f6d44ca68c07e191e3105186bfcf1e65731b726cef277b7a02e2f4f8ba6de14e73c29b17188403b8622b78df10f42a4017cfff026423332e5732a39eecea4c4101a0158da5ca71f8e0cacf1a805a8b07076b2f15811115bf709cdfeb27a2a54c77a62f3f016365a2b209de610da2415e4793787e44c9401f65bb01b6f5693eb1d01b923a2b5bf5a3f57c537732b4a1ce41e1dd3bc5c8f84196316b39ae5142b724ec80f2101722eba6ec83b11cc7422a66c365139bf2fc07134f6c0358c0bda930f573d9dc4051c541157fd8ac87b1d9952a64ba6e19ca69e2499417fddbe2caa24c1a561f21387762d2def8c67a4f06e2bc76e0cb0d75f9409b22d34593aa82d7ba7ae89207f8b652d5f423bce6076d56121e00caac4b88c2c7dcb083a94c883285aa4d5c6ce0a8162bfdd6753d123843ddced44e075745b023dbb7e5b896e8269c01328054c9b302a1ab4da484855f13539de7736f3892f04d9f6479188c48f2cd00d4fa9d9c99a7201753abb270b443240a506dad2e62f21bcf924dbc733497deec366e53a852b5d6e466fed752cfb7898b19bdc423679483d7065d2ed753932d34255148ed5933b2f9bb6e6a9e268170b63bcea6793c524c3515736dfa68f07f4c3e5cd2819166dba29f321139f0d5a074dc689b94fcb3f83cf281fd236e5292abdda6dc835402586d5d0c1605cee625fb13d2d6d18c0428f254a59f1f69a0ef2e209aa3a5f6e2ef35ef170e07360261e3a3ede074843437e1dfbee809a1671c43e2f82acbcd800430f3a0f274f621bc623782b35791639d9b3d6a7a4a251738a9dcae15d1d2c629ec1dee87cac94318016b3a41242a73e5469a8f9e5305b1a9e52653be5bb871d51da8e739a2dbc794808278eefad6148f68c8cf374337c311ef987ce12cf173b716a0b132fe4277edbdd4e22f732d40ef01d45592e93a97ca93fa95e5a129817e09c00a6478b8824b30bce51819f29142579bf2f14716a04ec784291717a27138999bca5ced2397ca56aa623c557fa0aea6b7c2b2d37d36ecd046c4031e66938e3bac7e8e2834609b33cd57e178eca6b83c7852308adbe3e94d428359a07b5400093c0f470edd76c4e79870e9eaba95c32283d069372be6e79067bb6ab7ca454796a807a3129056bd4516d76698e182e2bcd6bccd4d0d55bd256e985ffc3c546e2bb353081161d28e9f2b17c68842a61ffbca8999ef095525156bae067ce736817b45824c349af41156b1c1de1a70c577fb57abce4d3570d25e2df2a5b3cc1489ae5994cd4f9624895167ccd2c878e56b79ca0e2b6cfb2425d4b4aa628d99c27562c7d03f23f7d7819c328ce578ae1527135e0f7dda3ff6a97dca81f440971457a5478000a8b6376e1d8360c581b142d9608e7a1456bfa07b651858937153a686575e98014203e3e284564acf772d0414ace1d3510e7224a5ade01287e0be64f896976eb354cd453dd6c74b85fa2e828b9d4c8b9fdf7d24683ea1f5d51667f1d5e15238dfce40c6aa371127c5bdaaa470b279155bdd3ad6d9730674a2c76017713a8a6b681a4d32ac75e5c6e094fa25e94676779f8d5da313d6e0934833ec218748a6ab334f3c665ab98e2e4d0e388478e09b6c50e887e177c2785ed64615806e08b1e6b46aa6d77d33232a00d0a9e1f09ae3d730b78d804f67dd0a3864c364a40dbc45b01f48e388ad267be45e0da793a5a1c4adc1a0557652262c47b11fe1e96831e163005de15e0fb03221f68b5285849dde06880275b1fe340dba9ac4b77d44955c8fff1aa3ec7ce951ee81cc70492c6e23b11207815a53ccaebba464132d331f694d66968042f655630447ceb4524f930ad89858d64d39f505d3e46807a1100bbe767782751b8dbae93ee5fc7226db8ffaccc4a55445f1007aba41b4260bcb047a020454d5ba311f1f940744707295758fd6f3dcf5559cbdff5fd5f2a7d
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -84,6 +84,7 @@ namespace Ichni.Editor
|
||||
private void SetUpFunctions()
|
||||
{
|
||||
functionInterpreter = new Interpreter();
|
||||
functionInterpreter.SetFunction("test",(Action)Test);
|
||||
functionInterpreter.SetFunction("loopg", (Action<string,int>)LoopGenerate);
|
||||
functionInterpreter.SetFunction("print", (Action<object>)print);
|
||||
functionInterpreter.SetFunction("log", (Action<object>)Debug.Log);
|
||||
@@ -92,8 +93,12 @@ namespace Ichni.Editor
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
private void Test()
|
||||
{
|
||||
//放入测试代码
|
||||
var f0 = ElementFolder.GenerateElement("Folder", Guid.NewGuid(), new List<string>(), true, null);
|
||||
}
|
||||
private GameElement Find(object name){
|
||||
string text=name.ToString();
|
||||
GameElement[] allObjects = Resources.FindObjectsOfTypeAll(typeof(GameElement)) as GameElement[];
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using Ichni.RhythmGame;
|
||||
using Unity.VisualScripting;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
@@ -8,16 +9,24 @@ namespace Ichni.Editor
|
||||
{
|
||||
public class Hierarchy : StaticWindow
|
||||
{
|
||||
public GameObject Nouse;
|
||||
public GameObject hierarchyTabPrefab;
|
||||
public RectTransform tabContainer;
|
||||
public List<HierarchyTab> tabList;
|
||||
//public int ID=0;
|
||||
|
||||
|
||||
public void GenerateTab(GameElement targetElement, GameElement parentElement)
|
||||
public HierarchyTab GenerateTab(GameElement targetElement, GameElement parentElement,int reuse=-1)
|
||||
{
|
||||
HierarchyTab tab = Instantiate(hierarchyTabPrefab, tabContainer).GetComponent<HierarchyTab>();
|
||||
HierarchyTab tab =Instantiate(hierarchyTabPrefab, tabContainer).GetComponent<HierarchyTab>();;
|
||||
//if(parentElement.connectedTab!=null)tab.transform.SetSiblingIndex(parentElement.connectedTab.transform.GetSiblingIndex());
|
||||
tab.SetTab(targetElement, parentElement);
|
||||
|
||||
tabList.Add(tab);
|
||||
tab.hierarchy=this;
|
||||
|
||||
return tab;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -14,7 +14,8 @@ namespace Ichni.Editor
|
||||
public GameElement connectedGameElement;
|
||||
public HierarchyTab parentTab;
|
||||
public List<HierarchyTab> childTabList;
|
||||
|
||||
public List<int> IDqueue;
|
||||
|
||||
public int tabLayer;
|
||||
public bool isSelected;
|
||||
public bool isExpanded;
|
||||
@@ -26,10 +27,12 @@ namespace Ichni.Editor
|
||||
public Button expandButton;
|
||||
public Button gotoButton;
|
||||
public TMP_Text tabButtonText;
|
||||
|
||||
public Hierarchy hierarchy;
|
||||
|
||||
public void SetTab(GameElement targetElement, GameElement parentElement)
|
||||
{
|
||||
|
||||
connectedGameElement=targetElement;
|
||||
tabButtonText.text = targetElement.elementName;
|
||||
targetElement.connectedTab = this;
|
||||
this.isExpanded = false;
|
||||
@@ -41,15 +44,15 @@ namespace Ichni.Editor
|
||||
this.tabLayer = 0;
|
||||
this.parentTab = null;
|
||||
this.transform.SetAsLastSibling();
|
||||
}
|
||||
else
|
||||
{
|
||||
}else{
|
||||
this.parentTab = parentElement.connectedTab;
|
||||
parentElement.connectedTab.childTabList.Add(this);
|
||||
this.tabLayer = this.parentTab.tabLayer + 1;
|
||||
|
||||
this.parentTab.childTabList.Add(this);
|
||||
|
||||
|
||||
|
||||
this.transform.SetSiblingIndex(this.parentTab.transform.GetSiblingIndex() +
|
||||
GetAllChildrenCount(this.parentTab));
|
||||
this.parentTab.connectedGameElement.childElementList.Count);
|
||||
|
||||
if (!this.parentTab.isExpanded)
|
||||
{
|
||||
@@ -59,12 +62,13 @@ namespace Ichni.Editor
|
||||
|
||||
for (int i = 1; i <= this.tabLayer; i++)
|
||||
{
|
||||
float lineX = 10 * i;
|
||||
float lineX = 30 * i;
|
||||
Instantiate(indentationLinePrefab, tabRect).GetComponent<RectTransform>().anchoredPosition = new Vector2(lineX, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
float posX = -25 + 10 * tabLayer;
|
||||
float posX = -5 + 30 * tabLayer;
|
||||
tabMainRect.anchoredPosition = new Vector2(posX, tabMainRect.anchoredPosition.y);
|
||||
|
||||
expandButton.onClick.AddListener(ExpandOrFold);
|
||||
@@ -88,38 +92,44 @@ namespace Ichni.Editor
|
||||
private void ExpandOrFold()
|
||||
{
|
||||
this.childTabList.RemoveAll(s => s == null);
|
||||
bool op = !isExpanded;
|
||||
isExpanded=!isExpanded;
|
||||
|
||||
for (int i = 0; i < childTabList.Count; i++)
|
||||
{
|
||||
childTabList[i].SetExpansion(op);
|
||||
if(isExpanded){
|
||||
expandButton.transform.Rotate(new Vector3(0,0,180));
|
||||
foreach(GameElement i in connectedGameElement.childElementList){
|
||||
HierarchyTab a=hierarchy.GenerateTab(i,connectedGameElement);
|
||||
childTabList.Add(a);
|
||||
}
|
||||
}else{
|
||||
expandButton.transform.Rotate(new Vector3(0,0,180));
|
||||
|
||||
for (int i = childTabList.Count-1; i>=0; i--)
|
||||
{
|
||||
childTabList[i].SetExpansion(isExpanded);
|
||||
}
|
||||
}
|
||||
|
||||
isExpanded = op;
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void SetExpansion(bool expand)
|
||||
{
|
||||
if (!(expand == true && isExpanded == false))
|
||||
if (!expand&&isExpanded)
|
||||
{
|
||||
foreach (var tab in childTabList)
|
||||
{
|
||||
tab.SetExpansion(expand);
|
||||
tab.SetExpansion(expand);//false
|
||||
}
|
||||
}
|
||||
|
||||
if (expand)
|
||||
if (!expand)
|
||||
{
|
||||
gameObject.SetActive(true);
|
||||
tabRect.localScale = Vector3.one;
|
||||
layoutElement.ignoreLayout = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
tabRect.localScale = Vector3.zero;
|
||||
layoutElement.ignoreLayout = true;
|
||||
gameObject.SetActive(false);
|
||||
parentTab.childTabList.Remove(this);
|
||||
Destroy(gameObject);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -58,7 +58,7 @@ MonoBehaviour:
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_Color: {r: 0.6415094, g: 0.6415094, b: 0.6415094, a: 0.39215687}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
|
||||
@@ -12,7 +12,7 @@ namespace Ichni.RhythmGame
|
||||
{
|
||||
public partial class GameCamera : GameElement, IHaveTransformSubmodule, IHaveTimeDurationSubmodule
|
||||
{
|
||||
public Camera camera;
|
||||
public new Camera camera;
|
||||
public Transform rotationPoint;
|
||||
public Transform positionPoint;
|
||||
public Transform cameraTransform;
|
||||
|
||||
@@ -9,7 +9,7 @@ namespace Ichni.RhythmGame.ThemeBundles.Basic
|
||||
{
|
||||
public partial class BasicNoteVisual : NoteVisualBase
|
||||
{
|
||||
public new static BasicNoteVisual GenerateElement(string elementName, Guid id, List<string> tags,
|
||||
public static BasicNoteVisual GenerateElement(string elementName, Guid id, List<string> tags,
|
||||
bool isFirstGenerated, GameElement parentElement, string themeBundleName, string objectName)
|
||||
{
|
||||
BasicNoteVisual noteVisual = SubstantialObject.GenerateElement(elementName, id, tags,
|
||||
|
||||
Reference in New Issue
Block a user