Signed-off-by: TRAfoer <lhf190@outlook.com>

This commit is contained in:
2025-08-09 19:13:11 +08:00
parent 8da603c702
commit 0ac0c6228d
15 changed files with 35121 additions and 2349 deletions

7
Assets/Assets.sln.meta Normal file
View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 459a7ea4ef65c664482b6377848ac5c3
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -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;

View File

@@ -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
View 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

View File

@@ -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);
// }
// }
}

View File

@@ -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);
});
}); //快速复制

View File

@@ -85,7 +85,7 @@ namespace Ichni.RhythmGame
{
base.Refresh();
trackPositioner.motion.applyRotation = motionApplyRotation;
this.transform.eulerAngles = Vector3.zero;
this.transform.localEulerAngles = Vector3.zero;
}
}

View File

@@ -58,6 +58,7 @@ namespace Ichni.RhythmGame
meshRenderer.material = renderMaterial;
}
public override void Refresh()
{
SetEnableZWrite();

View File

@@ -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)
{

View File

@@ -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

View File

@@ -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" : {

File diff suppressed because one or more lines are too long