ggg
This commit is contained in:
@@ -3,6 +3,7 @@ using System.Collections;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
|
using System.Threading.Tasks;
|
||||||
using Ichni.RhythmGame;
|
using Ichni.RhythmGame;
|
||||||
using Ichni.RhythmGame.Beatmap;
|
using Ichni.RhythmGame.Beatmap;
|
||||||
using Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse;
|
using Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse;
|
||||||
@@ -597,9 +598,19 @@ namespace Ichni.Editor
|
|||||||
}
|
}
|
||||||
public static void AdjustPathnodeZ(float OriginZpoint, float scale)
|
public static void AdjustPathnodeZ(float OriginZpoint, float scale)
|
||||||
{
|
{
|
||||||
if (inspector.connectedGameElement == null || inspector.connectedGameElement.GetType() != typeof(Track))
|
if (inspector.connectedGameElement == null)
|
||||||
{
|
{
|
||||||
LogWindow.Log("Please select a Track first!");
|
LogWindow.Log($"please select a element (folder or track)", Color.red);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (inspector.connectedGameElement.GetType() != typeof(Track))
|
||||||
|
{
|
||||||
|
foreach (var i in inspector.connectedGameElement.childElementList.OfType<Track>())
|
||||||
|
{
|
||||||
|
inspector.connectedGameElement = i;
|
||||||
|
AdjustPathnodeZ(OriginZpoint, scale);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Track track = (Track)inspector.connectedGameElement;
|
Track track = (Track)inspector.connectedGameElement;
|
||||||
@@ -618,6 +629,11 @@ namespace Ichni.Editor
|
|||||||
pathnode.transformSubmodule.Refresh();
|
pathnode.transformSubmodule.Refresh();
|
||||||
pathnode.Refresh();
|
pathnode.Refresh();
|
||||||
}
|
}
|
||||||
|
foreach (var i in track.childElementList.OfType<Track>())
|
||||||
|
{
|
||||||
|
inspector.connectedGameElement = i;
|
||||||
|
AdjustPathnodeZ(OriginZpoint, scale);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
public static void FloorAnim()
|
public static void FloorAnim()
|
||||||
{
|
{
|
||||||
@@ -728,7 +744,7 @@ namespace Ichni.Editor
|
|||||||
NewTrack.Refresh();
|
NewTrack.Refresh();
|
||||||
Observable.Timer(TimeSpan.FromSeconds(0.3f)).Subscribe(_ =>
|
Observable.Timer(TimeSpan.FromSeconds(0.3f)).Subscribe(_ =>
|
||||||
{
|
{
|
||||||
NewTrack?.trackPathSubmodule.path.Rebuild(true);
|
NewTrack?.trackPathSubmodule.path.RebuildImmediate(true, true);
|
||||||
DTMNoteVisualHold dTMNoteVisualHold = newHold.noteVisual as DTMNoteVisualHold;
|
DTMNoteVisualHold dTMNoteVisualHold = newHold.noteVisual as DTMNoteVisualHold;
|
||||||
dTMNoteVisualHold.meshGenerator.Rebuild();
|
dTMNoteVisualHold.meshGenerator.Rebuild();
|
||||||
});
|
});
|
||||||
@@ -748,12 +764,14 @@ namespace Ichni.Editor
|
|||||||
LogWindow.Log("the Hold may not be split currently", Color.yellow);
|
LogWindow.Log("the Hold may not be split currently", Color.yellow);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (var hold in holds)
|
foreach (var hold in holds)
|
||||||
{
|
{
|
||||||
inspector.connectedGameElement = hold;
|
inspector.connectedGameElement = hold;
|
||||||
SplitHoldToTrack(PathnodesCount);
|
SplitHoldToTrack(PathnodesCount);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Rebuild()
|
public static void Rebuild()
|
||||||
{
|
{
|
||||||
foreach (GameElement element in EditorManager.instance.beatmapContainer.gameElementList)
|
foreach (GameElement element in EditorManager.instance.beatmapContainer.gameElementList)
|
||||||
@@ -764,9 +782,12 @@ namespace Ichni.Editor
|
|||||||
}
|
}
|
||||||
foreach (Track track in element.GetAllGameElementsFromThis().OfType<Track>())
|
foreach (Track track in element.GetAllGameElementsFromThis().OfType<Track>())
|
||||||
{
|
{
|
||||||
track?.trackPathSubmodule.path.Rebuild(true);
|
track?.trackPathSubmodule.path.RebuildImmediate(true, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#if UNITY_EDITOR
|
||||||
|
UnityEditorInternal.InternalEditorUtility.RepaintAllViews();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -33,6 +33,8 @@ namespace Ichni.Editor
|
|||||||
|
|
||||||
public RectTransform GetinputArea;
|
public RectTransform GetinputArea;
|
||||||
|
|
||||||
|
private string BeatText;
|
||||||
|
private string TimeText;
|
||||||
public void Update()
|
public void Update()
|
||||||
{
|
{
|
||||||
if (EditorManager.instance.musicPlayer.isPlaying) UpdateTime();
|
if (EditorManager.instance.musicPlayer.isPlaying) UpdateTime();
|
||||||
@@ -43,7 +45,14 @@ namespace Ichni.Editor
|
|||||||
DetectSetRange();
|
DetectSetRange();
|
||||||
DetectPointer();
|
DetectPointer();
|
||||||
}
|
}
|
||||||
|
if (BeatField.text != BeatText)
|
||||||
|
{
|
||||||
|
BeatField.text = BeatText;
|
||||||
|
}
|
||||||
|
if (TimeField.text != TimeText)
|
||||||
|
{
|
||||||
|
TimeField.text = TimeText;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -154,8 +163,8 @@ namespace Ichni.Editor
|
|||||||
}
|
}
|
||||||
private void UpdateTime()
|
private void UpdateTime()
|
||||||
{
|
{
|
||||||
TimeField.text = songTime.ToString("F2");
|
TimeText = songTime.ToString("F2");
|
||||||
BeatField.text = songBeat.ToString("F2");
|
BeatText = songBeat.ToString("F2");
|
||||||
}
|
}
|
||||||
|
|
||||||
private Tweener _activeTweener = null; // 保存当前动画的引用
|
private Tweener _activeTweener = null; // 保存当前动画的引用
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -178,7 +178,7 @@ MonoBehaviour:
|
|||||||
_offset: {x: 0, y: 0, z: 0}
|
_offset: {x: 0, y: 0, z: 0}
|
||||||
_normalMethod: 1
|
_normalMethod: 1
|
||||||
_calculateTangents: 1
|
_calculateTangents: 1
|
||||||
_useSplineSize: 1
|
_useSplineSize: 0
|
||||||
_useSplineColor: 0
|
_useSplineColor: 0
|
||||||
_rotation: 0
|
_rotation: 0
|
||||||
_flipFaces: 0
|
_flipFaces: 0
|
||||||
@@ -478,8 +478,8 @@ MonoBehaviour:
|
|||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
serializationData:
|
serializationData:
|
||||||
SerializedFormat: 2
|
SerializedFormat: 0
|
||||||
SerializedBytes:
|
SerializedBytes: 29010b00000065006c0065006d0065006e00740047007500690064000000000000000000000000000000000001010d0000007300750062006d006f00640075006c0065004c006900730074002f00000000015e000000530079007300740065006d002e0043006f006c006c0065006300740069006f006e0073002e00470065006e0065007200690063002e004c00690073007400600031005b005b004900630068006e0069002e00520068007900740068006d00470061006d0065002e005300750062006d006f00640075006c00650042006100730065002c00200041007300730065006d0062006c0079002d004300530068006100720070005d005d002c0020006d00730063006f0072006c00690062000000000006000000000000000007052d010b00000065006e00610062006c006500540079007000650073000101120000006e006f0072006d0061006c004d006100740065007200690061006c004c006900730074002f01000000018a000000530079007300740065006d002e0043006f006c006c0065006300740069006f006e0073002e00470065006e0065007200690063002e004c00690073007400600031005b005b00530079007300740065006d002e0043006f006c006c0065006300740069006f006e0073002e00470065006e0065007200690063002e004c00690073007400600031005b005b0055006e0069007400790045006e00670069006e0065002e004d006100740065007200690061006c002c00200055006e0069007400790045006e00670069006e0065002e0043006f00720065004d006f00640075006c0065005d005d002c0020006d00730063006f0072006c00690062005d005d002c0020006d00730063006f0072006c006900620001000000060100000000000000022f02000000015b000000530079007300740065006d002e0043006f006c006c0065006300740069006f006e0073002e00470065006e0065007200690063002e004c00690073007400600031005b005b0055006e0069007400790045006e00670069006e0065002e004d006100740065007200690061006c002c00200055006e0069007400790045006e00670069006e0065002e0043006f00720065004d006f00640075006c0065005d005d002c0020006d00730063006f0072006c0069006200020000000602000000000000000c000000000c010000000705070501011500000068006900670068006c0069006700680074004d006100740065007200690061006c004c00690073007400300100000003000000060100000000000000023002000000040000000602000000000000000c000000000c0100000007050705
|
||||||
ReferencedUnityObjects:
|
ReferencedUnityObjects:
|
||||||
- {fileID: 2100000, guid: 70eba7194a9d81d40a263caa11f23d33, type: 2}
|
- {fileID: 2100000, guid: 70eba7194a9d81d40a263caa11f23d33, type: 2}
|
||||||
- {fileID: 2100000, guid: 0db768b5d1363e64a9994db21d7695b3, type: 2}
|
- {fileID: 2100000, guid: 0db768b5d1363e64a9994db21d7695b3, type: 2}
|
||||||
@@ -487,90 +487,7 @@ MonoBehaviour:
|
|||||||
Prefab: {fileID: 0}
|
Prefab: {fileID: 0}
|
||||||
PrefabModificationsReferencedUnityObjects: []
|
PrefabModificationsReferencedUnityObjects: []
|
||||||
PrefabModifications: []
|
PrefabModifications: []
|
||||||
SerializationNodes:
|
SerializationNodes: []
|
||||||
- Name: elementGuid
|
|
||||||
Entry: 2
|
|
||||||
Data: 00000000000000000000000000000000
|
|
||||||
- Name: submoduleList
|
|
||||||
Entry: 7
|
|
||||||
Data: 0|System.Collections.Generic.List`1[[Ichni.RhythmGame.SubmoduleBase,
|
|
||||||
Assembly-CSharp]], mscorlib
|
|
||||||
- Name:
|
|
||||||
Entry: 12
|
|
||||||
Data: 0
|
|
||||||
- Name:
|
|
||||||
Entry: 13
|
|
||||||
Data:
|
|
||||||
- Name:
|
|
||||||
Entry: 8
|
|
||||||
Data:
|
|
||||||
- Name: enableTypes
|
|
||||||
Entry: 6
|
|
||||||
Data:
|
|
||||||
- Name: normalMaterialList
|
|
||||||
Entry: 7
|
|
||||||
Data: 1|System.Collections.Generic.List`1[[System.Collections.Generic.List`1[[UnityEngine.Material,
|
|
||||||
UnityEngine.CoreModule]], mscorlib]], mscorlib
|
|
||||||
- Name:
|
|
||||||
Entry: 12
|
|
||||||
Data: 1
|
|
||||||
- Name:
|
|
||||||
Entry: 7
|
|
||||||
Data: 2|System.Collections.Generic.List`1[[UnityEngine.Material, UnityEngine.CoreModule]],
|
|
||||||
mscorlib
|
|
||||||
- Name:
|
|
||||||
Entry: 12
|
|
||||||
Data: 2
|
|
||||||
- Name:
|
|
||||||
Entry: 10
|
|
||||||
Data: 0
|
|
||||||
- Name:
|
|
||||||
Entry: 10
|
|
||||||
Data: 1
|
|
||||||
- Name:
|
|
||||||
Entry: 13
|
|
||||||
Data:
|
|
||||||
- Name:
|
|
||||||
Entry: 8
|
|
||||||
Data:
|
|
||||||
- Name:
|
|
||||||
Entry: 13
|
|
||||||
Data:
|
|
||||||
- Name:
|
|
||||||
Entry: 8
|
|
||||||
Data:
|
|
||||||
- Name: highlightMaterialList
|
|
||||||
Entry: 7
|
|
||||||
Data: 3|System.Collections.Generic.List`1[[System.Collections.Generic.List`1[[UnityEngine.Material,
|
|
||||||
UnityEngine.CoreModule]], mscorlib]], mscorlib
|
|
||||||
- Name:
|
|
||||||
Entry: 12
|
|
||||||
Data: 1
|
|
||||||
- Name:
|
|
||||||
Entry: 7
|
|
||||||
Data: 4|System.Collections.Generic.List`1[[UnityEngine.Material, UnityEngine.CoreModule]],
|
|
||||||
mscorlib
|
|
||||||
- Name:
|
|
||||||
Entry: 12
|
|
||||||
Data: 2
|
|
||||||
- Name:
|
|
||||||
Entry: 10
|
|
||||||
Data: 0
|
|
||||||
- Name:
|
|
||||||
Entry: 10
|
|
||||||
Data: 1
|
|
||||||
- Name:
|
|
||||||
Entry: 13
|
|
||||||
Data:
|
|
||||||
- Name:
|
|
||||||
Entry: 8
|
|
||||||
Data:
|
|
||||||
- Name:
|
|
||||||
Entry: 13
|
|
||||||
Data:
|
|
||||||
- Name:
|
|
||||||
Entry: 8
|
|
||||||
Data:
|
|
||||||
elementName:
|
elementName:
|
||||||
tags: []
|
tags: []
|
||||||
parentElement: {fileID: 0}
|
parentElement: {fileID: 0}
|
||||||
|
|||||||
@@ -1,128 +1,294 @@
|
|||||||
# 更新版 Console 文档
|
# Editor Console 方法文档
|
||||||
|
|
||||||
## Console概要
|
## 概述
|
||||||
|
Editor Console 是游戏编辑器中的命令行系统,用于执行各种便捷操作。按 **`~`** 键(Esc下方)打开控制台,支持历史记录和参数自动补全。
|
||||||
|
|
||||||
Editor内有console系统,用于执行某些方便的操作。
|
## 基础操作
|
||||||
|
|
||||||
在编辑界面内按 **`** 键(Esc键下方)可以唤出console输入框,输入完成后按Enter键执行指令。
|
### `tp(Vector3 pos)`
|
||||||
|
将场景相机移动到指定坐标
|
||||||
|
|
||||||
输入框支持上下文历史记录,按上下箭头可浏览历史指令。
|
**示例**:
|
||||||
|
|
||||||
输入格式:
|
|
||||||
- **func "abc123" 1 2 [0,1,2]**
|
|
||||||
- 或 **func(1,2,3,"a",[1,2,3])**
|
|
||||||
- 字符串需双引号包裹(`"abc123"`)
|
|
||||||
- 向量需中括号包裹(`[0,0,1]`)
|
|
||||||
|
|
||||||
执行失败时会在Log Window显示错误信息。部分指令依赖Inspector窗口当前选中对象,请提前选择目标对象。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 命令列表
|
|
||||||
|
|
||||||
### 基础操作
|
|
||||||
```csharp
|
```csharp
|
||||||
tp(Vector3 pos)
|
tp [10,5,0] // 移动到坐标(10,5,0)
|
||||||
|
tp [0,2,-3] // 移动到坐标(0,2,-3)
|
||||||
|
tp(0, 0, 15) // 使用括号格式
|
||||||
```
|
```
|
||||||
- 将场景相机移动到指定坐标
|
|
||||||
- 示例:`tp [10,5,0]`
|
|
||||||
|
|
||||||
|
### `tp()`
|
||||||
|
将场景相机移动到当前选中对象的位置
|
||||||
|
|
||||||
|
**示例**:
|
||||||
```csharp
|
```csharp
|
||||||
tp()
|
tp // 直接传送到选中对象位置
|
||||||
```
|
```
|
||||||
- 将场景相机移动到当前选中对象的位置
|
> **要求**: Inspector中必须选中对象
|
||||||
- 需在Inspector中选中对象
|
|
||||||
|
|
||||||
|
### `ReName(string message)`
|
||||||
|
重命名当前选中对象
|
||||||
|
|
||||||
|
**示例**:
|
||||||
```csharp
|
```csharp
|
||||||
ReName(string message)
|
ReName "NewTrackName"
|
||||||
|
ReName "PlayerSpawnPoint"
|
||||||
|
ReName("EnemyPath_01") // 括号格式
|
||||||
```
|
```
|
||||||
- 重命名当前选中对象
|
|
||||||
- 示例:`ReName "NewTrackName"`
|
|
||||||
|
|
||||||
### 路径生成
|
## 路径生成
|
||||||
|
|
||||||
|
### `Lgp(int loop, Vector3 start, Vector3 end, bool Clear = false, bool offsetOrigin = false)`
|
||||||
|
在选中的Track上生成线性路径节点
|
||||||
|
|
||||||
|
**参数**:
|
||||||
|
- `loop`: 节点数量(必须大于1)
|
||||||
|
- `start`: 起始坐标
|
||||||
|
- `end`: 结束坐标
|
||||||
|
- `Clear`: 是否清除现有节点
|
||||||
|
- `offsetOrigin`: 是否基于原节点变换偏移
|
||||||
|
|
||||||
|
**示例**:
|
||||||
```csharp
|
```csharp
|
||||||
Lgp(int loop, Vector3 start, Vector3 end)
|
Lgp 10 [0,0,0] [5,0,5] // 生成10个节点的直线
|
||||||
|
Lgp 5 [1,2,3] [10,2,3] true // 清除旧节点后生成新路径
|
||||||
|
Lgp 8 [0,0,0] [0,10,0] false true // 保留并偏移原有节点
|
||||||
```
|
```
|
||||||
- 在选中的Track上生成线性路径节点
|
|
||||||
- 参数:
|
|
||||||
- `loop`:生成节点数量
|
|
||||||
- `start`:起始坐标
|
|
||||||
- `end`:结束坐标
|
|
||||||
- 示例:`Lgp 10 [0,0,0] [5,0,5]`
|
|
||||||
|
|
||||||
|
### `Spiral` 螺旋路径生成
|
||||||
|
|
||||||
|
#### 主轴方向螺旋
|
||||||
```csharp
|
```csharp
|
||||||
Spiral(int loop, Vector3 center, float r, float h, int pointsPerTurn, string axis = "y")
|
Spiral(int loop, Vector3 center, float r, float h, int pointsPerTurn, string axis = "y")
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 自定义方向螺旋
|
||||||
|
```csharp
|
||||||
Spiral(int loop, Vector3 center, float r, float h, int pointsPerTurn, Vector3 dir)
|
Spiral(int loop, Vector3 center, float r, float h, int pointsPerTurn, Vector3 dir)
|
||||||
```
|
```
|
||||||
- 在选中的Track上生成螺旋路径节点
|
|
||||||
- 参数:
|
|
||||||
- `loop`:总节点数
|
|
||||||
- `center`:螺旋中心点
|
|
||||||
- `r`:螺旋半径
|
|
||||||
- `h`:螺旋高度
|
|
||||||
- `pointsPerTurn`:每圈节点数
|
|
||||||
- `axis`:主轴方向("x"/"y"/"z")
|
|
||||||
- `dir`:自定义方向向量
|
|
||||||
- 示例:`Spiral 20 [0,0,0] 3 10 8 "z"`
|
|
||||||
|
|
||||||
### 数据处理
|
**示例**:
|
||||||
```csharp
|
```csharp
|
||||||
SamplerImport(string inputData)
|
// Y轴螺旋(默认)
|
||||||
```
|
Spiral 20 [0,0,0] 3 10 8
|
||||||
- 导入采样器格式的音符数据
|
|
||||||
- 数据格式:`(动作类型, 轨道ID, 时间戳, X值, [Hold持续时间])`
|
|
||||||
- 支持动作类型:Tap, Stay, Hold, Flick
|
|
||||||
- 示例:`SamplerImport "(Tap, Track1, 12.5, 3.2)"`
|
|
||||||
|
|
||||||
### 音符操作
|
// Z轴螺旋
|
||||||
|
Spiral 20 [0,0,0] 3 10 8 "z"
|
||||||
|
|
||||||
|
// 自定义方向螺旋
|
||||||
|
Spiral 15 [1,2,3] 2 5 6 [1,1,0]
|
||||||
|
|
||||||
|
// 复杂螺旋路径
|
||||||
|
Spiral(30, [5,0,5], 4.0, 15.0, 10, [0,1,1])
|
||||||
|
```
|
||||||
|
|
||||||
|
## 数据处理
|
||||||
|
|
||||||
|
### `SamplerImport(string inputData)`
|
||||||
|
导入采样器格式的音符数据
|
||||||
|
|
||||||
|
**数据格式**: `(动作类型, 轨道ID, 时间戳, X值, [Hold持续时间])`
|
||||||
|
|
||||||
|
**支持的动作类型**:
|
||||||
|
- `Tap`: 点击音符
|
||||||
|
- `Stay`: 停留音符
|
||||||
|
- `Hold`: 长按音符(需要持续时间)
|
||||||
|
- `Flick`: 滑动音符
|
||||||
|
|
||||||
|
**示例**:
|
||||||
```csharp
|
```csharp
|
||||||
SetNoteHLInGame(bool forceSetOff = false, bool SameTheme = false)
|
// 单个音符导入
|
||||||
```
|
SamplerImport "(Tap, Track1, 12.5, 3.2)"
|
||||||
- 全局高亮重复时间点的音符
|
|
||||||
- 参数:
|
|
||||||
- `forceSetOff`:是否先关闭所有高亮
|
|
||||||
- `SameTheme`:是否要求音符类型相同
|
|
||||||
|
|
||||||
|
// 多个音符批量导入
|
||||||
|
SamplerImport "(Tap, MainTrack, 10.0, 1.5)\n(Hold, SideTrack, 15.0, -2.1, 3.5)"
|
||||||
|
|
||||||
|
// 复杂序列
|
||||||
|
SamplerImport "
|
||||||
|
(Tap, RedTrack, 5.2, 0.0)
|
||||||
|
(Stay, BlueTrack, 7.8, 2.5)
|
||||||
|
(Hold, GreenTrack, 12.3, -1.0, 4.2)
|
||||||
|
(Flick, YellowTrack, 18.6, 3.0)
|
||||||
|
"
|
||||||
|
```
|
||||||
|
|
||||||
|
### `ExportNotesFromTrack()`
|
||||||
|
导出当前Track下所有音符为正则格式文本
|
||||||
|
|
||||||
|
**示例**:
|
||||||
```csharp
|
```csharp
|
||||||
SetNoteHLInElement(bool forceSetOff = false, bool SameTheme = false)
|
ExportNotesFromTrack // 自动复制到剪贴板
|
||||||
```
|
```
|
||||||
- 在当前元素内高亮重复时间点的音符
|
> **输出示例**:
|
||||||
- 参数同上
|
> ```
|
||||||
|
> (Tap, MainTrack, 5.200, 0.000)
|
||||||
|
> (Stay, MainTrack, 7.800, 2.500)
|
||||||
|
> (Hold, MainTrack, 12.300, -1.000, 4.200)
|
||||||
|
> ```
|
||||||
|
|
||||||
|
## 音符操作
|
||||||
|
|
||||||
|
### `SetNoteHLInGame(bool forceSetOff = false, bool SameTheme = false)`
|
||||||
|
全局高亮重复时间点的音符
|
||||||
|
|
||||||
|
**示例**:
|
||||||
```csharp
|
```csharp
|
||||||
AttachNoteInNearestTrail()
|
SetNoteHLInGame // 高亮所有重复时间点音符
|
||||||
|
SetNoteHLInGame true // 先关闭所有高亮再重新高亮
|
||||||
|
SetNoteHLInGame false true // 只高亮同类型重复音符
|
||||||
```
|
```
|
||||||
- 将轨道上的音符吸附到最近的轨迹线
|
|
||||||
- 需选中Track对象
|
|
||||||
|
|
||||||
### 动画操作
|
### `SetNoteHLInElement(bool forceSetOff = false, bool SameTheme = false)`
|
||||||
|
在当前元素内高亮重复时间点的音符
|
||||||
|
|
||||||
|
**示例**:
|
||||||
```csharp
|
```csharp
|
||||||
swapDisplacement()
|
SetNoteHLInElement // 在当前选中的Track内高亮
|
||||||
|
SetNoteHLInElement true // 重置后高亮
|
||||||
```
|
```
|
||||||
- 反转位移动画方向(正负值互换)
|
|
||||||
- 需选中Displacement元素
|
|
||||||
|
|
||||||
|
### `AttachNoteInNearestTrail()`
|
||||||
|
将轨道上的音符吸附到最近的轨迹线
|
||||||
|
|
||||||
|
**示例**:
|
||||||
```csharp
|
```csharp
|
||||||
swapSwirl()
|
AttachNoteInNearestTrail // 自动吸附所有音符到最近轨迹
|
||||||
```
|
```
|
||||||
- 反转旋转动画方向
|
> **要求**: 必须选中Track对象
|
||||||
- 需选中Swirl元素
|
|
||||||
|
|
||||||
|
## 动画操作
|
||||||
|
|
||||||
|
### `swapDisplacement()`
|
||||||
|
反转位移动画方向(正负值互换)
|
||||||
|
|
||||||
|
**示例**:
|
||||||
```csharp
|
```csharp
|
||||||
swapScale()
|
swapDisplacement // 将选中的位移动画反向
|
||||||
```
|
```
|
||||||
- 反转缩放动画方向
|
> **要求**: 选中Displacement元素
|
||||||
- 需选中Scale元素
|
|
||||||
|
|
||||||
### 对象管理
|
### `swapSwirl()`
|
||||||
|
反转旋转动画方向
|
||||||
|
|
||||||
|
**示例**:
|
||||||
```csharp
|
```csharp
|
||||||
DelSameInParent()
|
swapSwirl // 反转旋转动画
|
||||||
```
|
```
|
||||||
- 删除父对象中所有同类型的兄弟元素(包括自身)
|
> **要求**: 选中Swirl元素
|
||||||
- 示例:删除当前选中类型的所有同级对象
|
|
||||||
|
|
||||||
---
|
### `swapScale()`
|
||||||
|
反转缩放动画方向
|
||||||
|
|
||||||
## 其他
|
**示例**:
|
||||||
|
```csharp
|
||||||
|
swapScale // 反转缩放动画
|
||||||
|
```
|
||||||
|
> **要求**: 选中Scale元素
|
||||||
|
|
||||||
更多功能持续开发中。使用console时可参考编辑器内的自动补全提示和参数类型检查功能。
|
### `FloorAnim()`
|
||||||
|
为动画属性添加0时刻关键帧
|
||||||
|
|
||||||
|
**示例**:
|
||||||
|
```csharp
|
||||||
|
FloorAnim // 确保所有动画从时间0开始
|
||||||
|
```
|
||||||
|
|
||||||
|
## 对象管理
|
||||||
|
|
||||||
|
### `DelSameInParent()`
|
||||||
|
删除父对象中所有同类型的兄弟元素(包括自身)
|
||||||
|
|
||||||
|
**示例**:
|
||||||
|
```csharp
|
||||||
|
DelSameInParent // 删除当前选中类型的所有同级对象
|
||||||
|
```
|
||||||
|
|
||||||
|
### `AdjustPathnodeZ(float OriginZpoint, float scale)`
|
||||||
|
调整PathNode的Z坐标缩放
|
||||||
|
|
||||||
|
**示例**:
|
||||||
|
```csharp
|
||||||
|
AdjustPathnodeZ 0 2.0 // 以Z=0为原点,2倍缩放
|
||||||
|
AdjustPathnodeZ 5 0.5 // 以Z=5为原点,缩小一半
|
||||||
|
```
|
||||||
|
|
||||||
|
## 高级功能
|
||||||
|
|
||||||
|
### `SplitHoldToTrack(int PathnodesCount)`
|
||||||
|
将选中的Hold音符分割为带路径的新Track
|
||||||
|
|
||||||
|
**示例**:
|
||||||
|
```csharp
|
||||||
|
SplitHoldToTrack 5 // 分割为5个路径节点的Track
|
||||||
|
SplitHoldToTrack 10 // 更精细的分割
|
||||||
|
```
|
||||||
|
> **要求**: 选中Hold对象,父Track为Movable类型
|
||||||
|
|
||||||
|
### `SplitAllHoldToTrack(int PathnodesCount)`
|
||||||
|
将Track下所有Hold音符分割
|
||||||
|
|
||||||
|
**示例**:
|
||||||
|
```csharp
|
||||||
|
SplitAllHoldToTrack 5 // 分割当前Track下所有Hold音符
|
||||||
|
```
|
||||||
|
> **要求**: 选中Track对象
|
||||||
|
|
||||||
|
### `Rebuild()`
|
||||||
|
强制刷新所有游戏元素和轨道路径
|
||||||
|
|
||||||
|
**示例**:
|
||||||
|
```csharp
|
||||||
|
Rebuild // 完全重建场景,解决显示问题
|
||||||
|
```
|
||||||
|
|
||||||
|
## 使用技巧
|
||||||
|
|
||||||
|
### 参数格式
|
||||||
|
```csharp
|
||||||
|
// 空格分隔格式
|
||||||
|
func "abc" 1 2 [0,1,2]
|
||||||
|
|
||||||
|
// 括号分隔格式
|
||||||
|
func("abc", 1, 2, [0,1,2])
|
||||||
|
|
||||||
|
// 混合使用
|
||||||
|
Lgp 10 [0,0,0] [5,5,5] true
|
||||||
|
```
|
||||||
|
|
||||||
|
### 常用工作流示例
|
||||||
|
|
||||||
|
**快速创建路径**:
|
||||||
|
```csharp
|
||||||
|
// 1. 选择Track
|
||||||
|
// 2. 生成直线路径
|
||||||
|
Lgp 8 [0,0,0] [10,0,5]
|
||||||
|
|
||||||
|
// 3. 生成螺旋补充
|
||||||
|
Spiral 12 [5,2,2] 2 6 4
|
||||||
|
```
|
||||||
|
|
||||||
|
**批量处理音符**:
|
||||||
|
```csharp
|
||||||
|
// 1. 导入数据
|
||||||
|
SamplerImport "(Tap, Track1, 5.0, 1.0)"
|
||||||
|
|
||||||
|
// 2. 检查重复音符
|
||||||
|
SetNoteHLInGame
|
||||||
|
|
||||||
|
// 3. 吸附到轨迹
|
||||||
|
AttachNoteInNearestTrail
|
||||||
|
|
||||||
|
// 4. 导出验证
|
||||||
|
ExportNotesFromTrack
|
||||||
|
```
|
||||||
|
|
||||||
|
## 故障排除
|
||||||
|
|
||||||
|
- **对象未选中**: "Please select a Track first!"
|
||||||
|
- **参数错误**: "Loop must be greater than 1!"
|
||||||
|
- **类型不匹配**: "Please select a Displacement first!"
|
||||||
|
- **功能未启用**: "Please enable 'Note Prefab' in EditorManager"
|
||||||
|
|
||||||
|
使用前请确认:
|
||||||
|
1. 正确选中目标对象
|
||||||
|
2. 参数类型和数量匹配
|
||||||
|
3. 相关功能已启用(如Note Prefab)
|
||||||
|
4. 操作前建议保存工程
|
||||||
Reference in New Issue
Block a user