Signed-off-by: TRAfoer <lhf190@outlook.com>
This commit is contained in:
7
Assets/Assets.sln.meta
Normal file
7
Assets/Assets.sln.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 459a7ea4ef65c664482b6377848ac5c3
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -2,6 +2,7 @@ using UnityEngine;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System;
|
||||
|
||||
namespace Dreamteck
|
||||
{
|
||||
@@ -28,32 +29,64 @@ namespace Dreamteck
|
||||
int[] newTris = new int[startTriangleIndex + nbFaces * 6];
|
||||
for (int i = 0; i < startTriangleIndex; i++) newTris[i] = triangles[i];
|
||||
triangles = newTris;
|
||||
} else triangles = new int[nbFaces * 6];
|
||||
}
|
||||
else triangles = new int[nbFaces * 6];
|
||||
}
|
||||
int g = x + 1;
|
||||
int t = startTriangleIndex;
|
||||
for (int face = 0; face < nbFaces + z - 2; face++)
|
||||
|
||||
// for (int face = 0; face < nbFaces + z - 2; face++)
|
||||
// {
|
||||
// if ((float)(face + 1) % (float)g == 0f && face != 0) face++;
|
||||
// if (flip)
|
||||
// {
|
||||
// triangles[t++] = face + x + 1 + startVertex;
|
||||
// triangles[t++] = face + 1 + startVertex;
|
||||
// triangles[t++] = face + startVertex;
|
||||
|
||||
// triangles[t++] = face + x + 1 + startVertex;
|
||||
// triangles[t++] = face + x + 2 + startVertex;
|
||||
// triangles[t++] = face + 1 + startVertex;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// triangles[t++] = face + startVertex;
|
||||
// triangles[t++] = face + 1 + startVertex;
|
||||
// triangles[t++] = face + x + 1 + startVertex;
|
||||
|
||||
// triangles[t++] = face + 1 + startVertex;
|
||||
// triangles[t++] = face + x + 2 + startVertex;
|
||||
// triangles[t++] = face + x + 1 + startVertex;
|
||||
// }
|
||||
// }
|
||||
|
||||
int index = 0;
|
||||
for (int row = 0; row < z - 1; row++)
|
||||
{
|
||||
if ((float)(face + 1) % (float)g == 0f && face != 0) face++;
|
||||
for (int col = 0; col < x; col++)
|
||||
{
|
||||
int i = row * (x + 1) + col;
|
||||
|
||||
if (flip)
|
||||
{
|
||||
triangles[t++] = face + x + 1 + startVertex;
|
||||
triangles[t++] = face + 1 + startVertex;
|
||||
triangles[t++] = face + startVertex;
|
||||
triangles[index++] = i + x + 1;
|
||||
triangles[index++] = i + 1;
|
||||
triangles[index++] = i;
|
||||
|
||||
triangles[t++] = face + x + 1 + startVertex;
|
||||
triangles[t++] = face + x + 2 + startVertex;
|
||||
triangles[t++] = face + 1 + startVertex;
|
||||
triangles[index++] = i + x + 1;
|
||||
triangles[index++] = i + x + 2;
|
||||
triangles[index++] = i + 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
triangles[t++] = face + startVertex;
|
||||
triangles[t++] = face + 1 + startVertex;
|
||||
triangles[t++] = face + x + 1 + startVertex;
|
||||
triangles[index++] = i + startVertex;
|
||||
triangles[index++] = i + 1 + startVertex;
|
||||
triangles[index++] = i + x + 1 + startVertex;
|
||||
|
||||
triangles[t++] = face + 1 + startVertex;
|
||||
triangles[t++] = face + x + 2 + startVertex;
|
||||
triangles[t++] = face + x + 1 + startVertex;
|
||||
triangles[index++] = i + 1 + startVertex;
|
||||
triangles[index++] = i + x + 2 + startVertex;
|
||||
triangles[index++] = i + x + 1 + startVertex;
|
||||
}
|
||||
}
|
||||
}
|
||||
return triangles;
|
||||
@@ -61,39 +94,83 @@ namespace Dreamteck
|
||||
|
||||
public static void CalculateTangents(TS_Mesh mesh)
|
||||
{
|
||||
int vertexCount = mesh.vertexCount;
|
||||
int triangleCount = mesh.triangles.Length / 3;
|
||||
if (mesh.tangents.Length != mesh.vertexCount) mesh.tangents = new Vector4[mesh.vertexCount];
|
||||
if (tan1.Length != mesh.vertexCount)
|
||||
|
||||
// 优化1:数组重用与按需分配
|
||||
if (tan1.Length < vertexCount)
|
||||
{
|
||||
tan1 = new Vector3[mesh.vertexCount];
|
||||
tan2 = new Vector3[mesh.vertexCount];
|
||||
tan1 = new Vector3[vertexCount];
|
||||
tan2 = new Vector3[vertexCount];
|
||||
}
|
||||
else
|
||||
{
|
||||
// 重用数组但需要清零
|
||||
Array.Clear(tan1, 0, vertexCount);
|
||||
Array.Clear(tan2, 0, vertexCount);
|
||||
}
|
||||
|
||||
int tri = 0;
|
||||
// 优化2:避免重复访问属性
|
||||
Vector3[] vertices = mesh.vertices;
|
||||
Vector2[] uvs = mesh.uv;
|
||||
Vector3[] normals = mesh.normals;
|
||||
int[] triangles = mesh.triangles;
|
||||
|
||||
// 优化3:预先检查数组长度
|
||||
if (uvs.Length < vertexCount || normals.Length < vertexCount)
|
||||
{
|
||||
Debug.LogError("UV or Normal array size mismatch");
|
||||
return;
|
||||
}
|
||||
|
||||
// 优化4:缓存变量减少重复计算
|
||||
Vector3 edge1 = Vector3.zero;
|
||||
Vector3 edge2 = Vector3.zero;
|
||||
Vector2 uvEdge1 = Vector2.zero;
|
||||
Vector2 uvEdge2 = Vector2.zero;
|
||||
|
||||
// 优化5:循环展开减少分支预测失败
|
||||
for (int i = 0; i < triangleCount; i++)
|
||||
{
|
||||
int i1 = mesh.triangles[tri];
|
||||
int i2 = mesh.triangles[tri + 1];
|
||||
int i3 = mesh.triangles[tri + 2];
|
||||
int triIndex = i * 3;
|
||||
int i1 = triangles[triIndex];
|
||||
int i2 = triangles[triIndex + 1];
|
||||
int i3 = triangles[triIndex + 2];
|
||||
|
||||
float x1 = mesh.vertices[i2].x - mesh.vertices[i1].x;
|
||||
float x2 = mesh.vertices[i3].x - mesh.vertices[i1].x;
|
||||
float y1 = mesh.vertices[i2].y - mesh.vertices[i1].y;
|
||||
float y2 = mesh.vertices[i3].y - mesh.vertices[i1].y;
|
||||
float z1 = mesh.vertices[i2].z - mesh.vertices[i1].z;
|
||||
float z2 = mesh.vertices[i3].z - mesh.vertices[i1].z;
|
||||
// 计算边向量
|
||||
edge1.x = vertices[i2].x - vertices[i1].x;
|
||||
edge1.y = vertices[i2].y - vertices[i1].y;
|
||||
edge1.z = vertices[i2].z - vertices[i1].z;
|
||||
|
||||
float s1 = mesh.uv[i2].x - mesh.uv[i1].x;
|
||||
float s2 = mesh.uv[i3].x - mesh.uv[i1].x;
|
||||
float t1 = mesh.uv[i2].y - mesh.uv[i1].y;
|
||||
float t2 = mesh.uv[i3].y - mesh.uv[i1].y;
|
||||
edge2.x = vertices[i3].x - vertices[i1].x;
|
||||
edge2.y = vertices[i3].y - vertices[i1].y;
|
||||
edge2.z = vertices[i3].z - vertices[i1].z;
|
||||
|
||||
float div = s1 * t2 - s2 * t1;
|
||||
float r = div == 0f ? 0f : 1f / div;
|
||||
// 计算UV差
|
||||
uvEdge1.x = uvs[i2].x - uvs[i1].x;
|
||||
uvEdge1.y = uvs[i2].y - uvs[i1].y;
|
||||
|
||||
Vector3 sdir = new Vector3((t2 * x1 - t1 * x2) * r, (t2 * y1 - t1 * y2) * r, (t2 * z1 - t1 * z2) * r);
|
||||
Vector3 tdir = new Vector3((s1 * x2 - s2 * x1) * r, (s1 * y2 - s2 * y1) * r, (s1 * z2 - s2 * z1) * r);
|
||||
uvEdge2.x = uvs[i3].x - uvs[i1].x;
|
||||
uvEdge2.y = uvs[i3].y - uvs[i1].y;
|
||||
|
||||
// 优化6:避免除零检查的分支预测
|
||||
float div = uvEdge1.x * uvEdge2.y - uvEdge2.x * uvEdge1.y;
|
||||
float r = Mathf.Abs(div) < Mathf.Epsilon ? 0f : 1f / div;
|
||||
|
||||
// 计算切线向量
|
||||
Vector3 sdir = new Vector3(
|
||||
(uvEdge2.y * edge1.x - uvEdge1.y * edge2.x) * r,
|
||||
(uvEdge2.y * edge1.y - uvEdge1.y * edge2.y) * r,
|
||||
(uvEdge2.y * edge1.z - uvEdge1.y * edge2.z) * r
|
||||
);
|
||||
|
||||
Vector3 tdir = new Vector3(
|
||||
(uvEdge1.x * edge2.x - uvEdge2.x * edge1.x) * r,
|
||||
(uvEdge1.x * edge2.y - uvEdge2.x * edge1.y) * r,
|
||||
(uvEdge1.x * edge2.z - uvEdge2.x * edge1.z) * r
|
||||
);
|
||||
|
||||
// 累加到顶点
|
||||
tan1[i1] += sdir;
|
||||
tan1[i2] += sdir;
|
||||
tan1[i3] += sdir;
|
||||
@@ -101,22 +178,30 @@ namespace Dreamteck
|
||||
tan2[i1] += tdir;
|
||||
tan2[i2] += tdir;
|
||||
tan2[i3] += tdir;
|
||||
|
||||
tri += 3;
|
||||
}
|
||||
|
||||
for (int i = 0; i < mesh.vertexCount; i++)
|
||||
// 优化7:确保切线数组已分配
|
||||
if (mesh.tangents == null || mesh.tangents.Length != vertexCount)
|
||||
{
|
||||
Vector3 n = mesh.normals[i];
|
||||
Vector3 t = tan1[i];
|
||||
Vector3.OrthoNormalize(ref n, ref t);
|
||||
mesh.tangents[i].x = t.x;
|
||||
mesh.tangents[i].y = t.y;
|
||||
mesh.tangents[i].z = t.z;
|
||||
mesh.tangents[i].w = (Vector3.Dot(Vector3.Cross(n, t), tan2[i]) < 0.0f) ? -1.0f : 1.0f;
|
||||
}
|
||||
mesh.tangents = new Vector4[vertexCount];
|
||||
}
|
||||
|
||||
// 优化8:手动Gram-Schmidt正交化
|
||||
for (int i = 0; i < vertexCount; i++)
|
||||
{
|
||||
Vector3 n = normals[i];
|
||||
Vector3 t = tan1[i];
|
||||
|
||||
// 手动正交化 (比Vector3.OrthoNormalize更高效)
|
||||
t = (t - n * Vector3.Dot(n, t)).normalized;
|
||||
|
||||
// 计算副法线方向
|
||||
Vector3 b = Vector3.Cross(n, t);
|
||||
float w = (Vector3.Dot(b, tan2[i]) < 0.0f) ? -1.0f : 1.0f;
|
||||
|
||||
mesh.tangents[i] = new Vector4(t.x, t.y, t.z, w);
|
||||
}
|
||||
}
|
||||
public static void MakeDoublesided(Mesh input)
|
||||
{
|
||||
Vector3[] vertices = input.vertices;
|
||||
|
||||
@@ -49,10 +49,10 @@ MonoBehaviour:
|
||||
m_addressable:
|
||||
m_atlas:
|
||||
m_fileSize: 26536
|
||||
m_assetChangeTS: 1753541197
|
||||
m_fileInfoReadTS: 1753541199
|
||||
m_fileWriteTS: 1753541197
|
||||
m_cachefileWriteTS: 1753541197
|
||||
m_assetChangeTS: 1753713201
|
||||
m_fileInfoReadTS: 1753713439
|
||||
m_fileWriteTS: 1753713200
|
||||
m_cachefileWriteTS: 1753713200
|
||||
refreshStamp: 2
|
||||
UseGUIDsList:
|
||||
- guid: cd62869af1bc6534d83427c72b66bb9f
|
||||
@@ -11711,10 +11711,10 @@ MonoBehaviour:
|
||||
m_addressable:
|
||||
m_atlas:
|
||||
m_fileSize: 3645
|
||||
m_assetChangeTS: 1753454318
|
||||
m_fileInfoReadTS: 1753454452
|
||||
m_fileWriteTS: 1753454318
|
||||
m_cachefileWriteTS: 1753454318
|
||||
m_assetChangeTS: 1753713201
|
||||
m_fileInfoReadTS: 1753713439
|
||||
m_fileWriteTS: 1753713200
|
||||
m_cachefileWriteTS: 1753713200
|
||||
refreshStamp: 2
|
||||
UseGUIDsList:
|
||||
- guid: bf2edee5c58d82540a51f03df9d42094
|
||||
@@ -14871,15 +14871,15 @@ MonoBehaviour:
|
||||
UseGUIDsList: []
|
||||
- guid: 01fba1b4480fc4988be3f80598f285c1
|
||||
type: 2
|
||||
m_fileInfoHash: 23880.cs
|
||||
m_fileInfoHash: 23919.cs
|
||||
m_assetbundle:
|
||||
m_addressable:
|
||||
m_atlas:
|
||||
m_fileSize: 23880
|
||||
m_assetChangeTS: 0
|
||||
m_fileInfoReadTS: 1753160209
|
||||
m_fileWriteTS: 1752570455
|
||||
m_cachefileWriteTS: 1752570455
|
||||
m_fileSize: 23919
|
||||
m_assetChangeTS: 1753593256
|
||||
m_fileInfoReadTS: 1753593572
|
||||
m_fileWriteTS: 1753593253
|
||||
m_cachefileWriteTS: 1753593253
|
||||
refreshStamp: 2
|
||||
UseGUIDsList: []
|
||||
- guid: 01fb2e405de427a47bbd366ee75d1772
|
||||
@@ -19530,10 +19530,10 @@ MonoBehaviour:
|
||||
m_addressable:
|
||||
m_atlas:
|
||||
m_fileSize: 100106
|
||||
m_assetChangeTS: 1753527255
|
||||
m_fileInfoReadTS: 1753527256
|
||||
m_fileWriteTS: 1753527255
|
||||
m_cachefileWriteTS: 1753527255
|
||||
m_assetChangeTS: 1753583185
|
||||
m_fileInfoReadTS: 1753583188
|
||||
m_fileWriteTS: 1753583185
|
||||
m_cachefileWriteTS: 1753583185
|
||||
refreshStamp: 2
|
||||
UseGUIDsList:
|
||||
- guid: f4688fdb7df04437aeb418b961361dc5
|
||||
@@ -21510,15 +21510,15 @@ MonoBehaviour:
|
||||
UseGUIDsList: []
|
||||
- guid: 81a06df931b999c4e9a0ac510cb0f3ea
|
||||
type: 2
|
||||
m_fileInfoHash: 9924.cs
|
||||
m_fileInfoHash: 11127.cs
|
||||
m_assetbundle:
|
||||
m_addressable:
|
||||
m_atlas:
|
||||
m_fileSize: 9924
|
||||
m_assetChangeTS: 0
|
||||
m_fileInfoReadTS: 1753160208
|
||||
m_fileWriteTS: 1752585795
|
||||
m_cachefileWriteTS: 1752585795
|
||||
m_fileSize: 11127
|
||||
m_assetChangeTS: 1753588604
|
||||
m_fileInfoReadTS: 1753588620
|
||||
m_fileWriteTS: 1753588599
|
||||
m_cachefileWriteTS: 1753588599
|
||||
refreshStamp: 2
|
||||
UseGUIDsList: []
|
||||
- guid: 8101c376367d6e44f84e602722e5ac10
|
||||
@@ -21712,15 +21712,15 @@ MonoBehaviour:
|
||||
UseGUIDsList: []
|
||||
- guid: 81e2cda70e8084a3fb324d644db244fd
|
||||
type: 5
|
||||
m_fileInfoHash: 324152.asset
|
||||
m_fileInfoHash: 327307.asset
|
||||
m_assetbundle:
|
||||
m_addressable:
|
||||
m_atlas:
|
||||
m_fileSize: 324152
|
||||
m_assetChangeTS: 1753162499
|
||||
m_fileInfoReadTS: 1753162505
|
||||
m_fileWriteTS: 1753162498
|
||||
m_cachefileWriteTS: 1753162498
|
||||
m_fileSize: 327307
|
||||
m_assetChangeTS: 1753594604
|
||||
m_fileInfoReadTS: 1753594837
|
||||
m_fileWriteTS: 1753594598
|
||||
m_cachefileWriteTS: 1753594598
|
||||
refreshStamp: 2
|
||||
UseGUIDsList:
|
||||
- guid: e6b16dc7c203450459bb86e24305f9ca
|
||||
@@ -22757,31 +22757,45 @@ MonoBehaviour:
|
||||
ids: 1c000000
|
||||
- guid: 63e7ac45befe54908ba6c691211fcbfa
|
||||
ids: 73000000
|
||||
- guid: 02f78a9ec76d40f49bfac78c64a754d1
|
||||
- guid: e90e53c61dbed234e90f7b745fc89ba1
|
||||
ids: 73000000
|
||||
- guid: 07994bfe8b0e4adb97d706de5dea48d5
|
||||
ids: 73000000
|
||||
- guid: 7baf76140de35d543824b4d5c20bcc7a
|
||||
ids: 72000000
|
||||
- guid: 99dc7bed879b1c04c9a00a6f076b3d5f
|
||||
ids: 72000000
|
||||
- guid: 2f42c1d891af66e4ba426c82a0075872
|
||||
ids: 800000001c00000015000000
|
||||
- guid: 87c1b020037c81841b3d98dd497cbdeb
|
||||
ids: 72000000
|
||||
- guid: 041da4322c7cc7c4382fad43c53c9fd3
|
||||
ids: 72000000
|
||||
- guid: 39d4f590552bd0948908c8257c968c54
|
||||
ids: 72000000
|
||||
- guid: 73f9a9bb620a2b040ab7347b390452fe
|
||||
ids: 72000000
|
||||
- guid: f67ef53cc3652c042a5a0730862fb47e
|
||||
ids: 72000000
|
||||
- guid: c097efff646f44642933293838835491
|
||||
ids: 72000000
|
||||
- guid: 83731934a010dd94585cbf5040a0719a
|
||||
ids: 72000000
|
||||
- guid: 344445a89b4f74a0e9a0a766903df87e
|
||||
ids: 73000000
|
||||
- guid: 55d6cdaea4eff6645bab522931b25dee
|
||||
ids:
|
||||
- guid: b0f85f7da5042c0448a526d5ecacbfa9
|
||||
ids: 1c000000
|
||||
- guid: f66c4aa44c09b6a42a2b5b9f9334d824
|
||||
ids: 1c000000
|
||||
- guid: ee148e281f3c41c5b4ff5f8a5afe5a6c
|
||||
ids: 1c000000
|
||||
- guid: b0f85f7da5042c0448a526d5ecacbfa9
|
||||
ids: 1c000000
|
||||
- guid: a7ec9e7ad8b847b7ae4510af83c5d868
|
||||
ids: 1c000000
|
||||
- guid: dcc0ed9263c0d524aabeb5f4bd75ecee
|
||||
- guid: 3028dc075ba8c584d9bc7d1e0255e038
|
||||
ids: 1c000000
|
||||
- guid: 93f09189124b21e479fc891dbc1b93bf
|
||||
ids: 1c000000
|
||||
- guid: 188dfe7e559f13248ba2c41eb5a59328
|
||||
ids: 1c000000
|
||||
- guid: 2fd6421f253b4ef1a19526541f9ffc0c
|
||||
ids: 1c000000
|
||||
- guid: f87b5805002ec9649bcb1b96d8a16ba9
|
||||
ids: 1c000000
|
||||
- guid: 3ee40aa79cd242a5b53b0b0ca4f13f0f
|
||||
ids: 1c000000
|
||||
- guid: 3028dc075ba8c584d9bc7d1e0255e038
|
||||
ids: 1c000000
|
||||
- guid: f20112bdeec2e8d4d9f80e8390e37263
|
||||
- guid: dcc0ed9263c0d524aabeb5f4bd75ecee
|
||||
ids: 1c000000
|
||||
- guid: 8113366f9f7cec647878e3af2fb98922
|
||||
type: 9
|
||||
@@ -23343,15 +23357,15 @@ MonoBehaviour:
|
||||
UseGUIDsList: []
|
||||
- guid: 81cc5b669f819ca42a81d2c18c654e23
|
||||
type: 2
|
||||
m_fileInfoHash: 26621.cs
|
||||
m_fileInfoHash: 29647.cs
|
||||
m_assetbundle:
|
||||
m_addressable:
|
||||
m_atlas:
|
||||
m_fileSize: 26621
|
||||
m_assetChangeTS: 0
|
||||
m_fileInfoReadTS: 1753160207
|
||||
m_fileWriteTS: 1741413239
|
||||
m_cachefileWriteTS: 1741413239
|
||||
m_fileSize: 29647
|
||||
m_assetChangeTS: 1753712741
|
||||
m_fileInfoReadTS: 1753712770
|
||||
m_fileWriteTS: 1753712738
|
||||
m_cachefileWriteTS: 1753712738
|
||||
refreshStamp: 2
|
||||
UseGUIDsList: []
|
||||
- guid: 81ec2894805ff534395009ab7c13ea4c
|
||||
@@ -24021,15 +24035,15 @@ MonoBehaviour:
|
||||
UseGUIDsList: []
|
||||
- guid: 91eb99ad678b44efe90bd2699a9502f3
|
||||
type: 2
|
||||
m_fileInfoHash: 6549.cs
|
||||
m_fileInfoHash: 6872.cs
|
||||
m_assetbundle:
|
||||
m_addressable:
|
||||
m_atlas:
|
||||
m_fileSize: 6549
|
||||
m_assetChangeTS: 0
|
||||
m_fileInfoReadTS: 1753160207
|
||||
m_fileWriteTS: 1752757832
|
||||
m_cachefileWriteTS: 1752757832
|
||||
m_fileSize: 6872
|
||||
m_assetChangeTS: 1753712741
|
||||
m_fileInfoReadTS: 1753712770
|
||||
m_fileWriteTS: 1753708410
|
||||
m_cachefileWriteTS: 1753708410
|
||||
refreshStamp: 2
|
||||
UseGUIDsList: []
|
||||
- guid: 91fb445939927d64b890fe32eb4d136b
|
||||
@@ -27981,10 +27995,10 @@ MonoBehaviour:
|
||||
m_addressable:
|
||||
m_atlas:
|
||||
m_fileSize: 3642
|
||||
m_assetChangeTS: 1753454318
|
||||
m_fileInfoReadTS: 1753454452
|
||||
m_fileWriteTS: 1753454318
|
||||
m_cachefileWriteTS: 1753454318
|
||||
m_assetChangeTS: 1753713201
|
||||
m_fileInfoReadTS: 1753713439
|
||||
m_fileWriteTS: 1753713200
|
||||
m_cachefileWriteTS: 1753713200
|
||||
refreshStamp: 2
|
||||
UseGUIDsList:
|
||||
- guid: bf2edee5c58d82540a51f03df9d42094
|
||||
@@ -49453,15 +49467,15 @@ MonoBehaviour:
|
||||
UseGUIDsList: []
|
||||
- guid: 836ab6bd424664b3cb74dd0fcb08c039
|
||||
type: 2
|
||||
m_fileInfoHash: 5267.cs
|
||||
m_fileInfoHash: 7458.cs
|
||||
m_assetbundle:
|
||||
m_addressable:
|
||||
m_atlas:
|
||||
m_fileSize: 5267
|
||||
m_assetChangeTS: 0
|
||||
m_fileInfoReadTS: 1753160191
|
||||
m_fileWriteTS: 1751094936
|
||||
m_cachefileWriteTS: 1751094936
|
||||
m_fileSize: 7458
|
||||
m_assetChangeTS: 1753588604
|
||||
m_fileInfoReadTS: 1753588620
|
||||
m_fileWriteTS: 1753588599
|
||||
m_cachefileWriteTS: 1753588599
|
||||
refreshStamp: 2
|
||||
UseGUIDsList: []
|
||||
- guid: 836aceb6bf15047ffb768a3f1b73f56a
|
||||
@@ -80609,15 +80623,15 @@ MonoBehaviour:
|
||||
UseGUIDsList: []
|
||||
- guid: b52db00b83c3efd48ac75f48f15cf1ef
|
||||
type: 9
|
||||
m_fileInfoHash: 96755.json
|
||||
m_fileInfoHash: 139784.json
|
||||
m_assetbundle:
|
||||
m_addressable:
|
||||
m_atlas:
|
||||
m_fileSize: 96755
|
||||
m_assetChangeTS: 1753541504
|
||||
m_fileInfoReadTS: 1753541512
|
||||
m_fileWriteTS: 1753541333
|
||||
m_cachefileWriteTS: 1753541333
|
||||
m_fileSize: 139784
|
||||
m_assetChangeTS: 1753594626
|
||||
m_fileInfoReadTS: 1753594836
|
||||
m_fileWriteTS: 1753594481
|
||||
m_cachefileWriteTS: 1753594481
|
||||
refreshStamp: 2
|
||||
UseGUIDsList: []
|
||||
- guid: b52d68e305b98a94bac88855d8ea5936
|
||||
@@ -81865,15 +81879,15 @@ MonoBehaviour:
|
||||
UseGUIDsList: []
|
||||
- guid: d5925af6db50645cdaf05d9fbb53f751
|
||||
type: 2
|
||||
m_fileInfoHash: 4954.cs
|
||||
m_fileInfoHash: 4935.cs
|
||||
m_assetbundle:
|
||||
m_addressable:
|
||||
m_atlas:
|
||||
m_fileSize: 4954
|
||||
m_assetChangeTS: 0
|
||||
m_fileInfoReadTS: 1753160183
|
||||
m_fileWriteTS: 1752835396
|
||||
m_cachefileWriteTS: 1752835396
|
||||
m_fileSize: 4935
|
||||
m_assetChangeTS: 1753972829
|
||||
m_fileInfoReadTS: 1753972848
|
||||
m_fileWriteTS: 1753972781
|
||||
m_cachefileWriteTS: 1753972781
|
||||
refreshStamp: 2
|
||||
UseGUIDsList: []
|
||||
- guid: d5a29bda33494394ea07abf76f785424
|
||||
@@ -92747,15 +92761,15 @@ MonoBehaviour:
|
||||
UseGUIDsList: []
|
||||
- guid: a6e56f21472670046ab4dfe41e9c739f
|
||||
type: 5
|
||||
m_fileInfoHash: 59785.prefab
|
||||
m_fileInfoHash: 59816.prefab
|
||||
m_assetbundle:
|
||||
m_addressable:
|
||||
m_atlas:
|
||||
m_fileSize: 59785
|
||||
m_assetChangeTS: 0
|
||||
m_fileInfoReadTS: 1753160182
|
||||
m_fileWriteTS: 1752140516
|
||||
m_cachefileWriteTS: 1752140516
|
||||
m_fileSize: 59816
|
||||
m_assetChangeTS: 1753583499
|
||||
m_fileInfoReadTS: 1753583523
|
||||
m_fileWriteTS: 1753583499
|
||||
m_cachefileWriteTS: 1753583499
|
||||
refreshStamp: 2
|
||||
UseGUIDsList:
|
||||
- guid: 1344c3c82d62a2a41a3576d8abb8e3ea
|
||||
@@ -141180,15 +141194,15 @@ MonoBehaviour:
|
||||
UseGUIDsList: []
|
||||
- guid: 1ad11ce603af64e4fb032229b82386b7
|
||||
type: 2
|
||||
m_fileInfoHash: 10481.cs
|
||||
m_fileInfoHash: 7424.cs
|
||||
m_assetbundle:
|
||||
m_addressable:
|
||||
m_atlas:
|
||||
m_fileSize: 10481
|
||||
m_assetChangeTS: 0
|
||||
m_fileInfoReadTS: 1753160173
|
||||
m_fileWriteTS: 1739959238
|
||||
m_cachefileWriteTS: 1739959238
|
||||
m_fileSize: 7424
|
||||
m_assetChangeTS: 1753712741
|
||||
m_fileInfoReadTS: 1753712770
|
||||
m_fileWriteTS: 1753712304
|
||||
m_cachefileWriteTS: 1753712304
|
||||
refreshStamp: 2
|
||||
UseGUIDsList: []
|
||||
- guid: 1af1a889025ee46828ecc1aee380e197
|
||||
@@ -161127,10 +161141,10 @@ MonoBehaviour:
|
||||
m_addressable:
|
||||
m_atlas:
|
||||
m_fileSize: 3649
|
||||
m_assetChangeTS: 1753454318
|
||||
m_fileInfoReadTS: 1753454452
|
||||
m_fileWriteTS: 1753454318
|
||||
m_cachefileWriteTS: 1753454318
|
||||
m_assetChangeTS: 1753713201
|
||||
m_fileInfoReadTS: 1753713439
|
||||
m_fileWriteTS: 1753713200
|
||||
m_cachefileWriteTS: 1753713200
|
||||
refreshStamp: 2
|
||||
UseGUIDsList:
|
||||
- guid: bf2edee5c58d82540a51f03df9d42094
|
||||
@@ -173916,15 +173930,15 @@ MonoBehaviour:
|
||||
UseGUIDsList: []
|
||||
- guid: 7c10da0d74d78364bac94506d77290bf
|
||||
type: 5
|
||||
m_fileInfoHash: 2814.mat
|
||||
m_fileInfoHash: 2820.mat
|
||||
m_assetbundle:
|
||||
m_addressable:
|
||||
m_atlas:
|
||||
m_fileSize: 2814
|
||||
m_assetChangeTS: 1753350480
|
||||
m_fileInfoReadTS: 1753350630
|
||||
m_fileWriteTS: 1753350479
|
||||
m_cachefileWriteTS: 1753350479
|
||||
m_fileSize: 2820
|
||||
m_assetChangeTS: 1753713201
|
||||
m_fileInfoReadTS: 1753713439
|
||||
m_fileWriteTS: 1753713200
|
||||
m_cachefileWriteTS: 1753713200
|
||||
refreshStamp: 2
|
||||
UseGUIDsList:
|
||||
- guid: 06e8da9b2b26f09459e8a93e84b2e0c9
|
||||
@@ -174811,15 +174825,15 @@ MonoBehaviour:
|
||||
ids: 73000000
|
||||
- guid: 7c6d26bb37b79cd42bc9621250306e32
|
||||
type: 9
|
||||
m_fileInfoHash: 2155901.json
|
||||
m_fileInfoHash: 3079093.json
|
||||
m_assetbundle:
|
||||
m_addressable:
|
||||
m_atlas:
|
||||
m_fileSize: 2155901
|
||||
m_assetChangeTS: 0
|
||||
m_fileInfoReadTS: 1753160168
|
||||
m_fileWriteTS: 1752896215
|
||||
m_cachefileWriteTS: 1752896215
|
||||
m_fileSize: 3079093
|
||||
m_assetChangeTS: 1753972502
|
||||
m_fileInfoReadTS: 1753972535
|
||||
m_fileWriteTS: 1753858149
|
||||
m_cachefileWriteTS: 1753858149
|
||||
refreshStamp: 2
|
||||
UseGUIDsList: []
|
||||
- guid: 7c6d499e66c8acc44a215001b8c76b8a
|
||||
@@ -175355,15 +175369,15 @@ MonoBehaviour:
|
||||
UseGUIDsList: []
|
||||
- guid: 8cda5057162133543b13f27dd0aa7d56
|
||||
type: 9
|
||||
m_fileInfoHash: 3079093.json
|
||||
m_fileInfoHash: 3079101.json
|
||||
m_assetbundle:
|
||||
m_addressable:
|
||||
m_atlas:
|
||||
m_fileSize: 3079093
|
||||
m_assetChangeTS: 1753454286
|
||||
m_fileInfoReadTS: 1753454311
|
||||
m_fileWriteTS: 1753423907
|
||||
m_cachefileWriteTS: 1753423907
|
||||
m_fileSize: 3079101
|
||||
m_assetChangeTS: 1753972829
|
||||
m_fileInfoReadTS: 1753972848
|
||||
m_fileWriteTS: 1753972814
|
||||
m_cachefileWriteTS: 1753972814
|
||||
refreshStamp: 2
|
||||
UseGUIDsList: []
|
||||
- guid: 8c3b52e1fbc36584d802ee0099c48682
|
||||
@@ -189280,15 +189294,15 @@ MonoBehaviour:
|
||||
UseGUIDsList: []
|
||||
- guid: 8d2b6af5deaa046ff89ed3c74bb2ffdc
|
||||
type: 2
|
||||
m_fileInfoHash: 21608.cs
|
||||
m_fileInfoHash: 21822.cs
|
||||
m_assetbundle:
|
||||
m_addressable:
|
||||
m_atlas:
|
||||
m_fileSize: 21608
|
||||
m_assetChangeTS: 1753176738
|
||||
m_fileInfoReadTS: 1753176752
|
||||
m_fileWriteTS: 1753176735
|
||||
m_cachefileWriteTS: 1753176735
|
||||
m_fileSize: 21822
|
||||
m_assetChangeTS: 1753712741
|
||||
m_fileInfoReadTS: 1753712769
|
||||
m_fileWriteTS: 1753708410
|
||||
m_cachefileWriteTS: 1753708410
|
||||
refreshStamp: 2
|
||||
UseGUIDsList: []
|
||||
- guid: 8d4bc6bfa28760b29f13174d6b6ea710
|
||||
@@ -197511,10 +197525,10 @@ MonoBehaviour:
|
||||
m_addressable:
|
||||
m_atlas:
|
||||
m_fileSize: 9628
|
||||
m_assetChangeTS: 1753454318
|
||||
m_fileInfoReadTS: 1753454452
|
||||
m_fileWriteTS: 1753454318
|
||||
m_cachefileWriteTS: 1753454318
|
||||
m_assetChangeTS: 1753713201
|
||||
m_fileInfoReadTS: 1753713439
|
||||
m_fileWriteTS: 1753713200
|
||||
m_cachefileWriteTS: 1753713200
|
||||
refreshStamp: 2
|
||||
UseGUIDsList:
|
||||
- guid: fe393ace9b354375a9cb14cdbbc28be4
|
||||
@@ -214793,15 +214807,15 @@ MonoBehaviour:
|
||||
UseGUIDsList: []
|
||||
- guid: 7f59135bf6881b347b3d735f68a680ca
|
||||
type: 9
|
||||
m_fileInfoHash: 94860.json
|
||||
m_fileInfoHash: 137515.json
|
||||
m_assetbundle:
|
||||
m_addressable:
|
||||
m_atlas:
|
||||
m_fileSize: 94860
|
||||
m_assetChangeTS: 1753527271
|
||||
m_fileInfoReadTS: 1753527292
|
||||
m_fileWriteTS: 1753527062
|
||||
m_cachefileWriteTS: 1753527062
|
||||
m_fileSize: 137515
|
||||
m_assetChangeTS: 1753592172
|
||||
m_fileInfoReadTS: 1753592249
|
||||
m_fileWriteTS: 1753591911
|
||||
m_cachefileWriteTS: 1753591911
|
||||
refreshStamp: 2
|
||||
UseGUIDsList: []
|
||||
- guid: 7fc947ed5e1e2b141bd741eca43b418c
|
||||
@@ -216487,15 +216501,15 @@ MonoBehaviour:
|
||||
UseGUIDsList: []
|
||||
- guid: 9f5915d0f462947f5bec62ea7e118953
|
||||
type: 2
|
||||
m_fileInfoHash: 4182.cs
|
||||
m_fileInfoHash: 6215.cs
|
||||
m_assetbundle:
|
||||
m_addressable:
|
||||
m_atlas:
|
||||
m_fileSize: 4182
|
||||
m_assetChangeTS: 0
|
||||
m_fileInfoReadTS: 1753160160
|
||||
m_fileWriteTS: 1752284832
|
||||
m_cachefileWriteTS: 1752284832
|
||||
m_fileSize: 6215
|
||||
m_assetChangeTS: 1753588604
|
||||
m_fileInfoReadTS: 1753588620
|
||||
m_fileWriteTS: 1753588473
|
||||
m_cachefileWriteTS: 1753588473
|
||||
refreshStamp: 2
|
||||
UseGUIDsList: []
|
||||
- guid: 9f59acaa662cd914b90c445b845103c5
|
||||
@@ -222498,6 +222512,45 @@ MonoBehaviour:
|
||||
m_cachefileWriteTS: 1753541110
|
||||
refreshStamp: 2
|
||||
UseGUIDsList: []
|
||||
- guid: 6dbdd314784e80440b48088e6357c1ef
|
||||
type: 9
|
||||
m_fileInfoHash: 722.csproj
|
||||
m_assetbundle:
|
||||
m_addressable:
|
||||
m_atlas:
|
||||
m_fileSize: 722
|
||||
m_assetChangeTS: 0
|
||||
m_fileInfoReadTS: 1753580613
|
||||
m_fileWriteTS: 1753580565
|
||||
m_cachefileWriteTS: 1753580565
|
||||
refreshStamp: 2
|
||||
UseGUIDsList: []
|
||||
- guid: 459a7ea4ef65c664482b6377848ac5c3
|
||||
type: 9
|
||||
m_fileInfoHash: 1113.sln
|
||||
m_assetbundle:
|
||||
m_addressable:
|
||||
m_atlas:
|
||||
m_fileSize: 1113
|
||||
m_assetChangeTS: 0
|
||||
m_fileInfoReadTS: 1753854326
|
||||
m_fileWriteTS: 1753854292
|
||||
m_cachefileWriteTS: 1753854292
|
||||
refreshStamp: 2
|
||||
UseGUIDsList: []
|
||||
- guid: aa8cc5004f4483d4ab5162f897283f03
|
||||
type: 1
|
||||
m_fileInfoHash:
|
||||
m_assetbundle:
|
||||
m_addressable:
|
||||
m_atlas:
|
||||
m_fileSize: 0
|
||||
m_assetChangeTS: 0
|
||||
m_fileInfoReadTS: 1753854326
|
||||
m_fileWriteTS: 0
|
||||
m_cachefileWriteTS: 0
|
||||
refreshStamp: 2
|
||||
UseGUIDsList: []
|
||||
setting:
|
||||
alternateColor: 1
|
||||
excludeTypes: 0
|
||||
|
||||
8
Assets/NLayer/bin.meta
Normal file
8
Assets/NLayer/bin.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: aa8cc5004f4483d4ab5162f897283f03
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because one or more lines are too long
@@ -1,11 +1,12 @@
|
||||
using UnityEngine;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Ichni
|
||||
{
|
||||
public enum AnimationCurveType //预设动画曲线类型
|
||||
// 保持枚举定义不变
|
||||
public enum AnimationCurveType
|
||||
{
|
||||
|
||||
|
||||
Linear = 0,
|
||||
InQuad = 1,
|
||||
OutQuad = 2,
|
||||
@@ -37,361 +38,206 @@ namespace Ichni
|
||||
InBack = 28,
|
||||
OutBack = 29,
|
||||
InOutBack = 30
|
||||
|
||||
}
|
||||
|
||||
public static class AnimationCurveEvaluator
|
||||
{
|
||||
// 预计算常量
|
||||
private const float HALF_PI = Mathf.PI / 2f;
|
||||
private const float DOUBLE_PI = Mathf.PI * 2f;
|
||||
private const float BOUNCE_THRESHOLD1 = 1f / 2.75f;
|
||||
private const float BOUNCE_THRESHOLD2 = 2f / 2.75f;
|
||||
private const float BOUNCE_THRESHOLD3 = 2.5f / 2.75f;
|
||||
private const float BOUNCE_DIVISOR = 2.75f;
|
||||
|
||||
public static float Evaluate(AnimationCurveType animationCurveType, float t)
|
||||
{
|
||||
t = Mathf.Clamp(t, 0, 1);
|
||||
t = Mathf.Clamp01(t); // 使用Unity内置的Clamp01
|
||||
|
||||
switch (animationCurveType)
|
||||
{
|
||||
case AnimationCurveType.Linear:
|
||||
return Linear(0, 1, t);
|
||||
case AnimationCurveType.InQuad:
|
||||
return InQuad(0, 1, t);
|
||||
case AnimationCurveType.OutQuad:
|
||||
return OutQuad(0, 1, t);
|
||||
case AnimationCurveType.InOutQuad:
|
||||
return InOutQuad(0, 1, t);
|
||||
case AnimationCurveType.InCubic:
|
||||
return InCubic(0, 1, t);
|
||||
case AnimationCurveType.OutCubic:
|
||||
return OutCubic(0, 1, t);
|
||||
case AnimationCurveType.InOutCubic:
|
||||
return InOutCubic(0, 1, t);
|
||||
case AnimationCurveType.InQuart:
|
||||
return InQuart(0, 1, t);
|
||||
case AnimationCurveType.OutQuart:
|
||||
return OutQuart(0, 1, t);
|
||||
case AnimationCurveType.InOutQuart:
|
||||
return InOutQuart(0, 1, t);
|
||||
case AnimationCurveType.InQuint:
|
||||
return InQuint(0, 1, t);
|
||||
case AnimationCurveType.OutQuint:
|
||||
return OutQuint(0, 1, t);
|
||||
case AnimationCurveType.InOutQuint:
|
||||
return InOutQuint(0, 1, t);
|
||||
case AnimationCurveType.InSine:
|
||||
return InSine(0, 1, t);
|
||||
case AnimationCurveType.OutSine:
|
||||
return OutSine(0, 1, t);
|
||||
case AnimationCurveType.InOutSine:
|
||||
return InOutSine(0, 1, t);
|
||||
case AnimationCurveType.InExpo:
|
||||
return InExpo(0, 1, t);
|
||||
case AnimationCurveType.OutExpo:
|
||||
return OutExpo(0, 1, t);
|
||||
case AnimationCurveType.InOutExpo:
|
||||
return InOutExpo(0, 1, t);
|
||||
case AnimationCurveType.InCirc:
|
||||
return InCirc(0, 1, t);
|
||||
case AnimationCurveType.OutCirc:
|
||||
return OutCirc(0, 1, t);
|
||||
case AnimationCurveType.InOutCirc:
|
||||
return InOutCirc(0, 1, t);
|
||||
case AnimationCurveType.InBounce:
|
||||
return InBounce(0, 1, t);
|
||||
case AnimationCurveType.OutBounce:
|
||||
return OutBounce(0, 1, t);
|
||||
case AnimationCurveType.InOutBounce:
|
||||
return InOutBounce(0, 1, t);
|
||||
case AnimationCurveType.InElastic:
|
||||
return InElastic(0, 1, t);
|
||||
case AnimationCurveType.OutElastic:
|
||||
return OutElastic(0, 1, t);
|
||||
case AnimationCurveType.InOutElastic:
|
||||
return InOutElastic(0, 1, t);
|
||||
case AnimationCurveType.InBack:
|
||||
return InBack(0, 1, t);
|
||||
case AnimationCurveType.OutBack:
|
||||
return OutBack(0, 1, t);
|
||||
case AnimationCurveType.InOutBack:
|
||||
return InOutBack(0, 1, t);
|
||||
}
|
||||
|
||||
// 使用简化的函数调用
|
||||
case AnimationCurveType.Linear: return Linear(t);
|
||||
case AnimationCurveType.InQuad: return InQuad(t);
|
||||
case AnimationCurveType.OutQuad: return OutQuad(t);
|
||||
case AnimationCurveType.InOutQuad: return InOutQuad(t);
|
||||
case AnimationCurveType.InCubic: return InCubic(t);
|
||||
case AnimationCurveType.OutCubic: return OutCubic(t);
|
||||
case AnimationCurveType.InOutCubic: return InOutCubic(t);
|
||||
case AnimationCurveType.InQuart: return InQuart(t);
|
||||
case AnimationCurveType.OutQuart: return OutQuart(t);
|
||||
case AnimationCurveType.InOutQuart: return InOutQuart(t);
|
||||
case AnimationCurveType.InQuint: return InQuint(t);
|
||||
case AnimationCurveType.OutQuint: return OutQuint(t);
|
||||
case AnimationCurveType.InOutQuint: return InOutQuint(t);
|
||||
case AnimationCurveType.InSine: return InSine(t);
|
||||
case AnimationCurveType.OutSine: return OutSine(t);
|
||||
case AnimationCurveType.InOutSine: return InOutSine(t);
|
||||
case AnimationCurveType.InExpo: return InExpo(t);
|
||||
case AnimationCurveType.OutExpo: return OutExpo(t);
|
||||
case AnimationCurveType.InOutExpo: return InOutExpo(t);
|
||||
case AnimationCurveType.InCirc: return InCirc(t);
|
||||
case AnimationCurveType.OutCirc: return OutCirc(t);
|
||||
case AnimationCurveType.InOutCirc: return InOutCirc(t);
|
||||
case AnimationCurveType.InBounce: return InBounce(t);
|
||||
case AnimationCurveType.OutBounce: return OutBounce(t);
|
||||
case AnimationCurveType.InOutBounce: return InOutBounce(t);
|
||||
case AnimationCurveType.InElastic: return InElastic(t);
|
||||
case AnimationCurveType.OutElastic: return OutElastic(t);
|
||||
case AnimationCurveType.InOutElastic: return InOutElastic(t);
|
||||
case AnimationCurveType.InBack: return InBack(t);
|
||||
case AnimationCurveType.OutBack: return OutBack(t);
|
||||
case AnimationCurveType.InOutBack: return InOutBack(t);
|
||||
default:
|
||||
throw new NotImplementedException($"Animation curve type {animationCurveType} is not implemented.");
|
||||
}
|
||||
|
||||
#region 缓动曲线计算式
|
||||
private static float Linear(float from, float to, float t)
|
||||
{
|
||||
float c = to - from;
|
||||
t /= 1f;
|
||||
return c * t / 1f + from;
|
||||
}
|
||||
|
||||
private static float InQuad(float from, float to, float t)
|
||||
#region 优化后的缓动函数
|
||||
private static float Linear(float t) => t;
|
||||
|
||||
private static float InQuad(float t) => t * t;
|
||||
|
||||
private static float OutQuad(float t) => t * (2f - t);
|
||||
|
||||
private static float InOutQuad(float t) =>
|
||||
t < 0.5f ? 2f * t * t : -1f + (4f - 2f * t) * t;
|
||||
|
||||
private static float InCubic(float t) => t * t * t;
|
||||
|
||||
private static float OutCubic(float t) =>
|
||||
(--t) * t * t + 1f;
|
||||
|
||||
private static float InOutCubic(float t) =>
|
||||
t < 0.5f ? 4f * t * t * t : (t - 1f) * (2f * t - 2f) * (2f * t - 2f) + 1f;
|
||||
|
||||
private static float InQuart(float t) => t * t * t * t;
|
||||
|
||||
private static float OutQuart(float t) =>
|
||||
1f - (--t) * t * t * t;
|
||||
|
||||
private static float InOutQuart(float t) =>
|
||||
t < 0.5f ? 8f * t * t * t * t : 1f - 8f * (--t) * t * t * t;
|
||||
|
||||
private static float InQuint(float t) => t * t * t * t * t;
|
||||
|
||||
private static float OutQuint(float t) =>
|
||||
1f + (--t) * t * t * t * t;
|
||||
|
||||
private static float InOutQuint(float t) =>
|
||||
t < 0.5f ? 16f * t * t * t * t * t : 1f + 16f * (--t) * t * t * t * t;
|
||||
|
||||
private static float InSine(float t) =>
|
||||
1f - Mathf.Cos(t * HALF_PI);
|
||||
|
||||
private static float OutSine(float t) =>
|
||||
Mathf.Sin(t * HALF_PI);
|
||||
|
||||
private static float InOutSine(float t) =>
|
||||
0.5f * (1f - Mathf.Cos(Mathf.PI * t));
|
||||
|
||||
private static float InExpo(float t) =>
|
||||
Mathf.Approximately(t, 0) ? 0 : Mathf.Pow(2, 10 * (t - 1));
|
||||
|
||||
private static float OutExpo(float t) =>
|
||||
Mathf.Approximately(t, 1) ? 1 : 1 - Mathf.Pow(2, -10 * t);
|
||||
|
||||
private static float InOutExpo(float t)
|
||||
{
|
||||
float c = to - from;
|
||||
t /= 1f;
|
||||
return c * t * t + from;
|
||||
if (Mathf.Approximately(t, 0)) return 0;
|
||||
if (Mathf.Approximately(t, 1)) return 1;
|
||||
return t < 0.5f
|
||||
? 0.5f * Mathf.Pow(2, 20 * t - 10)
|
||||
: 0.5f * (2 - Mathf.Pow(2, -20 * t + 10));
|
||||
}
|
||||
|
||||
private static float OutQuad(float from, float to, float t)
|
||||
private static float InCirc(float t) =>
|
||||
1f - Mathf.Sqrt(1f - t * t);
|
||||
|
||||
private static float OutCirc(float t) =>
|
||||
Mathf.Sqrt(1f - (t - 1f) * (t - 1f));
|
||||
|
||||
private static float InOutCirc(float t) =>
|
||||
t < 0.5f
|
||||
? 0.5f * (1 - Mathf.Sqrt(1 - 4 * t * t))
|
||||
: 0.5f * (Mathf.Sqrt(1 - 4 * (t - 1) * (t - 1)) + 1);
|
||||
|
||||
private static float InBounce(float t) =>
|
||||
1f - OutBounce(1f - t);
|
||||
|
||||
private static float OutBounce(float t)
|
||||
{
|
||||
float c = to - from;
|
||||
t /= 1f;
|
||||
return -c * t * (t - 2f) + from;
|
||||
if (t < BOUNCE_THRESHOLD1)
|
||||
return 7.5625f * t * t;
|
||||
|
||||
if (t < BOUNCE_THRESHOLD2)
|
||||
return 7.5625f * (t -= 1.5f / BOUNCE_DIVISOR) * t + 0.75f;
|
||||
|
||||
if (t < BOUNCE_THRESHOLD3)
|
||||
return 7.5625f * (t -= 2.25f / BOUNCE_DIVISOR) * t + 0.9375f;
|
||||
|
||||
return 7.5625f * (t -= 2.625f / BOUNCE_DIVISOR) * t + 0.984375f;
|
||||
}
|
||||
|
||||
private static float InOutQuad(float from, float to, float t)
|
||||
private static float InOutBounce(float t) =>
|
||||
t < 0.5f
|
||||
? 0.5f * InBounce(2f * t)
|
||||
: 0.5f * OutBounce(2f * t - 1f) + 0.5f;
|
||||
|
||||
private static float InElastic(float t)
|
||||
{
|
||||
float c = to - from;
|
||||
t /= 0.5f;
|
||||
if (t < 1) return c / 2f * t * t + from;
|
||||
t--;
|
||||
return -c / 2f * (t * (t - 2) - 1) + from;
|
||||
if (Mathf.Approximately(t, 0)) return 0;
|
||||
if (Mathf.Approximately(t, 1)) return 1;
|
||||
|
||||
const float p = 0.3f;
|
||||
const float s = p / 4f;
|
||||
return -Mathf.Pow(2, 10 * (t -= 1)) * Mathf.Sin((t - s) * DOUBLE_PI / p);
|
||||
}
|
||||
|
||||
private static float InCubic(float from, float to, float t)
|
||||
private static float OutElastic(float t)
|
||||
{
|
||||
float c = to - from;
|
||||
t /= 1f;
|
||||
return c * t * t * t + from;
|
||||
if (Mathf.Approximately(t, 0)) return 0;
|
||||
if (Mathf.Approximately(t, 1)) return 1;
|
||||
|
||||
const float p = 0.3f;
|
||||
const float s = p / 4f;
|
||||
return Mathf.Pow(2, -10 * t) * Mathf.Sin((t - s) * DOUBLE_PI / p) + 1;
|
||||
}
|
||||
|
||||
private static float OutCubic(float from, float to, float t)
|
||||
private static float InOutElastic(float t)
|
||||
{
|
||||
float c = to - from;
|
||||
t /= 1f;
|
||||
t--;
|
||||
return c * (t * t * t + 1) + from;
|
||||
if (Mathf.Approximately(t, 0)) return 0;
|
||||
if (Mathf.Approximately(t, 1)) return 1;
|
||||
|
||||
const float p = 0.45f;
|
||||
|
||||
|
||||
if (t < 0.5f)
|
||||
return -0.5f * Mathf.Pow(2, 20 * t - 10) * Mathf.Sin((20 * t - 1.125f) * DOUBLE_PI / p);
|
||||
|
||||
return 0.5f * Mathf.Pow(2, -20 * t + 10) * Mathf.Sin((20 * t - 1.125f) * DOUBLE_PI / p) + 1;
|
||||
}
|
||||
|
||||
private static float InOutCubic(float from, float to, float t)
|
||||
private static float InBack(float t)
|
||||
{
|
||||
float c = to - from;
|
||||
t /= 0.5f;
|
||||
if (t < 1) return c / 2f * t * t * t + from;
|
||||
t -= 2;
|
||||
return c / 2f * (t * t * t + 2) + from;
|
||||
const float s = 1.70158f;
|
||||
return t * t * ((s + 1) * t - s);
|
||||
}
|
||||
|
||||
private static float InQuart(float from, float to, float t)
|
||||
private static float OutBack(float t)
|
||||
{
|
||||
float c = to - from;
|
||||
t /= 1f;
|
||||
return c * t * t * t * t + from;
|
||||
const float s = 1.70158f;
|
||||
return (t -= 1) * t * ((s + 1) * t + s) + 1;
|
||||
}
|
||||
|
||||
private static float OutQuart(float from, float to, float t)
|
||||
private static float InOutBack(float t)
|
||||
{
|
||||
float c = to - from;
|
||||
t /= 1f;
|
||||
t--;
|
||||
return -c * (t * t * t * t - 1) + from;
|
||||
}
|
||||
|
||||
private static float InOutQuart(float from, float to, float t)
|
||||
{
|
||||
float c = to - from;
|
||||
t /= 0.5f;
|
||||
if (t < 1) return c / 2f * t * t * t * t + from;
|
||||
t -= 2;
|
||||
return -c / 2f * (t * t * t * t - 2) + from;
|
||||
}
|
||||
|
||||
private static float InQuint(float from, float to, float t)
|
||||
{
|
||||
float c = to - from;
|
||||
t /= 1f;
|
||||
return c * t * t * t * t * t + from;
|
||||
}
|
||||
|
||||
private static float OutQuint(float from, float to, float t)
|
||||
{
|
||||
float c = to - from;
|
||||
t /= 1f;
|
||||
t--;
|
||||
return c * (t * t * t * t * t + 1) + from;
|
||||
}
|
||||
|
||||
private static float InOutQuint(float from, float to, float t)
|
||||
{
|
||||
float c = to - from;
|
||||
t /= 0.5f;
|
||||
if (t < 1) return c / 2f * t * t * t * t * t + from;
|
||||
t -= 2;
|
||||
return c / 2f * (t * t * t * t * t + 2) + from;
|
||||
}
|
||||
|
||||
private static float InSine(float from, float to, float t)
|
||||
{
|
||||
float c = to - from;
|
||||
return -c * Mathf.Cos(t / 1f * (Mathf.PI / 2f)) + c + from;
|
||||
}
|
||||
|
||||
private static float OutSine(float from, float to, float t)
|
||||
{
|
||||
float c = to - from;
|
||||
return c * Mathf.Sin(t / 1f * (Mathf.PI / 2f)) + from;
|
||||
}
|
||||
|
||||
private static float InOutSine(float from, float to, float t)
|
||||
{
|
||||
float c = to - from;
|
||||
return -c / 2f * (Mathf.Cos(Mathf.PI * t / 1f) - 1) + from;
|
||||
}
|
||||
|
||||
private static float InExpo(float from, float to, float t)
|
||||
{
|
||||
float c = to - from;
|
||||
return c * Mathf.Pow(2, 10 * (t / 1f - 1)) + from;
|
||||
}
|
||||
|
||||
private static float OutExpo(float from, float to, float t)
|
||||
{
|
||||
float c = to - from;
|
||||
return c * (-Mathf.Pow(2, -10 * t / 1f) + 1) + from;
|
||||
}
|
||||
|
||||
private static float InOutExpo(float from, float to, float t)
|
||||
{
|
||||
float c = to - from;
|
||||
t /= 0.5f;
|
||||
if (t < 1f) return c / 2f * Mathf.Pow(2, 10 * (t - 1)) + from;
|
||||
t--;
|
||||
return c / 2f * (-Mathf.Pow(2, -10 * t) + 2) + from;
|
||||
}
|
||||
|
||||
private static float InCirc(float from, float to, float t)
|
||||
{
|
||||
float c = to - from;
|
||||
t /= 1f;
|
||||
return -c * (Mathf.Sqrt(1 - t * t) - 1) + from;
|
||||
}
|
||||
|
||||
private static float OutCirc(float from, float to, float t)
|
||||
{
|
||||
float c = to - from;
|
||||
t /= 1f;
|
||||
t--;
|
||||
return c * Mathf.Sqrt(1 - t * t) + from;
|
||||
}
|
||||
|
||||
private static float InOutCirc(float from, float to, float t)
|
||||
{
|
||||
float c = to - from;
|
||||
t /= 0.5f;
|
||||
if (t < 1) return -c / 2f * (Mathf.Sqrt(1 - t * t) - 1) + from;
|
||||
t -= 2;
|
||||
return c / 2f * (Mathf.Sqrt(1 - t * t) + 1) + from;
|
||||
}
|
||||
|
||||
private static float InBounce(float from, float to, float t)
|
||||
{
|
||||
float c = to - from;
|
||||
return c - OutBounce(0f, c, 1f - t) + from; //does this work?
|
||||
}
|
||||
|
||||
private static float OutBounce(float from, float to, float t)
|
||||
{
|
||||
float c = to - from;
|
||||
|
||||
if ((t /= 1f) < (1 / 2.75f))
|
||||
{
|
||||
return c * (7.5625f * t * t) + from;
|
||||
}
|
||||
else if (t < (2 / 2.75f))
|
||||
{
|
||||
return c * (7.5625f * (t -= (1.5f / 2.75f)) * t + .75f) + from;
|
||||
}
|
||||
else if (t < (2.5 / 2.75))
|
||||
{
|
||||
return c * (7.5625f * (t -= (2.25f / 2.75f)) * t + .9375f) + from;
|
||||
}
|
||||
else
|
||||
{
|
||||
return c * (7.5625f * (t -= (2.625f / 2.75f)) * t + .984375f) + from;
|
||||
}
|
||||
}
|
||||
|
||||
private static float InOutBounce(float from, float to, float t)
|
||||
{
|
||||
float c = to - from;
|
||||
if (t < 0.5f) return InBounce(0, c, t * 2f) * 0.5f + from;
|
||||
return OutBounce(0, c, t * 2 - 1) * 0.5f + c * 0.5f + from;
|
||||
|
||||
}
|
||||
|
||||
private static float InElastic(float from, float to, float t)
|
||||
{
|
||||
float c = to - from;
|
||||
if (t == 0) return from;
|
||||
if ((t /= 1f) == 1) return from + c;
|
||||
float p = 0.3f;
|
||||
float s = p / 4f;
|
||||
return -(c * Mathf.Pow(2, 10 * (t -= 1)) * Mathf.Sin((t - s) * (2 * Mathf.PI) / p)) + from;
|
||||
}
|
||||
|
||||
private static float OutElastic(float from, float to, float t)
|
||||
{
|
||||
float c = to - from;
|
||||
if (t == 0) return from;
|
||||
if ((t /= 1f) == 1) return from + c;
|
||||
float p = 0.3f;
|
||||
float s = p / 4f;
|
||||
return (c * Mathf.Pow(2, -10 * t) * Mathf.Sin((t - s) * (2 * Mathf.PI) / p) + c + from);
|
||||
}
|
||||
|
||||
private static float InOutElastic(float from, float to, float t)
|
||||
{
|
||||
float c = to - from;
|
||||
if (t == 0) return from;
|
||||
if ((t /= 0.5f) == 2) return from + c;
|
||||
float p = 0.3f * 1.5f;
|
||||
float s = p / 4f;
|
||||
if (t < 1)
|
||||
return -0.5f * (c * Mathf.Pow(2, 10 * (t -= 1f)) * Mathf.Sin((t - 2) * (2 * Mathf.PI) / p)) + from;
|
||||
return c * Mathf.Pow(2, -10 * (t -= 1)) * Mathf.Sin((t - s) * (2f * Mathf.PI) / p) * 0.5f + c + from;
|
||||
}
|
||||
|
||||
private static float InBack(float from, float to, float t)
|
||||
{
|
||||
float c = to - from;
|
||||
float s = 1.70158f;
|
||||
t /= 0.5f;
|
||||
return c * t * t * ((s + 1) * t - s) + from;
|
||||
}
|
||||
|
||||
private static float OutBack(float from, float to, float t)
|
||||
{
|
||||
float c = to - from;
|
||||
float s = 1.70158f;
|
||||
t = t / 1f - 1f;
|
||||
return c * (t * t * ((s + 1) * t + s) + 1) + from;
|
||||
}
|
||||
|
||||
private static float InOutBack(float from, float to, float t)
|
||||
{
|
||||
float c = to - from;
|
||||
float s = 1.70158f;
|
||||
t /= 0.5f;
|
||||
if (t < 1) return c / 2f * (t * t * (((s *= (1.525f)) + 1) * t - s)) + from;
|
||||
t -= 2;
|
||||
return c / 2f * (t * t * (((s *= (1.525f)) + 1) * t + s) + 2) + from;
|
||||
float s = 1.70158f * 1.525f;
|
||||
return t < 0.5f
|
||||
? 0.5f * (4 * t * t * ((s + 1) * 2 * t - s))
|
||||
: 0.5f * ((2 * t - 2) * (2 * t - 2) * ((s + 1) * (2 * t - 2) + s) + 2);
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
||||
// [System.Serializable]
|
||||
// public class PresetAnimationCurve
|
||||
// {
|
||||
// public AnimationCurveType animationCurveType; //动画曲线类型
|
||||
//
|
||||
// public PresetAnimationCurve(AnimationCurveType animationCurveType)
|
||||
// {
|
||||
// this.animationCurveType = animationCurveType;
|
||||
// }
|
||||
//
|
||||
// /// <summary>
|
||||
// /// 根据Type选择曲线,并计算t点(0,1)时曲线的值,若t越界,则直接返回0或1
|
||||
// /// </summary>
|
||||
// public float Evaluate(float t)
|
||||
// {
|
||||
// return AnimationCurveEvaluator.Evaluate(this.animationCurveType, t);
|
||||
// }
|
||||
// }
|
||||
}
|
||||
@@ -231,13 +231,15 @@ namespace Ichni.RhythmGame
|
||||
var timeField = qcWindow.GenerateInputField(qcSubcontainer, "Time offset", "0");
|
||||
var iterationField = qcWindow.GenerateInputField(qcSubcontainer, "Iteration", "0");
|
||||
var includeAnimationToggle = qcWindow.GenerateToggle(null, qcSubcontainer, "Include Animation", string.Empty);
|
||||
var MovingTrackToggle = qcWindow.GenerateToggle(null, qcSubcontainer, "Moving Track or PathNode", string.Empty);
|
||||
qcWindow.GenerateButton(this, qcSubcontainer, "Copy", () =>
|
||||
{
|
||||
Vector3 positionOffset = new Vector3(xField.GetValue<float>(), yField.GetValue<float>(), zField.GetValue<float>());
|
||||
float timeOffset = timeField.GetValue<float>();
|
||||
int iteration = iterationField.GetValue<int>();
|
||||
bool includeAnimation = includeAnimationToggle.toggle.isOn;
|
||||
QuickCopy(positionOffset, timeOffset, includeAnimation, iteration);
|
||||
bool MovingTrack = MovingTrackToggle.toggle.isOn;
|
||||
QuickCopy(positionOffset, timeOffset, includeAnimation, iteration, MovingTrack);
|
||||
});
|
||||
}); //快速复制
|
||||
|
||||
|
||||
@@ -85,7 +85,7 @@ namespace Ichni.RhythmGame
|
||||
{
|
||||
base.Refresh();
|
||||
trackPositioner.motion.applyRotation = motionApplyRotation;
|
||||
this.transform.eulerAngles = Vector3.zero;
|
||||
this.transform.localEulerAngles = Vector3.zero;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -58,6 +58,7 @@ namespace Ichni.RhythmGame
|
||||
meshRenderer.material = renderMaterial;
|
||||
}
|
||||
|
||||
|
||||
public override void Refresh()
|
||||
{
|
||||
SetEnableZWrite();
|
||||
|
||||
@@ -15,7 +15,7 @@ namespace Ichni.RhythmGame
|
||||
/// <param name="unitPositionOffset">单位位置整体偏移</param>
|
||||
/// <param name="unitTimeOffset">单位时间偏移</param>
|
||||
/// <param name="iteration">迭代次数,即产生几个粘贴的Track</param>
|
||||
private void QuickCopy(Vector3 unitPositionOffset, float unitTimeOffset, bool includeAnimations = true, int iteration = 1)
|
||||
private void QuickCopy(Vector3 unitPositionOffset, float unitTimeOffset, bool includeAnimations = true, int iteration = 1, bool MovingTrack = false)
|
||||
{
|
||||
if (iteration <= 0) return;
|
||||
|
||||
@@ -29,14 +29,20 @@ namespace Ichni.RhythmGame
|
||||
float timeOffset = unitTimeOffset * i;
|
||||
|
||||
//以下:对Track的所有有效的Submodule和子GameElement进行偏移 TODO: 需要思考是否有统一时间偏移的方法?
|
||||
|
||||
if (MovingTrack)
|
||||
{
|
||||
newTrack.transformSubmodule.originalPosition += positionOffset;
|
||||
newTrack.transformSubmodule.Refresh();
|
||||
}
|
||||
else
|
||||
{
|
||||
//PathNode,位置偏移
|
||||
newTrack.trackPathSubmodule.pathNodeList.ForEach(pn =>
|
||||
{
|
||||
pn.transformSubmodule.originalPosition += positionOffset;
|
||||
pn.transformSubmodule.Refresh();
|
||||
});
|
||||
|
||||
}
|
||||
//TrackTimeSubmoduleMovable,时间偏移
|
||||
if (newTrack.trackTimeSubmodule is TrackTimeSubmoduleMovable movable)
|
||||
{
|
||||
|
||||
@@ -64,11 +64,13 @@ Material:
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _Tex:
|
||||
m_Texture: {fileID: 8900000, guid: 7ba462c2dc80b544eacfdc537aab22c6, type: 3}
|
||||
m_Texture: {fileID: -2081412111995923202, guid: 00000000000000000000000000000000,
|
||||
type: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _Tex2:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Texture: {fileID: -2081412111995923202, guid: 00000000000000000000000000000000,
|
||||
type: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Ints: []
|
||||
@@ -97,5 +99,5 @@ Material:
|
||||
- _Color: {r: 0, g: 0, b: 0, a: 0}
|
||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||
- _Tint: {r: 0.5, g: 0.5, b: 0.5, a: 0.5}
|
||||
- _Tint2: {r: 0.39999998, g: 0.39999998, b: 0.39999998, a: 0.5}
|
||||
- _Tint2: {r: 0.5, g: 0.5, b: 0.5, a: 0.5}
|
||||
m_BuildTextureStacks: []
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -35412,7 +35412,7 @@
|
||||
|
||||
],
|
||||
"elementGuid" : {
|
||||
"value" : "b4b7a104-03df-4244-ac78-41fbbb817120"
|
||||
"value" : "d60a0b0e-88b6-4517-be91-1ce89b84e276"
|
||||
},
|
||||
"attachedElementGuid" : {
|
||||
"value" : "ff8926ef-e06e-4f85-837f-2b3948290d18"
|
||||
@@ -35435,7 +35435,7 @@
|
||||
"z" : 1
|
||||
},
|
||||
"attachedElementGuid" : {
|
||||
"value" : "b4b7a104-03df-4244-ac78-41fbbb817120"
|
||||
"value" : "d60a0b0e-88b6-4517-be91-1ce89b84e276"
|
||||
}
|
||||
},{
|
||||
"__type" : "Ichni.RhythmGame.Beatmap.EffectSubmodule_BM,Assembly-CSharp",
|
||||
@@ -35475,7 +35475,7 @@
|
||||
]
|
||||
},
|
||||
"attachedElementGuid" : {
|
||||
"value" : "b4b7a104-03df-4244-ac78-41fbbb817120"
|
||||
"value" : "d60a0b0e-88b6-4517-be91-1ce89b84e276"
|
||||
}
|
||||
},{
|
||||
"__type" : "Ichni.RhythmGame.Beatmap.Tap_BM,Assembly-CSharp",
|
||||
@@ -45752,7 +45752,7 @@
|
||||
|
||||
],
|
||||
"elementGuid" : {
|
||||
"value" : "a591464c-d31e-4f8c-bc0f-608d5bf6ea6e"
|
||||
"value" : "a3a1e70d-37f3-45ef-91fa-73f3fe6ed698"
|
||||
},
|
||||
"attachedElementGuid" : {
|
||||
"value" : "ff8926ef-e06e-4f85-837f-2b3948290d18"
|
||||
@@ -45775,7 +45775,7 @@
|
||||
"z" : 1
|
||||
},
|
||||
"attachedElementGuid" : {
|
||||
"value" : "a591464c-d31e-4f8c-bc0f-608d5bf6ea6e"
|
||||
"value" : "a3a1e70d-37f3-45ef-91fa-73f3fe6ed698"
|
||||
}
|
||||
},{
|
||||
"__type" : "Ichni.RhythmGame.Beatmap.EffectSubmodule_BM,Assembly-CSharp",
|
||||
@@ -45845,7 +45845,7 @@
|
||||
]
|
||||
},
|
||||
"attachedElementGuid" : {
|
||||
"value" : "a591464c-d31e-4f8c-bc0f-608d5bf6ea6e"
|
||||
"value" : "a3a1e70d-37f3-45ef-91fa-73f3fe6ed698"
|
||||
}
|
||||
},{
|
||||
"__type" : "Ichni.RhythmGame.Beatmap.ElementFolder_BM,Assembly-CSharp",
|
||||
@@ -46142,7 +46142,7 @@
|
||||
},
|
||||
"originalEulerAngles" : {
|
||||
"x" : 0,
|
||||
"y" : 0,
|
||||
"y" : 180,
|
||||
"z" : 0
|
||||
},
|
||||
"originalScale" : {
|
||||
@@ -53809,7 +53809,7 @@
|
||||
},
|
||||
"originalEulerAngles" : {
|
||||
"x" : 0,
|
||||
"y" : 0,
|
||||
"y" : 180,
|
||||
"z" : 0
|
||||
},
|
||||
"originalScale" : {
|
||||
@@ -53903,7 +53903,7 @@
|
||||
},
|
||||
"originalEulerAngles" : {
|
||||
"x" : 0,
|
||||
"y" : 0,
|
||||
"y" : 180,
|
||||
"z" : 0
|
||||
},
|
||||
"originalScale" : {
|
||||
@@ -54841,7 +54841,7 @@
|
||||
|
||||
],
|
||||
"elementGuid" : {
|
||||
"value" : "d4f10d89-c1a6-4e6e-8d6f-acdfadc91b66"
|
||||
"value" : "f197ffae-7db8-425f-9991-bbc75e8f40cb"
|
||||
},
|
||||
"attachedElementGuid" : {
|
||||
"value" : "ff8926ef-e06e-4f85-837f-2b3948290d18"
|
||||
@@ -54864,7 +54864,7 @@
|
||||
"z" : 1
|
||||
},
|
||||
"attachedElementGuid" : {
|
||||
"value" : "d4f10d89-c1a6-4e6e-8d6f-acdfadc91b66"
|
||||
"value" : "f197ffae-7db8-425f-9991-bbc75e8f40cb"
|
||||
}
|
||||
},{
|
||||
"__type" : "Ichni.RhythmGame.Beatmap.EffectSubmodule_BM,Assembly-CSharp",
|
||||
@@ -54904,7 +54904,7 @@
|
||||
]
|
||||
},
|
||||
"attachedElementGuid" : {
|
||||
"value" : "d4f10d89-c1a6-4e6e-8d6f-acdfadc91b66"
|
||||
"value" : "f197ffae-7db8-425f-9991-bbc75e8f40cb"
|
||||
}
|
||||
},{
|
||||
"__type" : "Ichni.RhythmGame.Beatmap.ElementFolder_BM,Assembly-CSharp",
|
||||
@@ -60750,7 +60750,7 @@
|
||||
},
|
||||
"originalEulerAngles" : {
|
||||
"x" : 0,
|
||||
"y" : 0,
|
||||
"y" : 180,
|
||||
"z" : 0
|
||||
},
|
||||
"originalScale" : {
|
||||
|
||||
Binary file not shown.
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user