NodeScript+ 导入了个 UI Extend
Signed-off-by: TRADER_FOER <lhf190@outlook.com>
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -64,6 +64,9 @@ sysinfo.txt
|
|||||||
*.app
|
*.app
|
||||||
/[Aa]ssets/FR2_Cache.asset
|
/[Aa]ssets/FR2_Cache.asset
|
||||||
#这玩意好大
|
#这玩意好大
|
||||||
|
|
||||||
|
# Claude Code
|
||||||
|
.claude/
|
||||||
# Crashlytics generated file
|
# Crashlytics generated file
|
||||||
crashlytics-build.properties
|
crashlytics-build.properties
|
||||||
|
|
||||||
|
|||||||
7
Assets/Assets.sln.meta
Normal file
7
Assets/Assets.sln.meta
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 28802a2f6f0ff2942bd2a248b9b68960
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
231719
Assets/FR2_Cache.asset
231719
Assets/FR2_Cache.asset
File diff suppressed because it is too large
Load Diff
7
Assets/NLayer/NLayer.csproj.meta
Normal file
7
Assets/NLayer/NLayer.csproj.meta
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 88f0993afef43b34eb23a79fbdd94e9b
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -35,12 +35,12 @@ MonoBehaviour:
|
|||||||
- Boxophobic.AtmosphericHeightFog.Runtime
|
- Boxophobic.AtmosphericHeightFog.Runtime
|
||||||
- Boxophobic.Utils.Scripts
|
- Boxophobic.Utils.Scripts
|
||||||
- CW.Common
|
- CW.Common
|
||||||
- IchniAssembly
|
|
||||||
- IngameDebugConsole.Runtime
|
- IngameDebugConsole.Runtime
|
||||||
- LeanCommon
|
- LeanCommon
|
||||||
- LeanPool
|
- LeanPool
|
||||||
- UniRx
|
- UniRx
|
||||||
- UniRx.Examples
|
- UniRx.Examples
|
||||||
|
- UnityUIExtensions
|
||||||
showAdvancedSettings: 0
|
showAdvancedSettings: 0
|
||||||
addMgrToSceneAutomatically: 0
|
addMgrToSceneAutomatically: 0
|
||||||
autoUpdateReferences: 1
|
autoUpdateReferences: 1
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -163,6 +163,8 @@ MonoBehaviour:
|
|||||||
type: 3}
|
type: 3}
|
||||||
QuickMoveObj: {fileID: 2260653761532832587, guid: dba2d8dbaab1439469ac4924d33e3397,
|
QuickMoveObj: {fileID: 2260653761532832587, guid: dba2d8dbaab1439469ac4924d33e3397,
|
||||||
type: 3}
|
type: 3}
|
||||||
|
NodeEditor: {fileID: 6091547238259645747, guid: 55d0ca39526c5e94ebac2e6da0c8d80c,
|
||||||
|
type: 3}
|
||||||
defaultBackground: {fileID: 21300000, guid: fc6c02e75b66345c29e8a25e2e2bda9c, type: 3}
|
defaultBackground: {fileID: 21300000, guid: fc6c02e75b66345c29e8a25e2e2bda9c, type: 3}
|
||||||
defaultSkyboxMaterial: {fileID: 2100000, guid: 06a20df987b317044a05ea694c976948,
|
defaultSkyboxMaterial: {fileID: 2100000, guid: 06a20df987b317044a05ea694c976948,
|
||||||
type: 2}
|
type: 2}
|
||||||
|
|||||||
@@ -267,6 +267,7 @@ GameObject:
|
|||||||
serializedVersion: 6
|
serializedVersion: 6
|
||||||
m_Component:
|
m_Component:
|
||||||
- component: {fileID: 5057024943373372034}
|
- component: {fileID: 5057024943373372034}
|
||||||
|
- component: {fileID: 2755395169887967930}
|
||||||
m_Layer: 5
|
m_Layer: 5
|
||||||
m_Name: AddNewButton
|
m_Name: AddNewButton
|
||||||
m_TagString: Untagged
|
m_TagString: Untagged
|
||||||
@@ -292,5 +293,25 @@ RectTransform:
|
|||||||
m_AnchorMin: {x: 0, y: 0}
|
m_AnchorMin: {x: 0, y: 0}
|
||||||
m_AnchorMax: {x: 0, y: 0}
|
m_AnchorMax: {x: 0, y: 0}
|
||||||
m_AnchoredPosition: {x: 0, y: 0}
|
m_AnchoredPosition: {x: 0, y: 0}
|
||||||
m_SizeDelta: {x: 0, y: 50}
|
m_SizeDelta: {x: 332.5, y: 50}
|
||||||
m_Pivot: {x: 0.5, y: 0.5}
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
|
--- !u!114 &2755395169887967930
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 9105660174245163102}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.LayoutElement
|
||||||
|
m_IgnoreLayout: 0
|
||||||
|
m_MinWidth: 300
|
||||||
|
m_MinHeight: 50
|
||||||
|
m_PreferredWidth: -1
|
||||||
|
m_PreferredHeight: -1
|
||||||
|
m_FlexibleWidth: -1
|
||||||
|
m_FlexibleHeight: -1
|
||||||
|
m_LayoutPriority: 1
|
||||||
|
|||||||
8
Assets/Prefabs/Graphical Tools/NodeScript.meta
Normal file
8
Assets/Prefabs/Graphical Tools/NodeScript.meta
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 287322283d167ef4083da8ed178d7034
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
964
Assets/Prefabs/Graphical Tools/NodeScript/Dropdown.prefab
Normal file
964
Assets/Prefabs/Graphical Tools/NodeScript/Dropdown.prefab
Normal file
@@ -0,0 +1,964 @@
|
|||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!1 &82863286894781506
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 1709764634161262913}
|
||||||
|
- component: {fileID: 2170045770562689381}
|
||||||
|
- component: {fileID: 2957736523211978714}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: Item Checkmark
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!224 &1709764634161262913
|
||||||
|
RectTransform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 82863286894781506}
|
||||||
|
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||||
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children: []
|
||||||
|
m_Father: {fileID: 7004105521081339837}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
m_AnchorMin: {x: 0, y: 0.5}
|
||||||
|
m_AnchorMax: {x: 0, y: 0.5}
|
||||||
|
m_AnchoredPosition: {x: 10, y: 0}
|
||||||
|
m_SizeDelta: {x: 20, y: 20}
|
||||||
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
|
--- !u!222 &2170045770562689381
|
||||||
|
CanvasRenderer:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 82863286894781506}
|
||||||
|
m_CullTransparentMesh: 1
|
||||||
|
--- !u!114 &2957736523211978714
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 82863286894781506}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||||
|
m_Material: {fileID: 0}
|
||||||
|
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
m_RaycastTarget: 1
|
||||||
|
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
m_Maskable: 1
|
||||||
|
m_OnCullStateChanged:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls: []
|
||||||
|
m_Sprite: {fileID: 10901, guid: 0000000000000000f000000000000000, type: 0}
|
||||||
|
m_Type: 0
|
||||||
|
m_PreserveAspect: 0
|
||||||
|
m_FillCenter: 1
|
||||||
|
m_FillMethod: 4
|
||||||
|
m_FillAmount: 1
|
||||||
|
m_FillClockwise: 1
|
||||||
|
m_FillOrigin: 0
|
||||||
|
m_UseSpriteMesh: 0
|
||||||
|
m_PixelsPerUnitMultiplier: 1
|
||||||
|
--- !u!1 &1054092299838318117
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 3362122159744346545}
|
||||||
|
- component: {fileID: 2203795012402217067}
|
||||||
|
- component: {fileID: 4261312571326291121}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: Label
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!224 &3362122159744346545
|
||||||
|
RectTransform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1054092299838318117}
|
||||||
|
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||||
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children: []
|
||||||
|
m_Father: {fileID: 5486239791980942039}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
m_AnchorMin: {x: 0, y: 0}
|
||||||
|
m_AnchorMax: {x: 1, y: 1}
|
||||||
|
m_AnchoredPosition: {x: -7.5, y: -0.5}
|
||||||
|
m_SizeDelta: {x: -35, y: -13}
|
||||||
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
|
--- !u!222 &2203795012402217067
|
||||||
|
CanvasRenderer:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1054092299838318117}
|
||||||
|
m_CullTransparentMesh: 1
|
||||||
|
--- !u!114 &4261312571326291121
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1054092299838318117}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI
|
||||||
|
m_Material: {fileID: 0}
|
||||||
|
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
m_RaycastTarget: 1
|
||||||
|
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
m_Maskable: 1
|
||||||
|
m_OnCullStateChanged:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls: []
|
||||||
|
m_text: Option A
|
||||||
|
m_isRightToLeft: 0
|
||||||
|
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||||
|
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||||
|
m_fontSharedMaterials: []
|
||||||
|
m_fontMaterial: {fileID: 0}
|
||||||
|
m_fontMaterials: []
|
||||||
|
m_fontColor32:
|
||||||
|
serializedVersion: 2
|
||||||
|
rgba: 4281479730
|
||||||
|
m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
|
||||||
|
m_enableVertexGradient: 0
|
||||||
|
m_colorMode: 3
|
||||||
|
m_fontColorGradient:
|
||||||
|
topLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
topRight: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
bottomRight: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
m_fontColorGradientPreset: {fileID: 0}
|
||||||
|
m_spriteAsset: {fileID: 0}
|
||||||
|
m_tintAllSprites: 0
|
||||||
|
m_StyleSheet: {fileID: 0}
|
||||||
|
m_TextStyleHashCode: -1183493901
|
||||||
|
m_overrideHtmlColors: 0
|
||||||
|
m_faceColor:
|
||||||
|
serializedVersion: 2
|
||||||
|
rgba: 4294967295
|
||||||
|
m_fontSize: 19.3
|
||||||
|
m_fontSizeBase: 14
|
||||||
|
m_fontWeight: 400
|
||||||
|
m_enableAutoSizing: 1
|
||||||
|
m_fontSizeMin: 18
|
||||||
|
m_fontSizeMax: 72
|
||||||
|
m_fontStyle: 0
|
||||||
|
m_HorizontalAlignment: 1
|
||||||
|
m_VerticalAlignment: 512
|
||||||
|
m_textAlignment: 65535
|
||||||
|
m_characterSpacing: 0
|
||||||
|
m_characterHorizontalScale: 1
|
||||||
|
m_wordSpacing: 0
|
||||||
|
m_lineSpacing: 0
|
||||||
|
m_lineSpacingMax: 0
|
||||||
|
m_paragraphSpacing: 0
|
||||||
|
m_charWidthMaxAdj: 0
|
||||||
|
m_TextWrappingMode: 1
|
||||||
|
m_wordWrappingRatios: 0.4
|
||||||
|
m_overflowMode: 0
|
||||||
|
m_linkedTextComponent: {fileID: 0}
|
||||||
|
parentLinkedComponent: {fileID: 0}
|
||||||
|
m_enableKerning: 0
|
||||||
|
m_ActiveFontFeatures: 6e72656b
|
||||||
|
m_enableExtraPadding: 0
|
||||||
|
checkPaddingRequired: 0
|
||||||
|
m_isRichText: 1
|
||||||
|
m_EmojiFallbackSupport: 1
|
||||||
|
m_parseCtrlCharacters: 1
|
||||||
|
m_isOrthographic: 1
|
||||||
|
m_isCullingEnabled: 0
|
||||||
|
m_horizontalMapping: 0
|
||||||
|
m_verticalMapping: 0
|
||||||
|
m_uvLineOffset: 0
|
||||||
|
m_geometrySortingOrder: 0
|
||||||
|
m_IsTextObjectScaleStatic: 0
|
||||||
|
m_VertexBufferAutoSizeReduction: 0
|
||||||
|
m_useMaxVisibleDescender: 1
|
||||||
|
m_pageToDisplay: 1
|
||||||
|
m_margin: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
m_isUsingLegacyAnimationComponent: 0
|
||||||
|
m_isVolumetricText: 0
|
||||||
|
m_hasFontAssetChanged: 0
|
||||||
|
m_baseMaterial: {fileID: 0}
|
||||||
|
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
--- !u!1 &1560090685449819934
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 7004105521081339837}
|
||||||
|
- component: {fileID: 8660453368859358330}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: Item
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!224 &7004105521081339837
|
||||||
|
RectTransform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1560090685449819934}
|
||||||
|
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||||
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children:
|
||||||
|
- {fileID: 1081585093984805606}
|
||||||
|
- {fileID: 1709764634161262913}
|
||||||
|
- {fileID: 1650735131562294154}
|
||||||
|
m_Father: {fileID: 3443758875486852539}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
m_AnchorMin: {x: 0, y: 0.5}
|
||||||
|
m_AnchorMax: {x: 1, y: 0.5}
|
||||||
|
m_AnchoredPosition: {x: 0, y: 0}
|
||||||
|
m_SizeDelta: {x: 0.0000023841858, y: 34.1}
|
||||||
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
|
--- !u!114 &8660453368859358330
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1560090685449819934}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Toggle
|
||||||
|
m_Navigation:
|
||||||
|
m_Mode: 3
|
||||||
|
m_WrapAround: 0
|
||||||
|
m_SelectOnUp: {fileID: 0}
|
||||||
|
m_SelectOnDown: {fileID: 0}
|
||||||
|
m_SelectOnLeft: {fileID: 0}
|
||||||
|
m_SelectOnRight: {fileID: 0}
|
||||||
|
m_Transition: 1
|
||||||
|
m_Colors:
|
||||||
|
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||||
|
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
|
||||||
|
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||||
|
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
|
||||||
|
m_ColorMultiplier: 1
|
||||||
|
m_FadeDuration: 0.1
|
||||||
|
m_SpriteState:
|
||||||
|
m_HighlightedSprite: {fileID: 0}
|
||||||
|
m_PressedSprite: {fileID: 0}
|
||||||
|
m_SelectedSprite: {fileID: 0}
|
||||||
|
m_DisabledSprite: {fileID: 0}
|
||||||
|
m_AnimationTriggers:
|
||||||
|
m_NormalTrigger: Normal
|
||||||
|
m_HighlightedTrigger: Highlighted
|
||||||
|
m_PressedTrigger: Pressed
|
||||||
|
m_SelectedTrigger: Selected
|
||||||
|
m_DisabledTrigger: Disabled
|
||||||
|
m_Interactable: 1
|
||||||
|
m_TargetGraphic: {fileID: 1621498239027635291}
|
||||||
|
toggleTransition: 1
|
||||||
|
graphic: {fileID: 2957736523211978714}
|
||||||
|
m_Group: {fileID: 0}
|
||||||
|
onValueChanged:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls: []
|
||||||
|
m_IsOn: 1
|
||||||
|
--- !u!1 &1680133537779878757
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 5547965212101110332}
|
||||||
|
- component: {fileID: 4191086039604730814}
|
||||||
|
- component: {fileID: 7204498259804686471}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: Arrow
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!224 &5547965212101110332
|
||||||
|
RectTransform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1680133537779878757}
|
||||||
|
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||||
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children: []
|
||||||
|
m_Father: {fileID: 5486239791980942039}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
m_AnchorMin: {x: 1, y: 0.5}
|
||||||
|
m_AnchorMax: {x: 1, y: 0.5}
|
||||||
|
m_AnchoredPosition: {x: -15, y: 0}
|
||||||
|
m_SizeDelta: {x: 20, y: 20}
|
||||||
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
|
--- !u!222 &4191086039604730814
|
||||||
|
CanvasRenderer:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1680133537779878757}
|
||||||
|
m_CullTransparentMesh: 1
|
||||||
|
--- !u!114 &7204498259804686471
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1680133537779878757}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||||
|
m_Material: {fileID: 0}
|
||||||
|
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
m_RaycastTarget: 1
|
||||||
|
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
m_Maskable: 1
|
||||||
|
m_OnCullStateChanged:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls: []
|
||||||
|
m_Sprite: {fileID: 10915, guid: 0000000000000000f000000000000000, type: 0}
|
||||||
|
m_Type: 0
|
||||||
|
m_PreserveAspect: 0
|
||||||
|
m_FillCenter: 1
|
||||||
|
m_FillMethod: 4
|
||||||
|
m_FillAmount: 1
|
||||||
|
m_FillClockwise: 1
|
||||||
|
m_FillOrigin: 0
|
||||||
|
m_UseSpriteMesh: 0
|
||||||
|
m_PixelsPerUnitMultiplier: 1
|
||||||
|
--- !u!1 &1711088782094418621
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 3217331204570803645}
|
||||||
|
- component: {fileID: 3663708719705923414}
|
||||||
|
- component: {fileID: 2920068684909590118}
|
||||||
|
- component: {fileID: 8147382377469268337}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: Template
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!224 &3217331204570803645
|
||||||
|
RectTransform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1711088782094418621}
|
||||||
|
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||||
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children:
|
||||||
|
- {fileID: 810477152589261651}
|
||||||
|
m_Father: {fileID: 5486239791980942039}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
m_AnchorMin: {x: 0, y: 0}
|
||||||
|
m_AnchorMax: {x: 1, y: 0}
|
||||||
|
m_AnchoredPosition: {x: 0, y: 0}
|
||||||
|
m_SizeDelta: {x: 100, y: 150}
|
||||||
|
m_Pivot: {x: 0.5, y: 1}
|
||||||
|
--- !u!222 &3663708719705923414
|
||||||
|
CanvasRenderer:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1711088782094418621}
|
||||||
|
m_CullTransparentMesh: 1
|
||||||
|
--- !u!114 &2920068684909590118
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1711088782094418621}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||||
|
m_Material: {fileID: 0}
|
||||||
|
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
m_RaycastTarget: 1
|
||||||
|
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
m_Maskable: 1
|
||||||
|
m_OnCullStateChanged:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls: []
|
||||||
|
m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
|
||||||
|
m_Type: 1
|
||||||
|
m_PreserveAspect: 0
|
||||||
|
m_FillCenter: 1
|
||||||
|
m_FillMethod: 4
|
||||||
|
m_FillAmount: 1
|
||||||
|
m_FillClockwise: 1
|
||||||
|
m_FillOrigin: 0
|
||||||
|
m_UseSpriteMesh: 0
|
||||||
|
m_PixelsPerUnitMultiplier: 1
|
||||||
|
--- !u!114 &8147382377469268337
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1711088782094418621}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.ScrollRect
|
||||||
|
m_Content: {fileID: 3443758875486852539}
|
||||||
|
m_Horizontal: 0
|
||||||
|
m_Vertical: 1
|
||||||
|
m_MovementType: 2
|
||||||
|
m_Elasticity: 0.1
|
||||||
|
m_Inertia: 1
|
||||||
|
m_DecelerationRate: 0.135
|
||||||
|
m_ScrollSensitivity: 1
|
||||||
|
m_Viewport: {fileID: 810477152589261651}
|
||||||
|
m_HorizontalScrollbar: {fileID: 0}
|
||||||
|
m_VerticalScrollbar: {fileID: 0}
|
||||||
|
m_HorizontalScrollbarVisibility: 0
|
||||||
|
m_VerticalScrollbarVisibility: 2
|
||||||
|
m_HorizontalScrollbarSpacing: 0
|
||||||
|
m_VerticalScrollbarSpacing: -3
|
||||||
|
m_OnValueChanged:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls: []
|
||||||
|
--- !u!1 &2412732760625569581
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 1081585093984805606}
|
||||||
|
- component: {fileID: 939330925110964853}
|
||||||
|
- component: {fileID: 1621498239027635291}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: Item Background
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!224 &1081585093984805606
|
||||||
|
RectTransform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 2412732760625569581}
|
||||||
|
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||||
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children: []
|
||||||
|
m_Father: {fileID: 7004105521081339837}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
m_AnchorMin: {x: 0, y: 0}
|
||||||
|
m_AnchorMax: {x: 1, y: 1}
|
||||||
|
m_AnchoredPosition: {x: -0.000030517578, y: 0}
|
||||||
|
m_SizeDelta: {x: 0, y: 0}
|
||||||
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
|
--- !u!222 &939330925110964853
|
||||||
|
CanvasRenderer:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 2412732760625569581}
|
||||||
|
m_CullTransparentMesh: 1
|
||||||
|
--- !u!114 &1621498239027635291
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 2412732760625569581}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||||
|
m_Material: {fileID: 0}
|
||||||
|
m_Color: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||||
|
m_RaycastTarget: 1
|
||||||
|
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
m_Maskable: 1
|
||||||
|
m_OnCullStateChanged:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls: []
|
||||||
|
m_Sprite: {fileID: 0}
|
||||||
|
m_Type: 0
|
||||||
|
m_PreserveAspect: 0
|
||||||
|
m_FillCenter: 1
|
||||||
|
m_FillMethod: 4
|
||||||
|
m_FillAmount: 1
|
||||||
|
m_FillClockwise: 1
|
||||||
|
m_FillOrigin: 0
|
||||||
|
m_UseSpriteMesh: 0
|
||||||
|
m_PixelsPerUnitMultiplier: 1
|
||||||
|
--- !u!1 &4681842335368807895
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 5486239791980942039}
|
||||||
|
- component: {fileID: 6954806442107970263}
|
||||||
|
- component: {fileID: 6590960778914629322}
|
||||||
|
- component: {fileID: 6352137348860116155}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: Dropdown
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!224 &5486239791980942039
|
||||||
|
RectTransform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 4681842335368807895}
|
||||||
|
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||||
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children:
|
||||||
|
- {fileID: 3362122159744346545}
|
||||||
|
- {fileID: 5547965212101110332}
|
||||||
|
- {fileID: 3217331204570803645}
|
||||||
|
m_Father: {fileID: 0}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
m_AnchorMin: {x: 0, y: 0}
|
||||||
|
m_AnchorMax: {x: 0, y: 0}
|
||||||
|
m_AnchoredPosition: {x: 0, y: 0}
|
||||||
|
m_SizeDelta: {x: 109.26, y: 36}
|
||||||
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
|
--- !u!222 &6954806442107970263
|
||||||
|
CanvasRenderer:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 4681842335368807895}
|
||||||
|
m_CullTransparentMesh: 1
|
||||||
|
--- !u!114 &6590960778914629322
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 4681842335368807895}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||||
|
m_Material: {fileID: 0}
|
||||||
|
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
m_RaycastTarget: 1
|
||||||
|
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
m_Maskable: 1
|
||||||
|
m_OnCullStateChanged:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls: []
|
||||||
|
m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
|
||||||
|
m_Type: 1
|
||||||
|
m_PreserveAspect: 0
|
||||||
|
m_FillCenter: 1
|
||||||
|
m_FillMethod: 4
|
||||||
|
m_FillAmount: 1
|
||||||
|
m_FillClockwise: 1
|
||||||
|
m_FillOrigin: 0
|
||||||
|
m_UseSpriteMesh: 0
|
||||||
|
m_PixelsPerUnitMultiplier: 1
|
||||||
|
--- !u!114 &6352137348860116155
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 4681842335368807895}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: 7b743370ac3e4ec2a1668f5455a8ef8a, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TMP_Dropdown
|
||||||
|
m_Navigation:
|
||||||
|
m_Mode: 3
|
||||||
|
m_WrapAround: 0
|
||||||
|
m_SelectOnUp: {fileID: 0}
|
||||||
|
m_SelectOnDown: {fileID: 0}
|
||||||
|
m_SelectOnLeft: {fileID: 0}
|
||||||
|
m_SelectOnRight: {fileID: 0}
|
||||||
|
m_Transition: 1
|
||||||
|
m_Colors:
|
||||||
|
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||||
|
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
|
||||||
|
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||||
|
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
|
||||||
|
m_ColorMultiplier: 1
|
||||||
|
m_FadeDuration: 0.1
|
||||||
|
m_SpriteState:
|
||||||
|
m_HighlightedSprite: {fileID: 0}
|
||||||
|
m_PressedSprite: {fileID: 0}
|
||||||
|
m_SelectedSprite: {fileID: 0}
|
||||||
|
m_DisabledSprite: {fileID: 0}
|
||||||
|
m_AnimationTriggers:
|
||||||
|
m_NormalTrigger: Normal
|
||||||
|
m_HighlightedTrigger: Highlighted
|
||||||
|
m_PressedTrigger: Pressed
|
||||||
|
m_SelectedTrigger: Selected
|
||||||
|
m_DisabledTrigger: Disabled
|
||||||
|
m_Interactable: 1
|
||||||
|
m_TargetGraphic: {fileID: 6590960778914629322}
|
||||||
|
m_Template: {fileID: 3217331204570803645}
|
||||||
|
m_CaptionText: {fileID: 4261312571326291121}
|
||||||
|
m_CaptionImage: {fileID: 0}
|
||||||
|
m_Placeholder: {fileID: 0}
|
||||||
|
m_ItemText: {fileID: 2407009501540292511}
|
||||||
|
m_ItemImage: {fileID: 0}
|
||||||
|
m_Value: 0
|
||||||
|
m_MultiSelect: 0
|
||||||
|
m_Options:
|
||||||
|
m_Options:
|
||||||
|
- m_Text: Option A
|
||||||
|
m_Image: {fileID: 0}
|
||||||
|
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- m_Text: Option B
|
||||||
|
m_Image: {fileID: 0}
|
||||||
|
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- m_Text: Option C
|
||||||
|
m_Image: {fileID: 0}
|
||||||
|
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
m_OnValueChanged:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls: []
|
||||||
|
m_AlphaFadeSpeed: 0.15
|
||||||
|
--- !u!1 &6545639557362248841
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 3443758875486852539}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: Content
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!224 &3443758875486852539
|
||||||
|
RectTransform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 6545639557362248841}
|
||||||
|
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||||
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children:
|
||||||
|
- {fileID: 7004105521081339837}
|
||||||
|
m_Father: {fileID: 810477152589261651}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
m_AnchorMin: {x: 0, y: 1}
|
||||||
|
m_AnchorMax: {x: 1, y: 1}
|
||||||
|
m_AnchoredPosition: {x: 0, y: 0}
|
||||||
|
m_SizeDelta: {x: 0, y: 28}
|
||||||
|
m_Pivot: {x: 0.5, y: 1}
|
||||||
|
--- !u!1 &8005258512300585202
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 1650735131562294154}
|
||||||
|
- component: {fileID: 7760809877735888226}
|
||||||
|
- component: {fileID: 2407009501540292511}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: Item Label
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!224 &1650735131562294154
|
||||||
|
RectTransform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 8005258512300585202}
|
||||||
|
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||||
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children: []
|
||||||
|
m_Father: {fileID: 7004105521081339837}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
m_AnchorMin: {x: 0, y: 0}
|
||||||
|
m_AnchorMax: {x: 1, y: 1}
|
||||||
|
m_AnchoredPosition: {x: 5, y: -0.4999981}
|
||||||
|
m_SizeDelta: {x: -30, y: -3}
|
||||||
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
|
--- !u!222 &7760809877735888226
|
||||||
|
CanvasRenderer:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 8005258512300585202}
|
||||||
|
m_CullTransparentMesh: 1
|
||||||
|
--- !u!114 &2407009501540292511
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 8005258512300585202}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI
|
||||||
|
m_Material: {fileID: 0}
|
||||||
|
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
m_RaycastTarget: 1
|
||||||
|
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
m_Maskable: 1
|
||||||
|
m_OnCullStateChanged:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls: []
|
||||||
|
m_text: Option A
|
||||||
|
m_isRightToLeft: 0
|
||||||
|
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||||
|
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||||
|
m_fontSharedMaterials: []
|
||||||
|
m_fontMaterial: {fileID: 0}
|
||||||
|
m_fontMaterials: []
|
||||||
|
m_fontColor32:
|
||||||
|
serializedVersion: 2
|
||||||
|
rgba: 4281479730
|
||||||
|
m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
|
||||||
|
m_enableVertexGradient: 0
|
||||||
|
m_colorMode: 3
|
||||||
|
m_fontColorGradient:
|
||||||
|
topLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
topRight: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
bottomRight: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
m_fontColorGradientPreset: {fileID: 0}
|
||||||
|
m_spriteAsset: {fileID: 0}
|
||||||
|
m_tintAllSprites: 0
|
||||||
|
m_StyleSheet: {fileID: 0}
|
||||||
|
m_TextStyleHashCode: -1183493901
|
||||||
|
m_overrideHtmlColors: 0
|
||||||
|
m_faceColor:
|
||||||
|
serializedVersion: 2
|
||||||
|
rgba: 4294967295
|
||||||
|
m_fontSize: 27.8
|
||||||
|
m_fontSizeBase: 14
|
||||||
|
m_fontWeight: 400
|
||||||
|
m_enableAutoSizing: 1
|
||||||
|
m_fontSizeMin: 7.79
|
||||||
|
m_fontSizeMax: 72
|
||||||
|
m_fontStyle: 0
|
||||||
|
m_HorizontalAlignment: 1
|
||||||
|
m_VerticalAlignment: 512
|
||||||
|
m_textAlignment: 65535
|
||||||
|
m_characterSpacing: 0
|
||||||
|
m_characterHorizontalScale: 1
|
||||||
|
m_wordSpacing: 0
|
||||||
|
m_lineSpacing: 0
|
||||||
|
m_lineSpacingMax: 0
|
||||||
|
m_paragraphSpacing: 0
|
||||||
|
m_charWidthMaxAdj: 0
|
||||||
|
m_TextWrappingMode: 1
|
||||||
|
m_wordWrappingRatios: 0.4
|
||||||
|
m_overflowMode: 0
|
||||||
|
m_linkedTextComponent: {fileID: 0}
|
||||||
|
parentLinkedComponent: {fileID: 0}
|
||||||
|
m_enableKerning: 0
|
||||||
|
m_ActiveFontFeatures: 6e72656b
|
||||||
|
m_enableExtraPadding: 0
|
||||||
|
checkPaddingRequired: 0
|
||||||
|
m_isRichText: 1
|
||||||
|
m_EmojiFallbackSupport: 1
|
||||||
|
m_parseCtrlCharacters: 1
|
||||||
|
m_isOrthographic: 1
|
||||||
|
m_isCullingEnabled: 0
|
||||||
|
m_horizontalMapping: 0
|
||||||
|
m_verticalMapping: 0
|
||||||
|
m_uvLineOffset: 0
|
||||||
|
m_geometrySortingOrder: 0
|
||||||
|
m_IsTextObjectScaleStatic: 0
|
||||||
|
m_VertexBufferAutoSizeReduction: 0
|
||||||
|
m_useMaxVisibleDescender: 1
|
||||||
|
m_pageToDisplay: 1
|
||||||
|
m_margin: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
m_isUsingLegacyAnimationComponent: 0
|
||||||
|
m_isVolumetricText: 0
|
||||||
|
m_hasFontAssetChanged: 0
|
||||||
|
m_baseMaterial: {fileID: 0}
|
||||||
|
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
--- !u!1 &8880113283847965645
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 810477152589261651}
|
||||||
|
- component: {fileID: 7664388476214949154}
|
||||||
|
- component: {fileID: 4118694975536929718}
|
||||||
|
- component: {fileID: 4821167584285562036}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: Viewport
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!224 &810477152589261651
|
||||||
|
RectTransform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 8880113283847965645}
|
||||||
|
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||||
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children:
|
||||||
|
- {fileID: 3443758875486852539}
|
||||||
|
m_Father: {fileID: 3217331204570803645}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
m_AnchorMin: {x: 0, y: 0}
|
||||||
|
m_AnchorMax: {x: 1, y: 1}
|
||||||
|
m_AnchoredPosition: {x: 0, y: 0}
|
||||||
|
m_SizeDelta: {x: -8, y: 0}
|
||||||
|
m_Pivot: {x: 0, y: 1}
|
||||||
|
--- !u!114 &7664388476214949154
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 8880113283847965645}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Mask
|
||||||
|
m_ShowMaskGraphic: 0
|
||||||
|
--- !u!222 &4118694975536929718
|
||||||
|
CanvasRenderer:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 8880113283847965645}
|
||||||
|
m_CullTransparentMesh: 1
|
||||||
|
--- !u!114 &4821167584285562036
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 8880113283847965645}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||||
|
m_Material: {fileID: 0}
|
||||||
|
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
m_RaycastTarget: 1
|
||||||
|
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
m_Maskable: 1
|
||||||
|
m_OnCullStateChanged:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls: []
|
||||||
|
m_Sprite: {fileID: 10917, guid: 0000000000000000f000000000000000, type: 0}
|
||||||
|
m_Type: 1
|
||||||
|
m_PreserveAspect: 0
|
||||||
|
m_FillCenter: 1
|
||||||
|
m_FillMethod: 4
|
||||||
|
m_FillAmount: 1
|
||||||
|
m_FillClockwise: 1
|
||||||
|
m_FillOrigin: 0
|
||||||
|
m_UseSpriteMesh: 0
|
||||||
|
m_PixelsPerUnitMultiplier: 1
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: ee774914fec90eb469a4484a6d367804
|
||||||
|
PrefabImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
230
Assets/Prefabs/Graphical Tools/NodeScript/IN.prefab
Normal file
230
Assets/Prefabs/Graphical Tools/NodeScript/IN.prefab
Normal file
@@ -0,0 +1,230 @@
|
|||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!1 &1511618988303119173
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 8659332950650682692}
|
||||||
|
- component: {fileID: 226170325915869555}
|
||||||
|
- component: {fileID: 5856798800522582644}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: Image
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!224 &8659332950650682692
|
||||||
|
RectTransform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1511618988303119173}
|
||||||
|
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||||
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children: []
|
||||||
|
m_Father: {fileID: 6771339006655316496}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
m_AnchorMin: {x: 0, y: 1}
|
||||||
|
m_AnchorMax: {x: 0, y: 1}
|
||||||
|
m_AnchoredPosition: {x: 18, y: -18}
|
||||||
|
m_SizeDelta: {x: 36, y: 36}
|
||||||
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
|
--- !u!222 &226170325915869555
|
||||||
|
CanvasRenderer:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1511618988303119173}
|
||||||
|
m_CullTransparentMesh: 1
|
||||||
|
--- !u!114 &5856798800522582644
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1511618988303119173}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||||
|
m_Material: {fileID: 0}
|
||||||
|
m_Color: {r: 0, g: 1, b: 1, a: 1}
|
||||||
|
m_RaycastTarget: 1
|
||||||
|
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
m_Maskable: 1
|
||||||
|
m_OnCullStateChanged:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls: []
|
||||||
|
m_Sprite: {fileID: 21300000, guid: c50c7c9c8871c91409e4470d3c721189, type: 3}
|
||||||
|
m_Type: 1
|
||||||
|
m_PreserveAspect: 0
|
||||||
|
m_FillCenter: 1
|
||||||
|
m_FillMethod: 4
|
||||||
|
m_FillAmount: 1
|
||||||
|
m_FillClockwise: 1
|
||||||
|
m_FillOrigin: 0
|
||||||
|
m_UseSpriteMesh: 0
|
||||||
|
m_PixelsPerUnitMultiplier: 1
|
||||||
|
--- !u!1 &1982491914267806703
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 6771339006655316496}
|
||||||
|
- component: {fileID: 1525502865680152704}
|
||||||
|
- component: {fileID: 4816966882498123501}
|
||||||
|
- component: {fileID: 4076004446672212327}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: IN
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!224 &6771339006655316496
|
||||||
|
RectTransform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1982491914267806703}
|
||||||
|
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||||
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children:
|
||||||
|
- {fileID: 8659332950650682692}
|
||||||
|
m_Father: {fileID: 0}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
m_AnchorMin: {x: 0, y: 1}
|
||||||
|
m_AnchorMax: {x: 0, y: 1}
|
||||||
|
m_AnchoredPosition: {x: 29.935, y: -20.11}
|
||||||
|
m_SizeDelta: {x: 0, y: 0}
|
||||||
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
|
--- !u!222 &1525502865680152704
|
||||||
|
CanvasRenderer:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1982491914267806703}
|
||||||
|
m_CullTransparentMesh: 1
|
||||||
|
--- !u!114 &4816966882498123501
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1982491914267806703}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI
|
||||||
|
m_Material: {fileID: 0}
|
||||||
|
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
m_RaycastTarget: 1
|
||||||
|
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
m_Maskable: 1
|
||||||
|
m_OnCullStateChanged:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls: []
|
||||||
|
m_text: A
|
||||||
|
m_isRightToLeft: 0
|
||||||
|
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||||
|
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||||
|
m_fontSharedMaterials: []
|
||||||
|
m_fontMaterial: {fileID: 0}
|
||||||
|
m_fontMaterials: []
|
||||||
|
m_fontColor32:
|
||||||
|
serializedVersion: 2
|
||||||
|
rgba: 4278190080
|
||||||
|
m_fontColor: {r: 0, g: 0, b: 0, a: 1}
|
||||||
|
m_enableVertexGradient: 0
|
||||||
|
m_colorMode: 3
|
||||||
|
m_fontColorGradient:
|
||||||
|
topLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
topRight: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
bottomRight: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
m_fontColorGradientPreset: {fileID: 0}
|
||||||
|
m_spriteAsset: {fileID: 0}
|
||||||
|
m_tintAllSprites: 0
|
||||||
|
m_StyleSheet: {fileID: 0}
|
||||||
|
m_TextStyleHashCode: -1183493901
|
||||||
|
m_overrideHtmlColors: 0
|
||||||
|
m_faceColor:
|
||||||
|
serializedVersion: 2
|
||||||
|
rgba: 4294967295
|
||||||
|
m_fontSize: 36
|
||||||
|
m_fontSizeBase: 36
|
||||||
|
m_fontWeight: 400
|
||||||
|
m_enableAutoSizing: 0
|
||||||
|
m_fontSizeMin: 18
|
||||||
|
m_fontSizeMax: 72
|
||||||
|
m_fontStyle: 0
|
||||||
|
m_HorizontalAlignment: 1
|
||||||
|
m_VerticalAlignment: 256
|
||||||
|
m_textAlignment: 65535
|
||||||
|
m_characterSpacing: 0
|
||||||
|
m_characterHorizontalScale: 1
|
||||||
|
m_wordSpacing: 0
|
||||||
|
m_lineSpacing: 0
|
||||||
|
m_lineSpacingMax: 0
|
||||||
|
m_paragraphSpacing: 0
|
||||||
|
m_charWidthMaxAdj: 0
|
||||||
|
m_TextWrappingMode: 0
|
||||||
|
m_wordWrappingRatios: 0.4
|
||||||
|
m_overflowMode: 0
|
||||||
|
m_linkedTextComponent: {fileID: 0}
|
||||||
|
parentLinkedComponent: {fileID: 0}
|
||||||
|
m_enableKerning: 0
|
||||||
|
m_ActiveFontFeatures: 6e72656b
|
||||||
|
m_enableExtraPadding: 0
|
||||||
|
checkPaddingRequired: 0
|
||||||
|
m_isRichText: 1
|
||||||
|
m_EmojiFallbackSupport: 1
|
||||||
|
m_parseCtrlCharacters: 1
|
||||||
|
m_isOrthographic: 1
|
||||||
|
m_isCullingEnabled: 0
|
||||||
|
m_horizontalMapping: 0
|
||||||
|
m_verticalMapping: 0
|
||||||
|
m_uvLineOffset: 0
|
||||||
|
m_geometrySortingOrder: 0
|
||||||
|
m_IsTextObjectScaleStatic: 0
|
||||||
|
m_VertexBufferAutoSizeReduction: 0
|
||||||
|
m_useMaxVisibleDescender: 1
|
||||||
|
m_pageToDisplay: 1
|
||||||
|
m_margin: {x: 36, y: 0, z: 0, w: 0}
|
||||||
|
m_isUsingLegacyAnimationComponent: 0
|
||||||
|
m_isVolumetricText: 0
|
||||||
|
m_hasFontAssetChanged: 0
|
||||||
|
m_baseMaterial: {fileID: 0}
|
||||||
|
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
--- !u!114 &4076004446672212327
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1982491914267806703}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.ContentSizeFitter
|
||||||
|
m_HorizontalFit: 2
|
||||||
|
m_VerticalFit: 2
|
||||||
7
Assets/Prefabs/Graphical Tools/NodeScript/IN.prefab.meta
Normal file
7
Assets/Prefabs/Graphical Tools/NodeScript/IN.prefab.meta
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: d3b6d8ae350f6e64fa36b94b021a99b1
|
||||||
|
PrefabImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,527 @@
|
|||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!1 &1390561808239447781
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 2659780073365436884}
|
||||||
|
- component: {fileID: 324852340044291176}
|
||||||
|
- component: {fileID: 266478102657213591}
|
||||||
|
- component: {fileID: 4395578133455964370}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: Placeholder
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!224 &2659780073365436884
|
||||||
|
RectTransform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1390561808239447781}
|
||||||
|
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||||
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children: []
|
||||||
|
m_Father: {fileID: 4994371786269107151}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
m_AnchorMin: {x: 0, y: 0}
|
||||||
|
m_AnchorMax: {x: 1, y: 1}
|
||||||
|
m_AnchoredPosition: {x: 0, y: 0}
|
||||||
|
m_SizeDelta: {x: 0, y: 0}
|
||||||
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
|
--- !u!222 &324852340044291176
|
||||||
|
CanvasRenderer:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1390561808239447781}
|
||||||
|
m_CullTransparentMesh: 1
|
||||||
|
--- !u!114 &266478102657213591
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1390561808239447781}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI
|
||||||
|
m_Material: {fileID: 0}
|
||||||
|
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
m_RaycastTarget: 1
|
||||||
|
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
m_Maskable: 1
|
||||||
|
m_OnCullStateChanged:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls: []
|
||||||
|
m_text: Enter text...
|
||||||
|
m_isRightToLeft: 0
|
||||||
|
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||||
|
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||||
|
m_fontSharedMaterials: []
|
||||||
|
m_fontMaterial: {fileID: 0}
|
||||||
|
m_fontMaterials: []
|
||||||
|
m_fontColor32:
|
||||||
|
serializedVersion: 2
|
||||||
|
rgba: 2150773298
|
||||||
|
m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.5}
|
||||||
|
m_enableVertexGradient: 0
|
||||||
|
m_colorMode: 3
|
||||||
|
m_fontColorGradient:
|
||||||
|
topLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
topRight: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
bottomRight: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
m_fontColorGradientPreset: {fileID: 0}
|
||||||
|
m_spriteAsset: {fileID: 0}
|
||||||
|
m_tintAllSprites: 0
|
||||||
|
m_StyleSheet: {fileID: 0}
|
||||||
|
m_TextStyleHashCode: -1183493901
|
||||||
|
m_overrideHtmlColors: 0
|
||||||
|
m_faceColor:
|
||||||
|
serializedVersion: 2
|
||||||
|
rgba: 4294967295
|
||||||
|
m_fontSize: 36
|
||||||
|
m_fontSizeBase: 36
|
||||||
|
m_fontWeight: 400
|
||||||
|
m_enableAutoSizing: 0
|
||||||
|
m_fontSizeMin: 18
|
||||||
|
m_fontSizeMax: 72
|
||||||
|
m_fontStyle: 2
|
||||||
|
m_HorizontalAlignment: 1
|
||||||
|
m_VerticalAlignment: 256
|
||||||
|
m_textAlignment: 65535
|
||||||
|
m_characterSpacing: 0
|
||||||
|
m_characterHorizontalScale: 1
|
||||||
|
m_wordSpacing: 0
|
||||||
|
m_lineSpacing: 0
|
||||||
|
m_lineSpacingMax: 0
|
||||||
|
m_paragraphSpacing: 0
|
||||||
|
m_charWidthMaxAdj: 0
|
||||||
|
m_TextWrappingMode: 0
|
||||||
|
m_wordWrappingRatios: 0.4
|
||||||
|
m_overflowMode: 0
|
||||||
|
m_linkedTextComponent: {fileID: 0}
|
||||||
|
parentLinkedComponent: {fileID: 0}
|
||||||
|
m_enableKerning: 0
|
||||||
|
m_ActiveFontFeatures: 6e72656b
|
||||||
|
m_enableExtraPadding: 1
|
||||||
|
checkPaddingRequired: 0
|
||||||
|
m_isRichText: 1
|
||||||
|
m_EmojiFallbackSupport: 1
|
||||||
|
m_parseCtrlCharacters: 1
|
||||||
|
m_isOrthographic: 1
|
||||||
|
m_isCullingEnabled: 0
|
||||||
|
m_horizontalMapping: 0
|
||||||
|
m_verticalMapping: 0
|
||||||
|
m_uvLineOffset: 0
|
||||||
|
m_geometrySortingOrder: 0
|
||||||
|
m_IsTextObjectScaleStatic: 0
|
||||||
|
m_VertexBufferAutoSizeReduction: 0
|
||||||
|
m_useMaxVisibleDescender: 1
|
||||||
|
m_pageToDisplay: 1
|
||||||
|
m_margin: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
m_isUsingLegacyAnimationComponent: 0
|
||||||
|
m_isVolumetricText: 0
|
||||||
|
m_hasFontAssetChanged: 0
|
||||||
|
m_baseMaterial: {fileID: 0}
|
||||||
|
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
--- !u!114 &4395578133455964370
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1390561808239447781}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.LayoutElement
|
||||||
|
m_IgnoreLayout: 1
|
||||||
|
m_MinWidth: -1
|
||||||
|
m_MinHeight: -1
|
||||||
|
m_PreferredWidth: -1
|
||||||
|
m_PreferredHeight: -1
|
||||||
|
m_FlexibleWidth: -1
|
||||||
|
m_FlexibleHeight: -1
|
||||||
|
m_LayoutPriority: 1
|
||||||
|
--- !u!1 &2123904644115912225
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 7327372015316484858}
|
||||||
|
- component: {fileID: 5672882645367788189}
|
||||||
|
- component: {fileID: 6090549573183465193}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: Text
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!224 &7327372015316484858
|
||||||
|
RectTransform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 2123904644115912225}
|
||||||
|
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||||
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children: []
|
||||||
|
m_Father: {fileID: 4994371786269107151}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
m_AnchorMin: {x: 0, y: 0}
|
||||||
|
m_AnchorMax: {x: 1, y: 1}
|
||||||
|
m_AnchoredPosition: {x: 0, y: 0}
|
||||||
|
m_SizeDelta: {x: 0, y: 0}
|
||||||
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
|
--- !u!222 &5672882645367788189
|
||||||
|
CanvasRenderer:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 2123904644115912225}
|
||||||
|
m_CullTransparentMesh: 1
|
||||||
|
--- !u!114 &6090549573183465193
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 2123904644115912225}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI
|
||||||
|
m_Material: {fileID: 0}
|
||||||
|
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
m_RaycastTarget: 1
|
||||||
|
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
m_Maskable: 1
|
||||||
|
m_OnCullStateChanged:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls: []
|
||||||
|
m_text: "\u200B"
|
||||||
|
m_isRightToLeft: 0
|
||||||
|
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||||
|
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||||
|
m_fontSharedMaterials: []
|
||||||
|
m_fontMaterial: {fileID: 0}
|
||||||
|
m_fontMaterials: []
|
||||||
|
m_fontColor32:
|
||||||
|
serializedVersion: 2
|
||||||
|
rgba: 4281479730
|
||||||
|
m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
|
||||||
|
m_enableVertexGradient: 0
|
||||||
|
m_colorMode: 3
|
||||||
|
m_fontColorGradient:
|
||||||
|
topLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
topRight: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
bottomRight: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
m_fontColorGradientPreset: {fileID: 0}
|
||||||
|
m_spriteAsset: {fileID: 0}
|
||||||
|
m_tintAllSprites: 0
|
||||||
|
m_StyleSheet: {fileID: 0}
|
||||||
|
m_TextStyleHashCode: -1183493901
|
||||||
|
m_overrideHtmlColors: 0
|
||||||
|
m_faceColor:
|
||||||
|
serializedVersion: 2
|
||||||
|
rgba: 4294967295
|
||||||
|
m_fontSize: 20.55
|
||||||
|
m_fontSizeBase: 36
|
||||||
|
m_fontWeight: 400
|
||||||
|
m_enableAutoSizing: 1
|
||||||
|
m_fontSizeMin: 18
|
||||||
|
m_fontSizeMax: 72
|
||||||
|
m_fontStyle: 0
|
||||||
|
m_HorizontalAlignment: 1
|
||||||
|
m_VerticalAlignment: 256
|
||||||
|
m_textAlignment: 65535
|
||||||
|
m_characterSpacing: 0
|
||||||
|
m_characterHorizontalScale: 1
|
||||||
|
m_wordSpacing: 0
|
||||||
|
m_lineSpacing: 0
|
||||||
|
m_lineSpacingMax: 0
|
||||||
|
m_paragraphSpacing: 0
|
||||||
|
m_charWidthMaxAdj: 0
|
||||||
|
m_TextWrappingMode: 3
|
||||||
|
m_wordWrappingRatios: 0.4
|
||||||
|
m_overflowMode: 0
|
||||||
|
m_linkedTextComponent: {fileID: 0}
|
||||||
|
parentLinkedComponent: {fileID: 0}
|
||||||
|
m_enableKerning: 0
|
||||||
|
m_ActiveFontFeatures: 6e72656b
|
||||||
|
m_enableExtraPadding: 1
|
||||||
|
checkPaddingRequired: 0
|
||||||
|
m_isRichText: 1
|
||||||
|
m_EmojiFallbackSupport: 1
|
||||||
|
m_parseCtrlCharacters: 1
|
||||||
|
m_isOrthographic: 1
|
||||||
|
m_isCullingEnabled: 0
|
||||||
|
m_horizontalMapping: 0
|
||||||
|
m_verticalMapping: 0
|
||||||
|
m_uvLineOffset: 0
|
||||||
|
m_geometrySortingOrder: 0
|
||||||
|
m_IsTextObjectScaleStatic: 0
|
||||||
|
m_VertexBufferAutoSizeReduction: 0
|
||||||
|
m_useMaxVisibleDescender: 1
|
||||||
|
m_pageToDisplay: 1
|
||||||
|
m_margin: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
m_isUsingLegacyAnimationComponent: 0
|
||||||
|
m_isVolumetricText: 0
|
||||||
|
m_hasFontAssetChanged: 0
|
||||||
|
m_baseMaterial: {fileID: 0}
|
||||||
|
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
--- !u!1 &2991020675703354371
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 4994371786269107151}
|
||||||
|
- component: {fileID: 2061605977340211594}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: Text Area
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!224 &4994371786269107151
|
||||||
|
RectTransform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 2991020675703354371}
|
||||||
|
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||||
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children:
|
||||||
|
- {fileID: 2659780073365436884}
|
||||||
|
- {fileID: 7327372015316484858}
|
||||||
|
m_Father: {fileID: 3361567497959364912}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
m_AnchorMin: {x: 0, y: 0}
|
||||||
|
m_AnchorMax: {x: 1, y: 1}
|
||||||
|
m_AnchoredPosition: {x: 0, y: -0.5}
|
||||||
|
m_SizeDelta: {x: -20, y: -13}
|
||||||
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
|
--- !u!114 &2061605977340211594
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 2991020675703354371}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: 3312d7739989d2b4e91e6319e9a96d76, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.RectMask2D
|
||||||
|
m_Padding: {x: -8, y: -5, z: -8, w: -5}
|
||||||
|
m_Softness: {x: 0, y: 0}
|
||||||
|
--- !u!1 &4283138263180720856
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 3361567497959364912}
|
||||||
|
- component: {fileID: 111465765883541653}
|
||||||
|
- component: {fileID: 2294918046086586719}
|
||||||
|
- component: {fileID: 3242109441238352385}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: InputField (TMP)
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!224 &3361567497959364912
|
||||||
|
RectTransform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 4283138263180720856}
|
||||||
|
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||||
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children:
|
||||||
|
- {fileID: 4994371786269107151}
|
||||||
|
m_Father: {fileID: 0}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
m_AnchorMin: {x: 0, y: 0}
|
||||||
|
m_AnchorMax: {x: 0, y: 0}
|
||||||
|
m_AnchoredPosition: {x: 0, y: 0}
|
||||||
|
m_SizeDelta: {x: 109.26, y: 36}
|
||||||
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
|
--- !u!222 &111465765883541653
|
||||||
|
CanvasRenderer:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 4283138263180720856}
|
||||||
|
m_CullTransparentMesh: 1
|
||||||
|
--- !u!114 &2294918046086586719
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 4283138263180720856}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||||
|
m_Material: {fileID: 0}
|
||||||
|
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
m_RaycastTarget: 1
|
||||||
|
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
m_Maskable: 1
|
||||||
|
m_OnCullStateChanged:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls: []
|
||||||
|
m_Sprite: {fileID: 10911, guid: 0000000000000000f000000000000000, type: 0}
|
||||||
|
m_Type: 1
|
||||||
|
m_PreserveAspect: 0
|
||||||
|
m_FillCenter: 1
|
||||||
|
m_FillMethod: 4
|
||||||
|
m_FillAmount: 1
|
||||||
|
m_FillClockwise: 1
|
||||||
|
m_FillOrigin: 0
|
||||||
|
m_UseSpriteMesh: 0
|
||||||
|
m_PixelsPerUnitMultiplier: 1
|
||||||
|
--- !u!114 &3242109441238352385
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 4283138263180720856}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: 2da0c512f12947e489f739169773d7ca, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TMP_InputField
|
||||||
|
m_Navigation:
|
||||||
|
m_Mode: 3
|
||||||
|
m_WrapAround: 0
|
||||||
|
m_SelectOnUp: {fileID: 0}
|
||||||
|
m_SelectOnDown: {fileID: 0}
|
||||||
|
m_SelectOnLeft: {fileID: 0}
|
||||||
|
m_SelectOnRight: {fileID: 0}
|
||||||
|
m_Transition: 1
|
||||||
|
m_Colors:
|
||||||
|
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||||
|
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
|
||||||
|
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||||
|
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
|
||||||
|
m_ColorMultiplier: 1
|
||||||
|
m_FadeDuration: 0.1
|
||||||
|
m_SpriteState:
|
||||||
|
m_HighlightedSprite: {fileID: 0}
|
||||||
|
m_PressedSprite: {fileID: 0}
|
||||||
|
m_SelectedSprite: {fileID: 0}
|
||||||
|
m_DisabledSprite: {fileID: 0}
|
||||||
|
m_AnimationTriggers:
|
||||||
|
m_NormalTrigger: Normal
|
||||||
|
m_HighlightedTrigger: Highlighted
|
||||||
|
m_PressedTrigger: Pressed
|
||||||
|
m_SelectedTrigger: Selected
|
||||||
|
m_DisabledTrigger: Disabled
|
||||||
|
m_Interactable: 1
|
||||||
|
m_TargetGraphic: {fileID: 2294918046086586719}
|
||||||
|
m_TextViewport: {fileID: 4994371786269107151}
|
||||||
|
m_TextComponent: {fileID: 6090549573183465193}
|
||||||
|
m_Placeholder: {fileID: 266478102657213591}
|
||||||
|
m_VerticalScrollbar: {fileID: 0}
|
||||||
|
m_VerticalScrollbarEventHandler: {fileID: 0}
|
||||||
|
m_LayoutGroup: {fileID: 0}
|
||||||
|
m_ScrollSensitivity: 1
|
||||||
|
m_ContentType: 0
|
||||||
|
m_InputType: 0
|
||||||
|
m_AsteriskChar: 42
|
||||||
|
m_KeyboardType: 0
|
||||||
|
m_LineType: 0
|
||||||
|
m_HideMobileInput: 0
|
||||||
|
m_HideSoftKeyboard: 0
|
||||||
|
m_CharacterValidation: 0
|
||||||
|
m_RegexValue:
|
||||||
|
m_GlobalPointSize: 36
|
||||||
|
m_CharacterLimit: 0
|
||||||
|
m_OnEndEdit:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls: []
|
||||||
|
m_OnSubmit:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls: []
|
||||||
|
m_OnSelect:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls: []
|
||||||
|
m_OnDeselect:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls: []
|
||||||
|
m_OnTextSelection:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls: []
|
||||||
|
m_OnEndTextSelection:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls: []
|
||||||
|
m_OnValueChanged:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls: []
|
||||||
|
m_OnTouchScreenKeyboardStatusChanged:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls: []
|
||||||
|
m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
|
||||||
|
m_CustomCaretColor: 0
|
||||||
|
m_SelectionColor: {r: 0.65882355, g: 0.80784315, b: 1, a: 0.7529412}
|
||||||
|
m_Text:
|
||||||
|
m_CaretBlinkRate: 0.85
|
||||||
|
m_CaretWidth: 1
|
||||||
|
m_ReadOnly: 0
|
||||||
|
m_RichText: 1
|
||||||
|
m_GlobalFontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||||
|
m_OnFocusSelectAll: 1
|
||||||
|
m_ResetOnDeActivation: 1
|
||||||
|
m_KeepTextSelectionVisible: 0
|
||||||
|
m_RestoreOriginalTextOnEscape: 1
|
||||||
|
m_isRichTextEditingAllowed: 0
|
||||||
|
m_LineLimit: 0
|
||||||
|
isAlert: 0
|
||||||
|
m_InputValidator: {fileID: 0}
|
||||||
|
m_ShouldActivateOnSelect: 1
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: e64d4b6c88d9d47488d476cf81f30f27
|
||||||
|
PrefabImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
426
Assets/Prefabs/Graphical Tools/NodeScript/Node Window.prefab
Normal file
426
Assets/Prefabs/Graphical Tools/NodeScript/Node Window.prefab
Normal file
@@ -0,0 +1,426 @@
|
|||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!1 &387393856836735129
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 7556955190755933808}
|
||||||
|
- component: {fileID: 2814534042963124076}
|
||||||
|
- component: {fileID: 6507936905540603302}
|
||||||
|
m_Layer: 5
|
||||||
|
m_Name: Background
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!224 &7556955190755933808
|
||||||
|
RectTransform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 387393856836735129}
|
||||||
|
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||||
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children: []
|
||||||
|
m_Father: {fileID: 2880595889031726545}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
m_AnchorMin: {x: 0, y: 0}
|
||||||
|
m_AnchorMax: {x: 1, y: 1}
|
||||||
|
m_AnchoredPosition: {x: 0, y: 0}
|
||||||
|
m_SizeDelta: {x: 0, y: 0}
|
||||||
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
|
--- !u!222 &2814534042963124076
|
||||||
|
CanvasRenderer:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 387393856836735129}
|
||||||
|
m_CullTransparentMesh: 0
|
||||||
|
--- !u!114 &6507936905540603302
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 387393856836735129}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
m_Material: {fileID: 0}
|
||||||
|
m_Color: {r: 0.18565324, g: 0.18565324, b: 0.163, a: 0.39607844}
|
||||||
|
m_RaycastTarget: 1
|
||||||
|
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
m_Maskable: 1
|
||||||
|
m_OnCullStateChanged:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls: []
|
||||||
|
m_Sprite: {fileID: 21300000, guid: 951352f31055aae46b6e9786313c632d, type: 3}
|
||||||
|
m_Type: 1
|
||||||
|
m_PreserveAspect: 0
|
||||||
|
m_FillCenter: 1
|
||||||
|
m_FillMethod: 4
|
||||||
|
m_FillAmount: 1
|
||||||
|
m_FillClockwise: 1
|
||||||
|
m_FillOrigin: 0
|
||||||
|
m_UseSpriteMesh: 0
|
||||||
|
m_PixelsPerUnitMultiplier: 5
|
||||||
|
--- !u!1 &5577872369427388259
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 2491246242046381195}
|
||||||
|
- component: {fileID: 69861377592666494}
|
||||||
|
- component: {fileID: 3832966658183658279}
|
||||||
|
m_Layer: 5
|
||||||
|
m_Name: Background (1)
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!224 &2491246242046381195
|
||||||
|
RectTransform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 5577872369427388259}
|
||||||
|
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||||
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children: []
|
||||||
|
m_Father: {fileID: 2880595889031726545}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
m_AnchorMin: {x: 0, y: 0}
|
||||||
|
m_AnchorMax: {x: 1, y: 1}
|
||||||
|
m_AnchoredPosition: {x: 0, y: 0}
|
||||||
|
m_SizeDelta: {x: 0, y: 0}
|
||||||
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
|
--- !u!222 &69861377592666494
|
||||||
|
CanvasRenderer:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 5577872369427388259}
|
||||||
|
m_CullTransparentMesh: 0
|
||||||
|
--- !u!114 &3832966658183658279
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 5577872369427388259}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
m_Material: {fileID: 0}
|
||||||
|
m_Color: {r: 1, g: 1, b: 1, a: 0.44705883}
|
||||||
|
m_RaycastTarget: 1
|
||||||
|
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
m_Maskable: 1
|
||||||
|
m_OnCullStateChanged:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls: []
|
||||||
|
m_Sprite: {fileID: 21300000, guid: 6b07019707eaa514483b82a007127713, type: 3}
|
||||||
|
m_Type: 1
|
||||||
|
m_PreserveAspect: 0
|
||||||
|
m_FillCenter: 1
|
||||||
|
m_FillMethod: 4
|
||||||
|
m_FillAmount: 1
|
||||||
|
m_FillClockwise: 1
|
||||||
|
m_FillOrigin: 0
|
||||||
|
m_UseSpriteMesh: 0
|
||||||
|
m_PixelsPerUnitMultiplier: 5
|
||||||
|
--- !u!1 &6091547238259645747
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 2880595889031726545}
|
||||||
|
- component: {fileID: 7405104467736610511}
|
||||||
|
m_Layer: 5
|
||||||
|
m_Name: Node Window
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 2800000, guid: f87b5805002ec9649bcb1b96d8a16ba9, type: 3}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!224 &2880595889031726545
|
||||||
|
RectTransform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 6091547238259645747}
|
||||||
|
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||||
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children:
|
||||||
|
- {fileID: 7556955190755933808}
|
||||||
|
- {fileID: 2491246242046381195}
|
||||||
|
- {fileID: 3202466582045695497}
|
||||||
|
- {fileID: 8475563372351313221}
|
||||||
|
- {fileID: 416700662159144857}
|
||||||
|
m_Father: {fileID: 0}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
m_AnchorMin: {x: 0, y: 0}
|
||||||
|
m_AnchorMax: {x: 1, y: 1}
|
||||||
|
m_AnchoredPosition: {x: -5.550293, y: 85.44995}
|
||||||
|
m_SizeDelta: {x: -1339.501, y: -376.9}
|
||||||
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
|
--- !u!114 &7405104467736610511
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 6091547238259645747}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: 6cdb8cc0b3fb21f49b1a761000205509, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: Assembly-CSharp::NodeManager
|
||||||
|
allNodes: []
|
||||||
|
nodeObjectPrefab: {fileID: 6709114187421732478, guid: 5ba4ce13e345fc6488c516cc37c35015,
|
||||||
|
type: 3}
|
||||||
|
wireThickness: 5
|
||||||
|
canvasArea: {fileID: 3202466582045695497}
|
||||||
|
refCamera: {fileID: 0}
|
||||||
|
contextMenuRoot: {fileID: 416700662159144857}
|
||||||
|
NodeArea: {fileID: 8475563372351313221}
|
||||||
|
contextMenuItemPrefab: {fileID: 9105660174245163102, guid: fa15f9e67ebc54136be977a5f3dee634,
|
||||||
|
type: 3}
|
||||||
|
uiInputPrefab: {fileID: 4283138263180720856, guid: e64d4b6c88d9d47488d476cf81f30f27,
|
||||||
|
type: 3}
|
||||||
|
--- !u!1 &6105481023126475246
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 8475563372351313221}
|
||||||
|
m_Layer: 5
|
||||||
|
m_Name: GameObject (1)
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!224 &8475563372351313221
|
||||||
|
RectTransform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 6105481023126475246}
|
||||||
|
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||||
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children: []
|
||||||
|
m_Father: {fileID: 2880595889031726545}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||||
|
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||||
|
m_AnchoredPosition: {x: 0, y: 0}
|
||||||
|
m_SizeDelta: {x: 100, y: 100}
|
||||||
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
|
--- !u!1 &7016267293831768418
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 3202466582045695497}
|
||||||
|
- component: {fileID: 351883452891975269}
|
||||||
|
- component: {fileID: 8409166164882657371}
|
||||||
|
- component: {fileID: 1000663241356510047}
|
||||||
|
m_Layer: 5
|
||||||
|
m_Name: Content
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!224 &3202466582045695497
|
||||||
|
RectTransform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 7016267293831768418}
|
||||||
|
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||||
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children: []
|
||||||
|
m_Father: {fileID: 2880595889031726545}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
m_AnchorMin: {x: 0, y: 0}
|
||||||
|
m_AnchorMax: {x: 1, y: 1}
|
||||||
|
m_AnchoredPosition: {x: 0, y: -30}
|
||||||
|
m_SizeDelta: {x: 0, y: -60}
|
||||||
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
|
--- !u!222 &351883452891975269
|
||||||
|
CanvasRenderer:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 7016267293831768418}
|
||||||
|
m_CullTransparentMesh: 0
|
||||||
|
--- !u!114 &8409166164882657371
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 7016267293831768418}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
m_Material: {fileID: 0}
|
||||||
|
m_Color: {r: 0, g: 0, b: 0, a: 0.39215687}
|
||||||
|
m_RaycastTarget: 1
|
||||||
|
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
m_Maskable: 1
|
||||||
|
m_OnCullStateChanged:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls: []
|
||||||
|
m_Sprite: {fileID: 21300000, guid: 5e16c7aea118d68498053518146c9cf9, type: 3}
|
||||||
|
m_Type: 1
|
||||||
|
m_PreserveAspect: 0
|
||||||
|
m_FillCenter: 1
|
||||||
|
m_FillMethod: 4
|
||||||
|
m_FillAmount: 1
|
||||||
|
m_FillClockwise: 1
|
||||||
|
m_FillOrigin: 0
|
||||||
|
m_UseSpriteMesh: 0
|
||||||
|
m_PixelsPerUnitMultiplier: 5
|
||||||
|
--- !u!114 &1000663241356510047
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 7016267293831768418}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: 6cdb8cc0b3fb21f49b1a761000205509, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: Assembly-CSharp::NodeManager
|
||||||
|
allNodes: []
|
||||||
|
nodeObjectPrefab: {fileID: 0}
|
||||||
|
wireThickness: 5
|
||||||
|
canvasArea: {fileID: 0}
|
||||||
|
refCamera: {fileID: 0}
|
||||||
|
contextMenuRoot: {fileID: 0}
|
||||||
|
NodeArea: {fileID: 0}
|
||||||
|
contextMenuItemPrefab: {fileID: 0}
|
||||||
|
uiInputPrefab: {fileID: 0}
|
||||||
|
--- !u!1 &7165519357249783236
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 416700662159144857}
|
||||||
|
- component: {fileID: 756442430084381135}
|
||||||
|
- component: {fileID: 2657342246189562635}
|
||||||
|
m_Layer: 5
|
||||||
|
m_Name: GameObject
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!224 &416700662159144857
|
||||||
|
RectTransform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 7165519357249783236}
|
||||||
|
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||||
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children: []
|
||||||
|
m_Father: {fileID: 2880595889031726545}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||||
|
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||||
|
m_AnchoredPosition: {x: 0, y: -30}
|
||||||
|
m_SizeDelta: {x: 350, y: 850}
|
||||||
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
|
--- !u!114 &756442430084381135
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 7165519357249783236}
|
||||||
|
m_Enabled: 0
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.VerticalLayoutGroup
|
||||||
|
m_Padding:
|
||||||
|
m_Left: 0
|
||||||
|
m_Right: 0
|
||||||
|
m_Top: 0
|
||||||
|
m_Bottom: 0
|
||||||
|
m_ChildAlignment: 0
|
||||||
|
m_Spacing: 0
|
||||||
|
m_ChildForceExpandWidth: 1
|
||||||
|
m_ChildForceExpandHeight: 1
|
||||||
|
m_ChildControlWidth: 1
|
||||||
|
m_ChildControlHeight: 1
|
||||||
|
m_ChildScaleWidth: 0
|
||||||
|
m_ChildScaleHeight: 0
|
||||||
|
m_ReverseArrangement: 0
|
||||||
|
--- !u!114 &2657342246189562635
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 7165519357249783236}
|
||||||
|
m_Enabled: 0
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.ContentSizeFitter
|
||||||
|
m_HorizontalFit: 1
|
||||||
|
m_VerticalFit: 1
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 55d0ca39526c5e94ebac2e6da0c8d80c
|
||||||
|
PrefabImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
1050
Assets/Prefabs/Graphical Tools/NodeScript/Node.prefab
Normal file
1050
Assets/Prefabs/Graphical Tools/NodeScript/Node.prefab
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 5ba4ce13e345fc6488c516cc37c35015
|
||||||
|
PrefabImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
230
Assets/Prefabs/Graphical Tools/NodeScript/OUT.prefab
Normal file
230
Assets/Prefabs/Graphical Tools/NodeScript/OUT.prefab
Normal file
@@ -0,0 +1,230 @@
|
|||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!1 &786711617859700626
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 5760373814693140587}
|
||||||
|
- component: {fileID: 1693453407129975681}
|
||||||
|
- component: {fileID: 3675972585655872526}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: Image
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!224 &5760373814693140587
|
||||||
|
RectTransform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 786711617859700626}
|
||||||
|
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||||
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children: []
|
||||||
|
m_Father: {fileID: 644833113102702400}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
m_AnchorMin: {x: 1, y: 1}
|
||||||
|
m_AnchorMax: {x: 1, y: 1}
|
||||||
|
m_AnchoredPosition: {x: -18, y: -18}
|
||||||
|
m_SizeDelta: {x: 36, y: 36}
|
||||||
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
|
--- !u!222 &1693453407129975681
|
||||||
|
CanvasRenderer:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 786711617859700626}
|
||||||
|
m_CullTransparentMesh: 1
|
||||||
|
--- !u!114 &3675972585655872526
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 786711617859700626}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||||
|
m_Material: {fileID: 0}
|
||||||
|
m_Color: {r: 0, g: 1, b: 1, a: 1}
|
||||||
|
m_RaycastTarget: 1
|
||||||
|
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
m_Maskable: 1
|
||||||
|
m_OnCullStateChanged:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls: []
|
||||||
|
m_Sprite: {fileID: 21300000, guid: c50c7c9c8871c91409e4470d3c721189, type: 3}
|
||||||
|
m_Type: 1
|
||||||
|
m_PreserveAspect: 0
|
||||||
|
m_FillCenter: 1
|
||||||
|
m_FillMethod: 4
|
||||||
|
m_FillAmount: 1
|
||||||
|
m_FillClockwise: 1
|
||||||
|
m_FillOrigin: 0
|
||||||
|
m_UseSpriteMesh: 0
|
||||||
|
m_PixelsPerUnitMultiplier: 1
|
||||||
|
--- !u!1 &2009937399821704551
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 644833113102702400}
|
||||||
|
- component: {fileID: 5178026511363294150}
|
||||||
|
- component: {fileID: 6686407532977347685}
|
||||||
|
- component: {fileID: 4143938553789986431}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: OUT
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!224 &644833113102702400
|
||||||
|
RectTransform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 2009937399821704551}
|
||||||
|
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||||
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children:
|
||||||
|
- {fileID: 5760373814693140587}
|
||||||
|
m_Father: {fileID: 0}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
m_AnchorMin: {x: 0, y: 1}
|
||||||
|
m_AnchorMax: {x: 0, y: 1}
|
||||||
|
m_AnchoredPosition: {x: 29.935, y: -20.11}
|
||||||
|
m_SizeDelta: {x: 0, y: 0}
|
||||||
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
|
--- !u!222 &5178026511363294150
|
||||||
|
CanvasRenderer:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 2009937399821704551}
|
||||||
|
m_CullTransparentMesh: 1
|
||||||
|
--- !u!114 &6686407532977347685
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 2009937399821704551}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI
|
||||||
|
m_Material: {fileID: 0}
|
||||||
|
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
m_RaycastTarget: 1
|
||||||
|
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
m_Maskable: 1
|
||||||
|
m_OnCullStateChanged:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls: []
|
||||||
|
m_text: A
|
||||||
|
m_isRightToLeft: 0
|
||||||
|
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||||
|
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||||
|
m_fontSharedMaterials: []
|
||||||
|
m_fontMaterial: {fileID: 0}
|
||||||
|
m_fontMaterials: []
|
||||||
|
m_fontColor32:
|
||||||
|
serializedVersion: 2
|
||||||
|
rgba: 4278190080
|
||||||
|
m_fontColor: {r: 0, g: 0, b: 0, a: 1}
|
||||||
|
m_enableVertexGradient: 0
|
||||||
|
m_colorMode: 3
|
||||||
|
m_fontColorGradient:
|
||||||
|
topLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
topRight: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
bottomRight: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
m_fontColorGradientPreset: {fileID: 0}
|
||||||
|
m_spriteAsset: {fileID: 0}
|
||||||
|
m_tintAllSprites: 0
|
||||||
|
m_StyleSheet: {fileID: 0}
|
||||||
|
m_TextStyleHashCode: -1183493901
|
||||||
|
m_overrideHtmlColors: 0
|
||||||
|
m_faceColor:
|
||||||
|
serializedVersion: 2
|
||||||
|
rgba: 4294967295
|
||||||
|
m_fontSize: 36
|
||||||
|
m_fontSizeBase: 36
|
||||||
|
m_fontWeight: 400
|
||||||
|
m_enableAutoSizing: 0
|
||||||
|
m_fontSizeMin: 18
|
||||||
|
m_fontSizeMax: 72
|
||||||
|
m_fontStyle: 0
|
||||||
|
m_HorizontalAlignment: 4
|
||||||
|
m_VerticalAlignment: 256
|
||||||
|
m_textAlignment: 65535
|
||||||
|
m_characterSpacing: 0
|
||||||
|
m_characterHorizontalScale: 1
|
||||||
|
m_wordSpacing: 0
|
||||||
|
m_lineSpacing: 0
|
||||||
|
m_lineSpacingMax: 0
|
||||||
|
m_paragraphSpacing: 0
|
||||||
|
m_charWidthMaxAdj: 0
|
||||||
|
m_TextWrappingMode: 0
|
||||||
|
m_wordWrappingRatios: 0.4
|
||||||
|
m_overflowMode: 0
|
||||||
|
m_linkedTextComponent: {fileID: 0}
|
||||||
|
parentLinkedComponent: {fileID: 0}
|
||||||
|
m_enableKerning: 0
|
||||||
|
m_ActiveFontFeatures: 6e72656b
|
||||||
|
m_enableExtraPadding: 0
|
||||||
|
checkPaddingRequired: 0
|
||||||
|
m_isRichText: 1
|
||||||
|
m_EmojiFallbackSupport: 1
|
||||||
|
m_parseCtrlCharacters: 1
|
||||||
|
m_isOrthographic: 1
|
||||||
|
m_isCullingEnabled: 0
|
||||||
|
m_horizontalMapping: 0
|
||||||
|
m_verticalMapping: 0
|
||||||
|
m_uvLineOffset: 0
|
||||||
|
m_geometrySortingOrder: 0
|
||||||
|
m_IsTextObjectScaleStatic: 0
|
||||||
|
m_VertexBufferAutoSizeReduction: 0
|
||||||
|
m_useMaxVisibleDescender: 1
|
||||||
|
m_pageToDisplay: 1
|
||||||
|
m_margin: {x: 0, y: 0, z: 38.87, w: 0}
|
||||||
|
m_isUsingLegacyAnimationComponent: 0
|
||||||
|
m_isVolumetricText: 0
|
||||||
|
m_hasFontAssetChanged: 0
|
||||||
|
m_baseMaterial: {fileID: 0}
|
||||||
|
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
--- !u!114 &4143938553789986431
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 2009937399821704551}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.ContentSizeFitter
|
||||||
|
m_HorizontalFit: 2
|
||||||
|
m_VerticalFit: 2
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 87e4ec14fb3f1ed42ad998feb07506f5
|
||||||
|
PrefabImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
File diff suppressed because one or more lines are too long
7
Assets/Scenes/EditorScene.unity.BACKUP.unity.meta
Normal file
7
Assets/Scenes/EditorScene.unity.BACKUP.unity.meta
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 55fe9f4dfb9631f4381b4cf94f831d06
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -6,6 +6,7 @@ using System.Linq;
|
|||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using Ichni.NodeScript;
|
||||||
using Ichni.RhythmGame;
|
using Ichni.RhythmGame;
|
||||||
using Ichni.RhythmGame.Beatmap;
|
using Ichni.RhythmGame.Beatmap;
|
||||||
using Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse;
|
using Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse;
|
||||||
@@ -383,7 +384,7 @@ namespace Ichni.Editor
|
|||||||
if (hold.track.trackPathSubmodule.pathNodeList.Count > 2)
|
if (hold.track.trackPathSubmodule.pathNodeList.Count > 2)
|
||||||
{
|
{
|
||||||
LogWindow.Log("the Hold may not be split currently", Color.yellow);
|
LogWindow.Log("the Hold may not be split currently", Color.yellow);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
hold.UpdateNoteInMovableTrack(CoreServices.TimeProvider.SongTime);
|
hold.UpdateNoteInMovableTrack(CoreServices.TimeProvider.SongTime);
|
||||||
Track NewTrack = Track.GenerateElement(hold.elementName + "_SplitTrack", Guid.NewGuid(), new List<string>(), true, parentTrack);
|
Track NewTrack = Track.GenerateElement(hold.elementName + "_SplitTrack", Guid.NewGuid(), new List<string>(), true, parentTrack);
|
||||||
@@ -425,7 +426,7 @@ namespace Ichni.Editor
|
|||||||
if (track.trackPathSubmodule.pathNodeList.Count > 2)
|
if (track.trackPathSubmodule.pathNodeList.Count > 2)
|
||||||
{
|
{
|
||||||
LogWindow.Log("the Hold may not be split currently", Color.yellow);
|
LogWindow.Log("the Hold may not be split currently", Color.yellow);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (var hold in holds)
|
foreach (var hold in holds)
|
||||||
@@ -1135,6 +1136,78 @@ namespace Ichni.Editor
|
|||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region NodeScript Console Commands (节点脚本控制台命令)
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 新建 NodeScript 编辑器,从当前选中 GameElement 开始 Init
|
||||||
|
/// </summary>
|
||||||
|
public static void newNode()
|
||||||
|
{
|
||||||
|
if (NodeManager.Instance == null)
|
||||||
|
{
|
||||||
|
var prefab = EditorManager.instance.basePrefabs.NodeEditor;
|
||||||
|
if (prefab == null)
|
||||||
|
{
|
||||||
|
LogWindow.Log("NodeEditor prefab is null, check BasePrefabsCollection!", Color.red);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var go = UnityEngine.Object.Instantiate(prefab,
|
||||||
|
EditorManager.instance.uiManager.WindowsCanvas.gameObject.transform);
|
||||||
|
var mgr = go.GetComponent<NodeManager>();
|
||||||
|
if (mgr != null && EditorManager.instance.operationManager.currentSelectedElements.Count > 0)
|
||||||
|
mgr.Init(EditorManager.instance.operationManager.currentSelectedElements[0]);
|
||||||
|
LogWindow.Log("NodeScript Editor created.", Color.green);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
UnityEngine.Object.Destroy(NodeManager.Instance.gameObject);
|
||||||
|
LogWindow.Log("NodeScript Editor destroyed.", Color.yellow);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 另存为指定文件名到 StreamingAssets/NodeScript/{name}.json
|
||||||
|
/// </summary>
|
||||||
|
public static void saveNode(string name)
|
||||||
|
{
|
||||||
|
if (NodeManager.Instance == null)
|
||||||
|
{
|
||||||
|
LogWindow.Log("No NodeScript Editor active. Use newNode first.", Color.red);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
NodeManager.Instance.SaveToFile(name);
|
||||||
|
LogWindow.Log($"NodeScript graph saved as {name}.", Color.green);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 从 StreamingAssets/NodeScript/{name}.json 读取 NodeScript 图
|
||||||
|
/// </summary>
|
||||||
|
public static void loadNode(string name)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(name))
|
||||||
|
{
|
||||||
|
LogWindow.Log("Usage: loadNode <name> — loads StreamingAssets/NodeScript/<name>.json", Color.yellow);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 确保 NodeManager 存在
|
||||||
|
if (NodeManager.Instance == null)
|
||||||
|
{
|
||||||
|
var prefab = EditorManager.instance.basePrefabs.NodeEditor;
|
||||||
|
if (prefab == null)
|
||||||
|
{
|
||||||
|
LogWindow.Log("NodeEditor prefab is null, check BasePrefabsCollection!", Color.red);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
UnityEngine.Object.Instantiate(prefab,
|
||||||
|
EditorManager.instance.uiManager.WindowsCanvas.gameObject.transform);
|
||||||
|
}
|
||||||
|
|
||||||
|
NodeManager.Instance.LoadFromFile(name);
|
||||||
|
LogWindow.Log($"NodeScript graph loaded from {name}.", Color.green);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
@@ -5,6 +5,7 @@ using System.IO;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Ichni;
|
using Ichni;
|
||||||
using Ichni.Editor;
|
using Ichni.Editor;
|
||||||
|
using Ichni.NodeScript;
|
||||||
using Ichni.RhythmGame;
|
using Ichni.RhythmGame;
|
||||||
using TMPro;
|
using TMPro;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
@@ -18,6 +19,18 @@ public class consoleOnMono : MonoBehaviour
|
|||||||
{
|
{
|
||||||
StartCoroutine(read());
|
StartCoroutine(read());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Keyboard.current.f3Key.wasPressedThisFrame)
|
||||||
|
{
|
||||||
|
if (NodeManager.Instance == null)
|
||||||
|
{
|
||||||
|
Instantiate(EditorManager.instance.basePrefabs.NodeEditor,
|
||||||
|
EditorManager.instance.uiManager.WindowsCanvas.gameObject.transform);
|
||||||
|
if (EditorManager.instance.operationManager.currentSelectedElements.Count > 0)
|
||||||
|
NodeManager.Instance.Init(EditorManager.instance.operationManager.currentSelectedElements[0]);
|
||||||
|
}
|
||||||
|
else Destroy(NodeManager.Instance.gameObject);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
public IEnumerator read()
|
public IEnumerator read()
|
||||||
{
|
{
|
||||||
|
|||||||
8
Assets/Scripts/Editor Tools/NodeScript.meta
Normal file
8
Assets/Scripts/Editor Tools/NodeScript.meta
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 903817bad09ed754ca52d7ea5ba15e97
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
37
Assets/Scripts/Editor Tools/NodeScript/ConnectorSlot.cs
Normal file
37
Assets/Scripts/Editor Tools/NodeScript/ConnectorSlot.cs
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.EventSystems;
|
||||||
|
using UnityEngine.UI;
|
||||||
|
|
||||||
|
namespace Ichni.NodeScript
|
||||||
|
{
|
||||||
|
public class ConnectorSlot : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IDragHandler
|
||||||
|
{
|
||||||
|
public IInput connectorIn;
|
||||||
|
public IOutput connectorOut;
|
||||||
|
public bool isInput;
|
||||||
|
public NodeObject ownerNode;
|
||||||
|
public RectTransform connectorRect;
|
||||||
|
|
||||||
|
void Awake() { connectorRect = GetComponent<RectTransform>(); }
|
||||||
|
|
||||||
|
public void OnPointerDown(PointerEventData e) => NodeManager.Instance.StartWireDrag(this, e);
|
||||||
|
public void OnDrag(PointerEventData e) => NodeManager.Instance.UpdateWireDrag(e);
|
||||||
|
public void OnPointerUp(PointerEventData e) => NodeManager.Instance.EndWireDrag(e);
|
||||||
|
|
||||||
|
/// <summary>InputAny / OutputAny 类型锁定后刷新连接点颜色</summary>
|
||||||
|
public void RefreshAppearance()
|
||||||
|
{
|
||||||
|
var img = GetComponentInChildren<Image>();
|
||||||
|
if (img == null) return;
|
||||||
|
|
||||||
|
if (isInput && connectorIn != null)
|
||||||
|
{
|
||||||
|
img.color = connectorIn.ConnectorColor;
|
||||||
|
}
|
||||||
|
else if (!isInput && connectorOut != null)
|
||||||
|
{
|
||||||
|
img.color = connectorOut.ConnectorColor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 4d5e4efd89e8c6041bdcdeae97e94191
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 36b55b766114d5d4bb9cfb9f673bbbae
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,280 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Ichni.RhythmGame;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace Ichni.NodeScript
|
||||||
|
{
|
||||||
|
// ==================== 图入口 ====================
|
||||||
|
public class NodeStart : NodeBase
|
||||||
|
{
|
||||||
|
public Output<Signal> exec = new("Exec");
|
||||||
|
public Output<GameElement> element = new("Element");
|
||||||
|
[NonSerialized] public GameElement boundElement;
|
||||||
|
|
||||||
|
public override LoopResult Loop()
|
||||||
|
{
|
||||||
|
exec.SetValue(Signal.Default);
|
||||||
|
element.SetValue(boundElement);
|
||||||
|
return LoopResult.Complete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class NodeEntry : NodeBase
|
||||||
|
{
|
||||||
|
public Output<Signal> exec = new("Exec");
|
||||||
|
|
||||||
|
public override LoopResult Loop()
|
||||||
|
{
|
||||||
|
exec.SetValue(Signal.Default);
|
||||||
|
return LoopResult.Complete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== 统一多类型数学运算 ====================
|
||||||
|
public class NodeMath : NodeBase
|
||||||
|
{
|
||||||
|
enum Op { Add, Subtract, Multiply, Divide }
|
||||||
|
Op _op;
|
||||||
|
|
||||||
|
public InputAny a = new("A");
|
||||||
|
public InputAny b = new("B") { IsFixedType = true };
|
||||||
|
public OutputAny result = new("Result");
|
||||||
|
|
||||||
|
static readonly Dictionary<(Type, Op), Func<object, object, object>> _ops = new()
|
||||||
|
{
|
||||||
|
[(typeof(float), Op.Add)] = (x, y) => (float)x + (float)y,
|
||||||
|
[(typeof(float), Op.Subtract)] = (x, y) => (float)x - (float)y,
|
||||||
|
[(typeof(float), Op.Multiply)] = (x, y) => (float)x * (float)y,
|
||||||
|
[(typeof(float), Op.Divide)] = (x, y) => (float)y != 0f ? (float)x / (float)y : 0f,
|
||||||
|
|
||||||
|
[(typeof(int), Op.Add)] = (x, y) => (int)x + (int)y,
|
||||||
|
[(typeof(int), Op.Subtract)] = (x, y) => (int)x - (int)y,
|
||||||
|
[(typeof(int), Op.Multiply)] = (x, y) => (int)x * (int)y,
|
||||||
|
[(typeof(int), Op.Divide)] = (x, y) => (int)y != 0 ? (int)x / (int)y : 0,
|
||||||
|
|
||||||
|
[(typeof(Vector2), Op.Add)] = (x, y) => (Vector2)x + (Vector2)y,
|
||||||
|
[(typeof(Vector2), Op.Subtract)] = (x, y) => (Vector2)x - (Vector2)y,
|
||||||
|
[(typeof(Vector2), Op.Multiply)] = (x, y) => (Vector2)x * (float)y,
|
||||||
|
[(typeof(Vector2), Op.Divide)] = (x, y) => (float)y != 0f ? (Vector2)x / (float)y : Vector2.zero,
|
||||||
|
|
||||||
|
[(typeof(Vector3), Op.Add)] = (x, y) => (Vector3)x + (Vector3)y,
|
||||||
|
[(typeof(Vector3), Op.Subtract)] = (x, y) => (Vector3)x - (Vector3)y,
|
||||||
|
[(typeof(Vector3), Op.Multiply)] = (x, y) => (Vector3)x * (float)y,
|
||||||
|
[(typeof(Vector3), Op.Divide)] = (x, y) => (float)y != 0f ? (Vector3)x / (float)y : Vector3.zero,
|
||||||
|
|
||||||
|
[(typeof(Color), Op.Add)] = (x, y) => (Color)x + (Color)y,
|
||||||
|
[(typeof(Color), Op.Subtract)] = (x, y) => (Color)x - (Color)y,
|
||||||
|
[(typeof(Color), Op.Multiply)] = (x, y) => (Color)x * (float)y,
|
||||||
|
|
||||||
|
[(typeof(string), Op.Add)] = (x, y) => (string)x + (string)y,
|
||||||
|
};
|
||||||
|
|
||||||
|
public override void BuildUI(NodeUIBuilder ui)
|
||||||
|
{
|
||||||
|
ui.Dropdown("Op", new[] { "+", "-", "*", "/" }, 0, i => _op = (Op)i);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override LoopResult Loop()
|
||||||
|
{
|
||||||
|
if (!a.IsConnected && !b.IsConnected) return LoopResult.Complete();
|
||||||
|
if (!EnsureInputsReady(out var hang)) return hang;
|
||||||
|
|
||||||
|
var type = a.DataType ?? b.DataType ?? typeof(float);
|
||||||
|
|
||||||
|
// 单输入 → 直通
|
||||||
|
if (!a.IsConnected) { result.SetValueRaw(SafeGet(b)); return LoopResult.Complete(); }
|
||||||
|
if (!b.IsConnected) { result.SetValueRaw(SafeGet(a)); return LoopResult.Complete(); }
|
||||||
|
|
||||||
|
// 双输入 → LUT 运算
|
||||||
|
var key = (type, _op);
|
||||||
|
if (_ops.TryGetValue(key, out var func))
|
||||||
|
result.SetValueRaw(func(SafeGet(a), SafeGet(b)));
|
||||||
|
else
|
||||||
|
result.SetValueRaw(SafeGet(a)); // fallback: 直通 a
|
||||||
|
|
||||||
|
return LoopResult.Complete();
|
||||||
|
}
|
||||||
|
|
||||||
|
static object SafeGet(InputAny input)
|
||||||
|
{
|
||||||
|
try { return input.GetValue(); }
|
||||||
|
catch { return null; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== 分支 ====================
|
||||||
|
public class NodeBranch : NodeBase
|
||||||
|
{
|
||||||
|
public Input<Signal> exec = new("Exec");
|
||||||
|
public InputAny condition = new("Condition");
|
||||||
|
public Output<Signal> trueOut = new("True");
|
||||||
|
public Output<Signal> falseOut = new("False");
|
||||||
|
|
||||||
|
public override LoopResult Loop()
|
||||||
|
{
|
||||||
|
if (!exec.IsConnected) return LoopResult.Complete();
|
||||||
|
if (!EnsureInputsReady(out var hang)) return hang;
|
||||||
|
|
||||||
|
float cond = condition.IsConnected ? condition.GetValue<float>() : 0f;
|
||||||
|
// int → float 兼容
|
||||||
|
if (condition.DataType == typeof(int))
|
||||||
|
cond = condition.GetValue<int>();
|
||||||
|
|
||||||
|
if (cond > 0f) trueOut.SetValue(Signal.Default);
|
||||||
|
else falseOut.SetValue(Signal.Default);
|
||||||
|
|
||||||
|
return LoopResult.Complete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== For 循环(多周期状态机,Rect 容器留待 Phase 4) ====================
|
||||||
|
public class NodeForLoop : NodeBase
|
||||||
|
{
|
||||||
|
public Input<Signal> exec = new("Exec");
|
||||||
|
public InputAny count = new("Count");
|
||||||
|
public Output<Signal> loopBody = new("LoopBody");
|
||||||
|
public Output<int> index = new("Index");
|
||||||
|
public Output<Signal> completed = new("Completed");
|
||||||
|
|
||||||
|
int _current;
|
||||||
|
int _total;
|
||||||
|
bool _started;
|
||||||
|
bool _waiting;
|
||||||
|
|
||||||
|
public override LoopResult Loop()
|
||||||
|
{
|
||||||
|
if (!exec.IsConnected) return LoopResult.Complete();
|
||||||
|
if (!_started && !EnsureInputsReady(out var hang)) return hang;
|
||||||
|
|
||||||
|
if (!_started)
|
||||||
|
{
|
||||||
|
_total = count.IsConnected ? count.GetValue<int>() : 0;
|
||||||
|
_current = 0;
|
||||||
|
_started = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 空转一周期让下游消费上一轮输出
|
||||||
|
if (_waiting) { _waiting = false; return LoopResult.Wait(); }
|
||||||
|
|
||||||
|
if (_current < _total)
|
||||||
|
{
|
||||||
|
index.SetValue(_current);
|
||||||
|
loopBody.SetValue(Signal.Default);
|
||||||
|
_current++;
|
||||||
|
_waiting = true;
|
||||||
|
return LoopResult.Repeat();
|
||||||
|
}
|
||||||
|
|
||||||
|
_started = false;
|
||||||
|
completed.SetValue(Signal.Default);
|
||||||
|
return LoopResult.Complete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== GameElement 操作 ====================
|
||||||
|
public class NodeGameElement : NodeBase
|
||||||
|
{
|
||||||
|
public Input<Signal> exec = new("Exec");
|
||||||
|
public Input<GameElement> RootNode = new("Root");
|
||||||
|
public Input<GameElement> SourceNode = new("Source");
|
||||||
|
public Output<GameElement> newElement = new("OutPut");
|
||||||
|
public Output<Signal> completed = new("Done");
|
||||||
|
|
||||||
|
public override LoopResult Loop()
|
||||||
|
{
|
||||||
|
if (!EnsureInputsReady(out var hang)) return hang;
|
||||||
|
|
||||||
|
var root = RootNode.Value;
|
||||||
|
var source = SourceNode.Value;
|
||||||
|
if (source == null)
|
||||||
|
{
|
||||||
|
ElementFolder.GenerateElement("Folder(Cp)", Guid.NewGuid(), new List<string>(), true, RootNode.IsConnected ? root : null);
|
||||||
|
}
|
||||||
|
else if (root != null)
|
||||||
|
{
|
||||||
|
EditorManager.instance.operationManager.CopyPasteDeleteModule.CopyElement(source);
|
||||||
|
EditorManager.instance.operationManager.CopyPasteDeleteModule.PasteElement(root);
|
||||||
|
}
|
||||||
|
completed.SetValue(Signal.Default);
|
||||||
|
return LoopResult.Complete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class NodeGetTransform : NodeBase
|
||||||
|
{
|
||||||
|
public Input<GameElement> element = new("Element");
|
||||||
|
public Output<Vector3> position = new("Pos"), rotation = new("Rot"), scale = new("Scl");
|
||||||
|
|
||||||
|
public override LoopResult Loop()
|
||||||
|
{
|
||||||
|
if (!EnsureInputsReady(out var hang)) return hang;
|
||||||
|
|
||||||
|
if (element.Value is IHaveTransformSubmodule ts)
|
||||||
|
{
|
||||||
|
position.SetValue(ts.transformSubmodule.originalPosition);
|
||||||
|
rotation.SetValue(ts.transformSubmodule.originalEulerAngles);
|
||||||
|
scale.SetValue(ts.transformSubmodule.originalScale);
|
||||||
|
}
|
||||||
|
return LoopResult.Complete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class NodeSetTransform : NodeBase
|
||||||
|
{
|
||||||
|
public Input<Signal> exec = new("Exec");
|
||||||
|
public Input<GameElement> element = new("Element");
|
||||||
|
public Input<Vector3> Pos = new("Pos"), Rot = new("Rot"), Scale = new("Scl");
|
||||||
|
|
||||||
|
public override LoopResult Loop()
|
||||||
|
{
|
||||||
|
if (!EnsureInputsReady(out var hang)) return hang;
|
||||||
|
|
||||||
|
if (element.Value is IHaveTransformSubmodule ts)
|
||||||
|
{
|
||||||
|
if (Pos.IsConnected) { ts.transformSubmodule.originalPosition = Pos.Value; ts.transformSubmodule.positionDirtyMark = true; }
|
||||||
|
if (Rot.IsConnected) { ts.transformSubmodule.originalEulerAngles = Rot.Value; ts.transformSubmodule.eulerAnglesDirtyMark = true; }
|
||||||
|
if (Scale.IsConnected) { ts.transformSubmodule.originalScale = Scale.Value; ts.transformSubmodule.scaleDirtyMark = true; }
|
||||||
|
}
|
||||||
|
return LoopResult.Complete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class NodeChildByIndex : NodeBase
|
||||||
|
{
|
||||||
|
public Input<GameElement> parent = new("Parent");
|
||||||
|
public int index;
|
||||||
|
public Output<GameElement> child = new("Child");
|
||||||
|
|
||||||
|
public override void BuildUI(NodeUIBuilder ui) { ui.FloatField("Idx", 0, i => index = (int)i); }
|
||||||
|
|
||||||
|
public override LoopResult Loop()
|
||||||
|
{
|
||||||
|
if (!EnsureInputsReady(out var hang)) return hang;
|
||||||
|
|
||||||
|
var p = parent.Value;
|
||||||
|
if (p != null && index >= 0 && index < p.childElementList.Count)
|
||||||
|
child.SetValue(p.childElementList[index]);
|
||||||
|
return LoopResult.Complete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class NodeChildCount : NodeBase
|
||||||
|
{
|
||||||
|
public Input<GameElement> parent = new("Parent");
|
||||||
|
public Output<int> count = new("Count");
|
||||||
|
|
||||||
|
public override LoopResult Loop()
|
||||||
|
{
|
||||||
|
if (!EnsureInputsReady(out var hang)) return hang;
|
||||||
|
|
||||||
|
var p = parent.Value;
|
||||||
|
count.SetValue(p != null ? p.childElementList.Count : 0);
|
||||||
|
return LoopResult.Complete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: da71a524cc8687941840c85db8590b1c
|
||||||
@@ -0,0 +1,445 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Ichni.RhythmGame;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace Ichni.NodeScript
|
||||||
|
{
|
||||||
|
// ==================== 通用常量 ====================
|
||||||
|
public class NodeConst : NodeBase
|
||||||
|
{
|
||||||
|
enum ValueType { Float, Int, Bool, Vector2, Vector3, Color }
|
||||||
|
ValueType _type;
|
||||||
|
|
||||||
|
public float floatVal;
|
||||||
|
public int intVal;
|
||||||
|
public bool boolVal;
|
||||||
|
public Vector2 vector2Val;
|
||||||
|
public Vector3 vector3Val;
|
||||||
|
public Color colorVal;
|
||||||
|
|
||||||
|
public OutputAny value = new("Value");
|
||||||
|
|
||||||
|
public override void InitConnectors()
|
||||||
|
{
|
||||||
|
base.InitConnectors();
|
||||||
|
value.LockType(typeof(float));
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void BuildUI(NodeUIBuilder ui)
|
||||||
|
{
|
||||||
|
ui.TypeDropdown(new[] { "float", "int", "bool", "Vector2", "Vector3", "Color" }, 0, i =>
|
||||||
|
{
|
||||||
|
_type = (ValueType)i;
|
||||||
|
Type t = _type switch
|
||||||
|
{
|
||||||
|
ValueType.Float => typeof(float),
|
||||||
|
ValueType.Int => typeof(int),
|
||||||
|
ValueType.Bool => typeof(bool),
|
||||||
|
ValueType.Vector2 => typeof(Vector2),
|
||||||
|
ValueType.Vector3 => typeof(Vector3),
|
||||||
|
ValueType.Color => typeof(Color),
|
||||||
|
_ => typeof(float),
|
||||||
|
};
|
||||||
|
value.LockType(t);
|
||||||
|
});
|
||||||
|
|
||||||
|
switch (_type)
|
||||||
|
{
|
||||||
|
case ValueType.Float: ui.FloatField("F", 0f, v => floatVal = v); break;
|
||||||
|
case ValueType.Int: ui.FloatField("I", 0f, v => intVal = (int)v); break;
|
||||||
|
case ValueType.Bool: ui.Toggle("B", false, v => boolVal = v); break;
|
||||||
|
case ValueType.Vector2: ui.FloatField("X", 0f, v => vector2Val.x = v); ui.FloatField("Y", 0f, v => vector2Val.y = v); break;
|
||||||
|
case ValueType.Vector3: ui.FloatField("X", 0f, v => vector3Val.x = v); ui.FloatField("Y", 0f, v => vector3Val.y = v); ui.FloatField("Z", 0f, v => vector3Val.z = v); break;
|
||||||
|
case ValueType.Color: ui.FloatField("R", 1f, v => colorVal.r = v); ui.FloatField("G", 1f, v => colorVal.g = v); ui.FloatField("B", 1f, v => colorVal.b = v); ui.FloatField("A", 1f, v => colorVal.a = v); break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override LoopResult Loop()
|
||||||
|
{
|
||||||
|
object v = _type switch
|
||||||
|
{
|
||||||
|
ValueType.Float => floatVal,
|
||||||
|
ValueType.Int => intVal,
|
||||||
|
ValueType.Bool => boolVal,
|
||||||
|
ValueType.Vector2 => vector2Val,
|
||||||
|
ValueType.Vector3 => vector3Val,
|
||||||
|
ValueType.Color => colorVal,
|
||||||
|
_ => 0f,
|
||||||
|
};
|
||||||
|
value.SetValueRaw(v);
|
||||||
|
return LoopResult.Complete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== 通用拆分 ====================
|
||||||
|
public class NodeSplit : NodeBase
|
||||||
|
{
|
||||||
|
public InputAny input = new("Input");
|
||||||
|
public Output<float> x = new("X"), y = new("Y"), z = new("Z"), w = new("W");
|
||||||
|
|
||||||
|
public override LoopResult Loop()
|
||||||
|
{
|
||||||
|
if (!input.IsConnected) return LoopResult.Complete();
|
||||||
|
if (!EnsureInputsReady(out var hang)) return hang;
|
||||||
|
|
||||||
|
var t = input.DataType;
|
||||||
|
if (t == typeof(Vector2))
|
||||||
|
{
|
||||||
|
var v = input.GetValue<Vector2>();
|
||||||
|
x.SetValue(v.x); y.SetValue(v.y);
|
||||||
|
}
|
||||||
|
else if (t == typeof(Vector3))
|
||||||
|
{
|
||||||
|
var v = input.GetValue<Vector3>();
|
||||||
|
x.SetValue(v.x); y.SetValue(v.y); z.SetValue(v.z);
|
||||||
|
}
|
||||||
|
else if (t == typeof(Color))
|
||||||
|
{
|
||||||
|
var v = input.GetValue<Color>();
|
||||||
|
x.SetValue(v.r); y.SetValue(v.g); z.SetValue(v.b); w.SetValue(v.a);
|
||||||
|
}
|
||||||
|
return LoopResult.Complete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== 通用合并 ====================
|
||||||
|
public class NodeCombine : NodeBase
|
||||||
|
{
|
||||||
|
enum CombineType { Vector2, Vector3, Color }
|
||||||
|
CombineType _type;
|
||||||
|
|
||||||
|
public Input<float> x = new("X"), y = new("Y"), z = new("Z"), w = new("W");
|
||||||
|
public OutputAny output = new("Result");
|
||||||
|
|
||||||
|
public override void InitConnectors()
|
||||||
|
{
|
||||||
|
base.InitConnectors();
|
||||||
|
output.LockType(typeof(Vector2));
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void BuildUI(NodeUIBuilder ui)
|
||||||
|
{
|
||||||
|
ui.TypeDropdown(new[] { "Vector2", "Vector3", "Color" }, 0, i =>
|
||||||
|
{
|
||||||
|
_type = (CombineType)i;
|
||||||
|
Type t = _type == CombineType.Vector2 ? typeof(Vector2) : _type == CombineType.Vector3 ? typeof(Vector3) : typeof(Color);
|
||||||
|
output.LockType(t);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public override LoopResult Loop()
|
||||||
|
{
|
||||||
|
if (!EnsureInputsReady(out var hang)) return hang;
|
||||||
|
|
||||||
|
object v = _type switch
|
||||||
|
{
|
||||||
|
CombineType.Vector2 => new Vector2(x.Value, y.Value),
|
||||||
|
CombineType.Vector3 => new Vector3(x.Value, y.Value, z.Value),
|
||||||
|
CombineType.Color => new Color(x.Value, y.Value, z.Value, w.Value),
|
||||||
|
_ => null,
|
||||||
|
};
|
||||||
|
output.SetValueRaw(v);
|
||||||
|
return LoopResult.Complete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== Lerp 线性插值 ====================
|
||||||
|
public class NodeLerp : NodeBase
|
||||||
|
{
|
||||||
|
public InputAny a = new("A");
|
||||||
|
public InputAny b = new("B");
|
||||||
|
public InputAny t = new("T") { IsFixedType = true };
|
||||||
|
public OutputAny result = new("Result");
|
||||||
|
|
||||||
|
public override void InitConnectors()
|
||||||
|
{
|
||||||
|
base.InitConnectors();
|
||||||
|
t.LockType(typeof(float));
|
||||||
|
}
|
||||||
|
|
||||||
|
public override LoopResult Loop()
|
||||||
|
{
|
||||||
|
if (!EnsureInputsReady(out var hang)) return hang;
|
||||||
|
|
||||||
|
var type = a.DataType ?? b.DataType ?? typeof(float);
|
||||||
|
float factor = t.IsConnected ? Mathf.Clamp01(t.GetValue<float>()) : 0.5f;
|
||||||
|
|
||||||
|
object v = null;
|
||||||
|
if (type == typeof(float))
|
||||||
|
v = Mathf.Lerp(a.GetValue<float>(), b.GetValue<float>(), factor);
|
||||||
|
else if (type == typeof(int))
|
||||||
|
v = Mathf.RoundToInt(Mathf.Lerp(a.GetValue<int>(), b.GetValue<int>(), factor));
|
||||||
|
else if (type == typeof(Vector2))
|
||||||
|
v = Vector2.Lerp(a.GetValue<Vector2>(), b.GetValue<Vector2>(), factor);
|
||||||
|
else if (type == typeof(Vector3))
|
||||||
|
v = Vector3.Lerp(a.GetValue<Vector3>(), b.GetValue<Vector3>(), factor);
|
||||||
|
else if (type == typeof(Color))
|
||||||
|
v = Color.Lerp(a.GetValue<Color>(), b.GetValue<Color>(), factor);
|
||||||
|
|
||||||
|
result.SetValueRaw(v);
|
||||||
|
return LoopResult.Complete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== 比较运算 ====================
|
||||||
|
public class NodeCompare : NodeBase
|
||||||
|
{
|
||||||
|
enum CmpOp { Equal, NotEqual, Greater, Less, GreaterOrEqual, LessOrEqual }
|
||||||
|
CmpOp _op;
|
||||||
|
|
||||||
|
public InputAny a = new("A");
|
||||||
|
public InputAny b = new("B");
|
||||||
|
public Output<bool> result = new("Result");
|
||||||
|
|
||||||
|
public override void BuildUI(NodeUIBuilder ui)
|
||||||
|
{
|
||||||
|
ui.Dropdown("Op", new[] { "==", "!=", ">", "<", ">=", "<=" }, 0, i => _op = (CmpOp)i);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override LoopResult Loop()
|
||||||
|
{
|
||||||
|
if (!EnsureInputsReady(out var hang)) return hang;
|
||||||
|
|
||||||
|
var type = a.DataType ?? b.DataType ?? typeof(float);
|
||||||
|
bool r = false;
|
||||||
|
|
||||||
|
if (type == typeof(float)) r = Compare(a.GetValue<float>(), b.GetValue<float>());
|
||||||
|
else if (type == typeof(int)) r = Compare(a.GetValue<int>(), b.GetValue<int>());
|
||||||
|
else if (type == typeof(string)) r = Compare(a.GetValue<string>(), b.GetValue<string>());
|
||||||
|
|
||||||
|
result.SetValue(r);
|
||||||
|
return LoopResult.Complete();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Compare<T>(T x, T y) where T : IComparable<T>
|
||||||
|
{
|
||||||
|
int c = x.CompareTo(y);
|
||||||
|
return _op switch
|
||||||
|
{
|
||||||
|
CmpOp.Equal => c == 0,
|
||||||
|
CmpOp.NotEqual => c != 0,
|
||||||
|
CmpOp.Greater => c > 0,
|
||||||
|
CmpOp.Less => c < 0,
|
||||||
|
CmpOp.GreaterOrEqual => c >= 0,
|
||||||
|
CmpOp.LessOrEqual => c <= 0,
|
||||||
|
_ => false,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== 二选一 ====================
|
||||||
|
public class NodeSelect : NodeBase
|
||||||
|
{
|
||||||
|
public InputAny condition = new("Cond");
|
||||||
|
public InputAny trueValue = new("True");
|
||||||
|
public InputAny falseValue = new("False");
|
||||||
|
public OutputAny result = new("Result");
|
||||||
|
|
||||||
|
bool _manualCond;
|
||||||
|
|
||||||
|
public override void BuildUI(NodeUIBuilder ui)
|
||||||
|
{
|
||||||
|
ui.Toggle("Cond", false, v => _manualCond = v);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override LoopResult Loop()
|
||||||
|
{
|
||||||
|
if (!EnsureInputsReady(out var hang)) return hang;
|
||||||
|
|
||||||
|
bool cond = condition.IsConnected ? condition.GetValue<bool>() : _manualCond;
|
||||||
|
// int → bool 兼容
|
||||||
|
if (!cond && condition.IsConnected && condition.DataType == typeof(int))
|
||||||
|
cond = condition.GetValue<int>() != 0;
|
||||||
|
|
||||||
|
var src = cond ? trueValue : falseValue;
|
||||||
|
result.SetValueRaw(src.GetValue());
|
||||||
|
return LoopResult.Complete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== 万能赋值(反向写入) ====================
|
||||||
|
public class NodeSet : NodeBase
|
||||||
|
{
|
||||||
|
public InputAny targetRef = new("TargetRef");
|
||||||
|
public InputAny value = new("Value");
|
||||||
|
|
||||||
|
public override LoopResult Loop()
|
||||||
|
{
|
||||||
|
if (!targetRef.IsConnected) return LoopResult.Complete();
|
||||||
|
if (!EnsureInputsReady(out var hang)) return hang;
|
||||||
|
|
||||||
|
targetRef.WriteBack(value.GetValue());
|
||||||
|
return LoopResult.Complete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== Variable<T> ====================
|
||||||
|
public class Variable<T> { public T Value; }
|
||||||
|
|
||||||
|
public class NodeVariable<T> : NodeBase
|
||||||
|
{
|
||||||
|
public Variable<T> var = new();
|
||||||
|
public Input<Signal> signal = new("Signal");
|
||||||
|
public Input<T> set = new("Set");
|
||||||
|
public Output<T> get = new("Value");
|
||||||
|
|
||||||
|
public override void InitConnectors()
|
||||||
|
{
|
||||||
|
base.InitConnectors();
|
||||||
|
(get as Output<T>).SetWriteBack(v => var.Value = v);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override LoopResult Loop()
|
||||||
|
{
|
||||||
|
// Signal 有连接时必须等待(循环体内等待触发)
|
||||||
|
if (signal.IsConnected)
|
||||||
|
{
|
||||||
|
if (!EnsureInputsReady(out var hang)) return hang;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (set.IsConnected)
|
||||||
|
var.Value = set.Value;
|
||||||
|
|
||||||
|
get.SetValue(var.Value);
|
||||||
|
return LoopResult.Complete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== 调试 ====================
|
||||||
|
public class NodeDebugLog : NodeBase
|
||||||
|
{
|
||||||
|
public Input<Signal> exec = new("Exec");
|
||||||
|
public InputAny value = new("Value");
|
||||||
|
|
||||||
|
public override LoopResult Loop()
|
||||||
|
{
|
||||||
|
if (!EnsureInputsReady(out var hang)) return hang;
|
||||||
|
|
||||||
|
Debug.Log($"[DebugLog] {NodeName}: {value.GetValue()}");
|
||||||
|
return LoopResult.Complete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class NodeLog : NodeBase
|
||||||
|
{
|
||||||
|
public InputAny value = new("Value");
|
||||||
|
public string prefix = "";
|
||||||
|
|
||||||
|
public override LoopResult Loop()
|
||||||
|
{
|
||||||
|
if (!EnsureInputsReady(out var hang)) return hang;
|
||||||
|
|
||||||
|
Debug.Log($"[NodeLog] {prefix}{value.GetValue()}");
|
||||||
|
return LoopResult.Complete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== List<T> ====================
|
||||||
|
public class NodeList<T> : NodeBase
|
||||||
|
{
|
||||||
|
public Variable<List<T>> list = new() { Value = new List<T>() };
|
||||||
|
public Output<List<T>> output = new("List");
|
||||||
|
|
||||||
|
public override LoopResult Loop()
|
||||||
|
{
|
||||||
|
output.SetValue(list.Value);
|
||||||
|
return LoopResult.Complete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class NodeListAdd<T> : NodeBase
|
||||||
|
{
|
||||||
|
public Input<List<T>> list = new("List");
|
||||||
|
public Input<T> item = new("Item");
|
||||||
|
public Output<List<T>> output = new("List");
|
||||||
|
|
||||||
|
public override LoopResult Loop()
|
||||||
|
{
|
||||||
|
if (!EnsureInputsReady(out var hang)) return hang;
|
||||||
|
|
||||||
|
var l = list.Value;
|
||||||
|
if (l != null && item.IsConnected) { l.Add(item.Value); output.SetValue(l); }
|
||||||
|
return LoopResult.Complete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class NodeListGet<T> : NodeBase
|
||||||
|
{
|
||||||
|
public Input<List<T>> list = new("List");
|
||||||
|
public int index;
|
||||||
|
public Output<T> element = new("Element");
|
||||||
|
|
||||||
|
public override void BuildUI(NodeUIBuilder ui) { ui.FloatField("Idx", 0, i => index = (int)i); }
|
||||||
|
|
||||||
|
public override LoopResult Loop()
|
||||||
|
{
|
||||||
|
if (!EnsureInputsReady(out var hang)) return hang;
|
||||||
|
|
||||||
|
var l = list.Value;
|
||||||
|
if (l != null && index >= 0 && index < l.Count) element.SetValue(l[index]);
|
||||||
|
return LoopResult.Complete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class NodeForEach : NodeBase
|
||||||
|
{
|
||||||
|
public Input<Signal> exec = new("Exec");
|
||||||
|
public InputAny list = new("List");
|
||||||
|
public Output<Signal> loopBody = new("LoopBody"), completed = new("Completed");
|
||||||
|
public OutputAny current = new("Current");
|
||||||
|
public OutputAny indexOut = new("Index");
|
||||||
|
|
||||||
|
System.Collections.IList _list;
|
||||||
|
int _i;
|
||||||
|
bool _started;
|
||||||
|
bool _waiting;
|
||||||
|
|
||||||
|
public override void InitConnectors()
|
||||||
|
{
|
||||||
|
base.InitConnectors();
|
||||||
|
indexOut.LockType(typeof(int));
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnTypePropagated(Type t)
|
||||||
|
{
|
||||||
|
base.OnTypePropagated(t);
|
||||||
|
if (t != null && t.IsGenericType && t.GetGenericTypeDefinition() == typeof(List<>))
|
||||||
|
current.LockType(t.GetGenericArguments()[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override LoopResult Loop()
|
||||||
|
{
|
||||||
|
if (!exec.IsConnected) return LoopResult.Complete();
|
||||||
|
if (!_started && !EnsureInputsReady(out var hang)) return hang;
|
||||||
|
|
||||||
|
if (!_started)
|
||||||
|
{
|
||||||
|
_list = list.GetValue() as System.Collections.IList;
|
||||||
|
if (_list == null || _list.Count == 0)
|
||||||
|
{
|
||||||
|
completed.SetValue(Signal.Default);
|
||||||
|
return LoopResult.Complete();
|
||||||
|
}
|
||||||
|
_i = 0;
|
||||||
|
_started = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_waiting) { _waiting = false; return LoopResult.Wait(); }
|
||||||
|
|
||||||
|
if (_i < _list.Count)
|
||||||
|
{
|
||||||
|
indexOut.SetValueRaw(_i);
|
||||||
|
current.SetValueRaw(_list[_i]);
|
||||||
|
loopBody.SetValue(Signal.Default);
|
||||||
|
_i++;
|
||||||
|
_waiting = true;
|
||||||
|
return LoopResult.Repeat();
|
||||||
|
}
|
||||||
|
|
||||||
|
_started = false;
|
||||||
|
completed.SetValue(Signal.Default);
|
||||||
|
return LoopResult.Complete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: d6d155dc132fc24448aa1896c024f9a6
|
||||||
404
Assets/Scripts/Editor Tools/NodeScript/NodeCore.cs
Normal file
404
Assets/Scripts/Editor Tools/NodeScript/NodeCore.cs
Normal file
@@ -0,0 +1,404 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
using Ichni.RhythmGame;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace Ichni.NodeScript
|
||||||
|
{
|
||||||
|
// ============================================================
|
||||||
|
// NodeStatus — 生命周期状态
|
||||||
|
// ============================================================
|
||||||
|
public enum NodeStatus { Ready, Hang, Complete }
|
||||||
|
|
||||||
|
// ============================================================
|
||||||
|
// LoopResult — Loop() 返回值
|
||||||
|
// ============================================================
|
||||||
|
public struct LoopResult
|
||||||
|
{
|
||||||
|
public List<NodeBase> Triggers;
|
||||||
|
public bool RemoveFromRuntime;
|
||||||
|
public bool TriggerDownstream;
|
||||||
|
|
||||||
|
/// <summary>完成,退出 runtime 并触发下游</summary>
|
||||||
|
public static LoopResult Complete() => new() { RemoveFromRuntime = true, TriggerDownstream = true };
|
||||||
|
|
||||||
|
/// <summary>挂起,等待前置节点,不触发下游</summary>
|
||||||
|
public static LoopResult Hang(NodeBase trigger) => new() { Triggers = new List<NodeBase> { trigger }, RemoveFromRuntime = false };
|
||||||
|
|
||||||
|
/// <summary>挂起,等待多个前置节点</summary>
|
||||||
|
public static LoopResult Hang(List<NodeBase> triggers) => new() { Triggers = triggers, RemoveFromRuntime = false };
|
||||||
|
|
||||||
|
/// <summary>保持活跃,触发下游但不退出 runtime(循环节点逐周期用)</summary>
|
||||||
|
public static LoopResult Repeat() => new() { RemoveFromRuntime = false, TriggerDownstream = true };
|
||||||
|
|
||||||
|
/// <summary>空转一周期,不触发下游(循环节点等下游消费用)</summary>
|
||||||
|
public static LoopResult Wait() => new() { RemoveFromRuntime = false };
|
||||||
|
}
|
||||||
|
|
||||||
|
// ============================================================
|
||||||
|
// 连接器接口(简化,移除 HasReceived)
|
||||||
|
// ============================================================
|
||||||
|
public interface IInput
|
||||||
|
{
|
||||||
|
string Name { get; set; }
|
||||||
|
Type DataType { get; }
|
||||||
|
Color ConnectorColor { get; }
|
||||||
|
bool IsConnected { get; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface IOutput
|
||||||
|
{
|
||||||
|
string Name { get; set; }
|
||||||
|
Type DataType { get; }
|
||||||
|
Color ConnectorColor { get; }
|
||||||
|
bool IsConnected { get; }
|
||||||
|
}
|
||||||
|
|
||||||
|
// ============================================================
|
||||||
|
// NodeBase — 纯数据/逻辑
|
||||||
|
// ============================================================
|
||||||
|
public abstract class NodeBase
|
||||||
|
{
|
||||||
|
public string NodeName;
|
||||||
|
public NodeObject nodeObject;
|
||||||
|
public NodeStatus Status { get; set; } = NodeStatus.Ready;
|
||||||
|
public int L { get; set; } = -1;
|
||||||
|
|
||||||
|
public abstract LoopResult Loop();
|
||||||
|
public virtual void BuildUI(NodeUIBuilder ui) { }
|
||||||
|
|
||||||
|
/// <summary>当某个 InputAny 连线锁定类型后,传播到同节点其他未锁定端口</summary>
|
||||||
|
public virtual void OnTypePropagated(Type lockedType)
|
||||||
|
{
|
||||||
|
foreach (var any in GetAnyInputs())
|
||||||
|
{
|
||||||
|
if (any.IsFixedType) continue;
|
||||||
|
if (any.DataType == null)
|
||||||
|
any.LockType(lockedType);
|
||||||
|
}
|
||||||
|
foreach (var any in GetAnyOutputs())
|
||||||
|
{
|
||||||
|
if (any.DataType == null)
|
||||||
|
any.LockType(lockedType);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<InputAny> GetAnyInputs()
|
||||||
|
{
|
||||||
|
return GetType().GetFields(BindingFlags.Public | BindingFlags.Instance)
|
||||||
|
.Where(f => typeof(InputAny).IsAssignableFrom(f.FieldType))
|
||||||
|
.Select(f => f.GetValue(this) as InputAny)
|
||||||
|
.Where(a => a != null)
|
||||||
|
.ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>检查所有已连输入的上游是否都 Complete,否则自动返回 Hang</summary>
|
||||||
|
protected bool EnsureInputsReady(out LoopResult hang)
|
||||||
|
{
|
||||||
|
var preceding = GetPrecedingNodes();
|
||||||
|
var pending = preceding.Where(p => p.Status != NodeStatus.Complete).ToList();
|
||||||
|
if (pending.Count > 0) { hang = LoopResult.Hang(pending); return false; }
|
||||||
|
hang = default; return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<OutputAny> GetAnyOutputs()
|
||||||
|
{
|
||||||
|
return GetType().GetFields(BindingFlags.Public | BindingFlags.Instance)
|
||||||
|
.Where(f => typeof(OutputAny).IsAssignableFrom(f.FieldType))
|
||||||
|
.Select(f => f.GetValue(this) as OutputAny)
|
||||||
|
.Where(a => a != null)
|
||||||
|
.ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>收集所有前置依赖节点(输入连线的上游)</summary>
|
||||||
|
public List<NodeBase> GetPrecedingNodes()
|
||||||
|
{
|
||||||
|
var result = new List<NodeBase>();
|
||||||
|
foreach (var any in GetAnyInputs())
|
||||||
|
{
|
||||||
|
var src = any.GetSourceNode();
|
||||||
|
if (src != null) result.Add(src);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var f in GetType().GetFields(BindingFlags.Public | BindingFlags.Instance))
|
||||||
|
{
|
||||||
|
if (!f.FieldType.IsGenericType) continue;
|
||||||
|
var def = f.FieldType.GetGenericTypeDefinition();
|
||||||
|
if (def != typeof(Input<>)) continue;
|
||||||
|
|
||||||
|
var input = f.GetValue(this);
|
||||||
|
var srcMethod = f.FieldType.GetMethod("GetSourceNode");
|
||||||
|
var node = srcMethod?.Invoke(input, null) as NodeBase;
|
||||||
|
if (node != null) result.Add(node);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 反射
|
||||||
|
public List<(string name, IInput connector, Type type)> GetInputs()
|
||||||
|
{
|
||||||
|
var results = new List<(string, IInput, Type)>();
|
||||||
|
foreach (var f in GetType().GetFields(BindingFlags.Public | BindingFlags.Instance))
|
||||||
|
{
|
||||||
|
if (!typeof(IInput).IsAssignableFrom(f.FieldType)) continue;
|
||||||
|
var val = f.GetValue(this) as IInput;
|
||||||
|
if (val == null) continue;
|
||||||
|
results.Add((f.Name, val, val.DataType ?? typeof(object)));
|
||||||
|
}
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<(string name, IOutput connector, Type type)> GetOutputs()
|
||||||
|
{
|
||||||
|
var results = new List<(string, IOutput, Type)>();
|
||||||
|
foreach (var f in GetType().GetFields(BindingFlags.Public | BindingFlags.Instance))
|
||||||
|
{
|
||||||
|
if (!typeof(IOutput).IsAssignableFrom(f.FieldType)) continue;
|
||||||
|
var val = f.GetValue(this) as IOutput;
|
||||||
|
if (val == null) continue;
|
||||||
|
results.Add((f.Name, val, val.DataType ?? typeof(object)));
|
||||||
|
}
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual void InitConnectors()
|
||||||
|
{
|
||||||
|
foreach (var f in GetType().GetFields(BindingFlags.Public | BindingFlags.Instance))
|
||||||
|
{
|
||||||
|
if (!typeof(IInput).IsAssignableFrom(f.FieldType) &&
|
||||||
|
!typeof(IOutput).IsAssignableFrom(f.FieldType)) continue;
|
||||||
|
var c = f.GetValue(this);
|
||||||
|
if (c == null) { c = Activator.CreateInstance(f.FieldType); f.SetValue(this, c); }
|
||||||
|
var nbField = f.FieldType.GetField("_nodeBase", BindingFlags.NonPublic | BindingFlags.Instance);
|
||||||
|
nbField?.SetValue(c, this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ============================================================
|
||||||
|
// Input<T> — 拉扯式输入,从上游 Output<T> 直接读取
|
||||||
|
// ============================================================
|
||||||
|
public class Input<T> : IInput
|
||||||
|
{
|
||||||
|
internal NodeBase _nodeBase;
|
||||||
|
Output<T> _source;
|
||||||
|
IOutput _anySource; // OutputAny 等非泛型源
|
||||||
|
|
||||||
|
public string Name { get; set; }
|
||||||
|
public Type DataType => typeof(T);
|
||||||
|
public bool IsConnected => _source != null || _anySource != null;
|
||||||
|
public Color ConnectorColor => NodeColors.Get(typeof(T));
|
||||||
|
|
||||||
|
public T Value
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (_source != null) return _source._value;
|
||||||
|
if (_anySource is OutputAny oa) return oa.GetValue<T>();
|
||||||
|
return default;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Input() { Name = typeof(T).Name; }
|
||||||
|
public Input(string name) { Name = name ?? typeof(T).Name; }
|
||||||
|
|
||||||
|
public T Pull() => Value;
|
||||||
|
|
||||||
|
public void Connect(Output<T> src) { _source = src; _anySource = null; }
|
||||||
|
public void Disconnect(Output<T> src) { if (_source == src) _source = null; }
|
||||||
|
|
||||||
|
public void ConnectAny(IOutput src) { _anySource = src; _source = null; }
|
||||||
|
public void DisconnectAny() { _anySource = null; }
|
||||||
|
|
||||||
|
public NodeBase GetSourceNode()
|
||||||
|
{
|
||||||
|
if (_source != null) return _source._nodeBase;
|
||||||
|
var f = _anySource?.GetType().GetField("_nodeBase", BindingFlags.NonPublic | BindingFlags.Instance);
|
||||||
|
return f?.GetValue(_anySource) as NodeBase;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ============================================================
|
||||||
|
// Output<T> — 存值,不再推送;保留 _targets 供拓扑/BFS 用
|
||||||
|
// ============================================================
|
||||||
|
public class Output<T> : IOutput
|
||||||
|
{
|
||||||
|
internal NodeBase _nodeBase;
|
||||||
|
internal T _value;
|
||||||
|
internal readonly List<Input<T>> _targets = new();
|
||||||
|
|
||||||
|
// 反向写入回调:NodeSet 写回 Variable 时触发
|
||||||
|
internal Action<T> _writeBack;
|
||||||
|
|
||||||
|
public string Name { get; set; }
|
||||||
|
public Type DataType => typeof(T);
|
||||||
|
public bool IsConnected => _targets.Count > 0;
|
||||||
|
public T Value => _value;
|
||||||
|
public Color ConnectorColor => NodeColors.Get(typeof(T));
|
||||||
|
|
||||||
|
public Output() { Name = typeof(T).Name; }
|
||||||
|
public Output(string name) { Name = name ?? typeof(T).Name; }
|
||||||
|
|
||||||
|
public void SetValue(T v)
|
||||||
|
{
|
||||||
|
_value = v;
|
||||||
|
_writeBack?.Invoke(v);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Connect(Input<T> i) { if (i != null && !_targets.Contains(i)) _targets.Add(i); }
|
||||||
|
public void Disconnect(Input<T> i) { if (i != null) _targets.Remove(i); }
|
||||||
|
|
||||||
|
internal void SetWriteBack(Action<T> cb) { _writeBack = cb; }
|
||||||
|
}
|
||||||
|
|
||||||
|
// ============================================================
|
||||||
|
// InputAny — 未锁定输入端口,连线后类型自动确定
|
||||||
|
// ============================================================
|
||||||
|
public class InputAny : IInput
|
||||||
|
{
|
||||||
|
internal NodeBase _nodeBase;
|
||||||
|
IOutput _source;
|
||||||
|
|
||||||
|
public string Name { get; set; }
|
||||||
|
public Type DataType { get; private set; }
|
||||||
|
public bool IsConnected => _source != null;
|
||||||
|
public bool IsFixedType { get; set; }
|
||||||
|
|
||||||
|
public Color ConnectorColor => DataType != null ? NodeColors.Get(DataType) : Color.grey;
|
||||||
|
|
||||||
|
public InputAny() { Name = "Any"; }
|
||||||
|
public InputAny(string name) { Name = name ?? "Any"; }
|
||||||
|
|
||||||
|
public T GetValue<T>()
|
||||||
|
{
|
||||||
|
if (_source is Output<T> ot) return ot.Value;
|
||||||
|
if (_source is OutputAny oa) return oa.GetValue<T>();
|
||||||
|
return default;
|
||||||
|
}
|
||||||
|
|
||||||
|
public object GetValue()
|
||||||
|
{
|
||||||
|
if (_source is OutputAny oa) return oa._value;
|
||||||
|
if (_source != null)
|
||||||
|
{
|
||||||
|
var p = _source.GetType().GetProperty("Value");
|
||||||
|
return p?.GetValue(_source);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public NodeBase GetSourceNode()
|
||||||
|
{
|
||||||
|
var f = _source?.GetType().GetField("_nodeBase", BindingFlags.NonPublic | BindingFlags.Instance);
|
||||||
|
return f?.GetValue(_source) as NodeBase;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 反向写入:NodeSet 通过 targetRef 写回上游 Variable
|
||||||
|
public void WriteBack(object value)
|
||||||
|
{
|
||||||
|
if (_source == null) return;
|
||||||
|
if (_source is OutputAny oa)
|
||||||
|
{
|
||||||
|
oa.SetValueRaw(value);
|
||||||
|
// 触发 writeback
|
||||||
|
if (oa._writeBack != null)
|
||||||
|
oa._writeBack.DynamicInvoke(value);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var setMethod = _source.GetType().GetMethod("SetValue");
|
||||||
|
if (setMethod != null)
|
||||||
|
{
|
||||||
|
setMethod.Invoke(_source, new[] { value });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ConnectAny(IOutput src)
|
||||||
|
{
|
||||||
|
_source = src;
|
||||||
|
if (src.DataType != null)
|
||||||
|
{
|
||||||
|
LockType(src.DataType);
|
||||||
|
_nodeBase?.OnTypePropagated(src.DataType);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DisconnectAny() { _source = null; }
|
||||||
|
|
||||||
|
public void LockType(Type t)
|
||||||
|
{
|
||||||
|
if (t != null && DataType != t) DataType = t;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ============================================================
|
||||||
|
// OutputAny — 未锁定输出端口,类型跟随同节点 InputAny
|
||||||
|
// ============================================================
|
||||||
|
public class OutputAny : IOutput
|
||||||
|
{
|
||||||
|
internal NodeBase _nodeBase;
|
||||||
|
internal object _value;
|
||||||
|
internal readonly List<InputAny> _targets = new();
|
||||||
|
internal Action<object> _writeBack;
|
||||||
|
|
||||||
|
public string Name { get; set; }
|
||||||
|
public Type DataType { get; private set; }
|
||||||
|
public bool IsConnected => _targets.Count > 0;
|
||||||
|
public Color ConnectorColor => DataType != null ? NodeColors.Get(DataType) : Color.grey;
|
||||||
|
|
||||||
|
public OutputAny() { Name = "Out"; }
|
||||||
|
public OutputAny(string name) { Name = name ?? "Out"; }
|
||||||
|
|
||||||
|
public T GetValue<T>()
|
||||||
|
{
|
||||||
|
if (_value is T tv) return tv;
|
||||||
|
Debug.LogError($"[OutputAny:{Name}] Type mismatch: stored={_value?.GetType().Name}, requested={typeof(T).Name}");
|
||||||
|
return default;
|
||||||
|
}
|
||||||
|
public object GetValue() => _value;
|
||||||
|
|
||||||
|
public void SetValue<T>(T v) { _value = v; }
|
||||||
|
public void SetValueRaw(object v) { _value = v; }
|
||||||
|
|
||||||
|
public void ConnectAny(InputAny i) { if (i != null && !_targets.Contains(i)) _targets.Add(i); }
|
||||||
|
public void DisconnectAny(InputAny i) { if (i != null) _targets.Remove(i); }
|
||||||
|
|
||||||
|
public void LockType(Type t)
|
||||||
|
{
|
||||||
|
if (t != null && DataType != t) DataType = t;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ============================================================
|
||||||
|
// 颜色表
|
||||||
|
// ============================================================
|
||||||
|
public static class NodeColors
|
||||||
|
{
|
||||||
|
static readonly Dictionary<Type, Color> _table = new()
|
||||||
|
{
|
||||||
|
{ typeof(float), Color.blue },
|
||||||
|
{ typeof(int), Color.cyan },
|
||||||
|
{ typeof(bool), new Color(1f, 0.5f, 0f) },
|
||||||
|
{ typeof(string), Color.magenta },
|
||||||
|
{ typeof(Vector2), Color.yellow },
|
||||||
|
{ typeof(Vector3), Color.green },
|
||||||
|
{ typeof(Color), new Color(0.8f, 0.4f, 0.6f) },
|
||||||
|
{ typeof(GameElement), Color.mediumPurple },
|
||||||
|
{ typeof(Signal), Color.ghostWhite },
|
||||||
|
{ typeof(List<GameElement>), new Color(0.6f, 0.3f, 0.8f) },
|
||||||
|
};
|
||||||
|
|
||||||
|
public static Color Get(Type t) => t != null && _table.TryGetValue(t, out var c) ? c : Color.grey;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ============================================================
|
||||||
|
// Signal — 触发信号,不参与值传递
|
||||||
|
// ============================================================
|
||||||
|
public struct Signal
|
||||||
|
{
|
||||||
|
public static readonly Signal Default = new();
|
||||||
|
}
|
||||||
|
}
|
||||||
2
Assets/Scripts/Editor Tools/NodeScript/NodeCore.cs.meta
Normal file
2
Assets/Scripts/Editor Tools/NodeScript/NodeCore.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 335508d8cda287449ad8009a1c9e61a8
|
||||||
1178
Assets/Scripts/Editor Tools/NodeScript/NodeManager.cs
Normal file
1178
Assets/Scripts/Editor Tools/NodeScript/NodeManager.cs
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 6cdb8cc0b3fb21f49b1a761000205509
|
||||||
135
Assets/Scripts/Editor Tools/NodeScript/NodeObject.cs
Normal file
135
Assets/Scripts/Editor Tools/NodeScript/NodeObject.cs
Normal file
@@ -0,0 +1,135 @@
|
|||||||
|
using System;
|
||||||
|
using TMPro;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.EventSystems;
|
||||||
|
using UnityEngine.UI;
|
||||||
|
|
||||||
|
namespace Ichni.NodeScript
|
||||||
|
{
|
||||||
|
public class NodeObject : MonoBehaviour, IDragHandler, IPointerClickHandler
|
||||||
|
{
|
||||||
|
public TMP_Text TitleText;
|
||||||
|
public NodeBase nodeBase;
|
||||||
|
public Image statusImage;
|
||||||
|
|
||||||
|
public Transform inputsRoot;
|
||||||
|
public Transform outputsRoot;
|
||||||
|
public Transform middleRoot;
|
||||||
|
|
||||||
|
public GameObject connectorSlotPrefabI;
|
||||||
|
public GameObject connectorSlotPrefabO;
|
||||||
|
public GameObject dropdownPrefab;
|
||||||
|
public GameObject inputPrefab;
|
||||||
|
|
||||||
|
bool _selected;
|
||||||
|
public bool Selected
|
||||||
|
{
|
||||||
|
get => _selected;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_selected = value;
|
||||||
|
if (_bg == null) _bg = GetComponent<Image>();
|
||||||
|
if (_bg != null) _bg.color = value ? new Color(0.3f, 0.5f, 0.9f, 0.4f) : new Color(0.15f, 0.15f, 0.15f, 0.3f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Image _bg;
|
||||||
|
|
||||||
|
public void Init()
|
||||||
|
{
|
||||||
|
if (nodeBase == null) return;
|
||||||
|
TitleText.text = nodeBase.NodeName;
|
||||||
|
nodeBase.nodeObject = this;
|
||||||
|
|
||||||
|
_bg = GetComponent<Image>();
|
||||||
|
if (_bg == null) { _bg = gameObject.AddComponent<Image>(); _bg.color = new Color(0.15f, 0.15f, 0.15f, 0.3f); }
|
||||||
|
|
||||||
|
nodeBase.InitConnectors();
|
||||||
|
BuildConnectors();
|
||||||
|
nodeBase.BuildUI(new NodeUIBuilder(middleRoot, dropdownPrefab, inputPrefab));
|
||||||
|
NodeManager.Instance?.ComputeLValues();
|
||||||
|
UpdateLDisplay();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void UpdateLDisplay()
|
||||||
|
{
|
||||||
|
if (TitleText != null && nodeBase != null)
|
||||||
|
TitleText.text = $"{nodeBase.NodeName} (L:{nodeBase.L})";
|
||||||
|
}
|
||||||
|
|
||||||
|
public void UpdateStatusDisplay()
|
||||||
|
{
|
||||||
|
if (statusImage == null || nodeBase == null) return;
|
||||||
|
statusImage.color = nodeBase.Status switch
|
||||||
|
{
|
||||||
|
NodeStatus.Ready => new Color(0.3f, 0.3f, 0.3f, 0.8f),
|
||||||
|
NodeStatus.Hang => new Color(0.8f, 0.6f, 0.1f, 0.9f),
|
||||||
|
NodeStatus.Complete => new Color(0.2f, 0.8f, 0.3f, 0.9f),
|
||||||
|
_ => Color.white,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// ========== 选中 / 拖拽 ==========
|
||||||
|
public void OnPointerClick(PointerEventData e)
|
||||||
|
{
|
||||||
|
if (e.button != PointerEventData.InputButton.Left) return;
|
||||||
|
NodeManager.Instance.SelectNode(this, e);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnDrag(PointerEventData eventData)
|
||||||
|
{
|
||||||
|
if (eventData.button != PointerEventData.InputButton.Left) return;
|
||||||
|
var rt = GetComponent<RectTransform>();
|
||||||
|
rt.anchoredPosition += eventData.delta / GetComponentInParent<Canvas>().scaleFactor;
|
||||||
|
NodeManager.Instance.RefreshAllLines();
|
||||||
|
}
|
||||||
|
|
||||||
|
// ========== 插槽构建 ==========
|
||||||
|
void BuildConnectors()
|
||||||
|
{
|
||||||
|
foreach (var (name, connector, type) in nodeBase.GetInputs())
|
||||||
|
CreateSlot(name, connector, true);
|
||||||
|
|
||||||
|
foreach (var (name, connector, type) in nodeBase.GetOutputs())
|
||||||
|
CreateSlot(name, connector, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CreateSlot(string name, object connector, bool isInput)
|
||||||
|
{
|
||||||
|
IInput inp = connector as IInput;
|
||||||
|
IOutput outp = connector as IOutput;
|
||||||
|
if (inp == null && outp == null) return;
|
||||||
|
|
||||||
|
var conName = inp?.Name ?? outp.Name;
|
||||||
|
if (inp != null) inp.Name = name;
|
||||||
|
if (outp != null) outp.Name = name;
|
||||||
|
|
||||||
|
var prefab = isInput ? connectorSlotPrefabI : connectorSlotPrefabO;
|
||||||
|
var parent = isInput ? inputsRoot : outputsRoot;
|
||||||
|
if (prefab == null || parent == null) return;
|
||||||
|
|
||||||
|
var go = Instantiate(prefab, parent);
|
||||||
|
var img = go.GetComponentInChildren<Image>();
|
||||||
|
if (img == null)
|
||||||
|
{
|
||||||
|
var imgGo = new GameObject("Dot", typeof(Image));
|
||||||
|
imgGo.transform.SetParent(go.transform, false);
|
||||||
|
img = imgGo.GetComponent<Image>();
|
||||||
|
}
|
||||||
|
img.color = (inp as IInput)?.ConnectorColor ?? (outp as IOutput)?.ConnectorColor ?? Color.white;
|
||||||
|
img.raycastTarget = true;
|
||||||
|
|
||||||
|
var text = go.GetComponentInChildren<TMP_Text>();
|
||||||
|
if (text != null) text.text = name;
|
||||||
|
|
||||||
|
var imgRt = img.GetComponent<RectTransform>();
|
||||||
|
if (imgRt.sizeDelta.sqrMagnitude < 1f) imgRt.sizeDelta = new Vector2(20, 20);
|
||||||
|
|
||||||
|
var slot = img.GetComponent<ConnectorSlot>();
|
||||||
|
if (slot == null) slot = img.gameObject.AddComponent<ConnectorSlot>();
|
||||||
|
slot.isInput = isInput;
|
||||||
|
slot.connectorIn = inp;
|
||||||
|
slot.connectorOut = outp;
|
||||||
|
slot.ownerNode = this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: bc99ff1458babbf418cadaa025d9c4fc
|
||||||
97
Assets/Scripts/Editor Tools/NodeScript/NodeUIBuilder.cs
Normal file
97
Assets/Scripts/Editor Tools/NodeScript/NodeUIBuilder.cs
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
using System;
|
||||||
|
using TMPro;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.UI;
|
||||||
|
|
||||||
|
namespace Ichni.NodeScript
|
||||||
|
{
|
||||||
|
public class NodeUIBuilder
|
||||||
|
{
|
||||||
|
Transform parent;
|
||||||
|
GameObject dropdownPrefab;
|
||||||
|
GameObject inputPrefab;
|
||||||
|
|
||||||
|
public NodeUIBuilder(Transform parent, GameObject dropdownPrefab, GameObject inputPrefab)
|
||||||
|
{
|
||||||
|
this.parent = parent;
|
||||||
|
this.dropdownPrefab = dropdownPrefab;
|
||||||
|
this.inputPrefab = inputPrefab;
|
||||||
|
}
|
||||||
|
|
||||||
|
public NodeUIBuilder Dropdown(string label, string[] options, int defaultIndex, Action<int> onChanged)
|
||||||
|
{
|
||||||
|
if (parent == null || dropdownPrefab == null || options == null || options.Length == 0) return this;
|
||||||
|
|
||||||
|
var go = UnityEngine.Object.Instantiate(dropdownPrefab, parent);
|
||||||
|
go.name = "dd_" + label;
|
||||||
|
|
||||||
|
var dd = go.GetComponentInChildren<TMP_Dropdown>();
|
||||||
|
if (dd != null)
|
||||||
|
{
|
||||||
|
dd.ClearOptions();
|
||||||
|
foreach (var o in options) dd.options.Add(new TMP_Dropdown.OptionData(o));
|
||||||
|
dd.value = defaultIndex;
|
||||||
|
dd.onValueChanged.AddListener(i => onChanged?.Invoke(i));
|
||||||
|
}
|
||||||
|
|
||||||
|
var lbl = go.GetComponentInChildren<TMP_Text>();
|
||||||
|
if (lbl != null && lbl.transform != dd?.transform) lbl.text = label;
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public NodeUIBuilder FloatField(string label, float defaultValue, Action<float> onChanged)
|
||||||
|
{
|
||||||
|
if (parent == null || inputPrefab == null) return this;
|
||||||
|
|
||||||
|
var go = UnityEngine.Object.Instantiate(inputPrefab, parent);
|
||||||
|
go.name = "inp_" + label;
|
||||||
|
|
||||||
|
var input = go.GetComponentInChildren<TMP_InputField>();
|
||||||
|
if (input != null)
|
||||||
|
{
|
||||||
|
input.text = defaultValue.ToString("0.##");
|
||||||
|
input.contentType = TMP_InputField.ContentType.DecimalNumber;
|
||||||
|
input.onValueChanged.AddListener(s =>
|
||||||
|
{
|
||||||
|
if (float.TryParse(s, out float v)) onChanged?.Invoke(v);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
var lbl = go.GetComponentInChildren<TMP_Text>();
|
||||||
|
if (lbl != null && lbl.transform != input?.transform) lbl.text = label;
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>类型选择下拉(NodeConst / NodeCombine 用)</summary>
|
||||||
|
public NodeUIBuilder TypeDropdown(string[] options, int defaultIndex, Action<int> onChanged)
|
||||||
|
{
|
||||||
|
return Dropdown("Type", options, defaultIndex, onChanged);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>Bool 开关(NodeSelect 的 condition 备选)</summary>
|
||||||
|
public NodeUIBuilder Toggle(string label, bool defaultValue, Action<bool> onChanged)
|
||||||
|
{
|
||||||
|
if (parent == null || dropdownPrefab == null) return this;
|
||||||
|
|
||||||
|
var go = UnityEngine.Object.Instantiate(dropdownPrefab, parent);
|
||||||
|
go.name = "tgl_" + label;
|
||||||
|
|
||||||
|
var dd = go.GetComponentInChildren<TMP_Dropdown>();
|
||||||
|
if (dd != null)
|
||||||
|
{
|
||||||
|
dd.ClearOptions();
|
||||||
|
dd.options.Add(new TMP_Dropdown.OptionData("False"));
|
||||||
|
dd.options.Add(new TMP_Dropdown.OptionData("True"));
|
||||||
|
dd.value = defaultValue ? 1 : 0;
|
||||||
|
dd.onValueChanged.AddListener(i => onChanged?.Invoke(i == 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
var lbl = go.GetComponentInChildren<TMP_Text>();
|
||||||
|
if (lbl != null && lbl.transform != dd?.transform) lbl.text = label;
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 90b84ea9f6d5bbf4690ad415ef0bb1c9
|
||||||
14
Assets/Scripts/Editor Tools/NodeScript/Node重构.txt
Normal file
14
Assets/Scripts/Editor Tools/NodeScript/Node重构.txt
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
节点逻辑重构
|
||||||
|
在这次重构中,我们不需要改UI部分,而是聚焦于node manager对node的指令的控制和node的行为的表现。我打算把系统运行的控制权集中在manager上,使用类似生命周期的方式控制节点指令。
|
||||||
|
逻辑流程:每个node都有一个status为ready hang或complete,刚开始启动的时候,所有的都为ready或者complete,然后启动start节点。
|
||||||
|
Manager拥有一个触发表,在开始一次周期前,将触发表并入运行时表中,并清空触发表。
|
||||||
|
在周期中遍历运行时表运行节点内置的loop方法 收集下一次的触发以及要从运行时表中去除的东西。
|
||||||
|
节点不再传递值,会从前面的节点拿取值或者引用,启动后每周期检查如果前方的节点不处于complete,那么status就改为hang,将自己维持在运行时表中,并且将前面的node加入触发表,取值满足后进行运算返回complete。
|
||||||
|
特殊节点:变量节点不存在hang,在启动之后立刻返回值或者引用,并且complete,这些节点拥有一个signal输入,这个输入通常不需要连接,只有在循环节点内,这个signal才用得到。
|
||||||
|
循环和子函数节点:可能需要一种新的状态,表示其内部正在运行。这些节点可能需要一个新的UI控件,比如一个rect,当别的节点拖放在这个rect里面,就相当于在节点内。(我们的UI支持自动调整,你只需要在之前放选项的地方,也就是UI builder所需要的地方直接加入一个可以手动放大缩小范围的rect,并且对他添加脚本就好,而像for循环原有的每个循环都会有的Index和Signal输出点就可能不用放在第三列,而是放在位于输入节点的第一列,以拉取到rect里面)循环还包含一个子控制器监控里面的节点运行情况,不过这里面节点的运行状况依然交由主manager子控制器只负责检查是否完成,重置节点并开启下一步的循环。
|
||||||
|
子函数节点包含子函数定义节点和子函数执行节点。定义值点只有一个输入:string name,我们使用rect外连接到rect内的变量节点代表输入,以及连接到rect外的set节点代表输出。
|
||||||
|
Manager可能需要扫描所有文件,注册这些子函数定义节点,然后在其他地方的执行节点中表现为input输入和output输出。
|
||||||
|
关于signal:Signal依然存在,仅用于触发操作,拥有signal并且signal输入已连接的节点会像上文一样等待signal。
|
||||||
|
其他:节点拥有一个“到stars节点的最短距离”l
|
||||||
|
举例:L等于零的输出可以接在l等于七的输入上,而l等于七的输出不能接在l等于二的输入上。确保单向逻辑。
|
||||||
|
关于引用和动态类型:比如set节点,输入第一项为原值,比如一个变量int。第二项也为int,用于更改第一个项指向的值。引用节点没有输出,只有输入,并且要根据输入的第一项的类型更改输入第二项的类型,可能要为此实现一个input<any>之类的东西,
|
||||||
7
Assets/Scripts/Editor Tools/NodeScript/Node重构.txt.meta
Normal file
7
Assets/Scripts/Editor Tools/NodeScript/Node重构.txt.meta
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: c8fec166f647d414c8d2fe21bfda2c86
|
||||||
|
TextScriptImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
455
Assets/Scripts/Editor Tools/NodeScript/Node重构大纲.md
Normal file
455
Assets/Scripts/Editor Tools/NodeScript/Node重构大纲.md
Normal file
@@ -0,0 +1,455 @@
|
|||||||
|
# NodeScript 重构大纲
|
||||||
|
|
||||||
|
## 一、重构目标
|
||||||
|
|
||||||
|
将节点系统从**推送式(push-based)求值**改为**Manager 集中控制的拉取式(pull-based)生命周期循环**。不改 UI 层,聚焦于 NodeManager 对节点的调度逻辑和节点自身的行为表现。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 二、核心架构变更
|
||||||
|
|
||||||
|
### 2.1 节点生命周期状态
|
||||||
|
|
||||||
|
为 `NodeBase` 新增状态枚举:
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
enum NodeStatus { Ready, Hang, Complete }
|
||||||
|
```
|
||||||
|
|
||||||
|
- **Ready** — 节点等待被触发执行
|
||||||
|
- **Hang** — 节点因前置节点未完成而挂起,保留在运行时表中等待下一周期
|
||||||
|
- **Complete** — 节点已完成本轮运算
|
||||||
|
|
||||||
|
变量节点的特殊规则:不存在 Hang 状态,启动后立即返回值/引用并 Complete。
|
||||||
|
|
||||||
|
### 2.2 触发表 + 运行时表(Manager 侧)
|
||||||
|
|
||||||
|
Manager 维护两张表:
|
||||||
|
|
||||||
|
| 表 | 作用 |
|
||||||
|
|---|---|
|
||||||
|
| **触发表** `triggerTable` | 收集本周期要加入运行的节点,周期开始前并入运行时表 |
|
||||||
|
| **运行时表** `runtimeTable` | 当前周期正在遍历的节点集合 |
|
||||||
|
|
||||||
|
周期流程:
|
||||||
|
1. `triggerTable` → 并入 `runtimeTable`,清空 `triggerTable`
|
||||||
|
2. 遍历 `runtimeTable`,调用每个节点的 `Loop()` 方法
|
||||||
|
3. `Loop()` 返回:下一轮要触发的节点(加入 `triggerTable`)+ 是否从 `runtimeTable` 移除自己
|
||||||
|
|
||||||
|
### 2.3 拉取式取值
|
||||||
|
|
||||||
|
节点不再通过 Output → Input 推送数据。改为:
|
||||||
|
- 每个周期节点从前置节点的 Output 中**主动拉取**值或引用
|
||||||
|
- 如果前置节点不处于 `Complete`,本节点 `Status = Hang`,将前置节点加入 `triggerTable`,自己保留在 `runtimeTable`
|
||||||
|
- 取值条件满足后,执行运算,返回 `Complete`
|
||||||
|
|
||||||
|
### 2.4 最短距离 L(单向逻辑保证)
|
||||||
|
|
||||||
|
每个节点计算到 Start 节点的最短距离 `L`,用于约束连线方向:
|
||||||
|
- L=0 的节点的输出可以连接到 L=7 的节点的输入
|
||||||
|
- L=7 的节点的输出**不能**连接到 L=2 的节点的输入
|
||||||
|
- 确保逻辑单向流动
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 三、文件级重构计划
|
||||||
|
|
||||||
|
### 3.1 NodeCore.cs — 核心类型重定义
|
||||||
|
|
||||||
|
| 变更项 | 说明 |
|
||||||
|
|---|---|
|
||||||
|
| 移除 `Input<T>.Notify()` / `Output<T>.SetValue()` 推送链 | 不再需要推送机制 |
|
||||||
|
| `Input<T>` 改为存储对上游 `Output<T>` 的引用,通过 `Pull()` 取值 | 拉取模式 |
|
||||||
|
| `NodeBase` 新增 `NodeStatus Status` 属性 | 生命周期状态 |
|
||||||
|
| `NodeBase` 新增抽象方法 `Loop()` | 替代 `Evaluate()`,返回 `(List<NodeBase> triggers, bool removeFromRuntime)` |
|
||||||
|
| `NodeBase` 新增 `int L` 属性 | 到 Start 节点的最短距离 |
|
||||||
|
| `NodeBase` 新增 `List<NodeBase> GetPrecedingNodes()` | 获取所有前置依赖节点 |
|
||||||
|
| 保留 `IInput` / `IOutput` 接口 | UI 层依赖不变 |
|
||||||
|
| 保留 `Signal` 结构体 | 仅用于触发操作 |
|
||||||
|
| 新增 `InputAny` 概念(见 3.4) | 动态类型支持 |
|
||||||
|
|
||||||
|
### 3.2 NodeManager.cs — 生命周期调度
|
||||||
|
|
||||||
|
| 变更项 | 说明 |
|
||||||
|
|---|---|
|
||||||
|
| 新增 `HashSet<NodeBase> triggerTable` | 触发表 |
|
||||||
|
| 新增 `HashSet<NodeBase> runtimeTable` | 运行时表 |
|
||||||
|
| 新增 `void RunCycle()` | 单周期执行逻辑 |
|
||||||
|
| 重写 `RunGraph()` | 初始化触发表为 Start/Entry 节点,循环调用 `RunCycle()` 直到运行时表为空 |
|
||||||
|
| 新增 `void ComputeLValues()` | 在连线变更后重新计算所有节点的最短距离 L |
|
||||||
|
| 新增 `bool ValidateConnection(NodeBase from, NodeBase to)` | 连线前验证 L 约束 |
|
||||||
|
| 新增子控制器管理 | 用于循环节点和子函数节点的内部运行监控 |
|
||||||
|
| 新增 `void RegisterSubFunction(NodeBase definition)` | 扫描注册子函数定义 |
|
||||||
|
| `TryConnect()` 中增加 L 约束检查 | 阻止反向连线 |
|
||||||
|
| `SaveToFile()` / `LoadFromFile()` 适配新状态 | 保存/加载兼容 |
|
||||||
|
| UI 部分(拖线、复制粘贴等)保持不变 | — |
|
||||||
|
|
||||||
|
### 3.3 NodeObject.cs / ConnectorSlot.cs / NodeUIBuilder.cs — UI 层
|
||||||
|
|
||||||
|
**原则上不修改**,仅可能的微调:
|
||||||
|
- `NodeObject.Init()` 中调用 `nodeBase.InitConnectors()` 后触发 L 值计算
|
||||||
|
- 循环/子函数节点的 Rect 容器支持(见 3.6)
|
||||||
|
|
||||||
|
### 3.4 动态类型 — InputAny / OutputAny 机制(多类型统一节点的基石)
|
||||||
|
|
||||||
|
#### 3.4.1 问题
|
||||||
|
|
||||||
|
当前同一功能、不同类型的节点大量重复:
|
||||||
|
|
||||||
|
| 功能 | 现有节点 | 覆盖类型 |
|
||||||
|
|---|---|---|
|
||||||
|
| 常量 | `NodeConstFloat`, `NodeConstVector2`, `NodeConstVector3`, `NodeConstColor` | float, Vector2, Vector3, Color |
|
||||||
|
| 拆分 | `NodeSplitV2`, `NodeSplitV3` | Vector2, Vector3 |
|
||||||
|
| 合并 | `NodeCombineV2`, `NodeCombineV3` | Vector2, Vector3 |
|
||||||
|
| 数学 | `NodeMath`(仅 float) | float |
|
||||||
|
|
||||||
|
这些节点的**逻辑完全一致**,仅类型不同。引入 `InputAny` / `OutputAny` 后,一个节点覆盖所有类型。
|
||||||
|
|
||||||
|
#### 3.4.2 类型列表
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
// 系统支持的全部可连线类型
|
||||||
|
static readonly HashSet<Type> SupportedTypes = new()
|
||||||
|
{
|
||||||
|
typeof(float), typeof(int), typeof(bool), typeof(string),
|
||||||
|
typeof(Vector2), typeof(Vector3), typeof(Color),
|
||||||
|
typeof(GameElement), typeof(List<GameElement>),
|
||||||
|
typeof(Signal),
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 3.4.3 InputAny / OutputAny 设计
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
/// <summary>未锁定的输入端口,连线后类型自动锁定</summary>
|
||||||
|
public class InputAny : IInput
|
||||||
|
{
|
||||||
|
object _sourceOutput; // 连到的 Output(可能是 Output<T> 或 OutputAny)
|
||||||
|
|
||||||
|
public string Name { get; set; }
|
||||||
|
public Type DataType { get; private set; } // null 表示未锁定,连线后锁定
|
||||||
|
public bool IsConnected => _sourceOutput != null;
|
||||||
|
public bool HasReceived { get; set; }
|
||||||
|
public Color ConnectorColor => DataType != null ? NodeColors.Get(DataType) : Color.grey;
|
||||||
|
|
||||||
|
/// <summary>直接取已连接的上游值(泛型方式)</summary>
|
||||||
|
public T GetValue<T>() { ... }
|
||||||
|
|
||||||
|
/// <summary>取值为 object</summary>
|
||||||
|
public object GetValue() { ... }
|
||||||
|
|
||||||
|
/// <summary>连线时由 Manager 调用,锁定端口类型</summary>
|
||||||
|
internal void LockType(Type t) { DataType = t; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>未锁定的输出端口,类型由同节点的 InputAny 传播决定</summary>
|
||||||
|
public class OutputAny : IOutput
|
||||||
|
{
|
||||||
|
object _value;
|
||||||
|
|
||||||
|
public string Name { get; set; }
|
||||||
|
public Type DataType { get; private set; } // null 表示未锁定
|
||||||
|
public bool IsConnected => _targets.Count > 0;
|
||||||
|
public Color ConnectorColor => DataType != null ? NodeColors.Get(DataType) : Color.grey;
|
||||||
|
|
||||||
|
public T GetValue<T>() { ... }
|
||||||
|
public void SetValue<T>(T v) { _value = v; }
|
||||||
|
|
||||||
|
/// <summary>由节点的某个 InputAny 锁定后传播过来</summary>
|
||||||
|
internal void LockType(Type t) { DataType = t; }
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 3.4.4 类型传播规则
|
||||||
|
|
||||||
|
一个节点上存在多个 `InputAny` / `OutputAny` 时,类型按以下优先级传播:
|
||||||
|
|
||||||
|
```
|
||||||
|
规则 1(外部优先): 任一 InputAny 被连线 → 锁定该端口类型 → 传播到同节点所有未锁定的 InputAny / OutputAny
|
||||||
|
规则 2(冲突检测): 两个已连线的 InputAny 类型不一致 → Manager 阻止连线,报 "Type mismatch"
|
||||||
|
规则 3(OutputAny): 总是跟随同节点的首个已锁定 InputAny 的类型
|
||||||
|
规则 4(无输入节点): 常量类节点无 InputAny,OutputAny 类型由节点内置字段/UI 选择决定
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 3.4.5 ConnectorSlot UI 适配
|
||||||
|
|
||||||
|
- 未锁定的 `InputAny` / `OutputAny` 连接点显示**灰色**
|
||||||
|
- 连线锁定后,动态更新连接点的颜色以匹配锁定类型
|
||||||
|
- `ConnectorSlot` 需要监听 `DataType` 变化并刷新颜色
|
||||||
|
- Manager 在 `TryConnect` 成功后调用 `Slot.RefreshAppearance()`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 3.5 多类型统一节点设计
|
||||||
|
|
||||||
|
以下节点取代现有的同功能多类型节点。
|
||||||
|
|
||||||
|
#### 3.5.1 NodeConst — 通用常量(取代 NodeConstFloat/V2/V3/Color)
|
||||||
|
|
||||||
|
```
|
||||||
|
NodeConst:
|
||||||
|
[UI] Dropdown: Type (float / int / bool / Vector2 / Vector3 / Color)
|
||||||
|
[UI] 根据所选类型动态显示对应输入控件
|
||||||
|
OutputAny value ← 类型由 UI 选择锁定
|
||||||
|
```
|
||||||
|
|
||||||
|
逻辑:无输入,Loop 中直接 Complete。输出值被下游拉取。
|
||||||
|
|
||||||
|
#### 3.5.2 NodeMath — 通用数学运算(扩展覆盖类型)
|
||||||
|
|
||||||
|
```
|
||||||
|
NodeMath:
|
||||||
|
[UI] Dropdown: Op (Add / Sub / Mul / Div)
|
||||||
|
InputAny a ← 连线后锁定类型
|
||||||
|
InputAny b ← 跟随 a 的类型(或相反,谁先连跟谁)
|
||||||
|
OutputAny result ← 类型来源同 InputAny 的锁定类型
|
||||||
|
```
|
||||||
|
|
||||||
|
支持的运算映射(LUT 注册):
|
||||||
|
|
||||||
|
| 类型 | Add | Sub | Mul | Div |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| float, int | `+` | `-` | `*` | `/` |
|
||||||
|
| Vector2, Vector3 | `+` | `-` | `* float` | `/ float` |
|
||||||
|
| string | 拼接 | — | — | — |
|
||||||
|
| Color | `+` (叠加) | `-` | `* float` | — |
|
||||||
|
|
||||||
|
> 实现:用 `Dictionary<(Type, Op), Func<object, object, object>>` 查表分派。
|
||||||
|
|
||||||
|
#### 3.5.3 NodeSplit — 通用拆分(取代 NodeSplitV2/V3)
|
||||||
|
|
||||||
|
```
|
||||||
|
NodeSplit:
|
||||||
|
InputAny input ← Vector2 → 输出 X(float), Y(float)
|
||||||
|
← Vector3 → 输出 X(float), Y(float), Z(float)
|
||||||
|
OutputAny x, y, z ← z 仅在 Vector3 时激活
|
||||||
|
```
|
||||||
|
|
||||||
|
- 默认所有 OutputAny 端口可见但灰掉,`input` 锁定类型后按需激活
|
||||||
|
- 对于 Color:输出 R, G, B, A (float)
|
||||||
|
|
||||||
|
#### 3.5.4 NodeCombine — 通用合并(取代 NodeCombineV2/V3)
|
||||||
|
|
||||||
|
```
|
||||||
|
NodeCombine:
|
||||||
|
[UI] Dropdown: Type (Vector2 / Vector3 / Color)
|
||||||
|
InputAny x, y, z, w ← 数量按类型动态显示
|
||||||
|
OutputAny output ← 类型跟随 UI 选择
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 3.5.5 NodeLerp — 线性插值(新节点)
|
||||||
|
|
||||||
|
```
|
||||||
|
NodeLerp:
|
||||||
|
InputAny a, b ← 连线锁定类型
|
||||||
|
InputAny t ← 预期 float(不受 a/b 锁定影响,标记为 fixed-type)
|
||||||
|
OutputAny result ← 跟随 a/b 类型
|
||||||
|
```
|
||||||
|
|
||||||
|
支持 float, int, Vector2, Vector3, Color。
|
||||||
|
|
||||||
|
#### 3.5.6 NodeCompare — 比较运算(新节点)
|
||||||
|
|
||||||
|
```
|
||||||
|
NodeCompare:
|
||||||
|
[UI] Dropdown: Op (==, !=, >, <, >=, <=)
|
||||||
|
InputAny a, b ← 连线锁定类型(支持 float, int)
|
||||||
|
OutputAny result ← 固定 bool
|
||||||
|
```
|
||||||
|
|
||||||
|
> 注意:> \ < 仅在数值类型有效,== / != 可扩展至 string。
|
||||||
|
|
||||||
|
#### 3.5.7 NodeSelect — 二选一(新节点)
|
||||||
|
|
||||||
|
```
|
||||||
|
NodeSelect:
|
||||||
|
InputAny condition ← 如果未连线,用 [UI] Toggle(bool);如果连线则类型锁定 bool
|
||||||
|
InputAny trueValue, falseValue ← 类型互相跟随
|
||||||
|
OutputAny result ← 跟随 trueValue/falseValue 类型
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 3.5.8 NodeSet — 万能赋值(新节点,引用语义)
|
||||||
|
|
||||||
|
```
|
||||||
|
NodeSet:
|
||||||
|
InputAny targetRef ← 连接到变量节点的 get 输出(锁定为目标类型)
|
||||||
|
InputAny value ← 跟随 targetRef 类型
|
||||||
|
// 无 OutputAny,纯副作用节点
|
||||||
|
```
|
||||||
|
|
||||||
|
> 关键:targetRef 不仅是取值,还要修改其引用的 Variable 内部值。需要 InputAny 能够"反向写入"。
|
||||||
|
|
||||||
|
#### 3.5.9 节点对比总结
|
||||||
|
|
||||||
|
| 统一节点 | 取代旧节点 | 覆盖类型数 |
|
||||||
|
|---|---|---|
|
||||||
|
| `NodeConst` | `NodeConstFloat`, `NodeConstVector2`, `NodeConstVector3`, `NodeConstColor` | 6+ |
|
||||||
|
| `NodeMath` | `NodeMath`(扩展) | 5 (float, int, Vector2, Vector3, Color) |
|
||||||
|
| `NodeSplit` | `NodeSplitV2`, `NodeSplitV3` | 3 (Vector2, Vector3, Color) |
|
||||||
|
| `NodeCombine` | `NodeCombineV2`, `NodeCombineV3` | 3 (Vector2, Vector3, Color) |
|
||||||
|
| `NodeLerp` | (新) | 5 |
|
||||||
|
| `NodeCompare` | (新) | 3 |
|
||||||
|
| `NodeSelect` | (新) | 任意 |
|
||||||
|
| `NodeSet` | (新) | 任意 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 3.6 InputAny 类型锁定流程(Manager 侧)
|
||||||
|
|
||||||
|
```
|
||||||
|
TryConnect(OutputAny/Output<T> src, InputAny dst):
|
||||||
|
1. 获取 src 的实际 DataType → T
|
||||||
|
2. 如果 dst.DataType == null → dst.LockType(T) → 传播到同节点其他端口
|
||||||
|
3. 如果 dst.DataType == T → OK
|
||||||
|
4. 如果 dst.DataType != T → 拒绝,类型不匹配
|
||||||
|
5. 调用 dst.ownerNode.OnTypePropagated() 通知节点刷新 UI
|
||||||
|
```
|
||||||
|
|
||||||
|
传播方法(在 `NodeBase` 上):
|
||||||
|
```csharp
|
||||||
|
/// <summary>当某个 InputAny 或 OutputAny 锁定了类型后,通知节点刷新其他端口</summary>
|
||||||
|
public virtual void OnTypePropagated(ConnectorSlot lockedSlot, Type lockedType)
|
||||||
|
{
|
||||||
|
// 默认:遍历所有未锁定端口,LockType(lockedType)
|
||||||
|
foreach (var slot in GetAnySlots())
|
||||||
|
if (slot.DataType == null)
|
||||||
|
slot.LockType(lockedType);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 3.6.1 fixed-type 端口标记
|
||||||
|
|
||||||
|
某些 InputAny 不接受类型传播(如 `NodeLerp.t` 必须是 float)。新增标记:
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
public class InputAny : IInput
|
||||||
|
{
|
||||||
|
public bool IsFixedType { get; init; } // true = 不被传播覆盖,始终保持初始类型
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
`NodeLerp.t` → `new InputAny { IsFixedType = true, Name = "t" }`(已指定 float 意图时 LockType(float))
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 3.7 特殊节点:变量节点
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
class NodeVariable<T> : NodeBase
|
||||||
|
{
|
||||||
|
Input<Signal> signal; // 通常不连,仅在循环内使用
|
||||||
|
Input<T> set;
|
||||||
|
Output<T> get;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
- `Loop()` 立即返回当前值,不存在 Hang 状态
|
||||||
|
- 有 Signal 输入时(循环体内),等待 Signal 触发才更新
|
||||||
|
- 变量节点不参与 InputAny 类型传播——类型由泛型参数 T 固定
|
||||||
|
|
||||||
|
### 3.8 循环节点 & 子函数节点(新 UI:Rect 容器)
|
||||||
|
|
||||||
|
**UI 变更(NodeUIBuilder 扩展):**
|
||||||
|
- 新增一个可手动拖拽缩放大小的 Rect 区域
|
||||||
|
- 将其他节点拖入此 Rect 即表示"在节点内部"
|
||||||
|
- 循环节点的 Index 和 Signal 输出点移到第一列(输入列),可拉线到 Rect 内部
|
||||||
|
|
||||||
|
**节点结构:**
|
||||||
|
```
|
||||||
|
NodeForLoop:
|
||||||
|
外部输入: exec(Signal), count(InputAny) ← count 支持 int/float
|
||||||
|
外部输出: completed(Signal)
|
||||||
|
内部 Rect 中:
|
||||||
|
子节点...(由主 Manager 调度,子控制器监控)
|
||||||
|
Index 输出(int) — 在第一列,拉入 Rect 内
|
||||||
|
LoopBody 输出(Signal) — 在第一列,拉入 Rect 内
|
||||||
|
```
|
||||||
|
|
||||||
|
**子控制器职责:**
|
||||||
|
- 检查循环体内所有节点是否 Complete
|
||||||
|
- 重置内部节点,开启下一步循环
|
||||||
|
- 向主 Manager 报告循环是否全部完成
|
||||||
|
|
||||||
|
**子函数定义节点:**
|
||||||
|
```
|
||||||
|
NodeSubFunctionDef:
|
||||||
|
输入: name(string)
|
||||||
|
Rect 外→Rect 内的变量节点 → 代表函数输入参数(变量类型即参数类型)
|
||||||
|
Rect 内的 set 节点 → Rect 外 → 代表函数输出
|
||||||
|
```
|
||||||
|
|
||||||
|
**子函数执行节点(配合 InputAny):**
|
||||||
|
```
|
||||||
|
NodeSubFunctionCall:
|
||||||
|
— 根据已注册的子函数定义,动态生成 InputAny/OutputAny 端口
|
||||||
|
— 端口类型由子函数定义中变量节点的泛型参数决定
|
||||||
|
— Manager 扫描所有文件注册子函数定义
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.9 现有节点迁移计划
|
||||||
|
|
||||||
|
| 旧节点 | 处理方式 | 说明 |
|
||||||
|
|---|---|---|
|
||||||
|
| `NodeStart` | 迁移:`Evaluate()` → `Loop()` | 启动后 Complete |
|
||||||
|
| `NodeEntry` | 同上 | — |
|
||||||
|
| `NodeMath` | **扩展为多类型版本**(3.5.2) | 旧版删除 |
|
||||||
|
| `NodeConstFloat/V2/V3/Color` | **合并为 `NodeConst`**(3.5.1) | 四个节点合一,旧版全部删除 |
|
||||||
|
| `NodeSplitV2/V3` | **合并为 `NodeSplit`**(3.5.3) | 两个节点合一 |
|
||||||
|
| `NodeCombineV2/V3` | **合并为 `NodeCombine`**(3.5.4) | 两个节点合一 |
|
||||||
|
| `NodeForLoop` | 大改:Rect 容器 + 子控制器 | count 改用 InputAny |
|
||||||
|
| `NodeForEach<T>` | 类似 ForLoop 改造 | — |
|
||||||
|
| `NodeBranch` | 迁移到 Loop(),condition 改用 InputAny | 支持 float/int 条件 |
|
||||||
|
| `NodeGameElement` / `NodeSetTransform` / `NodeClone` 等 | 生命周期适配,Signal 等待逻辑不变 | — |
|
||||||
|
| `NodeVariable<T>` | 特殊处理:立即 Complete,不经过 Hang | 保持泛型不变 |
|
||||||
|
| `NodeDebugLog` / `NodeLog` | 迁移,InputAny 支持任意显示类型 | — |
|
||||||
|
| `NodeList<T>` / `NodeListAdd<T>` / `NodeListGet<T>` | 保持泛型,Loop() 适配 | — |
|
||||||
|
| `NodePositionStepper` | 迁移,参数改用 InputAny | — |
|
||||||
|
| **新增** `NodeLerp` | 全新 | — |
|
||||||
|
| **新增** `NodeCompare` | 全新 | — |
|
||||||
|
| **新增** `NodeSelect` | 全新 | — |
|
||||||
|
| **新增** `NodeSet` | 全新(需要反向写入能力) | — |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 四、实施步骤建议
|
||||||
|
|
||||||
|
1. **Phase 1: 核心类型层** — 修改 `NodeCore.cs`
|
||||||
|
- 新增 `NodeStatus` 枚举
|
||||||
|
- `NodeBase` 新增 `Loop()`、`L`、`Status`
|
||||||
|
- `Input<T>` / `Output<T>` 改为拉取模式
|
||||||
|
- 实现 `InputAny`、`OutputAny`、`OnTypePropagated`、`IsFixedType`
|
||||||
|
|
||||||
|
2. **Phase 2: Manager 调度层** — 修改 `NodeManager.cs`
|
||||||
|
- 实现触发表/运行时表
|
||||||
|
- 实现 `RunCycle()` 循环调度
|
||||||
|
- 实现 L 值计算 + 连线验证
|
||||||
|
- 实现 `TryConnect` 中的 InputAny 类型锁定传播流程
|
||||||
|
|
||||||
|
3. **Phase 3: 统一节点实现** — 删除旧重复节点,实现新版
|
||||||
|
- 先实现 `NodeConst`、`NodeMath`(验证 InputAny 机制可用)
|
||||||
|
- 再实现 `NodeSplit`、`NodeCombine`、`NodeLerp`
|
||||||
|
- `NodeCompare`、`NodeSelect`、`NodeSet`(反向写入)
|
||||||
|
- 迁移保留的节点(`NodeStart`、`NodeBranch`、`NodeVariable<T>` 等)
|
||||||
|
|
||||||
|
4. **Phase 4: 循环/子函数** — Rect 容器 + 子控制器
|
||||||
|
- `NodeUIBuilder` 增加 Rect 容器支持
|
||||||
|
- 循环节点子控制器实现
|
||||||
|
- 子函数定义/执行节点 + Manager 注册扫描
|
||||||
|
|
||||||
|
5. **Phase 5: 测试 & 清理**
|
||||||
|
- 验证保存/加载兼容(含新旧类型映射)
|
||||||
|
- 删除旧版备份文件 `NodeBase.cs.bak`
|
||||||
|
- 删除旧节点类(`NodeConstFloat` 等)
|
||||||
|
- 验证所有节点类型覆盖无遗漏
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 五、风险点 & 注意事项
|
||||||
|
|
||||||
|
- **UI 不变原则**:`NodeObject`、`ConnectorSlot`、`NodeUIBuilder` 的接口保持稳定,节点层改动不应破坏 UI 渲染(ConnectorSlot 仅新增 `RefreshAppearance()`)
|
||||||
|
- **InputAny 类型冲突**:同一节点两个已连线的 InputAny 类型不一致时,Manager 拒绝并报错
|
||||||
|
- **反向写入**:`NodeSet` 的 targetRef 需要能修改上游 Variable 内部值,这是 InputAny 设计的关键难点
|
||||||
|
- **向后兼容**:旧 JSON 中的 `NodeConstFloat` 等类型名加载时需映射到新的 `NodeConst`
|
||||||
|
- **循环嵌套**:子控制器设计需考虑循环内嵌套循环的递归情况
|
||||||
|
- **Performance**:大图时每帧遍历运行时表的开销,类型检查用 `Type` 引用比较(非字符串)
|
||||||
|
- **Signal 类型**:保留但不参与 InputAny 的类型传播
|
||||||
7
Assets/Scripts/Editor Tools/NodeScript/Node重构大纲.md.meta
Normal file
7
Assets/Scripts/Editor Tools/NodeScript/Node重构大纲.md.meta
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 1091d96afa6e6e940a40f1345a5225f8
|
||||||
|
TextScriptImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
329
Assets/Scripts/Editor Tools/NodeScript/总览.md
Normal file
329
Assets/Scripts/Editor Tools/NodeScript/总览.md
Normal file
@@ -0,0 +1,329 @@
|
|||||||
|
# NodeScript 系统总览
|
||||||
|
|
||||||
|
## 文件结构
|
||||||
|
|
||||||
|
```
|
||||||
|
Editor Tools/NodeScript/
|
||||||
|
├── NodeCore.cs # 核心类型:生命周期、连接器、动态类型
|
||||||
|
├── NodeManager.cs # 调度中心 + UI 交互
|
||||||
|
├── NodeObject.cs # MonoBehaviour:节点 UI、插槽、选中、状态显示
|
||||||
|
├── ConnectorSlot.cs # 连接点交互 + 外观刷新
|
||||||
|
├── NodeUIBuilder.cs # UI 构建:Dropdown / FloatField / Toggle / TypeDropdown
|
||||||
|
├── NodeCompoments/
|
||||||
|
│ ├── NodeCompoment.cs # 操作 / 控制流节点
|
||||||
|
│ └── NodeUtility.cs # 工具 / 常量 / 变量节点
|
||||||
|
├── Node重构.txt # 重构需求文档
|
||||||
|
├── Node重构大纲.md # 详细重构设计
|
||||||
|
└── 总览.md # 本文件
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 一、执行模型:拉取式 + 生命周期
|
||||||
|
|
||||||
|
### 1.1 周期调度
|
||||||
|
|
||||||
|
```
|
||||||
|
RunGraph():
|
||||||
|
1. ComputeLValues() — BFS 算所有节点到 Start 的最短距离 L
|
||||||
|
2. triggerTable = {全部节点}
|
||||||
|
3. while triggerTable ∪ runtimeTable 非空:
|
||||||
|
RunCycle()
|
||||||
|
|
||||||
|
RunCycle():
|
||||||
|
1. triggerTable 并入 runtimeTable,清空 triggerTable
|
||||||
|
2. foreach node in runtimeTable:
|
||||||
|
result = node.Loop()
|
||||||
|
收集 triggers → triggerTable
|
||||||
|
if TriggerDownstream → 自动发现下游节点 → triggerTable
|
||||||
|
if RemoveFromRuntime → 标记移除
|
||||||
|
3. runtimeTable -= 已完成的节点
|
||||||
|
```
|
||||||
|
|
||||||
|
### 1.2 节点状态
|
||||||
|
|
||||||
|
| 状态 | 含义 |
|
||||||
|
|---|---|
|
||||||
|
| `Ready` | 等待本周期执行 |
|
||||||
|
| `Hang` | 前置节点未完成,挂起到下一周期 |
|
||||||
|
| `Complete` | 已完成,移出 runtimeTable |
|
||||||
|
|
||||||
|
### 1.3 LoopResult 返回类型
|
||||||
|
|
||||||
|
| 工厂方法 | RemoveFromRuntime | TriggerDownstream | 用途 |
|
||||||
|
|---|---|---|---|
|
||||||
|
| `Complete()` | true | true | 节点完成,触发下游 |
|
||||||
|
| `Hang(preceding)` | false | false | 等待前置节点 |
|
||||||
|
| `Repeat()` | false | true | 保持活跃+触发下游(循环迭代) |
|
||||||
|
| `Wait()` | false | false | 空转一周期(循环等下游消费) |
|
||||||
|
|
||||||
|
### 1.4 L 值
|
||||||
|
|
||||||
|
- BFS 从 `NodeStart`/`NodeEntry` 开始计算,L 值显示在节点标题栏 `(L:N)`
|
||||||
|
- 仅显示,不约束连线
|
||||||
|
- L=-1 表示孤立节点(无路径可达)
|
||||||
|
|
||||||
|
### 1.5 防自循环
|
||||||
|
|
||||||
|
连线 A→B 时,从 B 出发沿现有边 DFS,看能否回到 A。能回到则拒绝连线。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 二、类型系统
|
||||||
|
|
||||||
|
### 2.1 连接器体系
|
||||||
|
|
||||||
|
```
|
||||||
|
IInput IOutput
|
||||||
|
├── Input<T> (泛型) ├── Output<T> (泛型)
|
||||||
|
└── InputAny (动态) └── OutputAny (动态)
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2.2 InputAny / OutputAny
|
||||||
|
|
||||||
|
| 特性 | 说明 |
|
||||||
|
|---|---|
|
||||||
|
| 初始状态 | `DataType = null`,连接点显示**灰色** |
|
||||||
|
| 连线锁定 | 连线后自动 `LockType(T)`,连接点变为类型对应颜色 |
|
||||||
|
| 类型传播 | 锁定后 `OnTypePropagated(T)` → 同节点其他未锁定端口跟随 |
|
||||||
|
| `IsFixedType` | true 时阻止传播覆盖,如 `NodeLerp.t` 固定为 float |
|
||||||
|
| 可改类型 | `LockType` 允许覆盖(防止 `NodeConst` 切换类型后 DataType 不更新) |
|
||||||
|
|
||||||
|
### 2.3 Input<T> 拉取模型
|
||||||
|
|
||||||
|
- `Value` 优先读 `Output<T>._value`,回退读 `OutputAny`
|
||||||
|
- `ConnectAny(IOutput)` 支持 `OutputAny → Input<T>` 桥接(如 `NodeConst → NodeMath.a`)
|
||||||
|
- `GetSourceNode()` 兼容两种源
|
||||||
|
|
||||||
|
### 2.4 Output<T> 反向写入
|
||||||
|
|
||||||
|
- `_writeBack` 回调:`NodeSet` 通过 targetRef 修改 `NodeVariable` 的内部值
|
||||||
|
|
||||||
|
### 2.5 类型兼容表
|
||||||
|
|
||||||
|
| from | to | 兼容 |
|
||||||
|
|---|---|---|
|
||||||
|
| null | * | ✓(未锁定端口) |
|
||||||
|
| T | T | ✓ |
|
||||||
|
| int | float | ✓ |
|
||||||
|
| float | int | ✓ |
|
||||||
|
| 其他 | 其他 | ✗ |
|
||||||
|
|
||||||
|
### 2.6 类型颜色
|
||||||
|
|
||||||
|
| 类型 | 颜色 |
|
||||||
|
|---|---|
|
||||||
|
| float | 蓝 |
|
||||||
|
| int | 青 |
|
||||||
|
| bool | 橙 |
|
||||||
|
| string | 紫 |
|
||||||
|
| Vector2 | 黄 |
|
||||||
|
| Vector3 | 绿 |
|
||||||
|
| Color | 粉 |
|
||||||
|
| GameElement | 深紫 |
|
||||||
|
| Signal | 白 |
|
||||||
|
| List\<GameElement\> | 暗紫 |
|
||||||
|
| null(未锁定) | 灰 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 三、节点目录
|
||||||
|
|
||||||
|
### 3.1 入口节点
|
||||||
|
|
||||||
|
| 节点 | 输入 | 输出 | 说明 |
|
||||||
|
|---|---|---|---|
|
||||||
|
| `NodeStart` | — | `exec(Signal)`, `element(GameElement)` | 图入口,绑定当前选中元素 |
|
||||||
|
| `NodeEntry` | — | `exec(Signal)` | 纯信号入口 |
|
||||||
|
|
||||||
|
### 3.2 运算节点
|
||||||
|
|
||||||
|
| 节点 | 输入 | 输出 | 说明 |
|
||||||
|
|---|---|---|---|
|
||||||
|
| `NodeMath` | `a(Any)`, `b(Any, fixed)` | `result(Any)` | +-*/ 四则,支持 float/int/V2/V3/Color/string |
|
||||||
|
| `NodeLerp` | `a(Any)`, `b(Any)`, `t(float,fixed)` | `result(Any)` | 线性插值,t 未连默认 0.5 |
|
||||||
|
| `NodeCompare` | `a(Any)`, `b(Any)` | `result(bool)` | == != > < >= <= |
|
||||||
|
|
||||||
|
### 3.3 向量节点
|
||||||
|
|
||||||
|
| 节点 | 输入 | 输出 | 说明 |
|
||||||
|
|---|---|---|---|
|
||||||
|
| `NodeSplit` | `input(Any)` | `x/y/z/w(float)` | V2 输出 xy,V3 输出 xyz,Color 输出 rgba |
|
||||||
|
| `NodeCombine` | `x/y/z/w(float)` | `output(Any)` | UI 选类型后合并为 V2/V3/Color |
|
||||||
|
| `NodeGetTransform` | `element(GE)` | `pos/rot/scl(V3)` | 读取元素变换 |
|
||||||
|
| `NodeSetTransform` | `exec(Sig)`, `element(GE)`, `Pos/Rot/Scl(V3)` | — | 设置元素变换 |
|
||||||
|
|
||||||
|
### 3.4 数据节点
|
||||||
|
|
||||||
|
| 节点 | 输入 | 输出 | 说明 |
|
||||||
|
|---|---|---|---|
|
||||||
|
| `NodeConst` | — | `value(Any)` | UI 选类型+填值,6 种类型统一 |
|
||||||
|
| `NodeVariable<T>` | `signal(Sig)`, `set(T)` | `get(T)` | 变量存储;`signal` 连着时等触发才更新 |
|
||||||
|
| `NodeSet` | `targetRef(Any)`, `value(Any)` | — | 反向写入 targetRef 指向的变量 |
|
||||||
|
| `NodeSelect` | `cond(Any)`, `true(Any)`, `false(Any)` | `result(Any)` | 二选一,cond 未连用 UI Toggle |
|
||||||
|
|
||||||
|
### 3.5 控制流节点
|
||||||
|
|
||||||
|
| 节点 | 输入 | 输出 | 说明 |
|
||||||
|
|---|---|---|---|
|
||||||
|
| `NodeBranch` | `exec(Sig)`, `cond(Any)` | `true/false(Sig)` | cond>0 走 true,否则 false |
|
||||||
|
| `NodeForLoop` | `exec(Sig)`, `count(Any)` | `loopBody(Sig)`, `index(int)`, `completed(Sig)` | 多周期交替:输出→Wait→输出→Wait... |
|
||||||
|
|
||||||
|
### 3.6 集合节点
|
||||||
|
|
||||||
|
| 节点 | 输入 | 输出 | 说明 |
|
||||||
|
|---|---|---|---|
|
||||||
|
| `NodeList<T>` | — | `output(List<T>)` | 空列表 |
|
||||||
|
| `NodeListAdd<T>` | `list(List<T>)`, `item(T)` | `output(List<T>)` | 追加元素 |
|
||||||
|
| `NodeListGet<T>` | `list(List<T>)`, idx(UI) | `element(T)` | 索引取值 |
|
||||||
|
| `NodeForEach` | `exec(Sig)`, `list(Any)` | `loopBody(Sig)`, `current(Any)`, `index(int)`, `completed(Sig)` | **非泛型**,连 `List<X>` 自动锁定 current 为 X |
|
||||||
|
|
||||||
|
### 3.7 GameElement 操作
|
||||||
|
|
||||||
|
| 节点 | 输入 | 输出 | 说明 |
|
||||||
|
|---|---|---|---|
|
||||||
|
| `NodeGameElement` | `exec(Sig)`, `Root(GE)`, `Source(GE)` | `newElement(GE)`, `completed(Sig)` | 复制粘贴元素 |
|
||||||
|
| `NodeChildByIndex` | `parent(GE)`, idx(UI) | `child(GE)` | 子元素按索引 |
|
||||||
|
| `NodeChildCount` | `parent(GE)` | `count(int)` | 子元素个数 |
|
||||||
|
| `NodeClone` | `exec(Sig)`, `source(GE)` | `clone(GE)` | Instantiate 克隆 |
|
||||||
|
|
||||||
|
### 3.8 调试节点
|
||||||
|
|
||||||
|
| 节点 | 输入 | 输出 | 说明 |
|
||||||
|
|---|---|---|---|
|
||||||
|
| `NodeDebugLog` | `exec(Sig)`, `value(Any)` | — | 带 Signal 等待的日志 |
|
||||||
|
| `NodeLog` | `value(Any)` | — | 直接打印日志 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 四、所有节点统一规范
|
||||||
|
|
||||||
|
每个节点的 `Loop()` 遵循:
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
public override LoopResult Loop()
|
||||||
|
{
|
||||||
|
// 1. 无输入直接 Complete
|
||||||
|
// 2. EnsureInputsReady() — 所有已连输入的上游必须 Complete
|
||||||
|
// 3. 取值 → 计算 → 设输出
|
||||||
|
// 4. 返回 Complete / Repeat / Wait
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
`EnsureInputsReady()` 在 `NodeBase` 上定义,自动检查 `GetPrecedingNodes()` 中所有上游的 Status。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 五、UI 特性
|
||||||
|
|
||||||
|
### 5.1 节点外观
|
||||||
|
|
||||||
|
- 半透明背景 + 标题栏 `Name (L:N)`
|
||||||
|
- `statusImage`:Ready 灰 / Hang 橙黄 / Complete 绿
|
||||||
|
- 选中节点蓝色高亮
|
||||||
|
|
||||||
|
### 5.2 连接线
|
||||||
|
|
||||||
|
- `UILineRenderer` 贝塞尔曲线
|
||||||
|
- 手动距离检测悬停(不依赖 Unity 射线)
|
||||||
|
- 悬停加粗 +3px,选中加粗 ×2
|
||||||
|
- RectTransform 自动缩放到包围盒
|
||||||
|
- 拖线时 dragLine 不参与射线
|
||||||
|
|
||||||
|
### 5.3 交互
|
||||||
|
|
||||||
|
| 操作 | 功能 |
|
||||||
|
|---|---|
|
||||||
|
| 左键空白 | 取消所有选中 |
|
||||||
|
| 左键节点 | 选中节点(Shift 多选) |
|
||||||
|
| 左键拖节点 | 移动节点 |
|
||||||
|
| 左键拖输出点→输入点 | 连线 |
|
||||||
|
| 左键线 | 选中线(Shift 多选) |
|
||||||
|
| 中键拖面板 | 平移整个画布 |
|
||||||
|
| Ctrl+右键 | 右键菜单创建节点 |
|
||||||
|
| Delete | 删除选中 |
|
||||||
|
|
||||||
|
### 5.4 快捷键
|
||||||
|
|
||||||
|
| 快捷键 | 功能 |
|
||||||
|
|---|---|
|
||||||
|
| `F3` | 新建/销毁 NodeScript 编辑器 |
|
||||||
|
| `Enter` | 完整运行图 |
|
||||||
|
| `Shift+Enter` | 单步调试(首次初始化) |
|
||||||
|
| `Esc` | 退出调试模式 |
|
||||||
|
| `Ctrl+Enter` | 运行图(保留) |
|
||||||
|
| `F5` | 拓扑预览(打印分层执行计划) |
|
||||||
|
| `F1` | 保存 |
|
||||||
|
| `F2` | 加载 |
|
||||||
|
| `Ctrl+C/V` | 复制/粘贴节点 |
|
||||||
|
| `Delete` | 删除选中 |
|
||||||
|
|
||||||
|
### 5.5 控制台命令
|
||||||
|
|
||||||
|
| 命令 | 说明 |
|
||||||
|
|---|---|
|
||||||
|
| `newNode` | 新建/销毁 NodeScript 编辑器 |
|
||||||
|
| `saveNode` | 保存到默认 `graph.json` |
|
||||||
|
| `saveNode name` | 另存为 `{name}.json` |
|
||||||
|
| `loadNode name` | 从 `{name}.json` 加载 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 六、调试功能
|
||||||
|
|
||||||
|
### 6.1 单步调试 (Shift+Enter)
|
||||||
|
|
||||||
|
每步打印详细日志:
|
||||||
|
|
||||||
|
```
|
||||||
|
=== Step 3 ===
|
||||||
|
✓ NodeStart (L:0) → Complete
|
||||||
|
⏳ NodeMath (L:1) → Hang
|
||||||
|
▶ NodeBranch (L:2) → Ready
|
||||||
|
triggers pending: 2, still running: 3
|
||||||
|
```
|
||||||
|
|
||||||
|
`statusImage` 同步变色。
|
||||||
|
|
||||||
|
### 6.2 拓扑预览 (F5)
|
||||||
|
|
||||||
|
```
|
||||||
|
═══ Topological Order (BFS layers) ═══
|
||||||
|
Layer 0 (2 nodes, 3 downstream wires): Start(L:0), Entry(L:0)
|
||||||
|
Layer 1 (1 nodes, 2 downstream wires): NodeMath(L:1)
|
||||||
|
...
|
||||||
|
Unreachable (1 nodes): OrphanConst
|
||||||
|
Total: 6 nodes, 5 wires, 3 layers
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 七、NodeManager 关键 API
|
||||||
|
|
||||||
|
| 方法 | 说明 |
|
||||||
|
|---|---|
|
||||||
|
| `Init(GameElement)` | 绑定元素 + 创建 Start 节点 |
|
||||||
|
| `RunGraph()` | 完整执行(生命周期循环) |
|
||||||
|
| `ComputeLValues()` | 重算所有节点的 L 值 + 刷新标题 |
|
||||||
|
| `SaveToFile(string?)` | 保存图,null 用默认路径 |
|
||||||
|
| `LoadFromFile(string?)` | 加载图 |
|
||||||
|
| `GetSavePath(string)` | 获取完整保存路径 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 八、文件存储
|
||||||
|
|
||||||
|
| 项目 | 路径 |
|
||||||
|
|---|---|
|
||||||
|
| 保存目录 | `Assets/StreamingAssets/NodeScript/` |
|
||||||
|
| 默认文件 | `graph.json` |
|
||||||
|
| 自定义文件 | `{name}.json` |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 九、待完成 (Phase 4+)
|
||||||
|
|
||||||
|
- [ ] Rect 容器(循环 / 子函数体内嵌区域)
|
||||||
|
- [ ] 子控制器(循环体内节点独立调度)
|
||||||
|
- [ ] `NodeSubFunctionDef` / `NodeSubFunctionCall`
|
||||||
|
- [ ] Manager 扫描注册子函数定义
|
||||||
7
Assets/Scripts/Editor Tools/NodeScript/总览.md.meta
Normal file
7
Assets/Scripts/Editor Tools/NodeScript/总览.md.meta
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 77e5a38d58b4a674ca00977979b575d5
|
||||||
|
TextScriptImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -61,6 +61,8 @@ public class SimpleGridController : MonoBehaviour
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
GameObject coordTextObj = null;
|
GameObject coordTextObj = null;
|
||||||
|
|
||||||
|
[System.Obsolete]
|
||||||
IEnumerator Pressing()
|
IEnumerator Pressing()
|
||||||
{
|
{
|
||||||
if (coordTextObj != null)
|
if (coordTextObj != null)
|
||||||
|
|||||||
@@ -81,6 +81,8 @@ namespace Ichni.RhythmGame
|
|||||||
public GameObject graphicalFlexibleFloatWindow;
|
public GameObject graphicalFlexibleFloatWindow;
|
||||||
public GameObject QuickMoveObj;
|
public GameObject QuickMoveObj;
|
||||||
|
|
||||||
|
public GameObject NodeEditor;
|
||||||
|
|
||||||
//采音器
|
//采音器
|
||||||
|
|
||||||
[Title("Background相关")] public Sprite defaultBackground;
|
[Title("Background相关")] public Sprite defaultBackground;
|
||||||
|
|||||||
@@ -109,6 +109,8 @@ Shader "Soullies/BlendUnlit"
|
|||||||
float4 _MainTex_ST;
|
float4 _MainTex_ST;
|
||||||
half4 _BaseColor;
|
half4 _BaseColor;
|
||||||
half4 _EmissionColor;
|
half4 _EmissionColor;
|
||||||
|
float _EnableEmission;
|
||||||
|
float _UseRedAsAlpha;
|
||||||
float _ZWrite;
|
float _ZWrite;
|
||||||
float _SrcBlendRGB;
|
float _SrcBlendRGB;
|
||||||
float _DstBlendRGB;
|
float _DstBlendRGB;
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ namespace SLSUtilities.Rendering.PostProcessing
|
|||||||
|
|
||||||
public override string GetShaderName() => "SLS/Postprocessing/AnimeBloom";
|
public override string GetShaderName() => "SLS/Postprocessing/AnimeBloom";
|
||||||
|
|
||||||
|
[System.Obsolete]
|
||||||
public override void Render(CommandBuffer cmd, ref RenderingData renderingData, RTHandle source, RTHandle destination)
|
public override void Render(CommandBuffer cmd, ref RenderingData renderingData, RTHandle source, RTHandle destination)
|
||||||
{
|
{
|
||||||
if (material == null) return;
|
if (material == null) return;
|
||||||
|
|||||||
@@ -6542,7 +6542,7 @@
|
|||||||
|
|
||||||
],
|
],
|
||||||
"elementGuid" : {
|
"elementGuid" : {
|
||||||
"value" : "e0826066-f704-49f3-8dae-188caba068d6"
|
"value" : "3bb5d7e6-28a5-4c40-a8e8-c069ac01554e"
|
||||||
},
|
},
|
||||||
"attachedElementGuid" : {
|
"attachedElementGuid" : {
|
||||||
"value" : "16dd9f1a-d9fe-45c1-b194-040d687f2c75"
|
"value" : "16dd9f1a-d9fe-45c1-b194-040d687f2c75"
|
||||||
@@ -6565,7 +6565,7 @@
|
|||||||
"z" : 1
|
"z" : 1
|
||||||
},
|
},
|
||||||
"attachedElementGuid" : {
|
"attachedElementGuid" : {
|
||||||
"value" : "e0826066-f704-49f3-8dae-188caba068d6"
|
"value" : "3bb5d7e6-28a5-4c40-a8e8-c069ac01554e"
|
||||||
}
|
}
|
||||||
},{
|
},{
|
||||||
"__type" : "Ichni.RhythmGame.Beatmap.EffectSubmodule_BM,Assembly-CSharp",
|
"__type" : "Ichni.RhythmGame.Beatmap.EffectSubmodule_BM,Assembly-CSharp",
|
||||||
@@ -6604,7 +6604,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"attachedElementGuid" : {
|
"attachedElementGuid" : {
|
||||||
"value" : "e0826066-f704-49f3-8dae-188caba068d6"
|
"value" : "3bb5d7e6-28a5-4c40-a8e8-c069ac01554e"
|
||||||
}
|
}
|
||||||
},{
|
},{
|
||||||
"__type" : "Ichni.RhythmGame.Beatmap.Tap_BM,Assembly-CSharp",
|
"__type" : "Ichni.RhythmGame.Beatmap.Tap_BM,Assembly-CSharp",
|
||||||
@@ -17298,7 +17298,7 @@
|
|||||||
|
|
||||||
],
|
],
|
||||||
"elementGuid" : {
|
"elementGuid" : {
|
||||||
"value" : "ad820b77-f7b1-497f-ae6a-35655b7b4733"
|
"value" : "06a75739-ea8f-4568-9c7d-997c69832326"
|
||||||
},
|
},
|
||||||
"attachedElementGuid" : {
|
"attachedElementGuid" : {
|
||||||
"value" : "16dd9f1a-d9fe-45c1-b194-040d687f2c75"
|
"value" : "16dd9f1a-d9fe-45c1-b194-040d687f2c75"
|
||||||
@@ -17321,7 +17321,7 @@
|
|||||||
"z" : 1
|
"z" : 1
|
||||||
},
|
},
|
||||||
"attachedElementGuid" : {
|
"attachedElementGuid" : {
|
||||||
"value" : "ad820b77-f7b1-497f-ae6a-35655b7b4733"
|
"value" : "06a75739-ea8f-4568-9c7d-997c69832326"
|
||||||
}
|
}
|
||||||
},{
|
},{
|
||||||
"__type" : "Ichni.RhythmGame.Beatmap.EffectSubmodule_BM,Assembly-CSharp",
|
"__type" : "Ichni.RhythmGame.Beatmap.EffectSubmodule_BM,Assembly-CSharp",
|
||||||
@@ -17360,7 +17360,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"attachedElementGuid" : {
|
"attachedElementGuid" : {
|
||||||
"value" : "ad820b77-f7b1-497f-ae6a-35655b7b4733"
|
"value" : "06a75739-ea8f-4568-9c7d-997c69832326"
|
||||||
}
|
}
|
||||||
},{
|
},{
|
||||||
"__type" : "Ichni.RhythmGame.Beatmap.Flick_BM,Assembly-CSharp",
|
"__type" : "Ichni.RhythmGame.Beatmap.Flick_BM,Assembly-CSharp",
|
||||||
@@ -135933,7 +135933,7 @@
|
|||||||
"patternSizeX" : 0.5,
|
"patternSizeX" : 0.5,
|
||||||
"patternSizeY" : 2,
|
"patternSizeY" : 2,
|
||||||
"gridDensity" : 0.2,
|
"gridDensity" : 0.2,
|
||||||
"timeAngle" : 1,
|
"timeAngle" : 0.02,
|
||||||
"stepA" : 0.21,
|
"stepA" : 0.21,
|
||||||
"stepB" : 0.19,
|
"stepB" : 0.19,
|
||||||
"baseSpeed" : 0.2,
|
"baseSpeed" : 0.2,
|
||||||
@@ -136152,6 +136152,235 @@
|
|||||||
"attachedElementGuid" : {
|
"attachedElementGuid" : {
|
||||||
"value" : "a646d4b0-b5c4-423f-a8e8-3ba9757ed0fd"
|
"value" : "a646d4b0-b5c4-423f-a8e8-3ba9757ed0fd"
|
||||||
}
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.ElementFolder_BM,Assembly-CSharp",
|
||||||
|
"elementName" : "Folder",
|
||||||
|
"tags" : [
|
||||||
|
|
||||||
|
],
|
||||||
|
"elementGuid" : {
|
||||||
|
"value" : "80fbc906-a82c-4f44-81de-17a80b0a04d8"
|
||||||
|
},
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "00000000-0000-0000-0000-000000000000"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp",
|
||||||
|
"originalPosition" : {
|
||||||
|
"x" : 0,
|
||||||
|
"y" : 0,
|
||||||
|
"z" : 0
|
||||||
|
},
|
||||||
|
"originalEulerAngles" : {
|
||||||
|
"x" : 0,
|
||||||
|
"y" : 0,
|
||||||
|
"z" : 0
|
||||||
|
},
|
||||||
|
"originalScale" : {
|
||||||
|
"x" : 1,
|
||||||
|
"y" : 1,
|
||||||
|
"z" : 1
|
||||||
|
},
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "80fbc906-a82c-4f44-81de-17a80b0a04d8"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp",
|
||||||
|
"isOverridingDuration" : false,
|
||||||
|
"startTime" : -32767,
|
||||||
|
"endTime" : 32767,
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "80fbc906-a82c-4f44-81de-17a80b0a04d8"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse.Beatmap.DTMConstellation_BM,Assembly-CSharp",
|
||||||
|
"maxParticles" : 10,
|
||||||
|
"maxLineCount" : 12,
|
||||||
|
"spreadSize" : {
|
||||||
|
"x" : 20,
|
||||||
|
"y" : 20,
|
||||||
|
"z" : 20
|
||||||
|
},
|
||||||
|
"maxConnectionsPerStar" : 3,
|
||||||
|
"maxConnectionDistance" : 20,
|
||||||
|
"activeStarSize" : 1,
|
||||||
|
"lineWidth" : 0.1,
|
||||||
|
"orbitalVelocity" : {
|
||||||
|
"x" : 0,
|
||||||
|
"y" : 0,
|
||||||
|
"z" : 0.1
|
||||||
|
},
|
||||||
|
"angularVelocity" : 60,
|
||||||
|
"isStatic" : false,
|
||||||
|
"themeBundleName" : "departure_to_multiverse",
|
||||||
|
"objectName" : "DTM_ConstellationCube",
|
||||||
|
"elementName" : "New Environment Object",
|
||||||
|
"tags" : [
|
||||||
|
|
||||||
|
],
|
||||||
|
"elementGuid" : {
|
||||||
|
"value" : "c6a0218a-423f-4dbe-9cbb-07e7281b482b"
|
||||||
|
},
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "80fbc906-a82c-4f44-81de-17a80b0a04d8"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp",
|
||||||
|
"originalPosition" : {
|
||||||
|
"x" : 0,
|
||||||
|
"y" : 0,
|
||||||
|
"z" : 50
|
||||||
|
},
|
||||||
|
"originalEulerAngles" : {
|
||||||
|
"x" : 0,
|
||||||
|
"y" : 0,
|
||||||
|
"z" : 0
|
||||||
|
},
|
||||||
|
"originalScale" : {
|
||||||
|
"x" : 1,
|
||||||
|
"y" : 1,
|
||||||
|
"z" : 1
|
||||||
|
},
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "c6a0218a-423f-4dbe-9cbb-07e7281b482b"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp",
|
||||||
|
"isOverridingDuration" : false,
|
||||||
|
"startTime" : -32767,
|
||||||
|
"endTime" : 32767,
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "c6a0218a-423f-4dbe-9cbb-07e7281b482b"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp",
|
||||||
|
"originalBaseColor" : {
|
||||||
|
"r" : 1,
|
||||||
|
"g" : 1,
|
||||||
|
"b" : 1,
|
||||||
|
"a" : 1
|
||||||
|
},
|
||||||
|
"emissionEnabled" : true,
|
||||||
|
"originalEmissionColor" : {
|
||||||
|
"r" : 1,
|
||||||
|
"g" : 1,
|
||||||
|
"b" : 1,
|
||||||
|
"a" : 1
|
||||||
|
},
|
||||||
|
"originalEmissionIntensity" : 2,
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "c6a0218a-423f-4dbe-9cbb-07e7281b482b"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.ElementFolder_BM,Assembly-CSharp",
|
||||||
|
"elementName" : "Folder",
|
||||||
|
"tags" : [
|
||||||
|
|
||||||
|
],
|
||||||
|
"elementGuid" : {
|
||||||
|
"value" : "f354bc7c-7ccf-434a-aac4-dc0002e41986"
|
||||||
|
},
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "00000000-0000-0000-0000-000000000000"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp",
|
||||||
|
"originalPosition" : {
|
||||||
|
"x" : 0,
|
||||||
|
"y" : 0,
|
||||||
|
"z" : 0
|
||||||
|
},
|
||||||
|
"originalEulerAngles" : {
|
||||||
|
"x" : 0,
|
||||||
|
"y" : 0,
|
||||||
|
"z" : 0
|
||||||
|
},
|
||||||
|
"originalScale" : {
|
||||||
|
"x" : 1,
|
||||||
|
"y" : 1,
|
||||||
|
"z" : 1
|
||||||
|
},
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "f354bc7c-7ccf-434a-aac4-dc0002e41986"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp",
|
||||||
|
"isOverridingDuration" : false,
|
||||||
|
"startTime" : -32767,
|
||||||
|
"endTime" : 32767,
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "f354bc7c-7ccf-434a-aac4-dc0002e41986"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.BasicEnvironmentObject_BM,Assembly-CSharp",
|
||||||
|
"shadowThreshold" : 0,
|
||||||
|
"shadowSmoothness" : 0.1,
|
||||||
|
"useWorldLight" : false,
|
||||||
|
"fakeLightDir" : {
|
||||||
|
"x" : 0.5,
|
||||||
|
"y" : 1,
|
||||||
|
"z" : 0.5
|
||||||
|
},
|
||||||
|
"isStatic" : false,
|
||||||
|
"themeBundleName" : "basic",
|
||||||
|
"objectName" : "Cube",
|
||||||
|
"elementName" : "New Environment Object",
|
||||||
|
"tags" : [
|
||||||
|
|
||||||
|
],
|
||||||
|
"elementGuid" : {
|
||||||
|
"value" : "d321ddfa-d983-4343-9963-e67a1401a750"
|
||||||
|
},
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "f354bc7c-7ccf-434a-aac4-dc0002e41986"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp",
|
||||||
|
"originalPosition" : {
|
||||||
|
"x" : 0,
|
||||||
|
"y" : 0,
|
||||||
|
"z" : 0
|
||||||
|
},
|
||||||
|
"originalEulerAngles" : {
|
||||||
|
"x" : 0,
|
||||||
|
"y" : 0,
|
||||||
|
"z" : 0
|
||||||
|
},
|
||||||
|
"originalScale" : {
|
||||||
|
"x" : 1,
|
||||||
|
"y" : 1,
|
||||||
|
"z" : 1
|
||||||
|
},
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "d321ddfa-d983-4343-9963-e67a1401a750"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp",
|
||||||
|
"isOverridingDuration" : false,
|
||||||
|
"startTime" : -32767,
|
||||||
|
"endTime" : 32767,
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "d321ddfa-d983-4343-9963-e67a1401a750"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp",
|
||||||
|
"originalBaseColor" : {
|
||||||
|
"r" : 1,
|
||||||
|
"g" : 1,
|
||||||
|
"b" : 1,
|
||||||
|
"a" : 1
|
||||||
|
},
|
||||||
|
"emissionEnabled" : false,
|
||||||
|
"originalEmissionColor" : {
|
||||||
|
"r" : 0,
|
||||||
|
"g" : 0,
|
||||||
|
"b" : 0,
|
||||||
|
"a" : 1
|
||||||
|
},
|
||||||
|
"originalEmissionIntensity" : 0,
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "d321ddfa-d983-4343-9963-e67a1401a750"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"attachedElementGuid" : {
|
"attachedElementGuid" : {
|
||||||
|
|||||||
@@ -6542,7 +6542,7 @@
|
|||||||
|
|
||||||
],
|
],
|
||||||
"elementGuid" : {
|
"elementGuid" : {
|
||||||
"value" : "6e047986-932a-476a-816f-2ee7620d1f48"
|
"value" : "7f4d121f-3c34-4f69-af24-8bc2c3aab03d"
|
||||||
},
|
},
|
||||||
"attachedElementGuid" : {
|
"attachedElementGuid" : {
|
||||||
"value" : "16dd9f1a-d9fe-45c1-b194-040d687f2c75"
|
"value" : "16dd9f1a-d9fe-45c1-b194-040d687f2c75"
|
||||||
@@ -6565,7 +6565,7 @@
|
|||||||
"z" : 1
|
"z" : 1
|
||||||
},
|
},
|
||||||
"attachedElementGuid" : {
|
"attachedElementGuid" : {
|
||||||
"value" : "6e047986-932a-476a-816f-2ee7620d1f48"
|
"value" : "7f4d121f-3c34-4f69-af24-8bc2c3aab03d"
|
||||||
}
|
}
|
||||||
},{
|
},{
|
||||||
"__type" : "Ichni.RhythmGame.Beatmap.EffectSubmodule_BM,Assembly-CSharp",
|
"__type" : "Ichni.RhythmGame.Beatmap.EffectSubmodule_BM,Assembly-CSharp",
|
||||||
@@ -6604,7 +6604,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"attachedElementGuid" : {
|
"attachedElementGuid" : {
|
||||||
"value" : "6e047986-932a-476a-816f-2ee7620d1f48"
|
"value" : "7f4d121f-3c34-4f69-af24-8bc2c3aab03d"
|
||||||
}
|
}
|
||||||
},{
|
},{
|
||||||
"__type" : "Ichni.RhythmGame.Beatmap.Tap_BM,Assembly-CSharp",
|
"__type" : "Ichni.RhythmGame.Beatmap.Tap_BM,Assembly-CSharp",
|
||||||
@@ -17298,7 +17298,7 @@
|
|||||||
|
|
||||||
],
|
],
|
||||||
"elementGuid" : {
|
"elementGuid" : {
|
||||||
"value" : "36efdccf-d930-4370-b839-169c62cab445"
|
"value" : "cf87f38d-4ac2-4282-8afc-79881ff3b5fc"
|
||||||
},
|
},
|
||||||
"attachedElementGuid" : {
|
"attachedElementGuid" : {
|
||||||
"value" : "16dd9f1a-d9fe-45c1-b194-040d687f2c75"
|
"value" : "16dd9f1a-d9fe-45c1-b194-040d687f2c75"
|
||||||
@@ -17321,7 +17321,7 @@
|
|||||||
"z" : 1
|
"z" : 1
|
||||||
},
|
},
|
||||||
"attachedElementGuid" : {
|
"attachedElementGuid" : {
|
||||||
"value" : "36efdccf-d930-4370-b839-169c62cab445"
|
"value" : "cf87f38d-4ac2-4282-8afc-79881ff3b5fc"
|
||||||
}
|
}
|
||||||
},{
|
},{
|
||||||
"__type" : "Ichni.RhythmGame.Beatmap.EffectSubmodule_BM,Assembly-CSharp",
|
"__type" : "Ichni.RhythmGame.Beatmap.EffectSubmodule_BM,Assembly-CSharp",
|
||||||
@@ -17360,7 +17360,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"attachedElementGuid" : {
|
"attachedElementGuid" : {
|
||||||
"value" : "36efdccf-d930-4370-b839-169c62cab445"
|
"value" : "cf87f38d-4ac2-4282-8afc-79881ff3b5fc"
|
||||||
}
|
}
|
||||||
},{
|
},{
|
||||||
"__type" : "Ichni.RhythmGame.Beatmap.Flick_BM,Assembly-CSharp",
|
"__type" : "Ichni.RhythmGame.Beatmap.Flick_BM,Assembly-CSharp",
|
||||||
@@ -135933,7 +135933,7 @@
|
|||||||
"patternSizeX" : 0.5,
|
"patternSizeX" : 0.5,
|
||||||
"patternSizeY" : 2,
|
"patternSizeY" : 2,
|
||||||
"gridDensity" : 0.2,
|
"gridDensity" : 0.2,
|
||||||
"timeAngle" : 0.5746485,
|
"timeAngle" : 0.02,
|
||||||
"stepA" : 0.21,
|
"stepA" : 0.21,
|
||||||
"stepB" : 0.19,
|
"stepB" : 0.19,
|
||||||
"baseSpeed" : 0.2,
|
"baseSpeed" : 0.2,
|
||||||
@@ -136152,6 +136152,235 @@
|
|||||||
"attachedElementGuid" : {
|
"attachedElementGuid" : {
|
||||||
"value" : "a646d4b0-b5c4-423f-a8e8-3ba9757ed0fd"
|
"value" : "a646d4b0-b5c4-423f-a8e8-3ba9757ed0fd"
|
||||||
}
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.ElementFolder_BM,Assembly-CSharp",
|
||||||
|
"elementName" : "Folder",
|
||||||
|
"tags" : [
|
||||||
|
|
||||||
|
],
|
||||||
|
"elementGuid" : {
|
||||||
|
"value" : "80fbc906-a82c-4f44-81de-17a80b0a04d8"
|
||||||
|
},
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "00000000-0000-0000-0000-000000000000"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp",
|
||||||
|
"originalPosition" : {
|
||||||
|
"x" : 0,
|
||||||
|
"y" : 0,
|
||||||
|
"z" : 0
|
||||||
|
},
|
||||||
|
"originalEulerAngles" : {
|
||||||
|
"x" : 0,
|
||||||
|
"y" : 0,
|
||||||
|
"z" : 0
|
||||||
|
},
|
||||||
|
"originalScale" : {
|
||||||
|
"x" : 1,
|
||||||
|
"y" : 1,
|
||||||
|
"z" : 1
|
||||||
|
},
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "80fbc906-a82c-4f44-81de-17a80b0a04d8"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp",
|
||||||
|
"isOverridingDuration" : false,
|
||||||
|
"startTime" : -32767,
|
||||||
|
"endTime" : 32767,
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "80fbc906-a82c-4f44-81de-17a80b0a04d8"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse.Beatmap.DTMConstellation_BM,Assembly-CSharp",
|
||||||
|
"maxParticles" : 10,
|
||||||
|
"maxLineCount" : 12,
|
||||||
|
"spreadSize" : {
|
||||||
|
"x" : 20,
|
||||||
|
"y" : 20,
|
||||||
|
"z" : 20
|
||||||
|
},
|
||||||
|
"maxConnectionsPerStar" : 3,
|
||||||
|
"maxConnectionDistance" : 20,
|
||||||
|
"activeStarSize" : 1,
|
||||||
|
"lineWidth" : 0.1,
|
||||||
|
"orbitalVelocity" : {
|
||||||
|
"x" : 0,
|
||||||
|
"y" : 0,
|
||||||
|
"z" : 0.1
|
||||||
|
},
|
||||||
|
"angularVelocity" : 60,
|
||||||
|
"isStatic" : false,
|
||||||
|
"themeBundleName" : "departure_to_multiverse",
|
||||||
|
"objectName" : "DTM_ConstellationCube",
|
||||||
|
"elementName" : "New Environment Object",
|
||||||
|
"tags" : [
|
||||||
|
|
||||||
|
],
|
||||||
|
"elementGuid" : {
|
||||||
|
"value" : "c6a0218a-423f-4dbe-9cbb-07e7281b482b"
|
||||||
|
},
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "80fbc906-a82c-4f44-81de-17a80b0a04d8"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp",
|
||||||
|
"originalPosition" : {
|
||||||
|
"x" : 0,
|
||||||
|
"y" : 0,
|
||||||
|
"z" : 50
|
||||||
|
},
|
||||||
|
"originalEulerAngles" : {
|
||||||
|
"x" : 0,
|
||||||
|
"y" : 0,
|
||||||
|
"z" : 0
|
||||||
|
},
|
||||||
|
"originalScale" : {
|
||||||
|
"x" : 1,
|
||||||
|
"y" : 1,
|
||||||
|
"z" : 1
|
||||||
|
},
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "c6a0218a-423f-4dbe-9cbb-07e7281b482b"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp",
|
||||||
|
"isOverridingDuration" : false,
|
||||||
|
"startTime" : -32767,
|
||||||
|
"endTime" : 32767,
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "c6a0218a-423f-4dbe-9cbb-07e7281b482b"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp",
|
||||||
|
"originalBaseColor" : {
|
||||||
|
"r" : 1,
|
||||||
|
"g" : 1,
|
||||||
|
"b" : 1,
|
||||||
|
"a" : 1
|
||||||
|
},
|
||||||
|
"emissionEnabled" : true,
|
||||||
|
"originalEmissionColor" : {
|
||||||
|
"r" : 1,
|
||||||
|
"g" : 1,
|
||||||
|
"b" : 1,
|
||||||
|
"a" : 1
|
||||||
|
},
|
||||||
|
"originalEmissionIntensity" : 2,
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "c6a0218a-423f-4dbe-9cbb-07e7281b482b"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.ElementFolder_BM,Assembly-CSharp",
|
||||||
|
"elementName" : "Folder",
|
||||||
|
"tags" : [
|
||||||
|
|
||||||
|
],
|
||||||
|
"elementGuid" : {
|
||||||
|
"value" : "f354bc7c-7ccf-434a-aac4-dc0002e41986"
|
||||||
|
},
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "00000000-0000-0000-0000-000000000000"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp",
|
||||||
|
"originalPosition" : {
|
||||||
|
"x" : 0,
|
||||||
|
"y" : 0,
|
||||||
|
"z" : 0
|
||||||
|
},
|
||||||
|
"originalEulerAngles" : {
|
||||||
|
"x" : 0,
|
||||||
|
"y" : 0,
|
||||||
|
"z" : 0
|
||||||
|
},
|
||||||
|
"originalScale" : {
|
||||||
|
"x" : 1,
|
||||||
|
"y" : 1,
|
||||||
|
"z" : 1
|
||||||
|
},
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "f354bc7c-7ccf-434a-aac4-dc0002e41986"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp",
|
||||||
|
"isOverridingDuration" : false,
|
||||||
|
"startTime" : -32767,
|
||||||
|
"endTime" : 32767,
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "f354bc7c-7ccf-434a-aac4-dc0002e41986"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.BasicEnvironmentObject_BM,Assembly-CSharp",
|
||||||
|
"shadowThreshold" : 0,
|
||||||
|
"shadowSmoothness" : 0.1,
|
||||||
|
"useWorldLight" : false,
|
||||||
|
"fakeLightDir" : {
|
||||||
|
"x" : 0.5,
|
||||||
|
"y" : 1,
|
||||||
|
"z" : 0.5
|
||||||
|
},
|
||||||
|
"isStatic" : false,
|
||||||
|
"themeBundleName" : "basic",
|
||||||
|
"objectName" : "Cube",
|
||||||
|
"elementName" : "New Environment Object",
|
||||||
|
"tags" : [
|
||||||
|
|
||||||
|
],
|
||||||
|
"elementGuid" : {
|
||||||
|
"value" : "d321ddfa-d983-4343-9963-e67a1401a750"
|
||||||
|
},
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "f354bc7c-7ccf-434a-aac4-dc0002e41986"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp",
|
||||||
|
"originalPosition" : {
|
||||||
|
"x" : 0,
|
||||||
|
"y" : 0,
|
||||||
|
"z" : 0
|
||||||
|
},
|
||||||
|
"originalEulerAngles" : {
|
||||||
|
"x" : 0,
|
||||||
|
"y" : 0,
|
||||||
|
"z" : 0
|
||||||
|
},
|
||||||
|
"originalScale" : {
|
||||||
|
"x" : 1,
|
||||||
|
"y" : 1,
|
||||||
|
"z" : 1
|
||||||
|
},
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "d321ddfa-d983-4343-9963-e67a1401a750"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp",
|
||||||
|
"isOverridingDuration" : false,
|
||||||
|
"startTime" : -32767,
|
||||||
|
"endTime" : 32767,
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "d321ddfa-d983-4343-9963-e67a1401a750"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp",
|
||||||
|
"originalBaseColor" : {
|
||||||
|
"r" : 1,
|
||||||
|
"g" : 1,
|
||||||
|
"b" : 1,
|
||||||
|
"a" : 1
|
||||||
|
},
|
||||||
|
"emissionEnabled" : false,
|
||||||
|
"originalEmissionColor" : {
|
||||||
|
"r" : 0,
|
||||||
|
"g" : 0,
|
||||||
|
"b" : 0,
|
||||||
|
"a" : 1
|
||||||
|
},
|
||||||
|
"originalEmissionIntensity" : 0,
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "d321ddfa-d983-4343-9963-e67a1401a750"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"attachedElementGuid" : {
|
"attachedElementGuid" : {
|
||||||
|
|||||||
@@ -6542,7 +6542,7 @@
|
|||||||
|
|
||||||
],
|
],
|
||||||
"elementGuid" : {
|
"elementGuid" : {
|
||||||
"value" : "937076ce-693e-47f4-a50d-9ea5da927ea6"
|
"value" : "db2a06c4-771d-4328-9334-fd1ceade2bd3"
|
||||||
},
|
},
|
||||||
"attachedElementGuid" : {
|
"attachedElementGuid" : {
|
||||||
"value" : "16dd9f1a-d9fe-45c1-b194-040d687f2c75"
|
"value" : "16dd9f1a-d9fe-45c1-b194-040d687f2c75"
|
||||||
@@ -6565,7 +6565,7 @@
|
|||||||
"z" : 1
|
"z" : 1
|
||||||
},
|
},
|
||||||
"attachedElementGuid" : {
|
"attachedElementGuid" : {
|
||||||
"value" : "937076ce-693e-47f4-a50d-9ea5da927ea6"
|
"value" : "db2a06c4-771d-4328-9334-fd1ceade2bd3"
|
||||||
}
|
}
|
||||||
},{
|
},{
|
||||||
"__type" : "Ichni.RhythmGame.Beatmap.EffectSubmodule_BM,Assembly-CSharp",
|
"__type" : "Ichni.RhythmGame.Beatmap.EffectSubmodule_BM,Assembly-CSharp",
|
||||||
@@ -6604,7 +6604,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"attachedElementGuid" : {
|
"attachedElementGuid" : {
|
||||||
"value" : "937076ce-693e-47f4-a50d-9ea5da927ea6"
|
"value" : "db2a06c4-771d-4328-9334-fd1ceade2bd3"
|
||||||
}
|
}
|
||||||
},{
|
},{
|
||||||
"__type" : "Ichni.RhythmGame.Beatmap.Tap_BM,Assembly-CSharp",
|
"__type" : "Ichni.RhythmGame.Beatmap.Tap_BM,Assembly-CSharp",
|
||||||
@@ -17298,7 +17298,7 @@
|
|||||||
|
|
||||||
],
|
],
|
||||||
"elementGuid" : {
|
"elementGuid" : {
|
||||||
"value" : "93e473f2-36f6-4120-b566-f2b09e019f08"
|
"value" : "2a2ebc7d-8f3d-4451-981f-2e213562dbc5"
|
||||||
},
|
},
|
||||||
"attachedElementGuid" : {
|
"attachedElementGuid" : {
|
||||||
"value" : "16dd9f1a-d9fe-45c1-b194-040d687f2c75"
|
"value" : "16dd9f1a-d9fe-45c1-b194-040d687f2c75"
|
||||||
@@ -17321,7 +17321,7 @@
|
|||||||
"z" : 1
|
"z" : 1
|
||||||
},
|
},
|
||||||
"attachedElementGuid" : {
|
"attachedElementGuid" : {
|
||||||
"value" : "93e473f2-36f6-4120-b566-f2b09e019f08"
|
"value" : "2a2ebc7d-8f3d-4451-981f-2e213562dbc5"
|
||||||
}
|
}
|
||||||
},{
|
},{
|
||||||
"__type" : "Ichni.RhythmGame.Beatmap.EffectSubmodule_BM,Assembly-CSharp",
|
"__type" : "Ichni.RhythmGame.Beatmap.EffectSubmodule_BM,Assembly-CSharp",
|
||||||
@@ -17360,7 +17360,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"attachedElementGuid" : {
|
"attachedElementGuid" : {
|
||||||
"value" : "93e473f2-36f6-4120-b566-f2b09e019f08"
|
"value" : "2a2ebc7d-8f3d-4451-981f-2e213562dbc5"
|
||||||
}
|
}
|
||||||
},{
|
},{
|
||||||
"__type" : "Ichni.RhythmGame.Beatmap.Flick_BM,Assembly-CSharp",
|
"__type" : "Ichni.RhythmGame.Beatmap.Flick_BM,Assembly-CSharp",
|
||||||
@@ -136152,6 +136152,235 @@
|
|||||||
"attachedElementGuid" : {
|
"attachedElementGuid" : {
|
||||||
"value" : "a646d4b0-b5c4-423f-a8e8-3ba9757ed0fd"
|
"value" : "a646d4b0-b5c4-423f-a8e8-3ba9757ed0fd"
|
||||||
}
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.ElementFolder_BM,Assembly-CSharp",
|
||||||
|
"elementName" : "Folder",
|
||||||
|
"tags" : [
|
||||||
|
|
||||||
|
],
|
||||||
|
"elementGuid" : {
|
||||||
|
"value" : "80fbc906-a82c-4f44-81de-17a80b0a04d8"
|
||||||
|
},
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "00000000-0000-0000-0000-000000000000"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp",
|
||||||
|
"originalPosition" : {
|
||||||
|
"x" : 0,
|
||||||
|
"y" : 0,
|
||||||
|
"z" : 0
|
||||||
|
},
|
||||||
|
"originalEulerAngles" : {
|
||||||
|
"x" : 0,
|
||||||
|
"y" : 0,
|
||||||
|
"z" : 0
|
||||||
|
},
|
||||||
|
"originalScale" : {
|
||||||
|
"x" : 1,
|
||||||
|
"y" : 1,
|
||||||
|
"z" : 1
|
||||||
|
},
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "80fbc906-a82c-4f44-81de-17a80b0a04d8"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp",
|
||||||
|
"isOverridingDuration" : false,
|
||||||
|
"startTime" : -32767,
|
||||||
|
"endTime" : 32767,
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "80fbc906-a82c-4f44-81de-17a80b0a04d8"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse.Beatmap.DTMConstellation_BM,Assembly-CSharp",
|
||||||
|
"maxParticles" : 10,
|
||||||
|
"maxLineCount" : 12,
|
||||||
|
"spreadSize" : {
|
||||||
|
"x" : 20,
|
||||||
|
"y" : 20,
|
||||||
|
"z" : 20
|
||||||
|
},
|
||||||
|
"maxConnectionsPerStar" : 3,
|
||||||
|
"maxConnectionDistance" : 20,
|
||||||
|
"activeStarSize" : 1,
|
||||||
|
"lineWidth" : 0.1,
|
||||||
|
"orbitalVelocity" : {
|
||||||
|
"x" : 0,
|
||||||
|
"y" : 0,
|
||||||
|
"z" : 0.1
|
||||||
|
},
|
||||||
|
"angularVelocity" : 60,
|
||||||
|
"isStatic" : false,
|
||||||
|
"themeBundleName" : "departure_to_multiverse",
|
||||||
|
"objectName" : "DTM_ConstellationCube",
|
||||||
|
"elementName" : "New Environment Object",
|
||||||
|
"tags" : [
|
||||||
|
|
||||||
|
],
|
||||||
|
"elementGuid" : {
|
||||||
|
"value" : "c6a0218a-423f-4dbe-9cbb-07e7281b482b"
|
||||||
|
},
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "80fbc906-a82c-4f44-81de-17a80b0a04d8"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp",
|
||||||
|
"originalPosition" : {
|
||||||
|
"x" : 0,
|
||||||
|
"y" : 0,
|
||||||
|
"z" : 50
|
||||||
|
},
|
||||||
|
"originalEulerAngles" : {
|
||||||
|
"x" : 0,
|
||||||
|
"y" : 0,
|
||||||
|
"z" : 0
|
||||||
|
},
|
||||||
|
"originalScale" : {
|
||||||
|
"x" : 1,
|
||||||
|
"y" : 1,
|
||||||
|
"z" : 1
|
||||||
|
},
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "c6a0218a-423f-4dbe-9cbb-07e7281b482b"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp",
|
||||||
|
"isOverridingDuration" : false,
|
||||||
|
"startTime" : -32767,
|
||||||
|
"endTime" : 32767,
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "c6a0218a-423f-4dbe-9cbb-07e7281b482b"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp",
|
||||||
|
"originalBaseColor" : {
|
||||||
|
"r" : 1,
|
||||||
|
"g" : 1,
|
||||||
|
"b" : 1,
|
||||||
|
"a" : 1
|
||||||
|
},
|
||||||
|
"emissionEnabled" : true,
|
||||||
|
"originalEmissionColor" : {
|
||||||
|
"r" : 1,
|
||||||
|
"g" : 1,
|
||||||
|
"b" : 1,
|
||||||
|
"a" : 1
|
||||||
|
},
|
||||||
|
"originalEmissionIntensity" : 2,
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "c6a0218a-423f-4dbe-9cbb-07e7281b482b"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.ElementFolder_BM,Assembly-CSharp",
|
||||||
|
"elementName" : "Folder",
|
||||||
|
"tags" : [
|
||||||
|
|
||||||
|
],
|
||||||
|
"elementGuid" : {
|
||||||
|
"value" : "f354bc7c-7ccf-434a-aac4-dc0002e41986"
|
||||||
|
},
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "00000000-0000-0000-0000-000000000000"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp",
|
||||||
|
"originalPosition" : {
|
||||||
|
"x" : 0,
|
||||||
|
"y" : 0,
|
||||||
|
"z" : 0
|
||||||
|
},
|
||||||
|
"originalEulerAngles" : {
|
||||||
|
"x" : 0,
|
||||||
|
"y" : 0,
|
||||||
|
"z" : 0
|
||||||
|
},
|
||||||
|
"originalScale" : {
|
||||||
|
"x" : 1,
|
||||||
|
"y" : 1,
|
||||||
|
"z" : 1
|
||||||
|
},
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "f354bc7c-7ccf-434a-aac4-dc0002e41986"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp",
|
||||||
|
"isOverridingDuration" : false,
|
||||||
|
"startTime" : -32767,
|
||||||
|
"endTime" : 32767,
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "f354bc7c-7ccf-434a-aac4-dc0002e41986"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.BasicEnvironmentObject_BM,Assembly-CSharp",
|
||||||
|
"shadowThreshold" : 0,
|
||||||
|
"shadowSmoothness" : 0.1,
|
||||||
|
"useWorldLight" : false,
|
||||||
|
"fakeLightDir" : {
|
||||||
|
"x" : 0.5,
|
||||||
|
"y" : 1,
|
||||||
|
"z" : 0.5
|
||||||
|
},
|
||||||
|
"isStatic" : false,
|
||||||
|
"themeBundleName" : "basic",
|
||||||
|
"objectName" : "Cube",
|
||||||
|
"elementName" : "New Environment Object",
|
||||||
|
"tags" : [
|
||||||
|
|
||||||
|
],
|
||||||
|
"elementGuid" : {
|
||||||
|
"value" : "d321ddfa-d983-4343-9963-e67a1401a750"
|
||||||
|
},
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "f354bc7c-7ccf-434a-aac4-dc0002e41986"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp",
|
||||||
|
"originalPosition" : {
|
||||||
|
"x" : 0,
|
||||||
|
"y" : 0,
|
||||||
|
"z" : 0
|
||||||
|
},
|
||||||
|
"originalEulerAngles" : {
|
||||||
|
"x" : 0,
|
||||||
|
"y" : 0,
|
||||||
|
"z" : 0
|
||||||
|
},
|
||||||
|
"originalScale" : {
|
||||||
|
"x" : 1,
|
||||||
|
"y" : 1,
|
||||||
|
"z" : 1
|
||||||
|
},
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "d321ddfa-d983-4343-9963-e67a1401a750"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp",
|
||||||
|
"isOverridingDuration" : false,
|
||||||
|
"startTime" : -32767,
|
||||||
|
"endTime" : 32767,
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "d321ddfa-d983-4343-9963-e67a1401a750"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp",
|
||||||
|
"originalBaseColor" : {
|
||||||
|
"r" : 1,
|
||||||
|
"g" : 1,
|
||||||
|
"b" : 1,
|
||||||
|
"a" : 1
|
||||||
|
},
|
||||||
|
"emissionEnabled" : false,
|
||||||
|
"originalEmissionColor" : {
|
||||||
|
"r" : 0,
|
||||||
|
"g" : 0,
|
||||||
|
"b" : 0,
|
||||||
|
"a" : 1
|
||||||
|
},
|
||||||
|
"originalEmissionIntensity" : 0,
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "d321ddfa-d983-4343-9963-e67a1401a750"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"attachedElementGuid" : {
|
"attachedElementGuid" : {
|
||||||
|
|||||||
8
Assets/StreamingAssets/NodeScript.meta
Normal file
8
Assets/StreamingAssets/NodeScript.meta
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 8c689076f81e86c49944e9cd5f9cb0e1
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
113
Assets/StreamingAssets/NodeScript/test1.json
Normal file
113
Assets/StreamingAssets/NodeScript/test1.json
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
{
|
||||||
|
"startElementGuid": "f354bc7c-7ccf-434a-aac4-dc0002e41986",
|
||||||
|
"nodes": [
|
||||||
|
{
|
||||||
|
"typeName": "Ichni.NodeScript.NodeStart",
|
||||||
|
"posX": -507.8431701660156,
|
||||||
|
"posY": 225.49020385742188,
|
||||||
|
"fieldValues": [
|
||||||
|
{
|
||||||
|
"key": "NodeName",
|
||||||
|
"json": "{}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "nodeObject",
|
||||||
|
"json": "{\"TitleText\":{\"instanceID\":-974546},\"statusImage\":{\"instanceID\":-974522},\"inputsRoot\":{\"instanceID\":-974564},\"outputsRoot\":{\"instanceID\":-974592},\"middleRoot\":{\"instanceID\":-974578},\"connectorSlotPrefabI\":{\"instanceID\":70946},\"connectorSlotPrefabO\":{\"instanceID\":70966},\"dropdownPrefab\":{\"instanceID\":71274},\"inputPrefab\":{\"instanceID\":71276}}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"typeName": "Ichni.NodeScript.NodeConst",
|
||||||
|
"posX": -479.7438659667969,
|
||||||
|
"posY": -3.097003936767578,
|
||||||
|
"fieldValues": [
|
||||||
|
{
|
||||||
|
"key": "floatVal",
|
||||||
|
"json": "{}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "intVal",
|
||||||
|
"json": "{}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "boolVal",
|
||||||
|
"json": "{}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "vector2Val",
|
||||||
|
"json": "{\"x\":0.0,\"y\":0.0}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "vector3Val",
|
||||||
|
"json": "{\"x\":0.0,\"y\":0.0,\"z\":0.0}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "colorVal",
|
||||||
|
"json": "{\"r\":0.0,\"g\":0.0,\"b\":0.0,\"a\":0.0}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "NodeName",
|
||||||
|
"json": "{}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "nodeObject",
|
||||||
|
"json": "{\"TitleText\":{\"instanceID\":-979666},\"statusImage\":{\"instanceID\":-979642},\"inputsRoot\":{\"instanceID\":-979684},\"outputsRoot\":{\"instanceID\":-979712},\"middleRoot\":{\"instanceID\":-979698},\"connectorSlotPrefabI\":{\"instanceID\":70946},\"connectorSlotPrefabO\":{\"instanceID\":70966},\"dropdownPrefab\":{\"instanceID\":71274},\"inputPrefab\":{\"instanceID\":71276}}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"typeName": "Ichni.NodeScript.NodeForLoop",
|
||||||
|
"posX": -79.74382781982422,
|
||||||
|
"posY": 230.23634338378907,
|
||||||
|
"fieldValues": [
|
||||||
|
{
|
||||||
|
"key": "NodeName",
|
||||||
|
"json": "{}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "nodeObject",
|
||||||
|
"json": "{\"TitleText\":{\"instanceID\":-981980},\"statusImage\":{\"instanceID\":-981956},\"inputsRoot\":{\"instanceID\":-981998},\"outputsRoot\":{\"instanceID\":-982026},\"middleRoot\":{\"instanceID\":-982012},\"connectorSlotPrefabI\":{\"instanceID\":70946},\"connectorSlotPrefabO\":{\"instanceID\":70966},\"dropdownPrefab\":{\"instanceID\":71274},\"inputPrefab\":{\"instanceID\":71276}}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"typeName": "Ichni.NodeScript.NodeLog",
|
||||||
|
"posX": 428.0993347167969,
|
||||||
|
"posY": 218.4716796875,
|
||||||
|
"fieldValues": [
|
||||||
|
{
|
||||||
|
"key": "prefix",
|
||||||
|
"json": "{}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "NodeName",
|
||||||
|
"json": "{}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "nodeObject",
|
||||||
|
"json": "{\"TitleText\":{\"instanceID\":-985046},\"statusImage\":{\"instanceID\":-985022},\"inputsRoot\":{\"instanceID\":-985064},\"outputsRoot\":{\"instanceID\":-985092},\"middleRoot\":{\"instanceID\":-985078},\"connectorSlotPrefabI\":{\"instanceID\":70946},\"connectorSlotPrefabO\":{\"instanceID\":70966},\"dropdownPrefab\":{\"instanceID\":71274},\"inputPrefab\":{\"instanceID\":71276}}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"wires": [
|
||||||
|
{
|
||||||
|
"fromNodeIdx": 0,
|
||||||
|
"toNodeIdx": 2,
|
||||||
|
"fromOutput": "exec",
|
||||||
|
"toInput": "exec"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fromNodeIdx": 1,
|
||||||
|
"toNodeIdx": 2,
|
||||||
|
"fromOutput": "value",
|
||||||
|
"toInput": "count"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fromNodeIdx": 2,
|
||||||
|
"toNodeIdx": 3,
|
||||||
|
"fromOutput": "index",
|
||||||
|
"toInput": "value"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
7
Assets/StreamingAssets/NodeScript/test1.json.meta
Normal file
7
Assets/StreamingAssets/NodeScript/test1.json.meta
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 5854089025145e3489d4983a422ca534
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -6542,7 +6542,7 @@
|
|||||||
|
|
||||||
],
|
],
|
||||||
"elementGuid" : {
|
"elementGuid" : {
|
||||||
"value" : "c774e764-b1cf-41a1-983c-18b7d3d718fd"
|
"value" : "9ae40b59-296d-41e8-b9dd-744f5c5a670b"
|
||||||
},
|
},
|
||||||
"attachedElementGuid" : {
|
"attachedElementGuid" : {
|
||||||
"value" : "16dd9f1a-d9fe-45c1-b194-040d687f2c75"
|
"value" : "16dd9f1a-d9fe-45c1-b194-040d687f2c75"
|
||||||
@@ -6565,7 +6565,7 @@
|
|||||||
"z" : 1
|
"z" : 1
|
||||||
},
|
},
|
||||||
"attachedElementGuid" : {
|
"attachedElementGuid" : {
|
||||||
"value" : "c774e764-b1cf-41a1-983c-18b7d3d718fd"
|
"value" : "9ae40b59-296d-41e8-b9dd-744f5c5a670b"
|
||||||
}
|
}
|
||||||
},{
|
},{
|
||||||
"__type" : "Ichni.RhythmGame.Beatmap.EffectSubmodule_BM,Assembly-CSharp",
|
"__type" : "Ichni.RhythmGame.Beatmap.EffectSubmodule_BM,Assembly-CSharp",
|
||||||
@@ -6604,7 +6604,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"attachedElementGuid" : {
|
"attachedElementGuid" : {
|
||||||
"value" : "c774e764-b1cf-41a1-983c-18b7d3d718fd"
|
"value" : "9ae40b59-296d-41e8-b9dd-744f5c5a670b"
|
||||||
}
|
}
|
||||||
},{
|
},{
|
||||||
"__type" : "Ichni.RhythmGame.Beatmap.Tap_BM,Assembly-CSharp",
|
"__type" : "Ichni.RhythmGame.Beatmap.Tap_BM,Assembly-CSharp",
|
||||||
@@ -17298,7 +17298,7 @@
|
|||||||
|
|
||||||
],
|
],
|
||||||
"elementGuid" : {
|
"elementGuid" : {
|
||||||
"value" : "ba52c2aa-5d65-4569-ba47-e0f3bcd6ae6d"
|
"value" : "88de83ac-2347-4431-a27f-ada697b6ada3"
|
||||||
},
|
},
|
||||||
"attachedElementGuid" : {
|
"attachedElementGuid" : {
|
||||||
"value" : "16dd9f1a-d9fe-45c1-b194-040d687f2c75"
|
"value" : "16dd9f1a-d9fe-45c1-b194-040d687f2c75"
|
||||||
@@ -17321,7 +17321,7 @@
|
|||||||
"z" : 1
|
"z" : 1
|
||||||
},
|
},
|
||||||
"attachedElementGuid" : {
|
"attachedElementGuid" : {
|
||||||
"value" : "ba52c2aa-5d65-4569-ba47-e0f3bcd6ae6d"
|
"value" : "88de83ac-2347-4431-a27f-ada697b6ada3"
|
||||||
}
|
}
|
||||||
},{
|
},{
|
||||||
"__type" : "Ichni.RhythmGame.Beatmap.EffectSubmodule_BM,Assembly-CSharp",
|
"__type" : "Ichni.RhythmGame.Beatmap.EffectSubmodule_BM,Assembly-CSharp",
|
||||||
@@ -17360,7 +17360,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"attachedElementGuid" : {
|
"attachedElementGuid" : {
|
||||||
"value" : "ba52c2aa-5d65-4569-ba47-e0f3bcd6ae6d"
|
"value" : "88de83ac-2347-4431-a27f-ada697b6ada3"
|
||||||
}
|
}
|
||||||
},{
|
},{
|
||||||
"__type" : "Ichni.RhythmGame.Beatmap.Flick_BM,Assembly-CSharp",
|
"__type" : "Ichni.RhythmGame.Beatmap.Flick_BM,Assembly-CSharp",
|
||||||
@@ -136271,6 +136271,116 @@
|
|||||||
"attachedElementGuid" : {
|
"attachedElementGuid" : {
|
||||||
"value" : "c6a0218a-423f-4dbe-9cbb-07e7281b482b"
|
"value" : "c6a0218a-423f-4dbe-9cbb-07e7281b482b"
|
||||||
}
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.ElementFolder_BM,Assembly-CSharp",
|
||||||
|
"elementName" : "Folder",
|
||||||
|
"tags" : [
|
||||||
|
|
||||||
|
],
|
||||||
|
"elementGuid" : {
|
||||||
|
"value" : "f354bc7c-7ccf-434a-aac4-dc0002e41986"
|
||||||
|
},
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "00000000-0000-0000-0000-000000000000"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp",
|
||||||
|
"originalPosition" : {
|
||||||
|
"x" : 0,
|
||||||
|
"y" : 0,
|
||||||
|
"z" : 0
|
||||||
|
},
|
||||||
|
"originalEulerAngles" : {
|
||||||
|
"x" : 0,
|
||||||
|
"y" : 0,
|
||||||
|
"z" : 0
|
||||||
|
},
|
||||||
|
"originalScale" : {
|
||||||
|
"x" : 1,
|
||||||
|
"y" : 1,
|
||||||
|
"z" : 1
|
||||||
|
},
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "f354bc7c-7ccf-434a-aac4-dc0002e41986"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp",
|
||||||
|
"isOverridingDuration" : false,
|
||||||
|
"startTime" : -32767,
|
||||||
|
"endTime" : 32767,
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "f354bc7c-7ccf-434a-aac4-dc0002e41986"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.BasicEnvironmentObject_BM,Assembly-CSharp",
|
||||||
|
"shadowThreshold" : 0,
|
||||||
|
"shadowSmoothness" : 0.1,
|
||||||
|
"useWorldLight" : false,
|
||||||
|
"fakeLightDir" : {
|
||||||
|
"x" : 0.5,
|
||||||
|
"y" : 1,
|
||||||
|
"z" : 0.5
|
||||||
|
},
|
||||||
|
"isStatic" : false,
|
||||||
|
"themeBundleName" : "basic",
|
||||||
|
"objectName" : "Cube",
|
||||||
|
"elementName" : "New Environment Object",
|
||||||
|
"tags" : [
|
||||||
|
|
||||||
|
],
|
||||||
|
"elementGuid" : {
|
||||||
|
"value" : "d321ddfa-d983-4343-9963-e67a1401a750"
|
||||||
|
},
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "f354bc7c-7ccf-434a-aac4-dc0002e41986"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp",
|
||||||
|
"originalPosition" : {
|
||||||
|
"x" : 0,
|
||||||
|
"y" : 0,
|
||||||
|
"z" : 0
|
||||||
|
},
|
||||||
|
"originalEulerAngles" : {
|
||||||
|
"x" : 0,
|
||||||
|
"y" : 0,
|
||||||
|
"z" : 0
|
||||||
|
},
|
||||||
|
"originalScale" : {
|
||||||
|
"x" : 1,
|
||||||
|
"y" : 1,
|
||||||
|
"z" : 1
|
||||||
|
},
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "d321ddfa-d983-4343-9963-e67a1401a750"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp",
|
||||||
|
"isOverridingDuration" : false,
|
||||||
|
"startTime" : -32767,
|
||||||
|
"endTime" : 32767,
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "d321ddfa-d983-4343-9963-e67a1401a750"
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp",
|
||||||
|
"originalBaseColor" : {
|
||||||
|
"r" : 1,
|
||||||
|
"g" : 1,
|
||||||
|
"b" : 1,
|
||||||
|
"a" : 1
|
||||||
|
},
|
||||||
|
"emissionEnabled" : false,
|
||||||
|
"originalEmissionColor" : {
|
||||||
|
"r" : 0,
|
||||||
|
"g" : 0,
|
||||||
|
"b" : 0,
|
||||||
|
"a" : 1
|
||||||
|
},
|
||||||
|
"originalEmissionIntensity" : 0,
|
||||||
|
"attachedElementGuid" : {
|
||||||
|
"value" : "d321ddfa-d983-4343-9963-e67a1401a750"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"attachedElementGuid" : {
|
"attachedElementGuid" : {
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
"creatorName" : "TRADER",
|
"creatorName" : "TRADER",
|
||||||
"editorVersion" : "0.1.0",
|
"editorVersion" : "0.1.0",
|
||||||
"createTime" : "2026\/2\/15 10:43:24",
|
"createTime" : "2026\/2\/15 10:43:24",
|
||||||
"lastSaveTime" : "4\/14\/2026 1:15:27 PM",
|
"lastSaveTime" : "2026\/5\/17 15:54:09",
|
||||||
"selectedThemeBundleList" : [
|
"selectedThemeBundleList" : [
|
||||||
"basic","departure_to_multiverse"
|
"basic","departure_to_multiverse"
|
||||||
],
|
],
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
8
Assets/com.unity.uiextensions.meta
Normal file
8
Assets/com.unity.uiextensions.meta
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 73e89c312049afd42ae0dff1f8cde848
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
82
Assets/com.unity.uiextensions/CHANGELOG.md
Normal file
82
Assets/com.unity.uiextensions/CHANGELOG.md
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
# Change Log
|
||||||
|
|
||||||
|
All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
|
The format is based on [Keep a Changelog](http://keepachangelog.com/).
|
||||||
|
|
||||||
|
## Release 2.3.2 - Rejuvenation - 2023/11/26
|
||||||
|
|
||||||
|
2023 is certainly an interesting year to keep you on your toes, and finding time to keep managing all the requests and updates that come in are taking their toll, especially for a FREE project, but nonetheless, I still do it.
|
||||||
|
|
||||||
|
Mainly bugfixes for the end of year update, promoting some resolutions that have been verified and tested since the last release.
|
||||||
|
|
||||||
|
To get up to speed with the Unity UI Extensions, check out the [Getting Started](https://unity-ui-extensions.github.io/GettingStarted.html) Page.
|
||||||
|
|
||||||
|
> Ways to get in touch:
|
||||||
|
>
|
||||||
|
> - [GitHub Discussions](https://github.com/Unity-UI-Extensions/com.unity.uiextensions/discussions), if you have any questions, queries or suggestions
|
||||||
|
> - [Gitter Chat](https://gitter.im/Unity-UI-Extensions/Lobby) site for the UI Extensions project
|
||||||
|
>
|
||||||
|
> Much easier that posting a question / issue on YouTube, Twitter or Facebook :D
|
||||||
|
|
||||||
|
## Breaking changes
|
||||||
|
|
||||||
|
For customers upgrading from earlier versions of Unity to Unity 2020, please be aware of the Breaking change related to Text Based components. You will need to manually replace any UI using the older ```Text``` component and replace them with ```TextMeshPro``` versions. This is unavoidable due to Unity deprecating the Text component.
|
||||||
|
|
||||||
|
> New users to 2022 are unaffected as all the Editor commands have been updated to use the newer TextMeshPro versions.
|
||||||
|
|
||||||
|
For more details, see the [deprecation notice](https://github.com/Unity-UI-Extensions/com.unity.uiextensions/discussions/428) on GitHub.
|
||||||
|
|
||||||
|
## Added
|
||||||
|
|
||||||
|
- Add CalculatePointOnCurve for uilinerenderer (@victornor)
|
||||||
|
|
||||||
|
## Changed
|
||||||
|
|
||||||
|
- fix: Fixed an null reference exception with the ResetSelectableHighlight (@FejZa)
|
||||||
|
- fix: Resolved an issue where the last line in a flow layout group would overflow the rect bounds.
|
||||||
|
- fix: GetPosition when Segments is null (@victornor)
|
||||||
|
- fix: Fix Bug! NicerOutline color.a Loss when m_UseGraphicAlpha is true (wanliyun)
|
||||||
|
- fix: Update to force Enumerated start for Accordion elements, Resolves: #455
|
||||||
|
- Added argument to the UpdateLayout method for the HSS/VSS to move to a new starting page.
|
||||||
|
- Updated implementations to handle 2023 support, with 2023 moving in to public release.
|
||||||
|
- Added extra event on the AutoCompleteComboBox, to fire when an item in the list is selected, with its display name.
|
||||||
|
- FlowLayoutGroup components updated to latest (likely the last as the author has stopped development)
|
||||||
|
|
||||||
|
## Deprecated
|
||||||
|
|
||||||
|
- All deprecated Text based components now have "obsolete" tags, to avoid breaking code. Note, these do not function in 2022 and above, as Unity have "changed" things. For any affected component, I recommend updating to use TextMeshPro native features.
|
||||||
|
|
||||||
|
## Additional Notes
|
||||||
|
|
||||||
|
### [Installation Instructions](https://unity-ui-extensions.github.io/UPMInstallation.html)
|
||||||
|
|
||||||
|
The recommended way to add the Unity UI Extensions project to your solution is to use the Unity package Manager. Simply use the Unity Package Manager to reference the project to install it
|
||||||
|
|
||||||
|
New for 2020, we have added OpenUPM support and the package can be installed using the following [OpenUPM CLI](https://openupm.com/docs/) command:
|
||||||
|
|
||||||
|
```cli
|
||||||
|
`openupm add com.unity.uiextensions`
|
||||||
|
```
|
||||||
|
|
||||||
|
> For more details on using [OpenUPM CLI, check the docs here](https://github.com/openupm/openupm-cli#installation).
|
||||||
|
|
||||||
|
- Unity Package Manager - manual
|
||||||
|
|
||||||
|
Alternatively, you can also add the package manually through the Unity package manager using the scope ```com.unity.uiextensions```, see the [Unity Package Manager docs](https://learn.unity.com/tutorial/the-package-manager) for more information.
|
||||||
|
|
||||||
|
- Unity 2018 or lower
|
||||||
|
The pre-compiled Unity assets are the only solution for Unity 2018 or earlier due to the changes in the Unity UI framework in Unity made for 2019.
|
||||||
|
Either clone / download this repository to your machine and then copy the scripts in, or use the pre-packaged .UnityPackage for your version of Unity and import it as a custom package in to your project.
|
||||||
|
|
||||||
|
### Upgrade Notes
|
||||||
|
|
||||||
|
### UPM
|
||||||
|
|
||||||
|
If you are using UPM to gain access to the Unity UI Extensions, then you only need to update to the latest version in the Package Manager, no other changes needed.
|
||||||
|
|
||||||
|
### Customers using the .UnityPackage
|
||||||
|
|
||||||
|
Due to the restructure of the package to meet Unity's new package guidelines, we recommend **Deleting the current Unity UI Extensions** folder prior to importing the new package.
|
||||||
|
|
||||||
|
For Unity 2019 users using the new UPM deployment, be sure to delete the existing folder in your assets folder before adding the new package to avoid conflict.
|
||||||
7
Assets/com.unity.uiextensions/CHANGELOG.md.meta
Normal file
7
Assets/com.unity.uiextensions/CHANGELOG.md.meta
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 03470ebba317a0549a5582f18f4d2383
|
||||||
|
TextScriptImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
8
Assets/com.unity.uiextensions/Documentation.meta
Normal file
8
Assets/com.unity.uiextensions/Documentation.meta
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 7a08421c5c57e4f44883b819982489d7
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,102 @@
|
|||||||
|
<!-- Offline documentation -->
|
||||||
|
|
||||||
|
# About Unity UI Extensions
|
||||||
|
|
||||||
|
The Unity UI Extensions project is a collection of extension scripts/effects and controls to enhance your Unity UI experience. This includes over 70+ controls, utilities, effects and some much-needed love to make the most out of the Unity UI system (formally uGUI) in Unity.
|
||||||
|
[Check out our Tumblr page for a sneak peek](https://www.tumblr.com/blog/unityuiextensions)
|
||||||
|
|
||||||
|
You can follow the UI Extensions team for updates and news on:
|
||||||
|
|
||||||
|
### [Twitter - #unityuiextensions](https://twitter.com/search?q=%23unityuiextensions) / [Facebook](https://www.facebook.com/UnityUIExtensions/) / [YouTube](https://www.youtube.com/@UnityUIExtensions)
|
||||||
|
|
||||||
|
> Ways to get in touch:
|
||||||
|
>
|
||||||
|
> - [Gitter Chat](https://gitter.im/Unity-UI-Extensions/Lobby) site for the UI Extensions project
|
||||||
|
> - [GitHub Discussions](https://github.com/Unity-UI-Extensions/com.unity.uiextensions/discussions), if you have any questions, queries or suggestions
|
||||||
|
|
||||||
|
# Installing Unity UI Extensions
|
||||||
|
|
||||||
|
To install this package, follow the instructions in the Package Manager documentation.
|
||||||
|
|
||||||
|
For more details on [Getting Started](https://unity-ui-extensions.github.io/GettingStarted) please checkout the [online documentation here](https://unity-ui-extensions.github.io/).
|
||||||
|
|
||||||
|
# Using Unity UI Extensions
|
||||||
|
|
||||||
|
The UI Extensions project provides many automated functions to add the various controls contained within the project commonly accessed via "***GameObject -> UI -> Extensions -> 'Control'***" from the editor menu. This will add the UI object and all the necessary components to make that control work in the scene in a default state.
|
||||||
|
|
||||||
|
Some of the features are also available through the GameObject "Add Component" menu in the inspector.
|
||||||
|
|
||||||
|
For a full list of the controls and how they are used, please see the [online documentation](https://unity-ui-extensions.github.io/Controls.html) for the project.
|
||||||
|
|
||||||
|
# Technical details
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
This version of the Unity UI Extensions is compatible with the following versions of the Unity Editor:
|
||||||
|
|
||||||
|
- 2019 and above - the recommended path for 2019+ is to use the Unity Package Manager to get access to the package. Full details for installing via UPM can be [found here](https://unity-ui-extensions.github.io/UPMInstallation.html).
|
||||||
|
|
||||||
|
> Alternatively, the Asset packages have been tested to work with 2019 as well if you prefer to install that way.
|
||||||
|
|
||||||
|
- 2018 and below - for 2018 and use this package, you will have to import the asset package(s), either from the Asset Store or from the alternate download locations [listed here](https://unity-ui-extensions.github.io/Downloads).
|
||||||
|
|
||||||
|
## [Release Notes](https://unity-ui-extensions.github.io/ReleaseNotes/RELEASENOTES)
|
||||||
|
|
||||||
|
## Release 2.3.2 - Rejuvenation - 2023/11/26
|
||||||
|
|
||||||
|
2023 is certainly an interesting year to keep you on your toes, and finding time to keep managing all the requests and updates that come in are taking their toll, especially for a FREE project, but nonetheless, I still do it.
|
||||||
|
|
||||||
|
Mainly bugfixes for the end of year update, promoting some resolutions that have been verified and tested since the last release.
|
||||||
|
|
||||||
|
To get up to speed with the Unity UI Extensions, check out the [Getting Started](https://unity-ui-extensions.github.io/GettingStarted.html) Page.
|
||||||
|
|
||||||
|
> Ways to get in touch:
|
||||||
|
>
|
||||||
|
> - [GitHub Discussions](https://github.com/Unity-UI-Extensions/com.unity.uiextensions/discussions), if you have any questions, queries or suggestions
|
||||||
|
> - [Gitter Chat](https://gitter.im/Unity-UI-Extensions/Lobby) site for the UI Extensions project
|
||||||
|
>
|
||||||
|
> Much easier that posting a question / issue on YouTube, Twitter or Facebook :D
|
||||||
|
|
||||||
|
## Breaking changes
|
||||||
|
|
||||||
|
For customers upgrading from earlier versions of Unity to Unity 2020, please be aware of the Breaking change related to Text Based components. You will need to manually replace any UI using the older ```Text``` component and replace them with ```TextMeshPro``` versions. This is unavoidable due to Unity deprecating the Text component.
|
||||||
|
|
||||||
|
> New users to 2022 are unaffected as all the Editor commands have been updated to use the newer TextMeshPro versions.
|
||||||
|
|
||||||
|
For more details, see the [deprecation notice](https://github.com/Unity-UI-Extensions/com.unity.uiextensions/discussions/428) on GitHub.
|
||||||
|
|
||||||
|
## Added
|
||||||
|
|
||||||
|
- Add CalculatePointOnCurve for uilinerenderer (@victornor)
|
||||||
|
|
||||||
|
## Changed
|
||||||
|
|
||||||
|
- fix: Fixed an null reference exception with the ResetSelectableHighlight (@FejZa)
|
||||||
|
- fix: Resolved an issue where the last line in a flow layout group would overflow the rect bounds.
|
||||||
|
- fix: GetPosition when Segments is null (@victornor)
|
||||||
|
- fix: Fix Bug! NicerOutline color.a Loss when m_UseGraphicAlpha is true (wanliyun)
|
||||||
|
- fix: Update to force Enumerated start for Accordion elements, Resolves: #455
|
||||||
|
- Added argument to the UpdateLayout method for the HSS/VSS to move to a new starting page.
|
||||||
|
- Updated implementations to handle 2023 support, with 2023 moving in to public release.
|
||||||
|
- Added extra event on the AutoCompleteComboBox, to fire when an item in the list is selected, with its display name.
|
||||||
|
- FlowLayoutGroup components updated to latest (likely the last as the author has stopped development)
|
||||||
|
|
||||||
|
## Deprecated
|
||||||
|
|
||||||
|
- All deprecated Text based components now have "obsolete" tags, to avoid breaking code. Note, these do not function in 2022 and above, as Unity have "changed" things. For any affected component, I recommend updating to use TextMeshPro native features.
|
||||||
|
|
||||||
|
- [UI Extensions Issue log](https://github.com/Unity-UI-Extensions/com.unity.uiextensions/issues)
|
||||||
|
|
||||||
|
## Upgrade Notes
|
||||||
|
|
||||||
|
We recommend using the UPM delivery method. If you are using the Unity asset, there should be no issues updating but if you have a problem, just deleted the old Unity-UI-Extensions folder and import the asset new.
|
||||||
|
|
||||||
|
# Document revision history
|
||||||
|
|
||||||
|
|Date|Details|
|
||||||
|
|-|-|
|
||||||
|
|July 9th, 2020|2019.4 (v2.2) released, first UPM deployment live |
|
||||||
|
|September 3rd, 2019|2019.1 (v2.1) released, First major update for the 2.0 series.|
|
||||||
|
|August 8th, 2020|2019.4 (v2.2) released, New UPM Delivery.|
|
||||||
|
|October 10th, 2020|2019.5 (v2.2) released, New UPM fast delivery|
|
||||||
|
|February 7th, 2022|v2.3 released, New Home, UPM fast delivery via OpenUPM|
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 539edee228eb76c40a9a5a1f7a165130
|
||||||
|
TextScriptImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
9
Assets/com.unity.uiextensions/Editor.meta
Normal file
9
Assets/com.unity.uiextensions/Editor.meta
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: b95396d565a2a7f478b12f8b9648ed8f
|
||||||
|
folderAsset: yes
|
||||||
|
timeCreated: 1467468503
|
||||||
|
licenseType: Pro
|
||||||
|
DefaultImporter:
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
///Credit ChoMPHi
|
||||||
|
///Sourced from - http://forum.unity3d.com/threads/accordion-type-layout.271818/
|
||||||
|
|
||||||
|
using UnityEditor;
|
||||||
|
using UnityEditor.UI;
|
||||||
|
|
||||||
|
namespace UnityEngine.UI.Extensions
|
||||||
|
{
|
||||||
|
[CustomEditor(typeof(AccordionElement), true)]
|
||||||
|
public class AccordionElementEditor : ToggleEditor {
|
||||||
|
|
||||||
|
public override void OnInspectorGUI()
|
||||||
|
{
|
||||||
|
this.serializedObject.Update();
|
||||||
|
EditorGUILayout.PropertyField(this.serializedObject.FindProperty("m_MinHeight"));
|
||||||
|
this.serializedObject.ApplyModifiedProperties();
|
||||||
|
|
||||||
|
base.serializedObject.Update();
|
||||||
|
EditorGUILayout.PropertyField(base.serializedObject.FindProperty("m_IsOn"));
|
||||||
|
EditorGUILayout.PropertyField(base.serializedObject.FindProperty("m_Interactable"));
|
||||||
|
base.serializedObject.ApplyModifiedProperties();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 8882b502b0c65b24ba4623d6a383815b
|
||||||
|
MonoImporter:
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
///Credit Jason Horsburgh
|
||||||
|
///Sourced from - https://bitbucket.org/UnityUIExtensions/unity-ui-extensions/issues/127/uilinerenderer-mesh-not-updating-in-editor
|
||||||
|
|
||||||
|
using UnityEditor;
|
||||||
|
|
||||||
|
namespace UnityEngine.UI.Extensions
|
||||||
|
{
|
||||||
|
[CustomEditor(typeof(UILineRenderer))]
|
||||||
|
public class BezierLineRendererEditor : Editor
|
||||||
|
{
|
||||||
|
void OnSceneGUI()
|
||||||
|
{
|
||||||
|
UILineRenderer curveRenderer = target as UILineRenderer;
|
||||||
|
|
||||||
|
if (!curveRenderer || curveRenderer.drivenExternally || curveRenderer.Points == null || curveRenderer.Points.Length < 2)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var oldMatrix = Handles.matrix;
|
||||||
|
var transform = curveRenderer.GetComponent<RectTransform>();
|
||||||
|
//Pivot must be 0,0 to edit
|
||||||
|
//transform.pivot = Vector2.zero;
|
||||||
|
Handles.matrix = transform.localToWorldMatrix;
|
||||||
|
|
||||||
|
var sizeX = curveRenderer.rectTransform.rect.width;
|
||||||
|
var sizeY = curveRenderer.rectTransform.rect.height;
|
||||||
|
var offsetX = -curveRenderer.rectTransform.pivot.x * sizeX;
|
||||||
|
var offsetY = -curveRenderer.rectTransform.pivot.y * sizeY;
|
||||||
|
|
||||||
|
Vector2[] points = new Vector2[curveRenderer.Points.Length];
|
||||||
|
for (int i = 0; i < curveRenderer.Points.Length; i++)
|
||||||
|
{
|
||||||
|
points[i] = curveRenderer.Points[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
//Need to transform points to worldspace! when set to Relative
|
||||||
|
if (curveRenderer.RelativeSize)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < points.Length; i++)
|
||||||
|
{
|
||||||
|
points[i] = new Vector2(points[i].x * sizeX + offsetX, points[i].y * sizeY + offsetY);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < points.Length - 1; i += 2)
|
||||||
|
{
|
||||||
|
Handles.DrawLine(points[i], points[i + 1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < points.Length; ++i)
|
||||||
|
{
|
||||||
|
using (var check = new EditorGUI.ChangeCheckScope())
|
||||||
|
{
|
||||||
|
var p = Handles.PositionHandle(points[i], Quaternion.identity);
|
||||||
|
|
||||||
|
if (check.changed)
|
||||||
|
{
|
||||||
|
Undo.RecordObject(curveRenderer, "Changed Curve Position");
|
||||||
|
if (curveRenderer.RelativeSize)
|
||||||
|
{
|
||||||
|
curveRenderer.Points[i] = new Vector2((p.x - offsetX) / sizeX, (p.y - offsetY) / sizeY);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
curveRenderer.Points[i] = p;
|
||||||
|
}
|
||||||
|
curveRenderer.transform.gameObject.SetActive(false);
|
||||||
|
curveRenderer.transform.gameObject.SetActive(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Handles.matrix = oldMatrix;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 4ef6a0d3c3259384982ae3974fe7e618
|
||||||
|
timeCreated: 1492258093
|
||||||
|
licenseType: Free
|
||||||
|
MonoImporter:
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
67
Assets/com.unity.uiextensions/Editor/BoxSliderEditor.cs
Normal file
67
Assets/com.unity.uiextensions/Editor/BoxSliderEditor.cs
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
///Credit judah4
|
||||||
|
///Sourced from - http://forum.unity3d.com/threads/color-picker.267043/
|
||||||
|
|
||||||
|
using UnityEditor;
|
||||||
|
using UnityEditor.UI;
|
||||||
|
|
||||||
|
namespace UnityEngine.UI.Extensions
|
||||||
|
{
|
||||||
|
[CustomEditor(typeof(BoxSlider), true)]
|
||||||
|
[CanEditMultipleObjects]
|
||||||
|
public class BoxSliderEditor : SelectableEditor
|
||||||
|
{
|
||||||
|
|
||||||
|
SerializedProperty m_HandleRect;
|
||||||
|
SerializedProperty m_MinValue;
|
||||||
|
SerializedProperty m_MaxValue;
|
||||||
|
SerializedProperty m_WholeNumbers;
|
||||||
|
SerializedProperty m_ValueX;
|
||||||
|
SerializedProperty m_ValueY;
|
||||||
|
SerializedProperty m_OnValueChanged;
|
||||||
|
|
||||||
|
protected override void OnEnable()
|
||||||
|
{
|
||||||
|
base.OnEnable();
|
||||||
|
m_HandleRect = serializedObject.FindProperty("m_HandleRect");
|
||||||
|
|
||||||
|
m_MinValue = serializedObject.FindProperty("m_MinValue");
|
||||||
|
m_MaxValue = serializedObject.FindProperty("m_MaxValue");
|
||||||
|
m_WholeNumbers = serializedObject.FindProperty("m_WholeNumbers");
|
||||||
|
m_ValueX = serializedObject.FindProperty("m_ValueX");
|
||||||
|
m_ValueY = serializedObject.FindProperty("m_ValueY");
|
||||||
|
m_OnValueChanged = serializedObject.FindProperty("m_OnValueChanged");
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnInspectorGUI()
|
||||||
|
{
|
||||||
|
base.OnInspectorGUI();
|
||||||
|
EditorGUILayout.Space();
|
||||||
|
|
||||||
|
serializedObject.Update();
|
||||||
|
|
||||||
|
EditorGUILayout.PropertyField(m_HandleRect);
|
||||||
|
|
||||||
|
if (m_HandleRect.objectReferenceValue != null)
|
||||||
|
{
|
||||||
|
EditorGUI.BeginChangeCheck();
|
||||||
|
|
||||||
|
|
||||||
|
EditorGUILayout.PropertyField(m_MinValue);
|
||||||
|
EditorGUILayout.PropertyField(m_MaxValue);
|
||||||
|
EditorGUILayout.PropertyField(m_WholeNumbers);
|
||||||
|
EditorGUILayout.Slider(m_ValueX, m_MinValue.floatValue, m_MaxValue.floatValue);
|
||||||
|
EditorGUILayout.Slider(m_ValueY, m_MinValue.floatValue, m_MaxValue.floatValue);
|
||||||
|
|
||||||
|
// Draw the event notification options
|
||||||
|
EditorGUILayout.Space();
|
||||||
|
EditorGUILayout.PropertyField(m_OnValueChanged);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
EditorGUILayout.HelpBox("Specify a RectTransform for the slider fill or the slider handle or both. Each must have a parent RectTransform that it can slide within.", MessageType.Info);
|
||||||
|
}
|
||||||
|
|
||||||
|
serializedObject.ApplyModifiedProperties();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
11
Assets/com.unity.uiextensions/Editor/BoxSliderEditor.cs.meta
Normal file
11
Assets/com.unity.uiextensions/Editor/BoxSliderEditor.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: c1047f9974e7ee1478bbf5490a7a62d8
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
59
Assets/com.unity.uiextensions/Editor/CUIBezierCurveEditor.cs
Normal file
59
Assets/com.unity.uiextensions/Editor/CUIBezierCurveEditor.cs
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
/// Credit Titinious (https://github.com/Titinious)
|
||||||
|
/// Sourced from - https://github.com/Titinious/CurlyUI
|
||||||
|
|
||||||
|
using UnityEditor;
|
||||||
|
|
||||||
|
namespace UnityEngine.UI.Extensions
|
||||||
|
{
|
||||||
|
[CustomEditor(typeof(CUIBezierCurve))]
|
||||||
|
[CanEditMultipleObjects]
|
||||||
|
public class CUIBezierCurveEditor : Editor
|
||||||
|
{
|
||||||
|
public override void OnInspectorGUI()
|
||||||
|
{
|
||||||
|
DrawDefaultInspector();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void OnSceneGUI()
|
||||||
|
{
|
||||||
|
CUIBezierCurve script = (CUIBezierCurve)this.target;
|
||||||
|
|
||||||
|
if (script.ControlPoints != null)
|
||||||
|
{
|
||||||
|
Vector3[] controlPoints = script.ControlPoints;
|
||||||
|
|
||||||
|
Transform handleTransform = script.transform;
|
||||||
|
Quaternion handleRotation = script.transform.rotation;
|
||||||
|
|
||||||
|
for (int p = 0; p < CUIBezierCurve.CubicBezierCurvePtNum; p++)
|
||||||
|
{
|
||||||
|
EditorGUI.BeginChangeCheck();
|
||||||
|
Vector3 newPt = Handles.DoPositionHandle(handleTransform.TransformPoint(controlPoints[p]), handleRotation);
|
||||||
|
if (EditorGUI.EndChangeCheck())
|
||||||
|
{
|
||||||
|
|
||||||
|
Undo.RecordObject(script, "Move Point");
|
||||||
|
EditorUtility.SetDirty(script);
|
||||||
|
controlPoints[p] = handleTransform.InverseTransformPoint(newPt);
|
||||||
|
script.Refresh();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Handles.color = Color.gray;
|
||||||
|
Handles.DrawLine(handleTransform.TransformPoint(controlPoints[0]), handleTransform.TransformPoint(controlPoints[1]));
|
||||||
|
Handles.DrawLine(handleTransform.TransformPoint(controlPoints[1]), handleTransform.TransformPoint(controlPoints[2]));
|
||||||
|
Handles.DrawLine(handleTransform.TransformPoint(controlPoints[2]), handleTransform.TransformPoint(controlPoints[3]));
|
||||||
|
|
||||||
|
int sampleSize = 10;
|
||||||
|
|
||||||
|
Handles.color = Color.white;
|
||||||
|
for (int s = 0; s < sampleSize; s++)
|
||||||
|
{
|
||||||
|
Handles.DrawLine(handleTransform.TransformPoint(script.GetPoint((float)s / sampleSize)), handleTransform.TransformPoint(script.GetPoint((float)(s + 1) / sampleSize)));
|
||||||
|
}
|
||||||
|
|
||||||
|
script.EDITOR_ControlPoints = controlPoints;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 40e01e4fb1e006b46a0f127c8a9907b3
|
||||||
|
timeCreated: 1485671367
|
||||||
|
licenseType: Pro
|
||||||
|
MonoImporter:
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
187
Assets/com.unity.uiextensions/Editor/CUIGraphicEditor.cs
Normal file
187
Assets/com.unity.uiextensions/Editor/CUIGraphicEditor.cs
Normal file
@@ -0,0 +1,187 @@
|
|||||||
|
/// Credit Titinious (https://github.com/Titinious)
|
||||||
|
/// Sourced from - https://github.com/Titinious/CurlyUI
|
||||||
|
|
||||||
|
using UnityEditor;
|
||||||
|
|
||||||
|
namespace UnityEngine.UI.Extensions
|
||||||
|
{
|
||||||
|
[CustomEditor(typeof(CUIGraphic), true)]
|
||||||
|
public class CUIGraphicEditor : Editor {
|
||||||
|
|
||||||
|
protected static bool isCurveGpFold = false;
|
||||||
|
|
||||||
|
protected Vector3[] reuse_Vector3s = new Vector3[4];
|
||||||
|
|
||||||
|
public override void OnInspectorGUI()
|
||||||
|
{
|
||||||
|
CUIGraphic script = (CUIGraphic)this.target;
|
||||||
|
|
||||||
|
EditorGUILayout.HelpBox("CurlyUI (CUI) should work with most of the Unity UI. For Image, use CUIImage; for Text, use CUIText; and for others (e.g. RawImage), use CUIGraphic", MessageType.Info);
|
||||||
|
|
||||||
|
if (script.UIGraphic == null)
|
||||||
|
{
|
||||||
|
EditorGUILayout.HelpBox("CUI is an extension to Unity's UI. You must set Ui Graphic with a Unity Graphic component (e.g. Image, Text, RawImage)", MessageType.Error);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (script.UIGraphic is Image && script.GetType() != typeof(CUIImage))
|
||||||
|
{
|
||||||
|
EditorGUILayout.HelpBox("Although CUI components are generalized. It is recommended that for Image, use CUIImage", MessageType.Warning);
|
||||||
|
}
|
||||||
|
else if (script.UIGraphic is Text && script.GetType() != typeof(CUIText))
|
||||||
|
{
|
||||||
|
EditorGUILayout.HelpBox("Although CUI components are generalized. It is recommended that for Text, use CUIText", MessageType.Warning);
|
||||||
|
}
|
||||||
|
|
||||||
|
EditorGUILayout.HelpBox("Now that CUI is ready, change the control points of the top and bottom bezier curves to curve/morph the UI. Improve resolution when the UI seems to look poorly when curved/morphed should help.", MessageType.Info);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
DrawDefaultInspector();
|
||||||
|
|
||||||
|
// draw the editor that shows the position ratio of all control points from the two bezier curves
|
||||||
|
isCurveGpFold = EditorGUILayout.Foldout(isCurveGpFold, "Curves Position Ratios");
|
||||||
|
if (isCurveGpFold)
|
||||||
|
{
|
||||||
|
EditorGUI.indentLevel++;
|
||||||
|
EditorGUILayout.LabelField("Top Curve");
|
||||||
|
EditorGUI.indentLevel++;
|
||||||
|
Vector3[] controlPoints = script.RefCurvesControlRatioPoints[1].array;
|
||||||
|
|
||||||
|
EditorGUI.BeginChangeCheck();
|
||||||
|
for (int p = 0; p < controlPoints.Length; p++)
|
||||||
|
{
|
||||||
|
reuse_Vector3s[p] = EditorGUILayout.Vector3Field(string.Format("Control Points {0}", p + 1), controlPoints[p]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (EditorGUI.EndChangeCheck())
|
||||||
|
{
|
||||||
|
Undo.RecordObject(script, "Change Ratio Points");
|
||||||
|
EditorUtility.SetDirty(script);
|
||||||
|
|
||||||
|
System.Array.Copy(reuse_Vector3s, script.RefCurvesControlRatioPoints[1].array, controlPoints.Length);
|
||||||
|
script.UpdateCurveControlPointPositions();
|
||||||
|
}
|
||||||
|
EditorGUI.indentLevel--;
|
||||||
|
EditorGUILayout.LabelField("Bottom Curve");
|
||||||
|
EditorGUI.indentLevel++;
|
||||||
|
controlPoints = script.RefCurvesControlRatioPoints[0].array;
|
||||||
|
|
||||||
|
EditorGUI.BeginChangeCheck();
|
||||||
|
for (int p = 0; p < controlPoints.Length; p++)
|
||||||
|
{
|
||||||
|
reuse_Vector3s[p] = EditorGUILayout.Vector3Field(string.Format("Control Points {0}", p + 1), controlPoints[p]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (EditorGUI.EndChangeCheck())
|
||||||
|
{
|
||||||
|
Undo.RecordObject(script, "Change Ratio Points");
|
||||||
|
EditorUtility.SetDirty(script);
|
||||||
|
|
||||||
|
System.Array.Copy(reuse_Vector3s, controlPoints, controlPoints.Length);
|
||||||
|
script.UpdateCurveControlPointPositions();
|
||||||
|
}
|
||||||
|
EditorGUI.indentLevel--;
|
||||||
|
EditorGUI.indentLevel--;
|
||||||
|
}
|
||||||
|
|
||||||
|
EditorGUILayout.Space();
|
||||||
|
if (GUILayout.Button("Fit Bezier curves to rect transform"))
|
||||||
|
{
|
||||||
|
Undo.RecordObject(script, "Fit to Rect Transform");
|
||||||
|
Undo.RecordObject(script.RefCurves[0], "Fit to Rect Transform");
|
||||||
|
Undo.RecordObject(script.RefCurves[1], "Fit to Rect Transform");
|
||||||
|
EditorUtility.SetDirty(script);
|
||||||
|
|
||||||
|
script.FixTextToRectTrans();
|
||||||
|
|
||||||
|
script.Refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
EditorGUILayout.Space();
|
||||||
|
|
||||||
|
// disable group to prevent allowing the reference be used when there is no reference CUI
|
||||||
|
EditorGUI.BeginDisabledGroup(script.RefCUIGraphic == null);
|
||||||
|
|
||||||
|
if (GUILayout.Button("Reference CUI component for curves"))
|
||||||
|
{
|
||||||
|
Undo.RecordObject(script, "Reference CUI");
|
||||||
|
Undo.RecordObject(script.RefCurves[0], "Reference CUI");
|
||||||
|
Undo.RecordObject(script.RefCurves[1], "Reference CUI");
|
||||||
|
EditorUtility.SetDirty(script);
|
||||||
|
|
||||||
|
script.ReferenceCUIForBCurves();
|
||||||
|
|
||||||
|
script.Refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
EditorGUILayout.HelpBox("Auto set the curves' control points by referencing another CUI. You need to set Ref CUI Graphic (e.g. CUIImage) first.", MessageType.Info);
|
||||||
|
|
||||||
|
EditorGUI.EndDisabledGroup();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void OnSceneGUI()
|
||||||
|
{
|
||||||
|
// for CUITextEditor, allow using scene UI to change the control points of the bezier curves
|
||||||
|
|
||||||
|
CUIGraphic script = (CUIGraphic)this.target;
|
||||||
|
|
||||||
|
script.ReportSet();
|
||||||
|
|
||||||
|
for (int c = 0; c < script.RefCurves.Length; c++)
|
||||||
|
{
|
||||||
|
|
||||||
|
CUIBezierCurve curve = script.RefCurves[c];
|
||||||
|
|
||||||
|
if (curve.ControlPoints != null)
|
||||||
|
{
|
||||||
|
|
||||||
|
Vector3[] controlPoints = curve.ControlPoints;
|
||||||
|
|
||||||
|
Transform handleTransform = curve.transform;
|
||||||
|
Quaternion handleRotation = curve.transform.rotation;
|
||||||
|
|
||||||
|
for (int p = 0; p < CUIBezierCurve.CubicBezierCurvePtNum; p++)
|
||||||
|
{
|
||||||
|
EditorGUI.BeginChangeCheck();
|
||||||
|
Handles.Label(handleTransform.TransformPoint(controlPoints[p]), string.Format("Control Point {0}", p + 1));
|
||||||
|
Vector3 newPt = Handles.DoPositionHandle(handleTransform.TransformPoint(controlPoints[p]), handleRotation);
|
||||||
|
if (EditorGUI.EndChangeCheck())
|
||||||
|
{
|
||||||
|
|
||||||
|
Undo.RecordObject(curve, "Move Point");
|
||||||
|
Undo.RecordObject(script, "Move Point");
|
||||||
|
EditorUtility.SetDirty(curve);
|
||||||
|
controlPoints[p] = handleTransform.InverseTransformPoint(newPt);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Handles.color = Color.gray;
|
||||||
|
Handles.DrawLine(handleTransform.TransformPoint(controlPoints[0]), handleTransform.TransformPoint(controlPoints[1]));
|
||||||
|
Handles.DrawLine(handleTransform.TransformPoint(controlPoints[1]), handleTransform.TransformPoint(controlPoints[2]));
|
||||||
|
Handles.DrawLine(handleTransform.TransformPoint(controlPoints[2]), handleTransform.TransformPoint(controlPoints[3]));
|
||||||
|
|
||||||
|
int sampleSize = 10;
|
||||||
|
|
||||||
|
Handles.color = Color.white;
|
||||||
|
for (int s = 0; s < sampleSize; s++)
|
||||||
|
{
|
||||||
|
Handles.DrawLine(handleTransform.TransformPoint(curve.GetPoint((float)s / sampleSize)), handleTransform.TransformPoint(curve.GetPoint((float)(s + 1) / sampleSize)));
|
||||||
|
}
|
||||||
|
|
||||||
|
curve.EDITOR_ControlPoints = controlPoints;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (script.RefCurves != null)
|
||||||
|
{
|
||||||
|
Handles.DrawLine(script.RefCurves[0].transform.TransformPoint(script.RefCurves[0].ControlPoints[0]), script.RefCurves[1].transform.TransformPoint(script.RefCurves[1].ControlPoints[0]));
|
||||||
|
Handles.DrawLine(script.RefCurves[0].transform.TransformPoint(script.RefCurves[0].ControlPoints[3]), script.RefCurves[1].transform.TransformPoint(script.RefCurves[1].ControlPoints[3]));
|
||||||
|
}
|
||||||
|
|
||||||
|
script.Refresh();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: b7b84624f1ba7bd49b6cfc63b25f4b7c
|
||||||
|
timeCreated: 1485671367
|
||||||
|
licenseType: Pro
|
||||||
|
MonoImporter:
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
93
Assets/com.unity.uiextensions/Editor/CUIImageEditor.cs
Normal file
93
Assets/com.unity.uiextensions/Editor/CUIImageEditor.cs
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
/// Credit Titinious (https://github.com/Titinious)
|
||||||
|
/// Sourced from - https://github.com/Titinious/CurlyUI
|
||||||
|
|
||||||
|
using UnityEditor;
|
||||||
|
|
||||||
|
namespace UnityEngine.UI.Extensions
|
||||||
|
{
|
||||||
|
[CustomEditor(typeof(CUIImage))]
|
||||||
|
public class CUIImageEditor : CUIGraphicEditor
|
||||||
|
{
|
||||||
|
public override void OnInspectorGUI()
|
||||||
|
{
|
||||||
|
base.OnInspectorGUI();
|
||||||
|
|
||||||
|
CUIImage script = (CUIImage)this.target;
|
||||||
|
|
||||||
|
EditorGUILayout.Space();
|
||||||
|
|
||||||
|
EditorGUI.BeginChangeCheck();
|
||||||
|
|
||||||
|
EditorGUI.BeginDisabledGroup(!(script.UIImage.type == Image.Type.Sliced || script.UIImage.type == Image.Type.Tiled));
|
||||||
|
Vector2 newCornerRatio = EditorGUILayout.Vector2Field("Corner Ratio", script.cornerPosRatio);
|
||||||
|
if (EditorGUI.EndChangeCheck())
|
||||||
|
{
|
||||||
|
Undo.RecordObject(script, "Change Corner Ratio");
|
||||||
|
EditorUtility.SetDirty(script);
|
||||||
|
script.cornerPosRatio = newCornerRatio;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (GUILayout.Button("Use native corner ratio"))
|
||||||
|
{
|
||||||
|
Undo.RecordObject(script, "Change Corner Ratio");
|
||||||
|
EditorUtility.SetDirty(script);
|
||||||
|
script.cornerPosRatio = script.OriCornerPosRatio;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (script.UIImage.type == Image.Type.Sliced || script.UIImage.type == Image.Type.Filled)
|
||||||
|
{
|
||||||
|
EditorGUILayout.HelpBox("With CUIImage, you can also adjust the size of the corners for filled or sliced Image. The grey sphere in the editor scene could also be moved to change the corner's size.", MessageType.Info);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
EditorGUILayout.HelpBox("With CUIImage, you can also adjust the size of the corners for filled or sliced Image. You need to set Image to filled or sliced to use this feature.", MessageType.Info);
|
||||||
|
}
|
||||||
|
|
||||||
|
EditorGUI.EndDisabledGroup();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnSceneGUI()
|
||||||
|
{
|
||||||
|
base.OnSceneGUI();
|
||||||
|
|
||||||
|
CUIImage script = (CUIImage)this.target;
|
||||||
|
|
||||||
|
if (script.UIImage.type == Image.Type.Sliced || script.UIImage.type == Image.Type.Tiled)
|
||||||
|
{
|
||||||
|
Vector3 cornerPos = Vector3.zero;//
|
||||||
|
|
||||||
|
if (script.IsCurved)
|
||||||
|
{
|
||||||
|
cornerPos = script.GetBCurveSandwichSpacePoint(script.cornerPosRatio.x, script.cornerPosRatio.y);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cornerPos.x = script.cornerPosRatio.x * script.RectTrans.rect.width - script.RectTrans.pivot.x * script.RectTrans.rect.width;
|
||||||
|
cornerPos.y = script.cornerPosRatio.y * script.RectTrans.rect.height - script.RectTrans.pivot.y * script.RectTrans.rect.height;
|
||||||
|
}
|
||||||
|
|
||||||
|
Handles.color = Color.gray;
|
||||||
|
EditorGUI.BeginChangeCheck();
|
||||||
|
#if UNITY_2022_1_OR_NEWER
|
||||||
|
Vector3 newCornerPos = Handles.FreeMoveHandle(script.transform.TransformPoint(cornerPos), HandleUtility.GetHandleSize(script.transform.TransformPoint(cornerPos)) / 7, Vector3.one, Handles.SphereHandleCap);
|
||||||
|
#else
|
||||||
|
Vector3 newCornerPos = Handles.FreeMoveHandle(script.transform.TransformPoint(cornerPos), script.transform.rotation, HandleUtility.GetHandleSize(script.transform.TransformPoint(cornerPos)) / 7, Vector3.one, Handles.SphereHandleCap);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
Handles.Label(newCornerPos, string.Format("Corner Mover"));
|
||||||
|
|
||||||
|
newCornerPos = script.transform.InverseTransformPoint(newCornerPos);
|
||||||
|
|
||||||
|
if (EditorGUI.EndChangeCheck())
|
||||||
|
{
|
||||||
|
Undo.RecordObject(script, "Move Corner");
|
||||||
|
EditorUtility.SetDirty(script);
|
||||||
|
|
||||||
|
script.cornerPosRatio = new Vector2(newCornerPos.x, newCornerPos.y);
|
||||||
|
script.cornerPosRatio.x = (script.cornerPosRatio.x + script.RectTrans.pivot.x * script.RectTrans.rect.width) / script.RectTrans.rect.width;
|
||||||
|
script.cornerPosRatio.y = (script.cornerPosRatio.y + script.RectTrans.pivot.y * script.RectTrans.rect.height) / script.RectTrans.rect.height;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
12
Assets/com.unity.uiextensions/Editor/CUIImageEditor.cs.meta
Normal file
12
Assets/com.unity.uiextensions/Editor/CUIImageEditor.cs.meta
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 8445204f2ee16e0408274b8400deef53
|
||||||
|
timeCreated: 1485929052
|
||||||
|
licenseType: Pro
|
||||||
|
MonoImporter:
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
10
Assets/com.unity.uiextensions/Editor/CUITextEditor.cs
Normal file
10
Assets/com.unity.uiextensions/Editor/CUITextEditor.cs
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
/// Credit Titinious (https://github.com/Titinious)
|
||||||
|
/// Sourced from - https://github.com/Titinious/CurlyUI
|
||||||
|
|
||||||
|
using UnityEditor;
|
||||||
|
|
||||||
|
namespace UnityEngine.UI.Extensions
|
||||||
|
{
|
||||||
|
[CustomEditor(typeof(CUIText))]
|
||||||
|
public class CUITextEditor : CUIGraphicEditor { }
|
||||||
|
}
|
||||||
12
Assets/com.unity.uiextensions/Editor/CUITextEditor.cs.meta
Normal file
12
Assets/com.unity.uiextensions/Editor/CUITextEditor.cs.meta
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 041976c43b8439747a030b45a4712b77
|
||||||
|
timeCreated: 1485929052
|
||||||
|
licenseType: Pro
|
||||||
|
MonoImporter:
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
120
Assets/com.unity.uiextensions/Editor/CanvasGroupActivator.cs
Normal file
120
Assets/com.unity.uiextensions/Editor/CanvasGroupActivator.cs
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
/// Credit dakka
|
||||||
|
/// Sourced from - http://forum.unity3d.com/threads/scripts-useful-4-6-scripts-collection.264161/#post-1752415
|
||||||
|
/// Notes - Mod from Yilmaz Kiymaz's editor scripts presentation at Unite 2013
|
||||||
|
/// Updated simonDarksideJ - removed Linq use, not required.
|
||||||
|
|
||||||
|
using UnityEditor;
|
||||||
|
|
||||||
|
namespace UnityEngine.UI.Extensions
|
||||||
|
{
|
||||||
|
public class CanvasGroupActivator : EditorWindow
|
||||||
|
{
|
||||||
|
[MenuItem("Window/UI/Extensions/Canvas Groups Activator")]
|
||||||
|
public static void InitWindow()
|
||||||
|
{
|
||||||
|
EditorWindow.GetWindow<CanvasGroupActivator>();
|
||||||
|
}
|
||||||
|
|
||||||
|
CanvasGroup[] canvasGroups;
|
||||||
|
|
||||||
|
void OnEnable()
|
||||||
|
{
|
||||||
|
ObtainCanvasGroups();
|
||||||
|
}
|
||||||
|
|
||||||
|
void OnFocus()
|
||||||
|
{
|
||||||
|
ObtainCanvasGroups();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ObtainCanvasGroups()
|
||||||
|
{
|
||||||
|
#if UNITY_2023_1_OR_NEWER
|
||||||
|
canvasGroups = GameObject.FindObjectsByType<CanvasGroup>(FindObjectsSortMode.None);
|
||||||
|
#else
|
||||||
|
canvasGroups = GameObject.FindObjectsOfType<CanvasGroup>();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void OnGUI()
|
||||||
|
{
|
||||||
|
if (canvasGroups == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
GUILayout.Space(10f);
|
||||||
|
GUILayout.Label("Canvas Groups");
|
||||||
|
|
||||||
|
for (int i = 0; i < canvasGroups.Length; i++)
|
||||||
|
{
|
||||||
|
if (canvasGroups[i] == null) { continue; }
|
||||||
|
|
||||||
|
bool initialActive = false;
|
||||||
|
if (canvasGroups[i].alpha == 1.0f)
|
||||||
|
initialActive = true;
|
||||||
|
|
||||||
|
bool active = EditorGUILayout.Toggle(canvasGroups[i].name, initialActive);
|
||||||
|
if (active != initialActive)
|
||||||
|
{
|
||||||
|
//If deactivated and initially active
|
||||||
|
if (!active && initialActive)
|
||||||
|
{
|
||||||
|
//Deactivate this
|
||||||
|
canvasGroups[i].alpha = 0f;
|
||||||
|
canvasGroups[i].interactable = false;
|
||||||
|
canvasGroups[i].blocksRaycasts = false;
|
||||||
|
}
|
||||||
|
//If activated and initially deactivate
|
||||||
|
else if (active && !initialActive)
|
||||||
|
{
|
||||||
|
//Deactivate all others and activate this
|
||||||
|
HideAllGroups();
|
||||||
|
|
||||||
|
canvasGroups[i].alpha = 1.0f;
|
||||||
|
canvasGroups[i].interactable = true;
|
||||||
|
canvasGroups[i].blocksRaycasts = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
GUILayout.Space(5f);
|
||||||
|
|
||||||
|
if (GUILayout.Button("Show All"))
|
||||||
|
{
|
||||||
|
ShowAllGroups();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (GUILayout.Button("Hide All"))
|
||||||
|
{
|
||||||
|
HideAllGroups();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShowAllGroups()
|
||||||
|
{
|
||||||
|
foreach (var group in canvasGroups)
|
||||||
|
{
|
||||||
|
if (group != null)
|
||||||
|
{
|
||||||
|
group.alpha = 1.0f;
|
||||||
|
group.interactable = true;
|
||||||
|
group.blocksRaycasts = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void HideAllGroups()
|
||||||
|
{
|
||||||
|
foreach (var group in canvasGroups)
|
||||||
|
{
|
||||||
|
if (group != null)
|
||||||
|
{
|
||||||
|
group.alpha = 0;
|
||||||
|
group.interactable = false;
|
||||||
|
group.blocksRaycasts = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: f60a419e63d329f43ba1bf57e98b34bf
|
||||||
|
MonoImporter:
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
using UnityEditor;
|
||||||
|
|
||||||
|
namespace UnityEngine.UI.Extensions.ColorPicker
|
||||||
|
{
|
||||||
|
[CustomEditor(typeof(ColorPickerPresets))]
|
||||||
|
public class ColorPickerPresetsEditor : Editor
|
||||||
|
{
|
||||||
|
public override void OnInspectorGUI()
|
||||||
|
{
|
||||||
|
base.OnInspectorGUI();
|
||||||
|
|
||||||
|
var colorPickerPresets = (ColorPickerPresets)target;
|
||||||
|
if (colorPickerPresets.saveMode != ColorPickerPresets.SaveType.JsonFile)
|
||||||
|
return;
|
||||||
|
|
||||||
|
string fileLocation = colorPickerPresets.JsonFilePath;
|
||||||
|
|
||||||
|
if (!System.IO.File.Exists(fileLocation))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (GUILayout.Button("Open JSON file."))
|
||||||
|
{
|
||||||
|
Application.OpenURL(fileLocation);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 0dc729b738fb01043ac4c04b78575a98
|
||||||
|
timeCreated: 1520733906
|
||||||
|
licenseType: Pro
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 77a80d348c62e93459753f8e704f474d
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,119 @@
|
|||||||
|
/// Credit setchi (https://github.com/setchi)
|
||||||
|
/// Sourced from - https://github.com/setchi/FancyScrollView
|
||||||
|
|
||||||
|
using UnityEditor;
|
||||||
|
using UnityEditor.AnimatedValues;
|
||||||
|
|
||||||
|
namespace UnityEngine.UI.Extensions
|
||||||
|
{
|
||||||
|
[CustomEditor(typeof(Scroller))]
|
||||||
|
[CanEditMultipleObjects]
|
||||||
|
public class ScrollerEditor : Editor
|
||||||
|
{
|
||||||
|
SerializedProperty viewport;
|
||||||
|
SerializedProperty scrollDirection;
|
||||||
|
SerializedProperty movementType;
|
||||||
|
SerializedProperty elasticity;
|
||||||
|
SerializedProperty scrollSensitivity;
|
||||||
|
SerializedProperty inertia;
|
||||||
|
SerializedProperty decelerationRate;
|
||||||
|
SerializedProperty snap;
|
||||||
|
SerializedProperty draggable;
|
||||||
|
SerializedProperty scrollbar;
|
||||||
|
|
||||||
|
AnimBool showElasticity;
|
||||||
|
AnimBool showInertiaRelatedValues;
|
||||||
|
|
||||||
|
void OnEnable()
|
||||||
|
{
|
||||||
|
viewport = serializedObject.FindProperty("viewport");
|
||||||
|
scrollDirection = serializedObject.FindProperty("scrollDirection");
|
||||||
|
movementType = serializedObject.FindProperty("movementType");
|
||||||
|
elasticity = serializedObject.FindProperty("elasticity");
|
||||||
|
scrollSensitivity = serializedObject.FindProperty("scrollSensitivity");
|
||||||
|
inertia = serializedObject.FindProperty("inertia");
|
||||||
|
decelerationRate = serializedObject.FindProperty("decelerationRate");
|
||||||
|
snap = serializedObject.FindProperty("snap");
|
||||||
|
draggable = serializedObject.FindProperty("draggable");
|
||||||
|
scrollbar = serializedObject.FindProperty("scrollbar");
|
||||||
|
|
||||||
|
showElasticity = new AnimBool(Repaint);
|
||||||
|
showInertiaRelatedValues = new AnimBool(Repaint);
|
||||||
|
SetAnimBools(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void OnDisable()
|
||||||
|
{
|
||||||
|
showElasticity.valueChanged.RemoveListener(Repaint);
|
||||||
|
showInertiaRelatedValues.valueChanged.RemoveListener(Repaint);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetAnimBools(bool instant)
|
||||||
|
{
|
||||||
|
SetAnimBool(showElasticity, !movementType.hasMultipleDifferentValues && movementType.enumValueIndex == (int)MovementType.Elastic, instant);
|
||||||
|
SetAnimBool(showInertiaRelatedValues, !inertia.hasMultipleDifferentValues && inertia.boolValue, instant);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetAnimBool(AnimBool a, bool value, bool instant)
|
||||||
|
{
|
||||||
|
if (instant)
|
||||||
|
{
|
||||||
|
a.value = value;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
a.target = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnInspectorGUI()
|
||||||
|
{
|
||||||
|
SetAnimBools(false);
|
||||||
|
|
||||||
|
serializedObject.Update();
|
||||||
|
EditorGUILayout.PropertyField(viewport);
|
||||||
|
EditorGUILayout.PropertyField(scrollDirection);
|
||||||
|
EditorGUILayout.PropertyField(movementType);
|
||||||
|
DrawMovementTypeRelatedValue();
|
||||||
|
EditorGUILayout.PropertyField(scrollSensitivity);
|
||||||
|
EditorGUILayout.PropertyField(inertia);
|
||||||
|
DrawInertiaRelatedValues();
|
||||||
|
EditorGUILayout.PropertyField(draggable);
|
||||||
|
EditorGUILayout.PropertyField(scrollbar);
|
||||||
|
serializedObject.ApplyModifiedProperties();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DrawMovementTypeRelatedValue()
|
||||||
|
{
|
||||||
|
using (var group = new EditorGUILayout.FadeGroupScope(showElasticity.faded))
|
||||||
|
{
|
||||||
|
if (!group.visible)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
using (new EditorGUI.IndentLevelScope())
|
||||||
|
{
|
||||||
|
EditorGUILayout.PropertyField(elasticity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DrawInertiaRelatedValues()
|
||||||
|
{
|
||||||
|
using (var group = new EditorGUILayout.FadeGroupScope(showInertiaRelatedValues.faded))
|
||||||
|
{
|
||||||
|
if (!group.visible)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
using (new EditorGUI.IndentLevelScope())
|
||||||
|
{
|
||||||
|
EditorGUILayout.PropertyField(decelerationRate);
|
||||||
|
EditorGUILayout.PropertyField(snap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: e82bfdd42ec254849830933cbaf350fa
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
121
Assets/com.unity.uiextensions/Editor/MinMaxSliderEditor.cs
Normal file
121
Assets/com.unity.uiextensions/Editor/MinMaxSliderEditor.cs
Normal file
@@ -0,0 +1,121 @@
|
|||||||
|
///Credit brogan89
|
||||||
|
///Sourced from - https://github.com/brogan89/MinMaxSlider
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using UnityEditor;
|
||||||
|
using UnityEditor.UI;
|
||||||
|
|
||||||
|
namespace UnityEngine.UI.Extensions
|
||||||
|
{
|
||||||
|
[CustomEditor(typeof(MinMaxSlider), true)]
|
||||||
|
[CanEditMultipleObjects]
|
||||||
|
public class MinMaxSliderEditor : SelectableEditor
|
||||||
|
{
|
||||||
|
private SerializedProperty _customCamera;
|
||||||
|
private SerializedProperty _sliderBounds;
|
||||||
|
private SerializedProperty _minHandle;
|
||||||
|
private SerializedProperty _maxHandle;
|
||||||
|
private SerializedProperty _minText;
|
||||||
|
private SerializedProperty _maxText;
|
||||||
|
private SerializedProperty _textFormat;
|
||||||
|
private SerializedProperty _middleGraphic;
|
||||||
|
private SerializedProperty _minLimit;
|
||||||
|
private SerializedProperty _maxLimit;
|
||||||
|
private SerializedProperty _wholeNumbers;
|
||||||
|
private SerializedProperty _minValue;
|
||||||
|
private SerializedProperty _maxValue;
|
||||||
|
|
||||||
|
private SerializedProperty _onValueChanged;
|
||||||
|
|
||||||
|
private readonly GUIContent label = new GUIContent("Min Max Values");
|
||||||
|
|
||||||
|
protected override void OnEnable()
|
||||||
|
{
|
||||||
|
base.OnEnable();
|
||||||
|
_customCamera = serializedObject.FindProperty("customCamera");
|
||||||
|
_sliderBounds = serializedObject.FindProperty("sliderBounds");
|
||||||
|
_minHandle = serializedObject.FindProperty("minHandle");
|
||||||
|
_maxHandle = serializedObject.FindProperty("maxHandle");
|
||||||
|
_minText = serializedObject.FindProperty("minText");
|
||||||
|
_maxText = serializedObject.FindProperty("maxText");
|
||||||
|
_textFormat = serializedObject.FindProperty("textFormat");
|
||||||
|
_middleGraphic = serializedObject.FindProperty("middleGraphic");
|
||||||
|
_minLimit = serializedObject.FindProperty("minLimit");
|
||||||
|
_maxLimit = serializedObject.FindProperty("maxLimit");
|
||||||
|
_wholeNumbers = serializedObject.FindProperty("wholeNumbers");
|
||||||
|
_minValue = serializedObject.FindProperty("minValue");
|
||||||
|
_maxValue = serializedObject.FindProperty("maxValue");
|
||||||
|
_onValueChanged = serializedObject.FindProperty("onValueChanged");
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnInspectorGUI()
|
||||||
|
{
|
||||||
|
base.OnInspectorGUI();
|
||||||
|
|
||||||
|
serializedObject.Update();
|
||||||
|
|
||||||
|
float minLimitOld = _minLimit.floatValue;
|
||||||
|
float maxLimitOld = _maxLimit.floatValue;
|
||||||
|
float minValueOld = _minValue.floatValue;
|
||||||
|
float maxValueOld = _maxValue.floatValue;
|
||||||
|
|
||||||
|
EditorGUILayout.PropertyField(_customCamera);
|
||||||
|
EditorGUILayout.PropertyField(_sliderBounds);
|
||||||
|
EditorGUILayout.PropertyField(_minHandle);
|
||||||
|
EditorGUILayout.PropertyField(_maxHandle);
|
||||||
|
EditorGUILayout.PropertyField(_middleGraphic);
|
||||||
|
|
||||||
|
EditorGUILayout.PropertyField(_minText);
|
||||||
|
EditorGUILayout.PropertyField(_maxText);
|
||||||
|
EditorGUILayout.PropertyField(_textFormat);
|
||||||
|
|
||||||
|
EditorGUILayout.PropertyField(_minLimit);
|
||||||
|
EditorGUILayout.PropertyField(_maxLimit);
|
||||||
|
|
||||||
|
EditorGUILayout.PropertyField(_wholeNumbers);
|
||||||
|
EditorGUILayout.PropertyField(_minValue);
|
||||||
|
EditorGUILayout.PropertyField(_maxValue);
|
||||||
|
|
||||||
|
float minValue = Mathf.Clamp(_minValue.floatValue, _minLimit.floatValue, _maxLimit.floatValue);
|
||||||
|
float maxValue = Mathf.Clamp(_maxValue.floatValue, _minLimit.floatValue, _maxLimit.floatValue);
|
||||||
|
EditorGUILayout.MinMaxSlider(label, ref minValue, ref maxValue, _minLimit.floatValue, _maxLimit.floatValue);
|
||||||
|
|
||||||
|
bool anyValueChanged = !IsEqualFloat(minValueOld, minValue)
|
||||||
|
|| !IsEqualFloat(maxValueOld, maxValue)
|
||||||
|
|| !IsEqualFloat(minLimitOld, _minLimit.floatValue)
|
||||||
|
|| !IsEqualFloat(maxLimitOld, _maxLimit.floatValue);
|
||||||
|
|
||||||
|
if (anyValueChanged)
|
||||||
|
{
|
||||||
|
MinMaxSlider slider = (MinMaxSlider)target;
|
||||||
|
|
||||||
|
// force limits to ints if whole numbers.
|
||||||
|
// needed to do this here because it wouldn't set in component script for some reason
|
||||||
|
if (slider.wholeNumbers)
|
||||||
|
{
|
||||||
|
_minLimit.floatValue = Mathf.RoundToInt(_minLimit.floatValue);
|
||||||
|
_maxLimit.floatValue = Mathf.RoundToInt(_maxLimit.floatValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
// set slider values
|
||||||
|
slider.SetValues(minValue, maxValue, _minLimit.floatValue, _maxLimit.floatValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
EditorGUILayout.Space();
|
||||||
|
EditorGUILayout.PropertyField(_onValueChanged);
|
||||||
|
|
||||||
|
serializedObject.ApplyModifiedProperties();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns true if floating point numbers are within 0.01f (close enough to be considered equal)
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="a"></param>
|
||||||
|
/// <param name="b"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
private static bool IsEqualFloat(float a, float b)
|
||||||
|
{
|
||||||
|
return Math.Abs(a - b) < 0.01f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 69352ed1561021b48ac258f81f48a988
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
/// Credit Slipp Douglas Thompson
|
||||||
|
/// Sourced from - https://gist.github.com/capnslipp/349c18283f2fea316369
|
||||||
|
///
|
||||||
|
using UnityEditor;
|
||||||
|
using UnityEditor.UI;
|
||||||
|
|
||||||
|
namespace UnityEngine.UI.Extensions
|
||||||
|
{
|
||||||
|
[CanEditMultipleObjects, CustomEditor(typeof(NonDrawingGraphic), false)]
|
||||||
|
public class NonDrawingGraphicEditor : GraphicEditor
|
||||||
|
{
|
||||||
|
public override void OnInspectorGUI()
|
||||||
|
{
|
||||||
|
base.serializedObject.Update();
|
||||||
|
EditorGUILayout.PropertyField(base.m_Script, new GUILayoutOption[0]);
|
||||||
|
// skipping AppearanceControlsGUI
|
||||||
|
base.RaycastControlsGUI();
|
||||||
|
base.serializedObject.ApplyModifiedProperties();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: ee2802949feca4c4c934331b6a0dc379
|
||||||
|
timeCreated: 1483566748
|
||||||
|
licenseType: Free
|
||||||
|
MonoImporter:
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
134
Assets/com.unity.uiextensions/Editor/RangeSliderEditor.cs
Normal file
134
Assets/com.unity.uiextensions/Editor/RangeSliderEditor.cs
Normal file
@@ -0,0 +1,134 @@
|
|||||||
|
/// Credit Ben MacKinnon @Dover8
|
||||||
|
/// Sourced from - https://github.com/Dover8/Unity-UI-Extensions/tree/range-slider
|
||||||
|
/// Usage: Extension of the standard slider. Two handles determine a low and high value between a Min and Max.
|
||||||
|
/// Raises a UnityEvent passing the low and high values
|
||||||
|
|
||||||
|
using UnityEditor;
|
||||||
|
using UnityEditor.UI;
|
||||||
|
|
||||||
|
namespace UnityEngine.UI.Extensions
|
||||||
|
{
|
||||||
|
[CustomEditor(typeof(RangeSlider), true)]
|
||||||
|
[CanEditMultipleObjects]
|
||||||
|
public class RangeSliderEditor : SelectableEditor
|
||||||
|
{
|
||||||
|
SerializedProperty m_Direction;
|
||||||
|
SerializedProperty m_LowHandleRect;
|
||||||
|
SerializedProperty m_HighHandleRect;
|
||||||
|
SerializedProperty m_FillRect;
|
||||||
|
|
||||||
|
SerializedProperty m_MinValue;
|
||||||
|
SerializedProperty m_MaxValue;
|
||||||
|
SerializedProperty m_WholeNumbers;
|
||||||
|
|
||||||
|
SerializedProperty m_LowValue;
|
||||||
|
SerializedProperty m_HighValue;
|
||||||
|
|
||||||
|
//need ref values for the editor MinMaxSlider
|
||||||
|
float low = 0;
|
||||||
|
float high = 1;
|
||||||
|
|
||||||
|
SerializedProperty m_OnValueChanged;
|
||||||
|
|
||||||
|
|
||||||
|
protected override void OnEnable()
|
||||||
|
{
|
||||||
|
base.OnEnable();
|
||||||
|
m_LowHandleRect = serializedObject.FindProperty("m_LowHandleRect");
|
||||||
|
m_HighHandleRect = serializedObject.FindProperty("m_HighHandleRect");
|
||||||
|
m_FillRect = serializedObject.FindProperty("m_FillRect");
|
||||||
|
m_Direction = serializedObject.FindProperty("m_Direction");
|
||||||
|
|
||||||
|
m_MinValue = serializedObject.FindProperty("m_MinValue");
|
||||||
|
m_MaxValue = serializedObject.FindProperty("m_MaxValue");
|
||||||
|
m_WholeNumbers = serializedObject.FindProperty("m_WholeNumbers");
|
||||||
|
|
||||||
|
m_LowValue = serializedObject.FindProperty("m_LowValue");
|
||||||
|
low = m_LowValue.floatValue;
|
||||||
|
m_HighValue = serializedObject.FindProperty("m_HighValue");
|
||||||
|
high = m_HighValue.floatValue;
|
||||||
|
|
||||||
|
m_OnValueChanged = serializedObject.FindProperty("m_OnValueChanged");
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnInspectorGUI()
|
||||||
|
{
|
||||||
|
base.OnInspectorGUI();
|
||||||
|
EditorGUILayout.Space();
|
||||||
|
|
||||||
|
serializedObject.Update();
|
||||||
|
//grab the updated value affected by m_WholeNumbers
|
||||||
|
low = m_LowValue.floatValue;
|
||||||
|
high = m_HighValue.floatValue;
|
||||||
|
|
||||||
|
EditorGUILayout.PropertyField(m_LowHandleRect);
|
||||||
|
EditorGUILayout.PropertyField(m_HighHandleRect);
|
||||||
|
EditorGUILayout.PropertyField(m_FillRect);
|
||||||
|
|
||||||
|
if (m_LowHandleRect.objectReferenceValue != null && m_HighHandleRect.objectReferenceValue != null)
|
||||||
|
{
|
||||||
|
EditorGUI.BeginChangeCheck();
|
||||||
|
EditorGUILayout.PropertyField(m_Direction);
|
||||||
|
if (EditorGUI.EndChangeCheck())
|
||||||
|
{
|
||||||
|
RangeSlider.Direction direction = (RangeSlider.Direction)m_Direction.enumValueIndex;
|
||||||
|
foreach (var obj in serializedObject.targetObjects)
|
||||||
|
{
|
||||||
|
RangeSlider rangeSlider = obj as RangeSlider;
|
||||||
|
rangeSlider.SetDirection(direction, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
EditorGUILayout.PropertyField(m_MinValue);
|
||||||
|
EditorGUILayout.PropertyField(m_MaxValue);
|
||||||
|
EditorGUILayout.PropertyField(m_WholeNumbers);
|
||||||
|
|
||||||
|
//We're going to do a fair bit of layout here
|
||||||
|
EditorGUILayout.BeginHorizontal();
|
||||||
|
//Low Label and value
|
||||||
|
EditorGUILayout.BeginVertical();
|
||||||
|
EditorGUILayout.BeginHorizontal();
|
||||||
|
GUILayout.FlexibleSpace();
|
||||||
|
GUILayout.Label("Low");
|
||||||
|
GUILayout.FlexibleSpace();
|
||||||
|
EditorGUILayout.EndHorizontal();
|
||||||
|
low = EditorGUILayout.DelayedFloatField(low, GUILayout.MaxWidth(100));
|
||||||
|
EditorGUILayout.EndVertical();
|
||||||
|
|
||||||
|
GUILayout.FlexibleSpace();
|
||||||
|
|
||||||
|
//Slider
|
||||||
|
EditorGUILayout.BeginVertical();
|
||||||
|
GUILayout.FlexibleSpace();
|
||||||
|
EditorGUILayout.MinMaxSlider(ref low, ref high, m_MinValue.floatValue, m_MaxValue.floatValue, GUILayout.ExpandWidth(true));
|
||||||
|
EditorGUILayout.EndVertical();
|
||||||
|
|
||||||
|
GUILayout.FlexibleSpace();
|
||||||
|
|
||||||
|
//High label and value
|
||||||
|
EditorGUILayout.BeginVertical();
|
||||||
|
EditorGUILayout.BeginHorizontal();
|
||||||
|
GUILayout.FlexibleSpace();
|
||||||
|
GUILayout.Label("High");
|
||||||
|
GUILayout.FlexibleSpace();
|
||||||
|
EditorGUILayout.EndHorizontal();
|
||||||
|
high = EditorGUILayout.DelayedFloatField(high, GUILayout.MaxWidth(100));
|
||||||
|
EditorGUILayout.EndVertical();
|
||||||
|
EditorGUILayout.EndHorizontal();
|
||||||
|
|
||||||
|
m_LowValue.floatValue = low;
|
||||||
|
m_HighValue.floatValue = high;
|
||||||
|
|
||||||
|
EditorGUILayout.Space();
|
||||||
|
EditorGUILayout.PropertyField(m_OnValueChanged);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
EditorGUILayout.HelpBox("Specify a RectTransform for the RangeSlider fill or the RangeSlider handles or both. Each must have a parent RectTransform that it can slide within.", MessageType.Info);
|
||||||
|
}
|
||||||
|
|
||||||
|
serializedObject.ApplyModifiedProperties();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: ac33445ed95315743983e4b657921146
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
19
Assets/com.unity.uiextensions/Editor/ReadOnlyDrawer.cs
Normal file
19
Assets/com.unity.uiextensions/Editor/ReadOnlyDrawer.cs
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
/// Credit tanoshimi
|
||||||
|
/// Sourced from - https://forum.unity3d.com/threads/read-only-fields.68976/
|
||||||
|
///
|
||||||
|
using UnityEditor;
|
||||||
|
|
||||||
|
namespace UnityEngine.UI.Extensions
|
||||||
|
{
|
||||||
|
[CustomPropertyDrawer(typeof(ReadOnlyAttribute))]
|
||||||
|
public class ReadOnlyDrawer : PropertyDrawer
|
||||||
|
{
|
||||||
|
|
||||||
|
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
|
||||||
|
{
|
||||||
|
GUI.enabled = false;
|
||||||
|
EditorGUI.PropertyField(position, property, label, true);
|
||||||
|
GUI.enabled = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
12
Assets/com.unity.uiextensions/Editor/ReadOnlyDrawer.cs.meta
Normal file
12
Assets/com.unity.uiextensions/Editor/ReadOnlyDrawer.cs.meta
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 33c90f5149877a242981372f6cde9a35
|
||||||
|
timeCreated: 1498392707
|
||||||
|
licenseType: Free
|
||||||
|
MonoImporter:
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,87 @@
|
|||||||
|
/// Credit setchi (https://github.com/setchi)
|
||||||
|
/// Sourced from - https://github.com/setchi/FancyScrollView
|
||||||
|
|
||||||
|
// For maintenance, every new [SerializeField] variable in ScrollPositionController must be declared here
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using UnityEditor;
|
||||||
|
|
||||||
|
namespace UnityEngine.UI.Extensions
|
||||||
|
{
|
||||||
|
[Obsolete("ScrollPositionController has been replaced by the Scroller component", true)]
|
||||||
|
[CustomEditor(typeof(ScrollPositionController))]
|
||||||
|
[CanEditMultipleObjects]
|
||||||
|
public class ScrollPositionControllerEditor : Editor
|
||||||
|
{
|
||||||
|
SerializedProperty viewport;
|
||||||
|
SerializedProperty directionOfRecognize;
|
||||||
|
SerializedProperty movementType;
|
||||||
|
SerializedProperty elasticity;
|
||||||
|
SerializedProperty scrollSensitivity;
|
||||||
|
SerializedProperty inertia;
|
||||||
|
SerializedProperty decelerationRate;
|
||||||
|
SerializedProperty snap;
|
||||||
|
SerializedProperty snapEnable;
|
||||||
|
SerializedProperty snapVelocityThreshold;
|
||||||
|
SerializedProperty snapDuration;
|
||||||
|
SerializedProperty dataCount;
|
||||||
|
|
||||||
|
void OnEnable()
|
||||||
|
{
|
||||||
|
viewport = serializedObject.FindProperty("viewport");
|
||||||
|
directionOfRecognize = serializedObject.FindProperty("directionOfRecognize");
|
||||||
|
movementType = serializedObject.FindProperty("movementType");
|
||||||
|
elasticity = serializedObject.FindProperty("elasticity");
|
||||||
|
scrollSensitivity = serializedObject.FindProperty("scrollSensitivity");
|
||||||
|
inertia = serializedObject.FindProperty("inertia");
|
||||||
|
decelerationRate = serializedObject.FindProperty("decelerationRate");
|
||||||
|
snap = serializedObject.FindProperty("snap");
|
||||||
|
snapEnable = serializedObject.FindProperty("snap.Enable");
|
||||||
|
snapVelocityThreshold = serializedObject.FindProperty("snap.VelocityThreshold");
|
||||||
|
snapDuration = serializedObject.FindProperty("snap.Duration");
|
||||||
|
dataCount = serializedObject.FindProperty("dataCount");
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnInspectorGUI()
|
||||||
|
{
|
||||||
|
serializedObject.Update();
|
||||||
|
EditorGUILayout.PropertyField(viewport);
|
||||||
|
EditorGUILayout.PropertyField(directionOfRecognize);
|
||||||
|
EditorGUILayout.PropertyField(movementType);
|
||||||
|
EditorGUILayout.PropertyField(elasticity);
|
||||||
|
EditorGUILayout.PropertyField(scrollSensitivity);
|
||||||
|
EditorGUILayout.PropertyField(inertia);
|
||||||
|
DrawInertiaRelatedValues();
|
||||||
|
EditorGUILayout.PropertyField(dataCount);
|
||||||
|
serializedObject.ApplyModifiedProperties();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DrawInertiaRelatedValues()
|
||||||
|
{
|
||||||
|
if (inertia.boolValue)
|
||||||
|
{
|
||||||
|
EditorGUILayout.PropertyField(decelerationRate);
|
||||||
|
EditorGUILayout.PropertyField(snap);
|
||||||
|
|
||||||
|
using (new EditorGUI.IndentLevelScope())
|
||||||
|
{
|
||||||
|
DrawSnapRelatedValues();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DrawSnapRelatedValues()
|
||||||
|
{
|
||||||
|
if (snap.isExpanded)
|
||||||
|
{
|
||||||
|
EditorGUILayout.PropertyField(snapEnable);
|
||||||
|
|
||||||
|
if (snapEnable.boolValue)
|
||||||
|
{
|
||||||
|
EditorGUILayout.PropertyField(snapVelocityThreshold);
|
||||||
|
EditorGUILayout.PropertyField(snapDuration);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 986fda6476737da458576709b7f59ea3
|
||||||
|
timeCreated: 1508699683
|
||||||
|
licenseType: Pro
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
38
Assets/com.unity.uiextensions/Editor/TextPicEditor.cs
Normal file
38
Assets/com.unity.uiextensions/Editor/TextPicEditor.cs
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
/// Credit drobina, w34edrtfg, playemgames
|
||||||
|
/// Sourced from - http://forum.unity3d.com/threads/sprite-icons-with-text-e-g-emoticons.265927/
|
||||||
|
|
||||||
|
using UnityEditor;
|
||||||
|
|
||||||
|
namespace UnityEngine.UI.Extensions
|
||||||
|
{
|
||||||
|
[CanEditMultipleObjects]
|
||||||
|
[CustomEditor(typeof(TextPic))]
|
||||||
|
public class TextPicEditor : UnityEditor.UI.TextEditor
|
||||||
|
{
|
||||||
|
|
||||||
|
private SerializedProperty ImageScalingFactorProp;
|
||||||
|
private SerializedProperty hyperlinkColorProp;
|
||||||
|
private SerializedProperty imageOffsetProp;
|
||||||
|
private SerializedProperty iconList;
|
||||||
|
|
||||||
|
protected override void OnEnable()
|
||||||
|
{
|
||||||
|
base.OnEnable();
|
||||||
|
ImageScalingFactorProp = serializedObject.FindProperty("ImageScalingFactor");
|
||||||
|
hyperlinkColorProp = serializedObject.FindProperty("hyperlinkColor");
|
||||||
|
imageOffsetProp = serializedObject.FindProperty("imageOffset");
|
||||||
|
iconList = serializedObject.FindProperty("inspectorIconList");
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnInspectorGUI()
|
||||||
|
{
|
||||||
|
base.OnInspectorGUI();
|
||||||
|
serializedObject.Update();
|
||||||
|
EditorGUILayout.PropertyField(imageOffsetProp, new GUIContent("Image Offset"));
|
||||||
|
EditorGUILayout.PropertyField(ImageScalingFactorProp, new GUIContent("Image Scaling Factor"));
|
||||||
|
EditorGUILayout.PropertyField(hyperlinkColorProp, new GUIContent("Hyperlink Color"));
|
||||||
|
EditorGUILayout.PropertyField(iconList, new GUIContent("Icon List"), true);
|
||||||
|
serializedObject.ApplyModifiedProperties();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user