diff --git a/Assets/AddressableAssetsData/Windows/addressables_content_state.bin b/Assets/AddressableAssetsData/Windows/addressables_content_state.bin
index 72bc4be39..122d91410 100644
Binary files a/Assets/AddressableAssetsData/Windows/addressables_content_state.bin and b/Assets/AddressableAssetsData/Windows/addressables_content_state.bin differ
diff --git a/Assets/Framework/Tool/AnimMapBaker/Script/AnimMapBaker.cs b/Assets/Framework/Tool/AnimMapBaker/Script/AnimMapBaker.cs
deleted file mode 100644
index f58e2b20a..000000000
--- a/Assets/Framework/Tool/AnimMapBaker/Script/AnimMapBaker.cs
+++ /dev/null
@@ -1,211 +0,0 @@
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-using UnityEditor;
-using System.Linq;
-using System.IO;
-using System.Threading.Tasks;
-
-///
-/// 保存需要烘焙的动画的相关数据
-///
-public struct AnimData
-{
- #region 字段
-
- public int vertexCount;
- public int mapWidth;
- public List animClips;
- public string name;
-
- private Animation animation;
- private SkinnedMeshRenderer skin;
-
- #endregion
-
- public AnimData(Animation anim, SkinnedMeshRenderer smr, string goName)
- {
- vertexCount = smr.sharedMesh.vertexCount;
- mapWidth = Mathf.NextPowerOfTwo(vertexCount);
- animClips = new List(anim.Cast());
- animation = anim;
- skin = smr;
- name = goName;
- }
-
- #region 方法
-
- public void AnimationPlay(string animName)
- {
- this.animation.Play(animName);
- }
-
- public void SampleAnimAndBakeMesh(ref Mesh m)
- {
- this.SampleAnim();
- this.BakeMesh(ref m);
- }
-
- private void SampleAnim()
- {
- if (this.animation == null)
- {
- Debug.LogError("animation is null!!");
- return;
- }
-
- this.animation.Sample();
- }
-
- private void BakeMesh(ref Mesh m)
- {
- if (this.skin == null)
- {
- Debug.LogError("skin is null!!");
- return;
- }
-
- this.skin.BakeMesh(m);
- }
-
-
- #endregion
-
-}
-
-///
-/// 烘焙后的数据
-///
-public struct BakedData
-{
- #region 字段
-
- public string name;
- public float animLen;
- public byte[] rawAnimMap;
- public int animMapWidth;
- public int animMapHeight;
-
- #endregion
-
- public BakedData(string name, float animLen, Texture2D animMap)
- {
- this.name = name;
- this.animLen = animLen;
- this.animMapHeight = animMap.height;
- this.animMapWidth = animMap.width;
- this.rawAnimMap = animMap.GetRawTextureData();
- }
-}
-
-///
-/// 烘焙器
-///
-public class AnimMapBaker{
-
- #region 字段
-
- private AnimData? animData = null;
- private List vertices = new List();
- private Mesh bakedMesh;
-
- private List bakedDataList = new List();
-
- #endregion
-
- #region 方法
-
- public void SetAnimData(GameObject go)
- {
- if(go == null)
- {
- Debug.LogError("go is null!!");
- return;
- }
-
- Animation anim = go.GetComponent();
- SkinnedMeshRenderer smr = go.GetComponentInChildren();
-
- if(anim == null || smr == null)
- {
- Debug.LogError("anim or smr is null!!");
- return;
- }
- this.bakedMesh = new Mesh();
- this.animData = new AnimData(anim, smr, go.name);
- }
- int animNum;
- public List Bake()
- {
- if(this.animData == null)
- {
- Debug.LogError("bake data is null!!");
- return this.bakedDataList;
- }
- //每一个动作都生成一个动作图
- for(int i = 0; i < this.animData.Value.animClips.Count; i++)
- {
- animNum = i;
- if (!this.animData.Value.animClips[i].clip.legacy)
- {
-
- Debug.LogError(string.Format("{0} is not legacy!!", this.animData.Value.animClips[i].clip.name));
- continue;
- }
-
- BakePerAnimClip(this.animData.Value.animClips[i]);
- }
-
- return this.bakedDataList;
- }
-
- private void BakePerAnimClip(AnimationState curAnim)
- {
- int curClipFrame = 0;
- float sampleTime = 0;
- float perFrameTime = 0;
-
- curClipFrame = Mathf.ClosestPowerOfTwo((int)(curAnim.clip.frameRate * curAnim.length));
- perFrameTime = curAnim.length / curClipFrame; ;
-
- Texture2D animMap = new Texture2D(this.animData.Value.mapWidth, curClipFrame, TextureFormat.RGBAHalf, false);
- animMap.name = string.Format("{0}_{1}.animMap", this.animData.Value.name, curAnim.name);
- this.animData.Value.AnimationPlay(curAnim.name);
-
- for (int i = 0; i < curClipFrame; i++)
- {
- //EditorUtility.DisplayCancelableProgressBar("转换进度", $"正在处理第 {i}/{curClipFrame} 步", (float)i / curClipFrame);
- curAnim.time = sampleTime;
-
- this.animData.Value.SampleAnimAndBakeMesh(ref this.bakedMesh);
-
- for(int j = 0; j < this.bakedMesh.vertexCount; j++)
- {
- //EditorUtility.DisplayCancelableProgressBar("转换进度", $"正在处理第 {i}/{curClipFrame} 步 {j}/{bakedMesh.vertexCount}点", (float)i / curClipFrame);
- Vector3 vertex = this.bakedMesh.vertices[j];
- animMap.SetPixel(j, i, new Color(vertex.x, vertex.y, vertex.z));
- }
-
- sampleTime += perFrameTime;
- }
- //EditorUtility.ClearProgressBar();
-
- animMap.Apply();
- Debug.Log($"{animNum}/{animData.Value.animClips.Count-1}");
- if (animNum== animData.Value.animClips.Count - 1)
- {
- Debug.Log("转换完成");
- }
-
- this.bakedDataList.Add(new BakedData(animMap.name, curAnim.clip.length, animMap));
- }
-
- #endregion
-
-
- #region 属性
-
-
- #endregion
-
-}
diff --git a/Assets/HybridCLR.meta b/Assets/HybridCLR.meta
new file mode 100644
index 000000000..1f01f7fce
--- /dev/null
+++ b/Assets/HybridCLR.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 5a520c4e76d2b814486e83f26b6b7b30
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/HybridCLR/Generate.meta b/Assets/HybridCLR/Generate.meta
new file mode 100644
index 000000000..1a01696db
--- /dev/null
+++ b/Assets/HybridCLR/Generate.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 27e65cf569bb5db478bbd584339f4230
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/HybridCLR/Generate/AOTGenericReferences.cs b/Assets/HybridCLR/Generate/AOTGenericReferences.cs
new file mode 100644
index 000000000..98ffd8ad9
--- /dev/null
+++ b/Assets/HybridCLR/Generate/AOTGenericReferences.cs
@@ -0,0 +1,1022 @@
+using System.Collections.Generic;
+public class AOTGenericReferences : UnityEngine.MonoBehaviour
+{
+
+ // {{ AOT assemblies
+ public static readonly IReadOnlyList PatchedAOTAssemblyList = new List
+ {
+ "DOTween.dll",
+ "Newtonsoft.Json.dll",
+ "System.Core.dll",
+ "System.dll",
+ "Unity.Addressables.dll",
+ "Unity.InputSystem.dll",
+ "Unity.ResourceManager.dll",
+ "UnityEngine.AssetBundleModule.dll",
+ "UnityEngine.CoreModule.dll",
+ "mscorlib.dll",
+ "spine-unity.dll",
+ };
+ // }}
+
+ // {{ constraint implement type
+ // }}
+
+ // {{ AOT generic types
+ // DG.Tweening.Core.DOGetter
+ // DG.Tweening.Core.DOGetter
+ // DG.Tweening.Core.DOGetter
+ // DG.Tweening.Core.DOGetter
+ // DG.Tweening.Core.DOGetter
+ // DG.Tweening.Core.DOGetter
+ // DG.Tweening.Core.DOGetter