This commit is contained in:
2023-11-08 13:41:11 +08:00
parent 3b8bf5a940
commit d691f8cde8
24 changed files with 736 additions and 21 deletions

View File

@@ -4,6 +4,9 @@
#### 版本
* new
添加编辑器阶段快捷生成、移除脚本
添加基本几何体拼接算法
* 0.2.1
修改:事件扩展 InvokeConservative 从ExtendType类中移到了MacroEvent

8
Runtime/Generation.meta Normal file
View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 076c2a8219fca8649bdb0bfae5a3aac5
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 5691b4e940f93e74cbac35f477e10af7
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,219 @@
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEditor;
using UnityEngine;
using XericLibrary.Runtime.MacroLibrary;
using XericLibrary.Runtime.Type;
using static UnityEngine.GraphicsBuffer;
namespace XericLibrary.Runtime.Generation
{
public class BaseGenerate<T> : WeaklyMonoBase
where T : WeaklyObject
{
#region <EFBFBD>ֶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
[SerializeField]
private T GenerationCompute;
#endregion
#region <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#endregion
#region <EFBFBD><EFBFBD><EFBFBD>ݾ<EFBFBD>̬
/// <summary>
/// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// <code>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MonoBehaviours <20><><EFBFBD><EFBFBD>ͨ C# <20><><EFBFBD><EFBFBD><EFBFBD>ֶκ<D6B6><CEBA><EFBFBD><EFBFBD>ԣ<EFBFBD>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Unity <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Transform<72><6D>Rigidbody <20>ȣ<EFBFBD><C8A3>ĸ<EFBFBD><C4B8>ƣ<EFBFBD>
/// <20><>Ϊ<EFBFBD><CEAA>Щ<EFBFBD><D0A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶκ<D6B6><CEBA><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>˽<EFBFBD>еġ<D0B5>
/// </code>
/// </summary>
/// <typeparam name="COMPONENT"></typeparam>
/// <param name="SOURCE"></param>
/// <param name="CopyTo"></param>
/// <returns></returns>
public static COMPONENT CopyComponentToAnother<COMPONENT>(COMPONENT source, COMPONENT copied)
where COMPONENT : Component
{
if(source == null || copied == null)
{
Debug.LogWarning("Source or target component is null. Cannot copy parameters.");
return null;
}
System.Type type = typeof(T);
var fields = type.GetFields();
var properties = type.GetProperties();
// <20><><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD>ǹ<EFBFBD><C7B9><EFBFBD><EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>
foreach(var field in fields)
{
if(!field.IsStatic)
{
field.SetValue(copied, field.GetValue(source));
}
}
foreach(var property in properties)
{
if(property.CanWrite)
{
property.SetValue(copied, property.GetValue(source, null), null);
}
}
return copied;
}
/// <summary>
/// <20>Ӹ<EFBFBD><D3B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD>¡һ<C2A1><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// <code>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>
/// </code>
/// </summary>
/// <typeparam name="COMPONENT"></typeparam>
/// <param name="source"></param>
/// <param name="copied"></param>
/// <returns></returns>
public static COMPONENT CopyComponentToNew<COMPONENT>(GameObject source, out GameObject copied)
where COMPONENT : Component
{
Component[] allComponents = source.GetComponents<Component>();
copied = Instantiate(source);
foreach(Component component in copied.GetComponents<Component>())
{
if(component.GetType() != typeof(COMPONENT))
{
#if UNITY_EDITOR
if(PlayModeState != PlayModeStateChange.EnteredPlayMode)
DestroyImmediate(component);
else
Destroy(component);
#else
Destroy(component);
#endif
}
}
return copied.GetComponent<COMPONENT>();
}
#endregion
#region <EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><EFBFBD><EFBFBD>
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>
/// </summary>
protected GameObject CreatOrGetGameNode(string name, Transform parent = null)
{
var targetParent = parent == null ? transform : parent;
var node = targetParent.GetChildren()
.Where(a => a.name == name)
.Select(a => a.gameObject)
.FirstOrDefault();
if(node != null)
return node;
node = new GameObject(name);
node.transform.parent = targetParent;
return node;
}
/// <summary>
/// ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>Ӿ<EFBFBD><D3BE><EFBFBD>
/// </summary>
protected void DieSonless(Transform transform)
{
foreach(var target in transform.GetChildren().ToList())
{
#if UNITY_EDITOR
if(PlayModeState != PlayModeStateChange.EnteredPlayMode)
DestroyImmediate(target.gameObject);
else
Destroy(target.gameObject);
#else
Destroy(target.gameObject);
#endif
}
}
/// <summary>
/// ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>Ӿ<EFBFBD><D3BE><EFBFBD>
/// </summary>
protected void DieSonless(GameObject target)
{
DieSonless(target.transform);
}
/// <summary>
/// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>ж<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD>
/// </summary>
/// <typeparam name="COMPONENT"></typeparam>
/// <param name="transform">Ҫ<><D2AA>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>Ľڵ<C4BD></param>
/// <param name="name"><3E><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
/// <param name="MaxStackDepth"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
protected void ExtractAllComponent<COMPONENT>(Transform transform, string name, int MaxStackDepth = 20)
where COMPONENT : Component
{
var root = CreatOrGetGameNode(name, transform);
DieSonless(root);
int index = 0;
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
foreach(var comp in transform.GetComponentsInRecursionChildren<COMPONENT>(MaxStackDepth))
{
CreatOrGetGameNode($"component.{index++}", root.transform);
CopyComponentToNew<COMPONENT>(comp.gameObject, out var copiedObj);
copiedObj.transform.parent = root.transform;
}
}
#endregion
}
#if UNITY_EDITOR
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>inspecter<65>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
public class BaseGenerateEditor : Editor
{
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
if(GUILayout.Button("<22><><EFBFBD>ɸ<EFBFBD><C9B8><EFBFBD>"))
UpdateGen();
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
protected void UpdateGen()
{
var script = (StairsGenerate)target;
}
}
#endif
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: d1b51df505c013648929cef9785bce3d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,73 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using XericLibrary.Runtime.MacroLibrary;
using XericLibrary.Runtime.Type;
namespace XericLibrary.Runtime.Generation
{
/// <summary>
/// <20><><EFBFBD>ɽڵ㴿<DAB5><E3B4BF><EFBFBD><EFBFBD>
/// </summary>
public class GenMethod : BaseGenerate<WeaklyObject>
{
public string NewNodeName = "GEN_NODE_METHOD";
}
#if UNITY_EDITOR
[CustomEditor(typeof(GenMethod))]
public class GenMethodEditor : BaseGenerateEditor
{
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
var script = (GenMethod)target;
// <20><>Inspector<6F><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ť
if(GUILayout.Button($"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ײ<EFBFBD>嵽{script.NewNodeName}"))
GenMethod.CopyComponentToNew<Collider>(script.gameObject, out var outobj);
if(GUILayout.Button("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD>"))
DestroyAllMesh(script.transform);
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
public void DestroyAllMesh(Transform transform)
{
MeshFilter fl = null;
MeshRenderer mr;
Action<Component> destroycomponent = comp =>
{
#if UNITY_EDITOR
if(fl != null)
DestroyImmediate(fl);
#else
if(fl != null)
Destroy(fl);
#endif
};
foreach(var item in transform.GetChildrenRecursion(10))
{
Debug.Log(item.name);
fl = item.GetComponent<MeshFilter>();
destroycomponent(fl);
mr = item.GetComponent<MeshRenderer>();
destroycomponent(mr);
}
}
}
#endif
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: d47c476cb54b0384f9a5ed853a81c637
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,43 @@
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using XericLibrary.Runtime.Type;
using static UnityEngine.GraphicsBuffer;
namespace XericLibrary.Runtime.Generation
{
/// <summary>
/// <20><><EFBFBD><EFBFBD>¥<EFBFBD><C2A5>
/// </summary>
public class StairsGenerate : BaseGenerate<StairsGeneration>
{
}
#if UNITY_EDITOR
[CustomEditor(typeof(StairsGenerate))]
public class ButtonUIGuideEditor : BaseGenerateEditor
{
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
// <20><>Inspector<6F><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ť
if(GUILayout.Button("<22><>̬<EFBFBD><CCAC><EFBFBD><EFBFBD>"))
{
}
}
}
#endif
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 0f074c0e944db2143840f96a053a42e9
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 652abfb64baca2b489235a2124321cde
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,18 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XericLibrary.Runtime.Type;
namespace XericLibrary.Runtime.Generation
{
/// <summary>
/// ƽ<><C6BD><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD>ײ
/// </summary>
[Serializable]
public class PlaneWithHoleGeneration : WeaklyObject
{
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 8024ed59544f0b346b46ff0e0d86457a
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,18 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XericLibrary.Runtime.Type;
namespace XericLibrary.Runtime.Generation
{
/// <summary>
/// <20><><EFBFBD>ΰ<EFBFBD>Χ<EFBFBD><EFBFBD>ף<EFBFBD><D7A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׵ķ<D7B5><C4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
[Serializable]
public class RectangularSurroundWithHoleGeneration : WeaklyObject
{
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 0973eb189e2933541a254fc92cbb3476
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,32 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XericLibrary.Runtime.Type;
namespace XericLibrary.Runtime.Generation
{
/// <summary>
/// <20><><EFBFBD><EFBFBD>¥<EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD><EFBFBD><EFBFBD>ײ<EFBFBD><D7B2>
/// <20><><EFBFBD>ɿ<EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>¥<EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD><CCB6><EFBFBD><EFBFBD>׵<EFBFBD>¥<EFBFBD><C2A5>
/// </summary>
[Serializable]
public class StairsGeneration : WeaklyObject
{
#region <EFBFBD>ֶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//public List<>
#endregion
#region ̨<EFBFBD>ײ<EFBFBD><EFBFBD><EFBFBD>
//public struct StairsParameter
//{
//}
#endregion
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 50cfea13c93ae974dbd744c96da5900d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -14,7 +14,8 @@ namespace XericLibrary.Runtime.MacroLibrary
#region ϴ<EFBFBD><EFBFBD><EFBFBD>
/// <summary>
/// Fisher-Yatesϴ<73><CFB4><EFBFBD><EFBFBD><E3B7A8>ʱ<EFBFBD><EFBFBD>Ӷ<EFBFBD>ΪO(n*n),<2C>ռ<D5BC>Ӷ<EFBFBD>ΪO(n)
/// Fisher-Yatesϴ<73><CFB4><EFBFBD><EFBFBD><E3B7A8>ʱ<EFBFBD><EFBFBD>Ӷ<EFBFBD>ΪO(n*n),<2C>ռ<D5BC>Ӷ<EFBFBD>ΪO(n);
/// ȱ<><C8B1><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>0<EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD><EFBFBD>ʻ<EFBFBD><CABB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="length"><3E><>ѡ<EFBFBD><D1A1>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
/// <param name="select"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
@@ -39,6 +40,44 @@ namespace XericLibrary.Runtime.MacroLibrary
return res;
}
/// <summary>
/// <20>ظ<EFBFBD><D8B8><EFBFBD>ϴ<EFBFBD><CFB4>
/// </summary>
/// <param name="length"></param>
/// <param name="select"></param>
/// <param name="repet"></param>
/// <returns></returns>
public static List<int> FisherYatesShuffle(int length, int select, int repet)
{
if(select > length)
throw new ArgumentOutOfRangeException("<22>ڽ<EFBFBD><DABD><EFBFBD>ϴ<EFBFBD><CFB4>ʱ<EFBFBD><CAB1>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>ӵ<EFBFBD>е<EFBFBD><D0B5><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><E0A3AC><EFBFBD>Dz<EFBFBD><C7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ<EFBFBD>");
#if UNITY_EDITOR
if(repet > 100)
Debug.LogError(<>Ƶ<EFBFBD><C6B5>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>̫<EFBFBD><CCAB>(> 100)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
#endif
repet = Math.Clamp(repet, 1, 100);
var random = new System.Random();
List<int> arr = Enumerable.Range(0, length).ToList();
List<int> res = new List<int>();
for(int j = 0; j < repet; j++)
{
for(int i = 0; i < length; i++)
{
int k = random.Next(arr.Count);
res.Add(arr[k]);
arr.RemoveAt(k);
}
arr = res.ToList();
res.Clear();
}
return arr;
}
/// <summary>
/// <20><>ˮ<EFBFBD>س<EFBFBD><D8B3><EFBFBD><EFBFBD><EFBFBD><E3B7A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̰߳<DFB3>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>ơ<EFBFBD>
/// </summary>

View File

@@ -99,19 +99,42 @@ namespace XericLibrary.Runtime.MacroLibrary
/// <returns></returns>
public static IEnumerable<Transform> GetChildren(this Transform trans)
{
#if UNITY_EDITOR
if(trans == null)
throw new Exception("<22><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD>Աʱ<D4B1><CAB1><EFBFBD>ڵ<EFBFBD>Ϊ<EFBFBD><CEAA>");
#endif
for(int i = 0; i < trans.childCount; i++)
{
yield return trans.GetChild(i);
}
}
/// <summary>
/// <20>ݹ<EFBFBD><DDB9><EFBFBD>ȡһ<C8A1><D2BB><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5>ӳ<EFBFBD>Ա
/// </summary>
/// <param name="trans"></param>
/// <param name="recursion"><3E>ݹ<EFBFBD><DDB9><EFBFBD><EFBFBD>ȣ<EFBFBD>1<EFBFBD><31>ʾ<EFBFBD><CABE><EFBFBD>ڵ<EFBFBD>һ<EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD>Ѱ<EFBFBD>ң<EFBFBD>2<EFBFBD><32>ʾ<EFBFBD>ڰ<EFBFBD><DAB0><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>г<EFBFBD>Ա<EFBFBD><D4B1>Ѱ<EFBFBD><D1B0></param>
/// <returns></returns>
public static IEnumerable<Transform> GetChildrenRecursion(this Transform trans, int recursion = 1)
{
int newdepth = recursion - 1;
foreach(var child in trans.GetChildren())
{
if(newdepth > 0)
foreach(var item in child.GetChildrenRecursion(newdepth))
yield return item;
yield return child;
}
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// ע<><D7A2><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2>ҡ<EFBFBD>
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="trans"></param>
/// <param name="recursion"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD>0<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӽ<EFBFBD><EFBFBD><EFBFBD>Ѱ<EFBFBD>ң<EFBFBD>1<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD>Ӽ<EFBFBD><EFBFBD><EFBFBD>Ѱ<EFBFBD>ң<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӽ<EFBFBD><EFBFBD><EFBFBD>Ѱ<EFBFBD>ң<EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
/// <param name="recursion"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD>1<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӽ<EFBFBD><EFBFBD><EFBFBD>Ѱ<EFBFBD>ң<EFBFBD>2<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD>Ӽ<EFBFBD><EFBFBD><EFBFBD>Ѱ<EFBFBD>ң<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӽ<EFBFBD><EFBFBD><EFBFBD>Ѱ<EFBFBD>ң<EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
/// <returns></returns>
public static IEnumerable<T> GetComponentsInRecursionChildren<T>(this Transform trans, int recursion = 1)
where T : Component

View File

@@ -0,0 +1,44 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace XericLibrary.Runtime.MacroLibrary
{
/// <summary>
/// <20><EFBFBD><E4BBBB>
/// </summary>
public static class MacroTransform
{
}
/// <summary>
/// <20><EFBFBD><E4BBBB>װ<EFBFBD><D7B0>
/// </summary>
public class Conversion
{
#region <EFBFBD>ֶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// <summary>
/// Ŀ<><C4BF><EFBFBD><EFBFBD><E4BBBB><EFBFBD><EFBFBD>
/// </summary>
private Transform transform;
#endregion
#region ʹ<EFBFBD>÷<EFBFBD><EFBFBD><EFBFBD>
public Conversion(Transform target)
{
transform = target;
}
#endregion
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: c0fab5c35f2f4c340aa0f55f743eec10
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -31,7 +31,6 @@ namespace XericLibrary.Runtime.SpatialTransform
var trackPos = TrackTarget.position;
trackPos.y = 0;
transform.position = TrackTarget.position + TrackTarget.rotation * Offset;
transform.rotation = Quaternion.LookRotation(pos - trackPos);

26
Runtime/Type/Quadtree.cs Normal file
View File

@@ -0,0 +1,26 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace XericLibrary.Runtime.Type
{
/// <summary>
/// <20>IJ<EFBFBD><C4B2><EFBFBD>
/// </summary>
public class Quadtree : WeaklyObject
{
}
/// <summary>
/// <20>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD>ڵ<EFBFBD>
/// </summary>
public class QuadtreeNode : WeaklyObject
{
#region <EFBFBD>ֶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#endregion
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 8f8ad109e8af82e40bfad6047e7097ea
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -13,36 +13,102 @@ namespace XericLibrary.Runtime.Type
{
#region <EFBFBD>ֶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// <summary>
/// <20><>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>
/// </summary>
private Vector3 history_Position;
/// <summary>
/// <20><>ʷ<EFBFBD><CAB7>ת
/// </summary>
private Quaternion history_Rotation;
/// <summary>
/// <20><>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>
/// </summary>
private Vector3 history_Scale;
/// <summary>
/// <20><>ȡ<EFBFBD><C8A1>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>
/// </summary>
public Vector3 HistoryPosition => history_Position;
public Vector3 HistoryPosition => last_LocalPosition;
/// <summary>
/// <20><>ȡ<EFBFBD><C8A1>ʷ<EFBFBD><CAB7>ת
/// </summary>
public Quaternion HistoryRotation => history_Rotation;
public Quaternion HistoryRotation => last_LocalRotation;
/// <summary>
/// <20><>ȡ<EFBFBD><C8A1>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>
/// </summary>
public Vector3 HistoryScale => history_Scale;
public Vector3 HistoryScale => last_LocalScale;
/// <summary>
/// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
private Vector3 initial_WorldPosition;
/// <summary>
/// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת
/// </summary>
private Quaternion initial_WorldRotation;
/// <summary>
/// <20><>һ֡<D2BB><D6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
private Vector3 last_WorldPosition;
/// <summary>
/// <20><>һ֡<D2BB><D6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת
/// </summary>
private Quaternion last_WorldRotation;
/// <summary>
/// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
/// </summary>
private Vector3 initial_LocalPosition;
/// <summary>
/// <20><>ʼ<EFBFBD><CABC>ת
/// </summary>
private Quaternion initial_LocalRotation;
/// <summary>
/// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
/// </summary>
private Vector3 initial_LocalScale;
/// <summary>
/// <20><>һ֡<D2BB><D6A1><EFBFBD><EFBFBD>
/// </summary>
private Vector3 last_LocalPosition;
/// <summary>
/// <20><>һ֡<D2BB><D6A1>ת
/// </summary>
private Quaternion last_LocalRotation;
/// <summary>
/// <20><>һ֡<D2BB><D6A1><EFBFBD><EFBFBD>
/// </summary>
private Vector3 last_LocalScale;
/// <summary>
/// ʹ<>ܸ<EFBFBD><DCB8><EFBFBD><EFBFBD><EFBFBD>ʷ<EFBFBD>
/// </summary>
private bool enableUpdateLastTransform;
#endregion
#region <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
protected virtual void Start()
{
initial_LocalPosition = transform.localPosition;
initial_LocalRotation = transform.localRotation;
initial_LocalScale = transform.localScale;
}
protected virtual void Update()
{
}
#endregion
#region <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
#endregion
}
}