文档,给那些工具挪窝

This commit is contained in:
2025-06-07 00:01:54 +08:00
parent 4497c3b3da
commit 26e5d302be
38 changed files with 408 additions and 1821 deletions

View File

@@ -49,10 +49,10 @@ MonoBehaviour:
m_addressable:
m_atlas:
m_fileSize: 26192
m_assetChangeTS: 1748796846
m_fileInfoReadTS: 1748796858
m_fileWriteTS: 1748796846
m_cachefileWriteTS: 1748796846
m_assetChangeTS: 1749103872
m_fileInfoReadTS: 1749103883
m_fileWriteTS: 1749103872
m_cachefileWriteTS: 1749103872
refreshStamp: 2
UseGUIDsList: []
- guid: 00000000000000005000000000000000
@@ -1851,8 +1851,8 @@ MonoBehaviour:
m_addressable:
m_atlas:
m_fileSize: 8241
m_assetChangeTS: 1748595572
m_fileInfoReadTS: 1748595588
m_assetChangeTS: 1749103900
m_fileInfoReadTS: 1749103903
m_fileWriteTS: 1748595308
m_cachefileWriteTS: 1748595308
refreshStamp: 2
@@ -7166,15 +7166,15 @@ MonoBehaviour:
UseGUIDsList: []
- guid: 7006cf01f592ed54593fb8a4f7fc5f97
type: 5
m_fileInfoHash: 2162.prefab
m_fileInfoHash: 2088.prefab
m_assetbundle:
m_addressable:
m_atlas:
m_fileSize: 2162
m_assetChangeTS: 0
m_fileInfoReadTS: 1747758837
m_fileWriteTS: 1746119252
m_cachefileWriteTS: 1746119252
m_fileSize: 2088
m_assetChangeTS: 1749103910
m_fileInfoReadTS: 1749103911
m_fileWriteTS: 1746088394
m_cachefileWriteTS: 1746088394
refreshStamp: 2
UseGUIDsList:
- guid: 1344c3c82d62a2a41a3576d8abb8e3ea
@@ -20037,8 +20037,8 @@ MonoBehaviour:
m_addressable:
m_atlas:
m_fileSize: 84386
m_assetChangeTS: 1748589050
m_fileInfoReadTS: 1748589074
m_assetChangeTS: 1749103910
m_fileInfoReadTS: 1749103911
m_fileWriteTS: 1746886071
m_cachefileWriteTS: 1746886071
refreshStamp: 2
@@ -24374,15 +24374,15 @@ MonoBehaviour:
UseGUIDsList: []
- guid: 914dd73ddae7943148ea71537167542b
type: 2
m_fileInfoHash: 10357.cs
m_fileInfoHash: 10356.cs
m_assetbundle:
m_addressable:
m_atlas:
m_fileSize: 10357
m_fileSize: 10356
m_assetChangeTS: 1748797267
m_fileInfoReadTS: 1748796841
m_fileWriteTS: 1748796829
m_cachefileWriteTS: 0
m_fileInfoReadTS: 1749103250
m_fileWriteTS: 1749102885
m_cachefileWriteTS: 1749102885
refreshStamp: 2
UseGUIDsList: []
- guid: 915dabe870142d4eb34a5dbf62d6df68
@@ -47993,15 +47993,15 @@ MonoBehaviour:
UseGUIDsList: []
- guid: 53e14ab421bb98b48b1d276bf32cddd2
type: 5
m_fileInfoHash: 25710.prefab
m_fileInfoHash: 24864.prefab
m_assetbundle:
m_addressable:
m_atlas:
m_fileSize: 25710
m_assetChangeTS: 0
m_fileInfoReadTS: 1747758830
m_fileWriteTS: 1746895565
m_cachefileWriteTS: 1746895565
m_fileSize: 24864
m_assetChangeTS: 1749103910
m_fileInfoReadTS: 1749103911
m_fileWriteTS: 1746870545
m_cachefileWriteTS: 1746870545
refreshStamp: 2
UseGUIDsList:
- guid: b4c5757a536b2e14bbb3c3fa2ed0a8e4
@@ -64698,8 +64698,8 @@ MonoBehaviour:
m_addressable:
m_atlas:
m_fileSize: 0
m_assetChangeTS: 0
m_fileInfoReadTS: 1747758827
m_assetChangeTS: 1749103910
m_fileInfoReadTS: 1749103911
m_fileWriteTS: 0
m_cachefileWriteTS: 0
refreshStamp: 2
@@ -67501,15 +67501,15 @@ MonoBehaviour:
UseGUIDsList: []
- guid: a48a638548bdb6645bfa74867dc72087
type: 2
m_fileInfoHash: 10258.cs
m_fileInfoHash: 9178.cs
m_assetbundle:
m_addressable:
m_atlas:
m_fileSize: 10258
m_assetChangeTS: 1748595572
m_fileInfoReadTS: 1748595588
m_fileWriteTS: 1748595562
m_cachefileWriteTS: 1748595562
m_fileSize: 9178
m_assetChangeTS: 1749184022
m_fileInfoReadTS: 1749184269
m_fileWriteTS: 1749104436
m_cachefileWriteTS: 1749104436
refreshStamp: 2
UseGUIDsList: []
- guid: a48a9e08d9023374fab5d929e609b9bd
@@ -68234,10 +68234,10 @@ MonoBehaviour:
m_addressable:
m_atlas:
m_fileSize: 11267
m_assetChangeTS: 0
m_fileInfoReadTS: 1747758827
m_fileWriteTS: 1746895565
m_cachefileWriteTS: 1746895565
m_assetChangeTS: 1749103900
m_fileInfoReadTS: 1749103903
m_fileWriteTS: 1746873108
m_cachefileWriteTS: 1746873108
refreshStamp: 2
UseGUIDsList: []
- guid: b43651fb085b38445ade3f9de3ab0636
@@ -82559,8 +82559,8 @@ MonoBehaviour:
m_addressable:
m_atlas:
m_fileSize: 0
m_assetChangeTS: 0
m_fileInfoReadTS: 1747758825
m_assetChangeTS: 1749103910
m_fileInfoReadTS: 1749103911
m_fileWriteTS: 0
m_cachefileWriteTS: 0
refreshStamp: 2
@@ -82853,15 +82853,15 @@ MonoBehaviour:
UseGUIDsList: []
- guid: b56a53ecbd73dca4aa3152504b1ca92d
type: 5
m_fileInfoHash: 6934.prefab
m_fileInfoHash: 6712.prefab
m_assetbundle:
m_addressable:
m_atlas:
m_fileSize: 6934
m_assetChangeTS: 0
m_fileInfoReadTS: 1747758825
m_fileWriteTS: 1746895565
m_cachefileWriteTS: 1746895565
m_fileSize: 6712
m_assetChangeTS: 1749103910
m_fileInfoReadTS: 1749103911
m_fileWriteTS: 1746884964
m_cachefileWriteTS: 1746884964
refreshStamp: 2
UseGUIDsList:
- guid: 1344c3c82d62a2a41a3576d8abb8e3ea
@@ -85692,15 +85692,15 @@ MonoBehaviour:
UseGUIDsList: []
- guid: e53cd577e34d8df41b51ef212682a5b6
type: 5
m_fileInfoHash: 2254.prefab
m_fileInfoHash: 2177.prefab
m_assetbundle:
m_addressable:
m_atlas:
m_fileSize: 2254
m_assetChangeTS: 0
m_fileInfoReadTS: 1747758824
m_fileWriteTS: 1742680962
m_cachefileWriteTS: 1742680962
m_fileSize: 2177
m_assetChangeTS: 1749103910
m_fileInfoReadTS: 1749103911
m_fileWriteTS: 1740760198
m_cachefileWriteTS: 1740760198
refreshStamp: 2
UseGUIDsList:
- guid: fe87c0e1cc204ed48ad3b37840f39efc
@@ -112921,15 +112921,15 @@ MonoBehaviour:
UseGUIDsList: []
- guid: d73d411fb33ebdd489321f08668d0673
type: 5
m_fileInfoHash: 2158.prefab
m_fileInfoHash: 2084.prefab
m_assetbundle:
m_addressable:
m_atlas:
m_fileSize: 2158
m_assetChangeTS: 0
m_fileInfoReadTS: 1747758820
m_fileWriteTS: 1746895565
m_cachefileWriteTS: 1746895565
m_fileSize: 2084
m_assetChangeTS: 1749103910
m_fileInfoReadTS: 1749103911
m_fileWriteTS: 1746885929
m_cachefileWriteTS: 1746885929
refreshStamp: 2
UseGUIDsList:
- guid: 1344c3c82d62a2a41a3576d8abb8e3ea
@@ -143844,10 +143844,10 @@ MonoBehaviour:
m_addressable:
m_atlas:
m_fileSize: 8948
m_assetChangeTS: 0
m_fileInfoReadTS: 1747758815
m_fileWriteTS: 1746895565
m_cachefileWriteTS: 1746895565
m_assetChangeTS: 1749103865
m_fileInfoReadTS: 1749103883
m_fileWriteTS: 1746885467
m_cachefileWriteTS: 1746885467
refreshStamp: 2
UseGUIDsList: []
- guid: f9ecc84bea2f775498b7ec65b3810570
@@ -150026,15 +150026,15 @@ MonoBehaviour:
UseGUIDsList: []
- guid: 6a0b7de67a0025a44977db34773ec53c
type: 5
m_fileInfoHash: 235801.prefab
m_fileInfoHash: 228086.prefab
m_assetbundle:
m_addressable:
m_atlas:
m_fileSize: 235801
m_assetChangeTS: 0
m_fileInfoReadTS: 1747758814
m_fileWriteTS: 1746895565
m_cachefileWriteTS: 1746895565
m_fileSize: 228086
m_assetChangeTS: 1749103910
m_fileInfoReadTS: 1749103911
m_fileWriteTS: 1746873268
m_cachefileWriteTS: 1746873268
refreshStamp: 2
UseGUIDsList:
- guid: fe87c0e1cc204ed48ad3b37840f39efc
@@ -167260,8 +167260,8 @@ MonoBehaviour:
m_addressable:
m_atlas:
m_fileSize: 0
m_assetChangeTS: 0
m_fileInfoReadTS: 1747758812
m_assetChangeTS: 1749103865
m_fileInfoReadTS: 1749103883
m_fileWriteTS: 0
m_cachefileWriteTS: 0
refreshStamp: 2
@@ -185434,8 +185434,8 @@ MonoBehaviour:
m_addressable:
m_atlas:
m_fileSize: 0
m_assetChangeTS: 0
m_fileInfoReadTS: 1747758809
m_assetChangeTS: 1749103865
m_fileInfoReadTS: 1749103883
m_fileWriteTS: 0
m_cachefileWriteTS: 0
refreshStamp: 2
@@ -203521,15 +203521,15 @@ MonoBehaviour:
UseGUIDsList: []
- guid: 1eef181acaca89841a32060c68923043
type: 5
m_fileInfoHash: 19314.prefab
m_fileInfoHash: 18684.prefab
m_assetbundle:
m_addressable:
m_atlas:
m_fileSize: 19314
m_assetChangeTS: 0
m_fileInfoReadTS: 1747758806
m_fileWriteTS: 1746895565
m_cachefileWriteTS: 1746895565
m_fileSize: 18684
m_assetChangeTS: 1749103910
m_fileInfoReadTS: 1749103911
m_fileWriteTS: 1746873934
m_cachefileWriteTS: 1746873934
refreshStamp: 2
UseGUIDsList:
- guid: fe87c0e1cc204ed48ad3b37840f39efc
@@ -211185,15 +211185,15 @@ MonoBehaviour:
ids: 00000000
- guid: ae19b314bbfece546a1a8d74d38387ac
type: 2
m_fileInfoHash: 370.cs
m_fileInfoHash: 1589.cs
m_assetbundle:
m_addressable:
m_atlas:
m_fileSize: 370
m_assetChangeTS: 0
m_fileInfoReadTS: 1747758805
m_fileWriteTS: 1746895565
m_cachefileWriteTS: 1746895565
m_fileSize: 1589
m_assetChangeTS: 1749184023
m_fileInfoReadTS: 1749184265
m_fileWriteTS: 1749104430
m_cachefileWriteTS: 1749104430
refreshStamp: 2
UseGUIDsList: []
- guid: ae5924760c9fbf54d89df9f13435887e
@@ -229994,6 +229994,45 @@ MonoBehaviour:
m_cachefileWriteTS: 1748796655
refreshStamp: 2
UseGUIDsList: []
- guid: 2aebeab4fb1481a44b0657cfc12def90
type: 1
m_fileInfoHash:
m_assetbundle:
m_addressable:
m_atlas:
m_fileSize: 0
m_assetChangeTS: 0
m_fileInfoReadTS: 1749103856
m_fileWriteTS: 0
m_cachefileWriteTS: 0
refreshStamp: 2
UseGUIDsList: []
- guid: 6adc3c7d00791a7498bac07c3cf08095
type: 1
m_fileInfoHash:
m_assetbundle:
m_addressable:
m_atlas:
m_fileSize: 0
m_assetChangeTS: 0
m_fileInfoReadTS: 1749103883
m_fileWriteTS: 0
m_cachefileWriteTS: 0
refreshStamp: 2
UseGUIDsList: []
- guid: 1ec2771618afafe489a6cd3de5b20bc1
type: 2
m_fileInfoHash: 0.cs
m_assetbundle:
m_addressable:
m_atlas:
m_fileSize: 0
m_assetChangeTS: 0
m_fileInfoReadTS: 1749104542
m_fileWriteTS: 1749104513
m_cachefileWriteTS: 1749104513
refreshStamp: 2
UseGUIDsList: []
setting:
alternateColor: 1
excludeTypes: 0

View File

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

View File

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

View File

@@ -0,0 +1,44 @@
using System.Collections;
using System.Collections.Generic;
using Ichni;
using Ichni.RhythmGame;
using UnityEngine;
using UnityEngine.UI;
public class NotefabContoler : MonoBehaviour
{
public NoteBase noteBase;
public RawImage ifHold;
public void Initialize(NoteBase note, float timePerBeat, int beatDeviver)
{
noteBase = note;
Image color = GetComponent<Image>();
transform.localPosition = new Vector3(0, note.exactJudgeTime / timePerBeat * beatDeviver, 0);
switch (note)
{
case Hold hold:
color.color = new Color(0, 1, 0, 1);
if (ifHold != null)
{
ifHold.transform.localPosition = new Vector3(0, (hold.holdEndTime - hold.exactJudgeTime) / timePerBeat * beatDeviver / 2, 0);
var rect = ifHold.GetComponent<RectTransform>();
rect.sizeDelta = new Vector2(rect.sizeDelta.x, (hold.holdEndTime - hold.exactJudgeTime) / timePerBeat * beatDeviver);
ifHold.color = new Color(0, 1, 0, 1);
}
break;
case Tap:
color.color = new Color(0, 1, 1, 1);
break;
case Stay:
color.color = new Color(1, 1, 0, 1);
break;
case Flick:
color.color = new Color(1, 0.2f, 0, 1);
break;
}
}
public void Onclick()
{
EditorManager.instance.uiManager.hierarchy.FindTab(noteBase);
}
}

View File

@@ -123,31 +123,7 @@ public class SampleWindow : MovableWindow//该window高度为300横的要在1
private void SpawnNote(NoteBase i, float posx = 0)
{
GameObject u = Instantiate(NotePrefab, NoteMovepoint);
u.transform.localPosition = new Vector3(0, i.exactJudgeTime / timePerBeat * beatDeviver, 0);
Image color = u.GetComponent<Image>();
u.GetComponent<NotefabContoler>().noteBase = i;
switch (i)
{
case Hold hold:
color.color = new Color(0, 1, 0, 1);
RawImage a = u.GetComponent<NotefabContoler>().ifHold;
a.transform.localPosition = new Vector3(0, (hold.holdEndTime - hold.exactJudgeTime) / timePerBeat * beatDeviver / 2, 0);
a.GetComponent<RectTransform>().sizeDelta = new Vector2(a.GetComponent<RectTransform>().sizeDelta.x, (hold.holdEndTime - hold.exactJudgeTime) / timePerBeat * beatDeviver);
a.color = new Color(0, 1, 0, 1);
break;
case Tap:
color.color = new Color(0, 1, 1, 1);
break;
case Stay:
color.color = new Color(1, 1, 0, 1);
break;
case Flick:
color.color = new Color(1, 0.2f, 0, 1);
break;
}//服了之后整合到controler里头去
u.GetComponent<NotefabContoler>().Initialize(i, timePerBeat, beatDeviver);
}
public GameObject selectedGameObject;

View File

@@ -1,16 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using Ichni;
using Ichni.RhythmGame;
using UnityEngine;
using UnityEngine.UI;
public class NotefabContoler : MonoBehaviour
{
public NoteBase noteBase;
public RawImage ifHold;
public void Onclick()
{
EditorManager.instance.uiManager.hierarchy.FindTab(noteBase);
}
}

File diff suppressed because one or more lines are too long

View File

@@ -10,7 +10,7 @@
###### 编辑器界面↓
<img title="" src="file:///D:/ichniEditor-Source/IchniCreatorStudio/Document/GE0.png" alt="1.png" data-align="left">
<img title="" src="GE0.png" alt="1.png" data-align="left">
## 使用
@@ -24,12 +24,12 @@
图形的曲线预览和曲线幅度有关,幅度越大曲线拉伸越大,超出上下界的会表现为<mark>红色</mark>
<img title="" src="file:///D:/ichniEditor-Source/IchniCreatorStudio/Document/GE1.png" alt="GE1.png" data-align="inline" width="296">**就像这个**
<img title="" src="GE1.png" alt="GE1.png" data-align="inline" width="296">**就像这个**
当你按下`Shift+左键`的时候,对应事件会盖上黄色蒙版,此时这些事件会被放进**剪贴板**中,在按下`shift + v`的时候选中的事件会保持原来的**时间顺序放入鼠标所在的对应时间点**
按esc可以清空剪贴板
<img src="file:///D:/ichniEditor-Source/IchniCreatorStudio/Document/GE2.png" title="" alt="GE2.png" width="549">**就像这个**
<img src="GE2.png" title="" alt="GE2.png" width="549">**就像这个**
注意:由于该编辑器还处于测试阶段,请以编辑器内操作为主

View File

@@ -2,7 +2,7 @@
## 前言
ichni巴拉巴拉待会写
和 arcaderpe 等制谱器相比ichni Editor 是十分复杂的~~建模软件~~制谱器。如果您是新手建议在Editor内~~玩玩~~上手。如果您发现有本教程中不完善的部分,请向 sls 反馈,我们会尽快(存疑)补充相关内容。
## 进入程序 新建项目
@@ -92,12 +92,14 @@ Song Location歌曲路径导入后歌曲存储在编辑器内与原路
### **元素选择**
1. **鼠标左键**:点击选择场景中的游戏元素(需不在 UI 上)。
## 某些具有特殊功能的窗口
### Logger
Logger窗口在播放控制器的上方会显示和程序有关的信息
> 绿色=执行没问题,白色=提示
> 红色=有重大问题截图发给开发者先保存项目并切记不要删除AutoSave
> 黄色=小警告,通常不影响正常写谱
### EditorManager
EditorManager会展示有些关于当前谱面的信息和开关某些东西网格判定模式等还有创建一些特殊元素
## 谱面结构
由于ichni的自由度极高其谱面结构偏向原生unity现在讲述简要功能
@@ -161,6 +163,14 @@ Static的track若是有选择显示方式则会始终显示整条track
#### 显示属性
无论是AutoOrient还是TrackPath都拥有一个材质系统你可以选择主题包中的材质两个显示方式不同的是track path会由于其中pathnode的方向而改变面的朝向而AutoOrient会强制track的面始终面向摄像机这段建议实操看看效果各有各的好
对于绝大部分始终处于同一平面内的轨道,应该使用 `TrackRendererPathGenerator` 的渲染方式,并且其所有节点的法向量应当一致,垂直于这个平面。当然,调整法向量也可使轨道扭转,制作各种特效。
而对于在三维空间运动的轨道,比如螺旋线,建议使用 `TrackRendererAutoOrient` 的渲染方式,使轨道法向量始终朝向摄像机。这样得到的轨道在视觉上是等宽的,比手动调节节点法向量要方便的多。
除了 `TrackRendererPathGenerator``TrackRendererAutoOrient` 两种轨道渲染方式之外,还有 `TrackRenderSurface` 这种方式。这种方式把**闭合轨道**围成的区域渲染成一个面。您需要注意:
- 调整节点的法向量,朝向不对会使面变得扭曲。
轨道宽度由节点的 `Scale` 来控制,默认 1。增加或减小这个值会使轨道变宽或变窄更改为 0 会使轨道不可见,一些谱面中轨道末端变细的特效就是通过这种方法实现的。此外,您也可以使轨道宽度突然变化以营造律动感。
### pathnode
@@ -176,6 +186,9 @@ pathnode带有位置旋转缩放颜色等用于调整track部分的
事件包含displacementswirlscale若是有过动效类型写谱的话事件系统应当不难理解
每当新建一个事件建议在0-1的位置放置一个打底事件本体有没有都没问题但是在编辑器下可能会导致一些问题
在一般的动画类中你应该可以看到除了三个动画表外的第四个按钮GraphicEditor
点击之后会打开当前动画的图形编辑器(去看图形编辑器的文档)
另外还有一个特殊的事件用在track下trackPercentPoint
trackPercentPoint使用0到1的值代表track进程配合trail使用可以实现 ~~反复横跳~~ 精细控制
@@ -183,14 +196,25 @@ trackPercentPoint使用0到1的值代表track进程配合trail使用可以实
还有一个trackHeadPoint是trackPercentPoint的简化版虽然不该放在这里但是我真的懒得开一个来讲
建议实操
### 缓动
缓动是控制数值随时间变化的参数,默认为 `Linear` 即匀速。更改缓动可以实现加速、减速及其他效果。
您可以在下图中查看各种缓动类型,对于加速/减速建议使用 `in/outQuad`,平滑淡入淡出可以使用 `in/out/inoutSine`。如果您想创建一个复杂的动画<font color = gray>(比如先加速后匀速)</font>,并且要无缝衔接,建议分两段制作,并慢慢调整数值使整体更为流畅。
如果您希望缓动能被看出来,请尽量延长缓动的时间。对于短时间的动画<font color = gray>(比如小于 1 秒)</font>,各种缓动的差别并不是很大。从另一个角度讲,如果动画的时间较短,那么一些瑕疵<font color = gray>(比如摄像机在前一个轨道的末尾和后一个轨道的开头具有不一样的速度)</font>也不会被看出来。总而言之,不要过度依赖数学计算,看上去是对的就行了。
关于缓动请查看:[缓动查看](https://easings.net/zh-cn) 或者直接去事件编辑器那里拉几个看看效果
### Trail
由于0.2旧版本的某些神奇效果使我们再次增加了TrailTrail的原型是unity的尾迹效果所以需要注意的是当用各种手段使trail瞬移的时候会拉出长长的痕迹
trail配有位置材质颜色等(仍在开发)
trail配有位置材质颜色等
目前Trail只能在trackPercentPoint下生成但是有一点~~奇技淫巧~~是可以把他复制出来然后直接粘贴在folder下这样就可以通过事件控制他了
>**编辑器存在的Bug**
>目前的Trail在暂停时会消失这是很头疼的一个点因为Unity组件原生原因这个Bug不大可能修复
>当然你不用担心,本体不会出现这个问题,如果没事,做完动效再播放一遍就是原本的效果了
### Note
@@ -203,16 +227,35 @@ exactJudgeTime 就是 Note 的判定时间。随后点击 New Note Visual ,展
>**Stay 可以使用 Tap 的材质吗?**
>
>- 您可能注意到了,编辑器并不限制您做这件事。从视觉上讲,这相当于创建了一个判定更宽的 Tap因此逻辑上是被允许的。但是**Tap 不可以使用 Stay 的材质**这与读谱的基本逻辑相悖。Hold 的材质与上述两者有较大不同,不能和它们混用。
> **关于斜轨下落**
>
> 您可以从 sls 或其他谱师那里获取谱面进行学习。要注意的一点是,**确保斜轨 Note 在屏幕上的投影具有足够的宽度**。宽度太小意味着像素太少Note 会闪烁,造成不良观感。您可以通过以下几种方法来解决这个问题:
> - 使用 3d note
> - 让摄像机视角略微朝下
> - 将判定线贴近摄像机
击打时间:建议使用采音器=>见采音器指南
> **注意事项**
>
> - 请不要让 Note 的出现的时间过长,这会造成读谱困难。对于直轨下落,建议 Note 从出现 <font color = gray>(无论是从屏幕外进入还是从屏幕中浮现)</font>到判定时间不要超过 1 秒。对于斜轨下落请根据个人斜轨的游玩经验控制下落速度。由于电脑屏幕较大视觉上的流速应当偏快您可以录制视频并在移动设备上播放以确定流速是否合适或者直接让sls包一个本体看看效果。
>
> - 按Ctrl+123可以显示对应的安全范围。默认窗口大小为 16: 9。您的谱面应当尽量适配这三个范围如果做不到完全适配请至少不要把 Note 写到这些范围之外。
##### 导出 Note 配置
在导出 Note 配置之后,您就不必通过复制的方式创建 Note像之前那样单击轨道下的相应按钮即可新创建的 Note 会自动使用导出的 Note 配置。在noteinfo旁有save Note PrefabSave之后可以直接在顶上的EditorManger选择Use Note Prefab这样之后放置note就可以自动套用对应的Note Visual
#### 击打效果和判定模式
由于不同主题包拥有不同击打效果和判定模式在add页需要输入字符来创建
### Effect
#### 介绍
Effect是一个~~特殊的动画组件~~可以通过note的指定操作或者直接通过时间Time Effects Collection触发
每个可以添加Effect的地方都配有一个输入框可以搭配特效查阅表输入指定的Effect来调
比如DTM的NoteVisual有Perfect/Good/Bad/Miss字段在下添加Effect就是这个Note判定Perfect/Good/Bad/Miss时触发的特效在EditorManager里可以选择预览谱面时的判定模式
关于Effect以及分支控制我们会专门做一个Markdown来说明
### 环境物体
使用环境物体可以创建立方体、球等几何结构,可以创建假 Note 用于表演,也可以将节点绑定至环境物体上实现同步运动。具体怎么用问问 sls 吧,我也懒得写了。
## 谱面存档
望文生义,不必多说
@@ -250,10 +293,13 @@ ichni每隔一段时间就会自动保存谱面如果要回档需要手动
### 2创建track
#### 1, movable track
由于movable track的功能介绍早在前面有提及这里不过多介绍
由于movable track的功能介绍早在前面有提及这里不过多介绍[关于MovableTrack](#movable属性)
需要注意的是尽量不要让track面的旋转垂直于屏幕也就是“不要竖着看一张纸”
当然如果是autoOrient自动面向摄像机当我没说
#### 2Static track
Static track适合生成装饰兼任下落note的方法
功能介绍早在前面有提及,这里不过多介绍
功能介绍早在前面有提及,这里不过多介绍[关于StaticTrack](#Static属性)
### 3创建Note
Note的相关介绍[关于Note](#Note)
### 4其他。。。

View File

@@ -0,0 +1,158 @@
# ichni 编辑器指南
## 前言
ichni Editor 是一款功能强大的 3D 谱面编辑器(被戏称为“建模软件”),相比 arcade/RPE 等工具更复杂。
**新手建议**:在编辑器中实操体验,结合本指南学习。
**反馈渠道**:教程问题请向 sls 反馈(更新速度存疑)。
---
## 一、新建项目
| 配置项 | 说明 |
|----------------------|----------------------------------------------------------------------|
| **Project Name** | 谱面名称,建议格式:`曲名 + 空格 + 难度名`(例:`SongName Hard` |
| **Creator** | 谱师名称/马甲 |
| **BPM** | 固定节拍值(因 ichni 按秒存储谱面,且变 BPM 场景极少) |
| **Delay** | 谱面整体时间偏移:负数=提前开始,正数=延后开始(推荐优先裁剪音频) |
| **Song Location** | 音频文件路径(导入后与原文件无关) |
| **Theme Bundle** | 主题包选择(后续详解) |
> **BPM 工具参考**
> - [BPM 概念解释](https://cn.bing.com/search?q=歌曲bpm是什么&FORM=QSRE1)
> - [BPM 检测工具](https://vocalremover.org/zh/key-bpm-finder)
---
## 二、快捷键速查
### 场景操作
| 按键 | 功能 |
|---------------|----------------------|
| **W/A/S/D** | 前后左右移动相机 |
| **E/Q** | 上/下移动相机 |
| **鼠标右键** | 按住旋转相机 |
### 轨道操作
| 快捷键 | 功能 |
|--------------|--------------------------|
| `Alt + P` | 显示/隐藏路径节点 |
| `Alt + D` | 启用/禁用轨道路径显示 |
### 工作流
| 快捷键 | 功能 |
|--------------|--------------------------|
| `Ctrl + S` | 保存项目 |
| `Ctrl + E` | 导出项目 |
| `Ctrl + C/V` | 复制/粘贴选中元素 |
| `Ctrl + D` | 删除选中元素 |
### 显示控制
| 快捷键 | 功能 |
|----------------|------------------------------|
| `Ctrl + 1/2/3` | 切换手机/平板/安全区域提示 |
| `Ctrl + U` | 切换静态窗口显示 |
| `Ctrl + ↑/↓` | 放大/缩小 UI |
| `Ctrl + M` | 切换摄像机 |
> **注意**:多数快捷键需鼠标聚焦对应 UI 区域生效。
---
## 三、核心界面功能
### Logger 窗口
- **位置**:播放控制器上方
- **日志颜色含义**
- 🟢 绿色:操作正常
- ⚪ 白色:提示信息
- 🟡 黄色:非致命警告(通常可忽略)
- 🔴 红色:严重错误(需截图保存并联系开发者)
### EditorManager
- **功能**
显示谱面元数据、开关网格/判定模式、创建特殊元素。
---
## 四、谱面结构详解
### 1. Element Folder
- **本质**:空容器节点(可嵌套)
- **作用**:管理子元素的位置属性
### 2. Camera
- **关键规则**:单谱面仅允许 **1 个 Camera**
- **位置**
- 简单场景:直接放在 Folder 下
- 多机位场景:置于 Cross Track Point 内
- **运动逻辑**随父节点Folder/Track移动而移动
### 3. Track 轨道系统
#### 类型对比
| 属性 | Movable Track | Static Track |
|--------------|-----------------------------------|----------------------------------|
| **运动逻辑** | Note 在轨道上固定位置生成 | Note 从轨道尾部运动到头部 |
| **核心参数** | 开始/结束时间、可视长度、缓动 | 下落时间、下落缓动 |
| **Note 放置**| 判定时间需在轨道启停时间范围内 | 无时间限制 |
#### 显示模式
| 模式 | 适用场景 | 特点 |
|-----------------------|-----------------------------------|-------------------------------|
| **AutoOrient** | 3D 空间轨道(如螺旋线) | 轨道面始终朝向摄像机 |
| **TrackPath** | 平面内规则轨道 | 随 PathNode 方向改变朝向 |
| **TrackRenderSurface**| 闭合轨道区域渲染 | 需手动调整法向量避免扭曲 |
#### PathNode 节点
- **作用**:控制轨道的形状、旋转、缩放、颜色
- **操作建议**:通过实操理解参数影响
### 4. 事件系统 (Events)
- **功能**:驱动位移(Displacement)/旋转(Swirl)/缩放(Scale)动画
- **最佳实践**:在 0-1 位置放置基础事件避免编辑器异常
- **特殊事件**
- `TrackPercentPoint`:用 0-1 值控制轨道进程(配合 Trail 实现精细动画)
- `TrackHeadPoint`:简化版进程控制器
### 5. 缓动系统 (Easing)
- **作用**:控制数值变化速率(默认匀速 `Linear`
- **选型建议**
- 加速/减速 → `InQuad`/`OutQuad`
- 平滑过渡 → `Sine` 系列
- 长动画(>1秒才能明显体现缓动差异
- **参考工具**[缓动函数可视化](https://easings.net/zh-cn)
### 6. Trail 拖尾效果
- **生成限制**:需依附于 `TrackPercentPoint`
- **高级技巧**:复制 Trail 粘贴到 Folder 下可通过事件自由控制
- **⚠️ 已知问题**:编辑模式下暂停时 Trail 会消失(游戏本体无此问题)
### 7. Note 系统
#### 基础配置
1. 设置判定时间 `exactJudgeTime`
2. 创建 Note Visual
- 选择主题包
- 调整位置/大小(小屏设备需增大尺寸)
3. 保存为 Prefab
通过 `Save Note Prefab` + `Use Note Prefab` 实现批量复用
#### 设计规范
- **下落时间**:直轨 ≤1秒斜轨需实测设备显示效果
- **安全区域**:用 `Ctrl+1/2/3` 确保 Note 在安全范围内
- **材质规范**
- ✅ Stay 可用 Tap 材质
- ❌ Tap 不可用 Stay/Hold 材质
### 8. 特效系统 (Effect)
- **触发方式**
- Note 判定事件Perfect/Good/Bad/Miss
- 时间轴事件 (Time Effects Collection)
- **配置**:输入特效代码(需配合主题包文档)
---
## 五、工作流指南
### 标准流程
```mermaid
graph TD
A[准备音源与主题包] --> B[创建摄像机轨道]
B --> C[设计轨道系统]
C --> D[放置Note]
D --> E[添加事件/特效]
E --> F[测试与优化]