├── .gitignore
├── CHANGELOG.md
├── CHANGELOG.md.meta
├── Documentation.url
├── Documentation.url.meta
├── Fonts.meta
├── Fonts
├── Montserrat.meta
├── Montserrat
│ ├── Montserrat-Black SDF.asset
│ ├── Montserrat-Black SDF.asset.meta
│ ├── Montserrat-Black.ttf
│ ├── Montserrat-Black.ttf.meta
│ ├── Montserrat-Regular SDF.asset
│ ├── Montserrat-Regular SDF.asset.meta
│ ├── Montserrat-Regular.ttf
│ └── Montserrat-Regular.ttf.meta
├── Raleway.meta
├── Raleway
│ ├── Raleway-Bold SDF.asset
│ ├── Raleway-Bold SDF.asset.meta
│ ├── Raleway-Bold.ttf
│ ├── Raleway-Bold.ttf.meta
│ ├── Raleway-Regular SDF.asset
│ ├── Raleway-Regular SDF.asset.meta
│ ├── Raleway-Regular.ttf
│ └── Raleway-Regular.ttf.meta
├── Roboto.meta
└── Roboto
│ ├── Roboto-Bold SDF.asset
│ ├── Roboto-Bold SDF.asset.meta
│ ├── Roboto-Bold.ttf
│ ├── Roboto-Bold.ttf.meta
│ ├── Roboto-Regular SDF.asset
│ ├── Roboto-Regular SDF.asset.meta
│ ├── Roboto-Regular.ttf
│ ├── Roboto-Regular.ttf.meta
│ ├── RobotoMono-Light SDF.asset
│ ├── RobotoMono-Light SDF.asset.meta
│ ├── RobotoMono-Light.ttf
│ └── RobotoMono-Light.ttf.meta
├── Integrations.meta
├── Integrations
├── Oculus Integrations Support.meta
├── Oculus Integrations Support
│ ├── RDASettings InputSystem VR Oculus.preset
│ ├── RDASettings InputSystem VR Oculus.preset.meta
│ ├── UI Default VR Oculus.prefab
│ └── UI Default VR Oculus.prefab.meta
├── XR Interaction Toolkit Support.meta
└── XR Interaction Toolkit Support
│ ├── RDASettings InputSystem XR.preset
│ ├── RDASettings InputSystem XR.preset.meta
│ ├── UI Default XR.prefab
│ └── UI Default XR.prefab.meta
├── LICENSE
├── LICENSE.meta
├── Prefabs.meta
├── Prefabs
├── EmbeddedEventSystem.prefab
├── EmbeddedEventSystem.prefab.meta
├── EmbeddedEventSystemInputSystem.prefab
├── EmbeddedEventSystemInputSystem.prefab.meta
├── ItemView.meta
├── ItemView
│ ├── Item View Compact.prefab
│ ├── Item View Compact.prefab.meta
│ ├── Item View Spaced.prefab
│ ├── Item View Spaced.prefab.meta
│ ├── Item View.prefab
│ ├── Item View.prefab.meta
│ ├── VRKey.prefab
│ └── VRKey.prefab.meta
├── ListView.meta
├── ListView
│ ├── Action List.prefab
│ └── Action List.prefab.meta
├── Scrollable Text Field.prefab
├── Scrollable Text Field.prefab.meta
├── Search Field.prefab
├── Search Field.prefab.meta
├── UI Compact Bottom.prefab
├── UI Compact Bottom.prefab.meta
├── UI Compact.prefab
├── UI Compact.prefab.meta
├── UI Default Spaced.prefab
├── UI Default Spaced.prefab.meta
├── UI Default World Space.prefab
├── UI Default World Space.prefab.meta
├── UI Default.prefab
├── UI Default.prefab.meta
├── VRKeyboard.meta
└── VRKeyboard
│ ├── Keyboard VR.prefab
│ └── Keyboard VR.prefab.meta
├── README.md
├── README.md.meta
├── Runtime.meta
├── Runtime
├── Actions.meta
├── Actions
│ ├── Base.meta
│ ├── Base
│ │ ├── BaseDebugAction.cs
│ │ ├── BaseDebugAction.cs.meta
│ │ ├── FluentAction.cs
│ │ └── FluentAction.cs.meta
│ ├── Builder.meta
│ ├── Builder
│ │ ├── DebugActionBuilder.cs
│ │ └── DebugActionBuilder.cs.meta
│ ├── DebugActionButton.cs
│ ├── DebugActionButton.cs.meta
│ ├── DebugActionEnum.cs
│ ├── DebugActionEnum.cs.meta
│ ├── DebugActionFlag.cs
│ ├── DebugActionFlag.cs.meta
│ ├── DebugActionInput.cs
│ ├── DebugActionInput.cs.meta
│ ├── DebugActionToggle.cs
│ └── DebugActionToggle.cs.meta
├── Attributes.meta
├── Attributes
│ ├── DebugActionAttribute.cs
│ └── DebugActionAttribute.cs.meta
├── Components.meta
├── Components
│ ├── Actions.meta
│ ├── Actions
│ │ ├── BaseDebugActionHandler.cs
│ │ ├── BaseDebugActionHandler.cs.meta
│ │ ├── DebugActionAutoHandler.cs
│ │ ├── DebugActionAutoHandler.cs.meta
│ │ ├── DebugActionButtonHandler.cs
│ │ ├── DebugActionButtonHandler.cs.meta
│ │ ├── DebugActionFlagHandler.cs
│ │ ├── DebugActionFlagHandler.cs.meta
│ │ ├── DebugActionInputHandler.cs
│ │ ├── DebugActionInputHandler.cs.meta
│ │ ├── DebugActionToggleHandler.cs
│ │ ├── DebugActionToggleHandler.cs.meta
│ │ ├── RuntimeDebugBehaviour.cs
│ │ └── RuntimeDebugBehaviour.cs.meta
│ ├── Event.meta
│ ├── Event
│ │ ├── DebugSystemEventHandler.cs
│ │ └── DebugSystemEventHandler.cs.meta
│ ├── UI.meta
│ └── UI
│ │ ├── AutoFacingCamera.cs
│ │ ├── AutoFacingCamera.cs.meta
│ │ ├── DebugUIHandler.cs
│ │ ├── DebugUIHandler.cs.meta
│ │ ├── FontSetter.cs
│ │ ├── FontSetter.cs.meta
│ │ ├── InputUIHandler.cs
│ │ ├── InputUIHandler.cs.meta
│ │ ├── InputUISlider.cs
│ │ ├── InputUISlider.cs.meta
│ │ ├── ListItemView.cs
│ │ ├── ListItemView.cs.meta
│ │ ├── ListView.cs
│ │ ├── ListView.cs.meta
│ │ ├── LoggerHandler.cs
│ │ ├── LoggerHandler.cs.meta
│ │ ├── LoggerLineSelectHandler.cs
│ │ ├── LoggerLineSelectHandler.cs.meta
│ │ ├── TooltipHandler.cs
│ │ ├── TooltipHandler.cs.meta
│ │ ├── Utils.meta
│ │ └── Utils
│ │ ├── ChangeSiblingIndexOnAwake.cs
│ │ ├── ChangeSiblingIndexOnAwake.cs.meta
│ │ ├── LongPressDetector.cs
│ │ ├── LongPressDetector.cs.meta
│ │ ├── MaxWidthHeight.cs
│ │ ├── MaxWidthHeight.cs.meta
│ │ ├── SafeAreaExtender.cs
│ │ ├── SafeAreaExtender.cs.meta
│ │ ├── SafeAreaHelper.cs
│ │ ├── SafeAreaHelper.cs.meta
│ │ ├── SizeMatcher.cs
│ │ └── SizeMatcher.cs.meta
├── Data.meta
├── Data
│ ├── ListItem.cs
│ ├── ListItem.cs.meta
│ ├── ReflectedActionData.cs
│ ├── ReflectedActionData.cs.meta
│ ├── Settings.cs
│ ├── Settings.cs.meta
│ ├── Theme.cs
│ └── Theme.cs.meta
├── Input.meta
├── Input
│ ├── InputQuery.cs
│ ├── InputQuery.cs.meta
│ ├── InputResponse.cs
│ ├── InputResponse.cs.meta
│ ├── Param.cs
│ ├── Param.cs.meta
│ ├── ParamType.cs
│ ├── ParamType.cs.meta
│ ├── System.meta
│ └── System
│ │ ├── InputLayer.cs
│ │ ├── InputLayer.cs.meta
│ │ ├── InputManagerLayer.cs
│ │ ├── InputManagerLayer.cs.meta
│ │ ├── InputSystemLayer.cs
│ │ └── InputSystemLayer.cs.meta
├── Keyboard VR.meta
├── Keyboard VR
│ ├── VRKey.cs
│ ├── VRKey.cs.meta
│ ├── VRKeyboard.cs
│ └── VRKeyboard.cs.meta
├── Systems.meta
├── Systems
│ ├── DebugActionDefaults.cs
│ ├── DebugActionDefaults.cs.meta
│ ├── RuntimeDebugSystem.cs
│ └── RuntimeDebugSystem.cs.meta
├── Utils.meta
├── Utils
│ ├── AttributeUtils.cs
│ ├── AttributeUtils.cs.meta
│ ├── Singleton.cs
│ └── Singleton.cs.meta
├── com.bennykok.runtime-debug-action.asmdef
└── com.bennykok.runtime-debug-action.asmdef.meta
├── Settings.meta
├── Settings
├── Presets.meta
├── Presets
│ ├── Components.meta
│ ├── Components
│ │ ├── Flag Toggle.preset
│ │ └── Flag Toggle.preset.meta
│ ├── RDASettings Default.preset
│ ├── RDASettings Default.preset.meta
│ ├── RDASettings InputSystem.preset
│ └── RDASettings InputSystem.preset.meta
├── RDASettings Default [DO NOT EDIT].asset
└── RDASettings Default [DO NOT EDIT].asset.meta
├── Sprites.meta
├── Sprites
├── arrow-backward-outline.png
├── arrow-backward-outline.png.meta
├── arrow-forward-outline.png
├── arrow-forward-outline.png.meta
├── arrow-left-outline.png
├── arrow-left-outline.png.meta
├── arrow-right-outline.png
├── arrow-right-outline.png.meta
├── close-outline.png
├── close-outline.png.meta
├── collapse-outline.png
├── collapse-outline.png.meta
├── outline_folder_white_48dp.png
├── outline_folder_white_48dp.png.meta
├── round_folder_white_48dp.png
├── round_folder_white_48dp.png.meta
├── search-outline.png
├── search-outline.png.meta
├── two-arrow-vertical.png
├── two-arrow-vertical.png.meta
├── two-arrow.png
└── two-arrow.png.meta
├── package.json
└── package.json.meta
/.gitignore:
--------------------------------------------------------------------------------
1 | # This .gitignore file should be placed at the root of your Unity project directory
2 | #
3 | # Get latest from https://github.com/github/gitignore/blob/master/Unity.gitignore
4 | #
5 | /[Ll]ibrary/
6 | /[Tt]emp/
7 | /[Oo]bj/
8 | /[Bb]uild/
9 | /[Bb]uilds/
10 | /[Ll]ogs/
11 | /[Mm]emoryCaptures/
12 |
13 | # Asset meta data should only be ignored when the corresponding asset is also ignored
14 | !/[Aa]ssets/**/*.meta
15 |
16 | # Uncomment this line if you wish to ignore the asset store tools plugin
17 | # /[Aa]ssets/AssetStoreTools*
18 |
19 | # Autogenerated Jetbrains Rider plugin
20 | [Aa]ssets/Plugins/Editor/JetBrains*
21 |
22 | # Visual Studio cache directory
23 | .vs/
24 |
25 | # Gradle cache directory
26 | .gradle/
27 |
28 | # Autogenerated VS/MD/Consulo solution and project files
29 | ExportedObj/
30 | .consulo/
31 | *.csproj
32 | *.unityproj
33 | *.sln
34 | *.suo
35 | *.tmp
36 | *.user
37 | *.userprefs
38 | *.pidb
39 | *.booproj
40 | *.svd
41 | *.pdb
42 | *.mdb
43 | *.opendb
44 | *.VC.db
45 |
46 | # Unity3D generated meta files
47 | *.pidb.meta
48 | *.pdb.meta
49 | *.mdb.meta
50 |
51 | # Unity3D generated file on crash reports
52 | sysinfo.txt
53 |
54 | # Builds
55 | *.apk
56 | *.unitypackage
57 |
58 | # Crashlytics generated file
59 | crashlytics-build.properties
60 |
61 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Changelog
2 |
3 | All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4 |
5 | ## [1.1.0](https://gitlab.com/BennyKok/unity-runtime-debug-action/compare/v1.0.1...v1.1.0) (2021-01-06)
6 |
7 |
8 | ### Features
9 |
10 | * make sure the default settings is not editable with extra GUI ([d1906c7](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/d1906c7cc762702f2d3ced593b6419be1290ca8c))
11 | * UnityEvent bindings for Flag component ([671c0f0](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/671c0f02b9aa8d522c5d2035c88a53e57b276609))
12 |
13 |
14 | ### Bug Fixes
15 |
16 | * action display should not be interactable ([6d00109](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/6d0010935295e8767db8e11fb74af9cbb343cde5))
17 | * closePanelAfterTrigger not working with toggle action ([700fa94](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/700fa94da2e3f313c1c10e55b5330541f7957474))
18 | * component action not setup property upon registering ([21ad00d](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/21ad00de03167cc298520dc30226f0768112e04b))
19 | * menu display error when reload scene sometimes ([7d59973](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/7d59973410ca91574cb772ac7ccd0e7d33b43481))
20 | * rename IsIsSystemEnabled -> IsSystemEnabled ([630188c](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/630188ccb253bd623de71bb900dcd3b390c22720))
21 | * **editor:** component action compatibility with Odin ([d285539](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/d2855390fe06254886079cc0d23bd705b0257886))
22 |
23 | ## 1.0.1 (2020-12-26)
24 |
25 | ### Refactor
26 | * Extract world space UI prefab from VR integration
27 |
28 | ## 1.0.0 (2020-12-14)
29 |
30 |
31 | ### Features
32 |
33 | * 🎸 folder support for action, init back navigation support ([4bb6211](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/4bb62111b3a2606ccd654355094c0141084c54d7))
34 | * 🎸 init search impl, fix remove action not removing view ([cb82e86](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/cb82e8651f7fdaaf901661a03c3044787bba3f0f))
35 | * 🎸 keyboard navigation for action menu ([7972213](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/797221338eb6f10c1cb47c49d9196437a07d2c86))
36 | * 🎸 simple action search implemented ([63797e6](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/63797e62629ee7441d222ab425bfd9ff0afbae0b))
37 | * 🎸 swap theme action and settings ([28d92e7](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/28d92e7265c155aef07e9259b9877248ed6d7235))
38 | * add enable mode in settings ([2c4826a](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/2c4826a778ef6c4acc46b0c32946a87ddb8c543b))
39 | * basic reflection test ([fd384df](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/fd384df87b946aacce540c61303b98ac0ab727ef))
40 | * custom font in DebugUIHandler ([13e3ab0](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/13e3ab00f53014d7a41318813795fbcabae84554))
41 | * init dashsu demo ([89eafbb](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/89eafbbf36e33fbe00a966b4c3b21de8f3074bb8))
42 | * init input system support ([30a05bf](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/30a05bf222d1e46e295a9927e80f76c578b50d53))
43 | * MenuPauseMode ([f747113](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/f74711370b392aa794768399c39e6325104494da))
44 | * new compact bottom theme ([b3626a7](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/b3626a7741198c482ff7b0eed94d8ffeef63de40))
45 | * quality settings actions now dynamically populated ([335b405](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/335b405787f16adff7cc09cccb7ad59025d99292))
46 | * reflection support input, flag ([803cd44](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/803cd44b049eaf8b3caec41dcb89e5c192629f98))
47 | * search by tag, remove by path ignore tag ([76cbb96](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/76cbb96e42ccce66e271ab737c20c9cacfadcc19))
48 | * some api ([5eb6469](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/5eb646951278b490e7c87707c96fdcc19234d806))
49 | * **demo:** reveal text demo, set text action ([2ce3295](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/2ce3295aa373277a1ebd055b7f14b778634f15c2))
50 | * theme settings will now be saved ([038172d](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/038172d7dffdfdbeaf8dee90d54f7c775f816f82))
51 |
52 |
53 | ### Bug Fixes
54 |
55 | * 🐛 minor tweak ([47c9930](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/47c99304b3cf4abcca000b1ef78c49892e781de4))
56 | * 🐛 use AssetPostprocessor for settings file check at start ([ac7a22e](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/ac7a22ef8c81179c178d1f64665d79318e26c098))
57 | * crash error because ui is null in ListItemView ([8471b71](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/8471b71996f5b4c7c68d86d7a41aa12ef8a86f91))
58 | * first frame flicker list selection ([8bc7f44](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/8bc7f4491174975a07db78190b4c72f98c4c517b))
59 | * shortcut action triggered when during search ([9b51b5e](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/9b51b5e2e5233b032abfb95c0263a3d7cffa8ac8))
60 | * tag display ([c932dd4](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/c932dd4f0b9eaaf01025cb4280e374fe1f8ed275))
61 | * time not paused when switch theme ([167b303](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/167b3036e09ad9c033aa1f059c17c3a0b650eda3))
62 | * tmp late import screw up text display ([d753ea3](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/d753ea37620c78e1c829ada9ef371bbd1bb6ba25))
63 | * uiParent null in sub list ([3458e8f](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/3458e8f9bd376bb3552139c256937e000e448f22))
64 | * UnregisterActionsAuto ([fd41ec8](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/fd41ec87dde218bf930bc8bfa5c56a1dcf3f2d00))
65 | * visibility attribute to clean up RDASettings ([c1c6d7c](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/c1c6d7cfc4b7cfc9cbcc6c26659334a260f86031))
--------------------------------------------------------------------------------
/CHANGELOG.md.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 4deeceb31de654f498f45c00136f42c9
3 | TextScriptImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Documentation.url:
--------------------------------------------------------------------------------
1 | [InternetShortcut]
2 | URL=https://bennykok.github.io/runtime-debug-action-docs/index.html
3 |
--------------------------------------------------------------------------------
/Documentation.url.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 498aa519dc314b240bdd1b22b0dc8a95
3 | DefaultImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Fonts.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 27350f6dc24999349ac096ee9fff6d73
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Fonts/Montserrat.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 8892a1e5ee19d514f9d9ecbc404107cb
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Fonts/Montserrat/Montserrat-Black SDF.asset.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: a48514571bbdf4846a3d6d4275a6413d
3 | NativeFormatImporter:
4 | externalObjects: {}
5 | mainObjectFileID: 0
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Fonts/Montserrat/Montserrat-Black.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BennyKok/unity-runtime-debug-action/6b679eb58876ebddcfebb5d6e6a6d87bfca45f3d/Fonts/Montserrat/Montserrat-Black.ttf
--------------------------------------------------------------------------------
/Fonts/Montserrat/Montserrat-Black.ttf.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: ffdb66a6d4bfcfe47b3fd9e1dddd3065
3 | TrueTypeFontImporter:
4 | externalObjects: {}
5 | serializedVersion: 4
6 | fontSize: 16
7 | forceTextureCase: -2
8 | characterSpacing: 0
9 | characterPadding: 1
10 | includeFontData: 1
11 | fontName: Montserrat
12 | fontNames:
13 | - Montserrat
14 | fallbackFontReferences:
15 | - {fileID: 12800000, guid: 2a337828fa735734496e1480b72ba0e4, type: 3}
16 | customCharacters:
17 | fontRenderingMode: 0
18 | ascentCalculationMode: 1
19 | useLegacyBoundsCalculation: 0
20 | shouldRoundAdvanceValue: 1
21 | userData:
22 | assetBundleName:
23 | assetBundleVariant:
24 |
--------------------------------------------------------------------------------
/Fonts/Montserrat/Montserrat-Regular SDF.asset.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 6c7c7bd9ce455de4880de30bf445d972
3 | NativeFormatImporter:
4 | externalObjects: {}
5 | mainObjectFileID: 0
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Fonts/Montserrat/Montserrat-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BennyKok/unity-runtime-debug-action/6b679eb58876ebddcfebb5d6e6a6d87bfca45f3d/Fonts/Montserrat/Montserrat-Regular.ttf
--------------------------------------------------------------------------------
/Fonts/Montserrat/Montserrat-Regular.ttf.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 2a337828fa735734496e1480b72ba0e4
3 | TrueTypeFontImporter:
4 | externalObjects: {}
5 | serializedVersion: 4
6 | fontSize: 16
7 | forceTextureCase: -2
8 | characterSpacing: 0
9 | characterPadding: 1
10 | includeFontData: 1
11 | fontName: Montserrat
12 | fontNames:
13 | - Montserrat
14 | fallbackFontReferences: []
15 | customCharacters:
16 | fontRenderingMode: 0
17 | ascentCalculationMode: 1
18 | useLegacyBoundsCalculation: 0
19 | shouldRoundAdvanceValue: 1
20 | userData:
21 | assetBundleName:
22 | assetBundleVariant:
23 |
--------------------------------------------------------------------------------
/Fonts/Raleway.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 9efff1d7a7388c841ac9b7006e3deb1b
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Fonts/Raleway/Raleway-Bold SDF.asset.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 5457217bd98bb5040a081da4969b180c
3 | NativeFormatImporter:
4 | externalObjects: {}
5 | mainObjectFileID: 0
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Fonts/Raleway/Raleway-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BennyKok/unity-runtime-debug-action/6b679eb58876ebddcfebb5d6e6a6d87bfca45f3d/Fonts/Raleway/Raleway-Bold.ttf
--------------------------------------------------------------------------------
/Fonts/Raleway/Raleway-Bold.ttf.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: d455c3b84c08eb84188fe96f164b1e2b
3 | TrueTypeFontImporter:
4 | externalObjects: {}
5 | serializedVersion: 4
6 | fontSize: 16
7 | forceTextureCase: -2
8 | characterSpacing: 0
9 | characterPadding: 1
10 | includeFontData: 1
11 | fontName: Raleway
12 | fontNames:
13 | - Raleway
14 | fallbackFontReferences: []
15 | customCharacters:
16 | fontRenderingMode: 0
17 | ascentCalculationMode: 1
18 | useLegacyBoundsCalculation: 0
19 | shouldRoundAdvanceValue: 1
20 | userData:
21 | assetBundleName:
22 | assetBundleVariant:
23 |
--------------------------------------------------------------------------------
/Fonts/Raleway/Raleway-Regular SDF.asset.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: db87c55fd26d159489601db07eba2d60
3 | NativeFormatImporter:
4 | externalObjects: {}
5 | mainObjectFileID: 0
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Fonts/Raleway/Raleway-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BennyKok/unity-runtime-debug-action/6b679eb58876ebddcfebb5d6e6a6d87bfca45f3d/Fonts/Raleway/Raleway-Regular.ttf
--------------------------------------------------------------------------------
/Fonts/Raleway/Raleway-Regular.ttf.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: e77eb62f00f05ae40ac36db50d9b6f2e
3 | TrueTypeFontImporter:
4 | externalObjects: {}
5 | serializedVersion: 4
6 | fontSize: 16
7 | forceTextureCase: -2
8 | characterSpacing: 0
9 | characterPadding: 1
10 | includeFontData: 1
11 | fontName: Raleway
12 | fontNames:
13 | - Raleway
14 | fallbackFontReferences:
15 | - {fileID: 12800000, guid: d455c3b84c08eb84188fe96f164b1e2b, type: 3}
16 | customCharacters:
17 | fontRenderingMode: 0
18 | ascentCalculationMode: 1
19 | useLegacyBoundsCalculation: 0
20 | shouldRoundAdvanceValue: 1
21 | userData:
22 | assetBundleName:
23 | assetBundleVariant:
24 |
--------------------------------------------------------------------------------
/Fonts/Roboto.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 7a464fa283be8ce45b389148eddf6bd8
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Fonts/Roboto/Roboto-Bold SDF.asset.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 16f336ff9082f4942ba6769be050a9f6
3 | NativeFormatImporter:
4 | externalObjects: {}
5 | mainObjectFileID: 0
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Fonts/Roboto/Roboto-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BennyKok/unity-runtime-debug-action/6b679eb58876ebddcfebb5d6e6a6d87bfca45f3d/Fonts/Roboto/Roboto-Bold.ttf
--------------------------------------------------------------------------------
/Fonts/Roboto/Roboto-Bold.ttf.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 940c189f719652d4fb518e0eabc5bdea
3 | TrueTypeFontImporter:
4 | externalObjects: {}
5 | serializedVersion: 4
6 | fontSize: 16
7 | forceTextureCase: -2
8 | characterSpacing: 0
9 | characterPadding: 1
10 | includeFontData: 1
11 | fontName: Roboto
12 | fontNames:
13 | - Roboto
14 | fallbackFontReferences:
15 | - {fileID: 12800000, guid: afce44bbf3a619249a69b66c45c405c3, type: 3}
16 | customCharacters:
17 | fontRenderingMode: 0
18 | ascentCalculationMode: 1
19 | useLegacyBoundsCalculation: 0
20 | shouldRoundAdvanceValue: 1
21 | userData:
22 | assetBundleName:
23 | assetBundleVariant:
24 |
--------------------------------------------------------------------------------
/Fonts/Roboto/Roboto-Regular SDF.asset.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 38f61c21d2f67b847acfa5e32fa6bac8
3 | NativeFormatImporter:
4 | externalObjects: {}
5 | mainObjectFileID: 0
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Fonts/Roboto/Roboto-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BennyKok/unity-runtime-debug-action/6b679eb58876ebddcfebb5d6e6a6d87bfca45f3d/Fonts/Roboto/Roboto-Regular.ttf
--------------------------------------------------------------------------------
/Fonts/Roboto/Roboto-Regular.ttf.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: afce44bbf3a619249a69b66c45c405c3
3 | TrueTypeFontImporter:
4 | externalObjects: {}
5 | serializedVersion: 4
6 | fontSize: 16
7 | forceTextureCase: -2
8 | characterSpacing: 0
9 | characterPadding: 1
10 | includeFontData: 1
11 | fontName: Roboto
12 | fontNames:
13 | - Roboto
14 | fallbackFontReferences: []
15 | customCharacters:
16 | fontRenderingMode: 0
17 | ascentCalculationMode: 1
18 | useLegacyBoundsCalculation: 0
19 | shouldRoundAdvanceValue: 1
20 | userData:
21 | assetBundleName:
22 | assetBundleVariant:
23 |
--------------------------------------------------------------------------------
/Fonts/Roboto/RobotoMono-Light SDF.asset.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 31e06e6e232827247982ca9c14655235
3 | NativeFormatImporter:
4 | externalObjects: {}
5 | mainObjectFileID: 0
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Fonts/Roboto/RobotoMono-Light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BennyKok/unity-runtime-debug-action/6b679eb58876ebddcfebb5d6e6a6d87bfca45f3d/Fonts/Roboto/RobotoMono-Light.ttf
--------------------------------------------------------------------------------
/Fonts/Roboto/RobotoMono-Light.ttf.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: e90a2dbbd885797409911172eda220a8
3 | TrueTypeFontImporter:
4 | externalObjects: {}
5 | serializedVersion: 4
6 | fontSize: 16
7 | forceTextureCase: -2
8 | characterSpacing: 0
9 | characterPadding: 1
10 | includeFontData: 1
11 | fontName: Roboto Mono
12 | fontNames:
13 | - Roboto Mono
14 | fallbackFontReferences: []
15 | customCharacters:
16 | fontRenderingMode: 0
17 | ascentCalculationMode: 1
18 | useLegacyBoundsCalculation: 0
19 | shouldRoundAdvanceValue: 1
20 | userData:
21 | assetBundleName:
22 | assetBundleVariant:
23 |
--------------------------------------------------------------------------------
/Integrations.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 3bcb7fcb2eeb7064395f826ff772ded3
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Integrations/Oculus Integrations Support.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 3c36a5faf41b843478e1af843a631b2a
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Integrations/Oculus Integrations Support/RDASettings InputSystem VR Oculus.preset.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 2f3601f8d53cc5748a9b29e8615f85f4
3 | NativeFormatImporter:
4 | externalObjects: {}
5 | mainObjectFileID: 0
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Integrations/Oculus Integrations Support/UI Default VR Oculus.prefab.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: bdf9bfdeb4b8d474582394ac7db5d775
3 | PrefabImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Integrations/XR Interaction Toolkit Support.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: cfa79553f939a114c909d3144cb65b6c
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Integrations/XR Interaction Toolkit Support/RDASettings InputSystem XR.preset.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: ca0d7353c0a5e824ca7aea24309b476a
3 | NativeFormatImporter:
4 | externalObjects: {}
5 | mainObjectFileID: 0
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Integrations/XR Interaction Toolkit Support/UI Default XR.prefab.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 91a498a613bc04b45b6f4a2a414d778f
3 | PrefabImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 BennyKok
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/LICENSE.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 68169f5e89a5c1641926918cc7716792
3 | DefaultImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Prefabs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: d9b90f7da57f53f48ba7d1f49e98c33a
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Prefabs/EmbeddedEventSystem.prefab:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!1 &4391802490427358298
4 | GameObject:
5 | m_ObjectHideFlags: 0
6 | m_CorrespondingSourceObject: {fileID: 0}
7 | m_PrefabInstance: {fileID: 0}
8 | m_PrefabAsset: {fileID: 0}
9 | serializedVersion: 6
10 | m_Component:
11 | - component: {fileID: 5747575547912894628}
12 | - component: {fileID: 2704006777162314853}
13 | - component: {fileID: 4701240910328976669}
14 | m_Layer: 0
15 | m_Name: EmbeddedEventSystem
16 | m_TagString: Untagged
17 | m_Icon: {fileID: 0}
18 | m_NavMeshLayer: 0
19 | m_StaticEditorFlags: 0
20 | m_IsActive: 1
21 | --- !u!4 &5747575547912894628
22 | Transform:
23 | m_ObjectHideFlags: 0
24 | m_CorrespondingSourceObject: {fileID: 0}
25 | m_PrefabInstance: {fileID: 0}
26 | m_PrefabAsset: {fileID: 0}
27 | m_GameObject: {fileID: 4391802490427358298}
28 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
29 | m_LocalPosition: {x: -302.946, y: -300, z: 0}
30 | m_LocalScale: {x: 0.9819968, y: 0.9819968, z: 0.9819968}
31 | m_Children: []
32 | m_Father: {fileID: 0}
33 | m_RootOrder: 0
34 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
35 | --- !u!114 &2704006777162314853
36 | MonoBehaviour:
37 | m_ObjectHideFlags: 0
38 | m_CorrespondingSourceObject: {fileID: 0}
39 | m_PrefabInstance: {fileID: 0}
40 | m_PrefabAsset: {fileID: 0}
41 | m_GameObject: {fileID: 4391802490427358298}
42 | m_Enabled: 1
43 | m_EditorHideFlags: 0
44 | m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3}
45 | m_Name:
46 | m_EditorClassIdentifier:
47 | m_FirstSelected: {fileID: 0}
48 | m_sendNavigationEvents: 1
49 | m_DragThreshold: 10
50 | --- !u!114 &4701240910328976669
51 | MonoBehaviour:
52 | m_ObjectHideFlags: 0
53 | m_CorrespondingSourceObject: {fileID: 0}
54 | m_PrefabInstance: {fileID: 0}
55 | m_PrefabAsset: {fileID: 0}
56 | m_GameObject: {fileID: 4391802490427358298}
57 | m_Enabled: 1
58 | m_EditorHideFlags: 0
59 | m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3}
60 | m_Name:
61 | m_EditorClassIdentifier:
62 | m_HorizontalAxis: Horizontal
63 | m_VerticalAxis: Vertical
64 | m_SubmitButton: Submit
65 | m_CancelButton: Cancel
66 | m_InputActionsPerSecond: 10
67 | m_RepeatDelay: 0.5
68 | m_ForceModuleActive: 0
69 |
--------------------------------------------------------------------------------
/Prefabs/EmbeddedEventSystem.prefab.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: fad178ee18eb2a0409ceda6610266cde
3 | PrefabImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Prefabs/EmbeddedEventSystemInputSystem.prefab:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!1 &4391802490427358298
4 | GameObject:
5 | m_ObjectHideFlags: 0
6 | m_CorrespondingSourceObject: {fileID: 0}
7 | m_PrefabInstance: {fileID: 0}
8 | m_PrefabAsset: {fileID: 0}
9 | serializedVersion: 6
10 | m_Component:
11 | - component: {fileID: 5747575547912894628}
12 | - component: {fileID: 2704006777162314853}
13 | - component: {fileID: 4726939307303374256}
14 | m_Layer: 0
15 | m_Name: EmbeddedEventSystemInputSystem
16 | m_TagString: Untagged
17 | m_Icon: {fileID: 0}
18 | m_NavMeshLayer: 0
19 | m_StaticEditorFlags: 0
20 | m_IsActive: 1
21 | --- !u!4 &5747575547912894628
22 | Transform:
23 | m_ObjectHideFlags: 0
24 | m_CorrespondingSourceObject: {fileID: 0}
25 | m_PrefabInstance: {fileID: 0}
26 | m_PrefabAsset: {fileID: 0}
27 | m_GameObject: {fileID: 4391802490427358298}
28 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
29 | m_LocalPosition: {x: -302.946, y: -300, z: 0}
30 | m_LocalScale: {x: 0.9819968, y: 0.9819968, z: 0.9819968}
31 | m_Children: []
32 | m_Father: {fileID: 0}
33 | m_RootOrder: 0
34 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
35 | --- !u!114 &2704006777162314853
36 | MonoBehaviour:
37 | m_ObjectHideFlags: 0
38 | m_CorrespondingSourceObject: {fileID: 0}
39 | m_PrefabInstance: {fileID: 0}
40 | m_PrefabAsset: {fileID: 0}
41 | m_GameObject: {fileID: 4391802490427358298}
42 | m_Enabled: 1
43 | m_EditorHideFlags: 0
44 | m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3}
45 | m_Name:
46 | m_EditorClassIdentifier:
47 | m_FirstSelected: {fileID: 0}
48 | m_sendNavigationEvents: 1
49 | m_DragThreshold: 10
50 | --- !u!114 &4726939307303374256
51 | MonoBehaviour:
52 | m_ObjectHideFlags: 0
53 | m_CorrespondingSourceObject: {fileID: 0}
54 | m_PrefabInstance: {fileID: 0}
55 | m_PrefabAsset: {fileID: 0}
56 | m_GameObject: {fileID: 4391802490427358298}
57 | m_Enabled: 1
58 | m_EditorHideFlags: 0
59 | m_Script: {fileID: 11500000, guid: 01614664b831546d2ae94a42149d80ac, type: 3}
60 | m_Name:
61 | m_EditorClassIdentifier:
62 | m_MoveRepeatDelay: 0.5
63 | m_MoveRepeatRate: 0.1
64 | m_ActionsAsset: {fileID: -944628639613478452, guid: ca9f5fa95ffab41fb9a615ab714db018,
65 | type: 3}
66 | m_PointAction: {fileID: 1054132383583890850, guid: ca9f5fa95ffab41fb9a615ab714db018,
67 | type: 3}
68 | m_MoveAction: {fileID: 3710738434707379630, guid: ca9f5fa95ffab41fb9a615ab714db018,
69 | type: 3}
70 | m_SubmitAction: {fileID: 2064916234097673511, guid: ca9f5fa95ffab41fb9a615ab714db018,
71 | type: 3}
72 | m_CancelAction: {fileID: -1967631576421560919, guid: ca9f5fa95ffab41fb9a615ab714db018,
73 | type: 3}
74 | m_LeftClickAction: {fileID: 8056856818456041789, guid: ca9f5fa95ffab41fb9a615ab714db018,
75 | type: 3}
76 | m_MiddleClickAction: {fileID: 3279352641294131588, guid: ca9f5fa95ffab41fb9a615ab714db018,
77 | type: 3}
78 | m_RightClickAction: {fileID: 3837173908680883260, guid: ca9f5fa95ffab41fb9a615ab714db018,
79 | type: 3}
80 | m_ScrollWheelAction: {fileID: 4502412055082496612, guid: ca9f5fa95ffab41fb9a615ab714db018,
81 | type: 3}
82 | m_TrackedDevicePositionAction: {fileID: 4754684134866288074, guid: ca9f5fa95ffab41fb9a615ab714db018,
83 | type: 3}
84 | m_TrackedDeviceOrientationAction: {fileID: 1025543830046995696, guid: ca9f5fa95ffab41fb9a615ab714db018,
85 | type: 3}
86 | m_DeselectOnBackgroundClick: 1
87 | m_PointerBehavior: 0
88 |
--------------------------------------------------------------------------------
/Prefabs/EmbeddedEventSystemInputSystem.prefab.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: c0e5375d5dba4ac4eb49273c712ec70a
3 | PrefabImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Prefabs/ItemView.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 50b9e7d25bff6b341a3815c85da669f3
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Prefabs/ItemView/Item View Compact.prefab:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!1001 &3250835604708633604
4 | PrefabInstance:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 2
7 | m_Modification:
8 | m_TransformParent: {fileID: 0}
9 | m_Modifications:
10 | - target: {fileID: 4697603242077483381, guid: 109c1b1982f0b0346bf657ad20970425,
11 | type: 3}
12 | propertyPath: m_SizeDelta.x
13 | value: 14
14 | objectReference: {fileID: 0}
15 | - target: {fileID: 4697603242077483381, guid: 109c1b1982f0b0346bf657ad20970425,
16 | type: 3}
17 | propertyPath: m_AnchoredPosition.x
18 | value: 10
19 | objectReference: {fileID: 0}
20 | - target: {fileID: 5612962261251937386, guid: 109c1b1982f0b0346bf657ad20970425,
21 | type: 3}
22 | propertyPath: m_LocalPosition.x
23 | value: 0
24 | objectReference: {fileID: 0}
25 | - target: {fileID: 5612962261251937386, guid: 109c1b1982f0b0346bf657ad20970425,
26 | type: 3}
27 | propertyPath: m_LocalPosition.y
28 | value: 0
29 | objectReference: {fileID: 0}
30 | - target: {fileID: 5612962261251937386, guid: 109c1b1982f0b0346bf657ad20970425,
31 | type: 3}
32 | propertyPath: m_LocalRotation.x
33 | value: -0
34 | objectReference: {fileID: 0}
35 | - target: {fileID: 5612962261251937386, guid: 109c1b1982f0b0346bf657ad20970425,
36 | type: 3}
37 | propertyPath: m_LocalRotation.y
38 | value: -0
39 | objectReference: {fileID: 0}
40 | - target: {fileID: 5612962261251937386, guid: 109c1b1982f0b0346bf657ad20970425,
41 | type: 3}
42 | propertyPath: m_LocalRotation.z
43 | value: -0
44 | objectReference: {fileID: 0}
45 | - target: {fileID: 5612962261251937386, guid: 109c1b1982f0b0346bf657ad20970425,
46 | type: 3}
47 | propertyPath: m_LocalRotation.w
48 | value: 1
49 | objectReference: {fileID: 0}
50 | - target: {fileID: 5612962261251937386, guid: 109c1b1982f0b0346bf657ad20970425,
51 | type: 3}
52 | propertyPath: m_RootOrder
53 | value: 0
54 | objectReference: {fileID: 0}
55 | - target: {fileID: 5612962261251937386, guid: 109c1b1982f0b0346bf657ad20970425,
56 | type: 3}
57 | propertyPath: m_LocalEulerAnglesHint.x
58 | value: 0
59 | objectReference: {fileID: 0}
60 | - target: {fileID: 5612962261251937386, guid: 109c1b1982f0b0346bf657ad20970425,
61 | type: 3}
62 | propertyPath: m_LocalEulerAnglesHint.y
63 | value: 0
64 | objectReference: {fileID: 0}
65 | - target: {fileID: 5612962261251937386, guid: 109c1b1982f0b0346bf657ad20970425,
66 | type: 3}
67 | propertyPath: m_LocalEulerAnglesHint.z
68 | value: 0
69 | objectReference: {fileID: 0}
70 | - target: {fileID: 5612962261251937386, guid: 109c1b1982f0b0346bf657ad20970425,
71 | type: 3}
72 | propertyPath: m_SizeDelta.x
73 | value: 300
74 | objectReference: {fileID: 0}
75 | - target: {fileID: 5612962261251937386, guid: 109c1b1982f0b0346bf657ad20970425,
76 | type: 3}
77 | propertyPath: m_SizeDelta.y
78 | value: 20
79 | objectReference: {fileID: 0}
80 | - target: {fileID: 5612962261251937386, guid: 109c1b1982f0b0346bf657ad20970425,
81 | type: 3}
82 | propertyPath: m_AnchorMin.x
83 | value: 0.5
84 | objectReference: {fileID: 0}
85 | - target: {fileID: 5612962261251937386, guid: 109c1b1982f0b0346bf657ad20970425,
86 | type: 3}
87 | propertyPath: m_AnchorMin.y
88 | value: 1
89 | objectReference: {fileID: 0}
90 | - target: {fileID: 5612962261251937386, guid: 109c1b1982f0b0346bf657ad20970425,
91 | type: 3}
92 | propertyPath: m_AnchorMax.x
93 | value: 0.5
94 | objectReference: {fileID: 0}
95 | - target: {fileID: 5612962261251937386, guid: 109c1b1982f0b0346bf657ad20970425,
96 | type: 3}
97 | propertyPath: m_AnchorMax.y
98 | value: 1
99 | objectReference: {fileID: 0}
100 | - target: {fileID: 5612962261251937386, guid: 109c1b1982f0b0346bf657ad20970425,
101 | type: 3}
102 | propertyPath: m_Pivot.x
103 | value: 0.5
104 | objectReference: {fileID: 0}
105 | - target: {fileID: 5612962261251937386, guid: 109c1b1982f0b0346bf657ad20970425,
106 | type: 3}
107 | propertyPath: m_Pivot.y
108 | value: 1
109 | objectReference: {fileID: 0}
110 | - target: {fileID: 5612962261251937386, guid: 109c1b1982f0b0346bf657ad20970425,
111 | type: 3}
112 | propertyPath: m_AnchoredPosition.y
113 | value: 0
114 | objectReference: {fileID: 0}
115 | - target: {fileID: 6854774738720367511, guid: 109c1b1982f0b0346bf657ad20970425,
116 | type: 3}
117 | propertyPath: m_Name
118 | value: Item View Compact
119 | objectReference: {fileID: 0}
120 | - target: {fileID: 8692686718843453193, guid: 109c1b1982f0b0346bf657ad20970425,
121 | type: 3}
122 | propertyPath: folderIcon
123 | value:
124 | objectReference: {fileID: 21300000, guid: 2955bf7a9a06f8f4ba73e2e8f7ce4baf,
125 | type: 3}
126 | m_RemovedComponents: []
127 | m_SourcePrefab: {fileID: 100100000, guid: 109c1b1982f0b0346bf657ad20970425, type: 3}
128 |
--------------------------------------------------------------------------------
/Prefabs/ItemView/Item View Compact.prefab.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: e0bccccd0854e3c479df02015d4bd5a2
3 | PrefabImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Prefabs/ItemView/Item View Spaced.prefab.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: c2478ef61c76ca4409b6f28cb4e9ec8b
3 | PrefabImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Prefabs/ItemView/Item View.prefab.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 109c1b1982f0b0346bf657ad20970425
3 | PrefabImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Prefabs/ItemView/VRKey.prefab.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: d5e72dd8f0aa73241ba3b69325babb66
3 | PrefabImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Prefabs/ListView.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 66c4fb4413fe6764a8d2026b2ea67239
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Prefabs/ListView/Action List.prefab.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 41c5a487f4bfa7c43b5c5f6663b96d55
3 | PrefabImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Prefabs/Scrollable Text Field.prefab.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 64944c7c38026a647924aeae870c874d
3 | PrefabImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Prefabs/Search Field.prefab.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 48530f7af59ca8f40a00c556407bb631
3 | PrefabImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Prefabs/UI Compact Bottom.prefab.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 858e738f85e0d994abcc5c73dfc6916e
3 | PrefabImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Prefabs/UI Compact.prefab.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 1e73a1be2fd063646ac75c76b6589e89
3 | PrefabImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Prefabs/UI Default Spaced.prefab.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 8a2ba8b7b1be39c4ba48f467cf224176
3 | PrefabImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Prefabs/UI Default World Space.prefab.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: e93221dc7693cf44eab36053c6a35742
3 | PrefabImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Prefabs/UI Default.prefab.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 58ec4a5fd80f0854cbc79850c507b61b
3 | PrefabImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Prefabs/VRKeyboard.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 17d1ec22246a2154abfa07e7baa4db8c
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Prefabs/VRKeyboard/Keyboard VR.prefab.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 55f3a9419b9126445aea0d5089885fc9
3 | PrefabImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Unity Runtime Debug Action
2 |
3 | RuntimeDebugAction is a runtime debug menu system for Unity that lets you register and trigger debug actions with no extra setup. With a set of built-in debug actions and a tiny logger that works out of the box, RDA is built to supercharge your mobile and desktop game development.
4 |
5 | ## Input
6 | Cross platform input support
7 | - Desktop
8 | - [Mobile](https://bennykok.github.io/runtime-debug-action-docs/manuals/testing-with-mobile.html)
9 | - [VR (InputSystem)](https://bennykok.github.io/runtime-debug-action-docs/manuals/VR/index.html)
10 |
11 | https://user-images.githubusercontent.com/18395202/127760553-2fe09c74-c6da-4ebd-af84-2cf162acec17.mp4
12 |
13 | ## Links
14 |
15 | [Twitter](https://twitter.com/BennyKokMusic/status/1316547829817466880) | [Documentation](https://bennykok.github.io/runtime-debug-action-docs/manuals/QuickStart/index.html) | [Discord](https://discord.gg/fHGsArj)
16 |
17 | ## Install
18 |
19 | Via UPM.
20 |
21 | ```
22 | UPM install via git url -> https://github.com/BennyKok/unity-runtime-debug-action.git
23 | ```
24 |
25 | You can also choose to add this as a submodule in your package folder.
26 |
27 | ```
28 | git submodule add https://github.com/BennyKok/unity-runtime-debug-action.git Packages/unity-runtime-debug-action
29 | ```
30 |
31 | ## Examples
32 |
33 | With RDA, you can add action via [code](https://bennykok.github.io/runtime-debug-action-docs/manuals/CustomActions/fluent-api.html), [component](https://bennykok.github.io/runtime-debug-action-docs/manuals/CustomActions/debug-action-component.html), [reflection](https://bennykok.github.io/runtime-debug-action-docs/manuals/CustomActions/attribute-reflection.html)
34 |
35 | Here's a glimpse of adding via code.
36 |
37 | ```csharp
38 | RuntimeDebugSystem.RegisterActions(
39 | DebugActionBuilder.Button()
40 | .WithName("Your actions")
41 | .WithAction(()=>{ });
42 | );
43 | ```
44 |
45 | ## Explore
46 | Feel free to check me out!! :)
47 |
48 | [Twitter](https://twitter.com/BennyKokMusic) | [Website](https://bennykok.com) | [AssetStore](https://assetstore.unity.com/publishers/28510)
49 |
--------------------------------------------------------------------------------
/README.md.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 0828b88c0fedd3f46a267b8797c25380
3 | TextScriptImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Runtime.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 78e96b510d4aba249afa0d671663284f
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Runtime/Actions.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: ca5e35d3305981b46b1284747a9450de
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Runtime/Actions/Base.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: a8b0f2845ccf53a439ae9c9bdc870947
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Runtime/Actions/Base/BaseDebugAction.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using BennyKok.RuntimeDebug.Systems;
3 | using BennyKok.RuntimeDebug.Utils;
4 | using UnityEngine;
5 | using UnityEngine.Events;
6 |
7 | namespace BennyKok.RuntimeDebug
8 | {
9 | ///
10 | /// Base class for all debug action
11 | ///
12 | [Serializable]
13 | public class BaseDebugAction
14 | {
15 | [Comment("Base Action Properties")]
16 | public string group;
17 | public string name;
18 | public string id;
19 |
20 | [Multiline]
21 | public string description;
22 | public string shortcutKey;
23 | public bool closePanelAfterTrigger = false;
24 | public Color actionColor = Color.gray;
25 |
26 | [Space]
27 | [Comment("Action Event", order = 1)]
28 | [CollapsedEvent]
29 | public UnityEvent unityAction;
30 | public Action action;
31 | public Func actionStatus;
32 |
33 | public Action onSliderValueChanged;
34 | public Func onGetSliderValue;
35 | public Func onGetMinMax;
36 |
37 | public virtual void ResolveAction()
38 | {
39 | action?.Invoke();
40 |
41 | if (closePanelAfterTrigger)
42 | {
43 | RuntimeDebugSystem.UIHandler.TogglePanel(true);
44 | }
45 | }
46 |
47 | public virtual bool CanDisplayAction()
48 | {
49 | return closePanelAfterTrigger;
50 | }
51 |
52 | public virtual string GetDescription()
53 | {
54 | String desc = "";
55 |
56 | if (!string.IsNullOrWhiteSpace(description))
57 | desc += "Description: \n" + description + "\n";
58 |
59 | if (!string.IsNullOrEmpty(shortcutKey))
60 | desc += "Shortcut Key: " + shortcutKey + "\n";
61 |
62 | return desc;
63 | }
64 |
65 | public BaseDebugAction()
66 | {
67 | action += () => unityAction?.Invoke();
68 | }
69 |
70 | public virtual void Setup()
71 | {
72 |
73 | }
74 | }
75 |
76 | }
--------------------------------------------------------------------------------
/Runtime/Actions/Base/BaseDebugAction.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 0f0a63108d05ff0459e3cda791da19d6
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Runtime/Actions/Base/FluentAction.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using UnityEngine;
3 | using UnityEngine.Events;
4 |
5 | namespace BennyKok.RuntimeDebug
6 | {
7 | ///
8 | /// Base debug action class that has common fluent methods
9 | ///
10 | [Serializable]
11 | public class FluentAction : BaseDebugAction where T : FluentAction
12 | {
13 | #region Builder Method
14 |
15 | ///
16 | /// Assign specific id to the action, can be use for unregistering.
17 | ///
18 | /// Id of the action
19 | public virtual T WithId(string id)
20 | {
21 | this.id = id;
22 | return (T)this;
23 | }
24 |
25 | ///
26 | /// Assign primary action
27 | ///
28 | ///
29 | public virtual T WithAction(Action action)
30 | {
31 | this.action = action;
32 | return (T)this;
33 | }
34 |
35 | ///
36 | /// The name to be displayed in the debug menu
37 | ///
38 | ///
39 | ///
40 | public virtual T WithName(string name)
41 | {
42 | this.name = name;
43 | return (T)this;
44 | }
45 |
46 | ///
47 | /// The description of this action to be displayed in the tooltip panel
48 | ///
49 | ///
50 | public virtual T WithDescription(string description)
51 | {
52 | this.description = description;
53 | return (T)this;
54 | }
55 |
56 | ///
57 | /// The group this action belongs to
58 | ///
59 | ///
60 | public virtual T WithGroup(string group)
61 | {
62 | this.group = group;
63 | return (T)this;
64 | }
65 |
66 | ///
67 | /// A shortcut keyboard key to trigger this action when the debug menu is not visible, see https://docs.unity3d.com/Manual/class-InputManager.html for availble key names
68 | ///
69 | ///
70 | public virtual T WithShortcutKey(string keycode)
71 | {
72 | this.shortcutKey = keycode;
73 | return (T)this;
74 | }
75 |
76 | ///
77 | /// The tint color for this action displayed in the debug menu
78 | ///
79 | ///
80 | public virtual T WithActionColor(Color actionColor)
81 | {
82 | this.actionColor = actionColor;
83 | return (T)this;
84 | }
85 |
86 | ///
87 | /// Should the debug menu be closed after the action was triggered?
88 | ///
89 | ///
90 | public virtual T WithClosePanelAfterTrigger(bool closePanelAfterTrigger = true)
91 | {
92 | this.closePanelAfterTrigger = closePanelAfterTrigger;
93 | return (T)this;
94 | }
95 | #endregion
96 |
97 | }
98 |
99 | }
--------------------------------------------------------------------------------
/Runtime/Actions/Base/FluentAction.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 27230c86e1d203640a238979c2647310
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Runtime/Actions/Builder.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 129259973f0871748a7d6ccda5fffff6
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Runtime/Actions/Builder/DebugActionBuilder.cs:
--------------------------------------------------------------------------------
1 | namespace BennyKok.RuntimeDebug.Actions
2 | {
3 | ///
4 | /// Builder class for built-in derived class
5 | ///
6 | public static class DebugActionBuilder
7 | {
8 | ///
9 | /// Create a new instance
10 | ///
11 | /// A new instance
12 | public static DebugActionButton Button() => new DebugActionButton();
13 |
14 | ///
15 | /// Create a new instance
16 | ///
17 | /// A aew instance
18 | public static DebugActionToggle Toggle() => new DebugActionToggle();
19 |
20 | ///
21 | /// Create a new instance
22 | ///
23 | /// A aew instance
24 | public static DebugActionEnum Enum() => new DebugActionEnum();
25 |
26 | ///
27 | /// Create a new instance
28 | ///
29 | /// A new instance
30 | public static DebugActionInput Input() => new DebugActionInput();
31 |
32 | ///
33 | /// Create a new instance
34 | ///
35 | /// A new instance
36 | public static DebugActionFlag Flag() => new DebugActionFlag();
37 | }
38 | }
--------------------------------------------------------------------------------
/Runtime/Actions/Builder/DebugActionBuilder.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: e7bb61a20441c9843907c19c17e3a10f
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Runtime/Actions/DebugActionButton.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using UnityEngine;
3 | using UnityEngine.Events;
4 |
5 | namespace BennyKok.RuntimeDebug
6 | {
7 | ///
8 | /// Button action will be represented as a simple button in the debug menu
9 | ///
10 | ///
11 | ///
12 | /// RuntimeDebugSystem.RegisterActions(
13 | /// DebugActionBuilder.Button()
14 | /// .WithName("Quit")
15 | /// .WithAction(() => Application.Quit())
16 | /// );
17 | ///
18 | ///
19 | [Serializable]
20 | public class DebugActionButton : FluentAction
21 | {
22 |
23 | }
24 |
25 | }
--------------------------------------------------------------------------------
/Runtime/Actions/DebugActionButton.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: daed28d10ea3fdd43aa6c09093e4a819
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Runtime/Actions/DebugActionEnum.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using BennyKok.RuntimeDebug.Utils;
3 | using UnityEngine;
4 | using UnityEngine.Events;
5 |
6 | namespace BennyKok.RuntimeDebug
7 | {
8 | ///
9 | /// Enum action will be represented as a button selector in the debug menu, triggering the action will cycle the value
10 | ///
11 | ///
12 | ///
13 | /// RuntimeDebugSystem.RegisterActions(
14 | /// DebugActionBuilder.Enum()
15 | /// .WithName("Set My Enum")
16 | /// .WithEnumType(typeof(MyEnum))
17 | /// .WithActionGet(() => myEnum)
18 | /// .WithActionSet((value) => myEnum = value)
19 | /// );
20 | ///
21 | ///
22 | [Serializable]
23 | public class DebugActionEnum : FluentAction
24 | {
25 | public Action actionChange;
26 |
27 | public Action actionSet;
28 | public Func actionGet;
29 |
30 | private string[] enumDisplay;
31 |
32 | protected string GetDisplayStatus(int value) => $"{enumDisplay[value]}";
33 |
34 | public virtual DebugActionEnum WithEnumType(Type enumType)
35 | {
36 | enumDisplay = Enum.GetNames(enumType);
37 | return this;
38 | }
39 |
40 | public virtual DebugActionEnum WithActionGet(Func actionGet)
41 | {
42 | this.actionGet = actionGet;
43 | this.actionStatus = () => GetDisplayStatus(actionGet());
44 | return this;
45 | }
46 |
47 | public virtual DebugActionEnum WithActionSet(Action actionSet)
48 | {
49 | this.actionSet = actionSet;
50 | return this;
51 | }
52 |
53 | public override void ResolveAction()
54 | {
55 | var val = actionGet() + 1;
56 | if (val >= enumDisplay.Length)
57 | val = 0;
58 | this.actionSet(val);
59 | }
60 | }
61 |
62 | }
--------------------------------------------------------------------------------
/Runtime/Actions/DebugActionEnum.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 320826d5cd65b81499326b023086ad9a
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Runtime/Actions/DebugActionFlag.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using BennyKok.RuntimeDebug.Utils;
3 | using UnityEngine;
4 |
5 | namespace BennyKok.RuntimeDebug
6 | {
7 | ///
8 | /// Flag action will be represented as a button selector in the debug menu, triggering the action will cycle the value and notify the flag listener, if `isPersistence` is true, the value will also be updated to PlayerPrefs.
9 | ///
10 | ///
11 | ///
12 | /// RuntimeDebugSystem.RegisterActions(
13 | /// DebugActionBuilder.Flag()
14 | /// .WithName("Target FPS")
15 | /// .WithFlag("target-fps", new string[] { "Default", "30", "60" }, true)
16 | /// .WithFlagListener((flag) =>
17 | /// {
18 | /// switch (flag)
19 | /// {
20 | /// case 0:
21 | /// Application.targetFrameRate = -1;
22 | /// break;
23 | /// case 1:
24 | /// Application.targetFrameRate = 30;
25 | /// break;
26 | /// case 2:
27 | /// Application.targetFrameRate = 60;
28 | /// break;
29 | /// }
30 | /// })
31 | /// );
32 | ///
33 | ///
34 | /// RuntimeDebugSystem.RegisterActions(
35 | /// DebugActionBuilder.Flag()
36 | /// .WithName("Set Screen Orientation")
37 | /// .WithFlag("screen-orientation", Enum.GetNames(typeof(ScreenOrientation)), true, (int)Screen.orientation)
38 | /// .WithFlagListener((flag) =>
39 | /// {
40 | /// Screen.orientation = (ScreenOrientation)(int)flag;
41 | /// })
42 | /// );
43 | ///
44 | ///
45 | [Serializable]
46 | public class DebugActionFlag : FluentAction
47 | {
48 | ///
49 | /// If true, the key will be saved to PlayerPrefs
50 | ///
51 | [Title("Flag", 2)]
52 | public bool isPersistence;
53 | [Visibility("isPersistence", true)]
54 | public string flagKey;
55 | [NonSerialized] public int defaultFlagValue;
56 | public int flagValue;
57 | public string[] flagValues;
58 | private string flagValuesDisplay;
59 |
60 | [NonSerialized] private bool isFlagDirty;
61 |
62 |
63 | public Action onFlagChange;
64 |
65 | public static readonly string[] BOOLEAN_VALUES = { "Off", "On" };
66 |
67 | public static string GetFlagKeyWithPrefix(string key)
68 | {
69 | return "rda-flag-" + key;
70 | }
71 |
72 | public DebugActionFlag WithFlag(string flagKey, bool persistence = true, bool defaultValue = false)
73 | {
74 | SetupFlag(flagKey, BOOLEAN_VALUES, persistence, defaultValue ? 1 : 0);
75 | return this;
76 | }
77 |
78 | public DebugActionFlag WithFlag(string flagKey, string[] values, bool persistence = true, int defaultValue = 0)
79 | {
80 | SetupFlag(flagKey, values, persistence, defaultValue);
81 | return this;
82 | }
83 |
84 | public DebugActionFlag WithFlagListener(Action onFlagChange, bool invokeNowIfDirty = true)
85 | {
86 | this.onFlagChange = onFlagChange;
87 |
88 | //Invoke once since the flag value might be loaded from PlayerPrefs
89 | if (invokeNowIfDirty && isFlagDirty) onFlagChange?.Invoke(this);
90 |
91 | return this;
92 | }
93 |
94 | public override string GetDescription()
95 | {
96 | var desc = base.GetDescription();
97 |
98 | if (!string.IsNullOrEmpty(flagKey))
99 | desc += "Flag Key: " + flagKey + "\n";
100 |
101 | desc += "Persistence: " + isPersistence + "\n";
102 |
103 | if (flagValues != null && flagValues.Length > 0)
104 | desc += "Flag Values: " + flagValuesDisplay + "\n";
105 |
106 | return desc;
107 | }
108 |
109 | public bool ResetFlag(bool invokeFlagListener = true)
110 | {
111 | return SetFlagValue(defaultFlagValue, invokeFlagListener);
112 | }
113 |
114 | public bool CycleFlagValue(bool invokeFlagListener = true)
115 | {
116 | var val = flagValue + 1;
117 | if (val >= flagValues.Length)
118 | val = 0;
119 | return SetFlagValue(val, invokeFlagListener);
120 | }
121 |
122 | public void InvokeFlagListener()
123 | {
124 | onFlagChange?.Invoke(this);
125 | }
126 |
127 | public bool SetFlagValue(int newFlagValue, bool invokeFlagListener = true)
128 | {
129 | bool changed = flagValue != newFlagValue;
130 |
131 | this.flagValue = newFlagValue;
132 |
133 | UpdatePlayerPrefs();
134 |
135 | if (changed && invokeFlagListener)
136 | onFlagChange?.Invoke(this);
137 |
138 | return changed;
139 | }
140 |
141 | private void UpdatePlayerPrefs()
142 | {
143 | if (isPersistence)
144 | PlayerPrefs.SetInt(GetFlagKeyWithPrefix(flagKey), flagValue);
145 | }
146 |
147 | private void SetupFlag(string flagKey, string[] values, bool persistence = true, int defaultValue = 0)
148 | {
149 | this.flagKey = flagKey;
150 | this.isPersistence = persistence;
151 | this.flagValues = values;
152 | this.defaultFlagValue = defaultValue;
153 |
154 | if (flagValues.Length > 0)
155 | {
156 | flagValuesDisplay = string.Join(" | ", flagValues);
157 | }
158 |
159 | if (persistence)
160 | {
161 | flagValue = PlayerPrefs.GetInt(GetFlagKeyWithPrefix(flagKey), defaultValue);
162 |
163 | if (flagValue != defaultFlagValue)
164 | isFlagDirty = true;
165 | }
166 | else
167 | flagValue = defaultValue;
168 |
169 | this.action = () =>
170 | {
171 | flagValue++;
172 | if (flagValue >= values.Length)
173 | flagValue = 0;
174 |
175 | UpdatePlayerPrefs();
176 | onFlagChange?.Invoke(this);
177 | };
178 | this.actionStatus = () =>
179 | {
180 | if (values.Length == 0) return null;
181 |
182 | if (values[flagValue] == "Off")
183 | return "Off";
184 |
185 | return $"{values[flagValue]}";
186 | };
187 | }
188 |
189 | public override void Setup()
190 | {
191 | SetupFlag(flagKey, flagValues, isPersistence, flagValue);
192 | }
193 |
194 | public static implicit operator int(DebugActionFlag flag) => flag.flagValue;
195 | public static implicit operator bool(DebugActionFlag flag) => flag.flagValue == 1;
196 | }
197 |
198 | }
--------------------------------------------------------------------------------
/Runtime/Actions/DebugActionFlag.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: f9171023227846d478344198d28ec0ce
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Runtime/Actions/DebugActionInput.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: e1007e1eee3e87740875f3db5dc57a65
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Runtime/Actions/DebugActionToggle.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using BennyKok.RuntimeDebug.Systems;
3 | using BennyKok.RuntimeDebug.Utils;
4 | using UnityEngine;
5 | using UnityEngine.Events;
6 |
7 | namespace BennyKok.RuntimeDebug
8 | {
9 | ///
10 | /// Toggle action will be represented as a button toggle in the debug menu with on/off status
11 | ///
12 | ///
13 | ///
14 | /// RuntimeDebugSystem.RegisterActions(
15 | /// DebugActionBuilder.Toggle()
16 | /// .WithName("PostProcessing")
17 | /// .WithActionGet(() => GetCameraData().renderPostProcessing)
18 | /// .WithActionSet((isOn) => GetCameraData().renderPostProcessing = isOn),
19 | /// );
20 | ///
21 | ///
22 | [Serializable]
23 | public class DebugActionToggle : FluentAction
24 | {
25 | [Title("Toggle", 0)]
26 | public bool isOn;
27 |
28 | public Action actionSwitch;
29 |
30 | [CollapsedEvent]
31 | public UnityEvent unityActionOff;
32 |
33 | public Action actionSet;
34 | public Func actionGet;
35 |
36 | protected string GetDisplayStatus(bool isOn) => isOn ? "On" : "Off";
37 |
38 | public virtual DebugActionToggle WithActionGet(Func actionGet)
39 | {
40 | this.actionGet = actionGet;
41 | this.actionStatus = () => GetDisplayStatus(actionGet());
42 | return this;
43 | }
44 |
45 | public virtual DebugActionToggle WithActionSet(Action actionSet)
46 | {
47 | this.actionSet = actionSet;
48 | return this;
49 | }
50 |
51 | public override void ResolveAction()
52 | {
53 | isOn = !actionGet();
54 | this.actionSet(isOn);
55 |
56 | if (closePanelAfterTrigger)
57 | {
58 | RuntimeDebugSystem.UIHandler.TogglePanel(true);
59 | }
60 | }
61 |
62 | public override void Setup()
63 | {
64 | //Handling situration when this is serialized, e.g. being used in RuntimeDebugActionHandler
65 | this.actionGet = () => isOn;
66 | this.actionStatus = () => GetDisplayStatus(isOn);
67 | this.actionSwitch += () => unityActionOff.Invoke();
68 | this.actionSet = (_isOn) =>
69 | {
70 | if (_isOn)
71 | action.Invoke();
72 | else
73 | actionSwitch.Invoke();
74 | };
75 | }
76 | }
77 |
78 | }
--------------------------------------------------------------------------------
/Runtime/Actions/DebugActionToggle.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 26cb463ee687c2d42ac77401961c4c8b
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Runtime/Attributes.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 54812ff9b894e2145a75d032e427c43f
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Runtime/Attributes/DebugActionAttribute.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | namespace BennyKok.RuntimeDebug
4 | {
5 | [Serializable]
6 | [AttributeUsage(AttributeTargets.Method | AttributeTargets.Field | AttributeTargets.Property)]
7 | public class DebugActionAttribute : Attribute
8 | {
9 | public string name;
10 | public string group;
11 | public string id;
12 | public string description;
13 | public string shortcutKey;
14 | public bool closePanelAfterTrigger = false;
15 |
16 | public bool useSlider = false;
17 | public float min = 0;
18 | public float max = 1;
19 | }
20 | }
--------------------------------------------------------------------------------
/Runtime/Attributes/DebugActionAttribute.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 181702289c9577e49a12e72e88a14859
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Runtime/Components.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 66979f6eab8bd05459e08c690f60b2a5
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Runtime/Components/Actions.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: ba0fb9e8f7e24664fb86b49482eacec7
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Runtime/Components/Actions/BaseDebugActionHandler.cs:
--------------------------------------------------------------------------------
1 | using System.Linq;
2 | using BennyKok.RuntimeDebug.Actions;
3 | using BennyKok.RuntimeDebug.Systems;
4 | using UnityEngine;
5 | using System.Collections.Generic;
6 | using UnityEngine.Events;
7 |
8 | #if UNITY_EDITOR
9 | using UnityEditor;
10 | #endif
11 |
12 | namespace BennyKok.RuntimeDebug.Components
13 | {
14 | public class BaseDebugActionHandler : MonoBehaviour where T : BaseDebugAction
15 | {
16 | public T action;
17 |
18 | protected virtual void Awake()
19 | {
20 | action.Setup();
21 | RuntimeDebugSystem.RegisterActions(action);
22 | }
23 |
24 | protected virtual void OnDestroy()
25 | {
26 | RuntimeDebugSystem.UnregisterActions(action);
27 | }
28 | }
29 |
30 | #if UNITY_EDITOR
31 | [CanEditMultipleObjects]
32 | public class DebugActionHandlerEditor : Editor
33 | {
34 | protected SerializedProperty actionProp;
35 | private List innerProps;
36 |
37 | protected virtual void OnEnable()
38 | {
39 | actionProp = serializedObject.FindProperty("action");
40 | innerProps = GetVisibleChildren(actionProp).ToList();
41 |
42 | var eventTypeName = typeof(UnityEvent).Name;
43 |
44 | //We sort out action to the bottom of draw order
45 | var j = innerProps.Count;
46 | for (int i = 0; i < j; i++)
47 | {
48 | var prop = innerProps[i];
49 | // Debug.Log(prop.type + " " + eventTypeName);
50 | if (prop.type == eventTypeName)
51 | {
52 | innerProps.RemoveAt(i);
53 | innerProps.Add(prop);
54 | j--;
55 | }
56 | }
57 | }
58 |
59 | public override void OnInspectorGUI()
60 | {
61 | serializedObject.Update();
62 |
63 | foreach (var a in innerProps)
64 | {
65 | EditorGUILayout.PropertyField(a);
66 | }
67 |
68 | DrawPropertiesExcluding(serializedObject, "m_Script", "action");
69 |
70 | serializedObject.ApplyModifiedProperties();
71 | }
72 |
73 | private IEnumerable GetVisibleChildren(SerializedProperty serializedProperty)
74 | {
75 | SerializedProperty currentProperty = serializedProperty.Copy();
76 | SerializedProperty nextSiblingProperty = serializedProperty.Copy();
77 | {
78 | nextSiblingProperty.NextVisible(false);
79 | }
80 |
81 | if (currentProperty.NextVisible(true))
82 | {
83 | do
84 | {
85 | if (SerializedProperty.EqualContents(currentProperty, nextSiblingProperty))
86 | break;
87 |
88 | yield return currentProperty.Copy();
89 | }
90 | while (currentProperty.NextVisible(false));
91 | }
92 | }
93 | }
94 | #endif
95 |
96 | }
--------------------------------------------------------------------------------
/Runtime/Components/Actions/BaseDebugActionHandler.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 9f1c2aef00b40a7458e80f163a0c35f9
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Runtime/Components/Actions/DebugActionAutoHandler.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 6729bb9d10a6ba84cac4182f8596e695
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Runtime/Components/Actions/DebugActionButtonHandler.cs:
--------------------------------------------------------------------------------
1 | using BennyKok.RuntimeDebug.Actions;
2 | using UnityEngine;
3 |
4 | namespace BennyKok.RuntimeDebug.Components
5 | {
6 | [AddComponentMenu("Runtime Debug Action/Actions/Debug Action Button")]
7 | public class DebugActionButtonHandler : BaseDebugActionHandler
8 | {
9 |
10 | }
11 |
12 | #if UNITY_EDITOR
13 | [UnityEditor.CanEditMultipleObjects]
14 | [UnityEditor.CustomEditor(typeof(DebugActionButtonHandler))]
15 | public class DebugActionButtonHandlerEditor : DebugActionHandlerEditor { }
16 | #endif
17 | }
--------------------------------------------------------------------------------
/Runtime/Components/Actions/DebugActionButtonHandler.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 7e1e5378d3da21b4cacda91d284f8231
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Runtime/Components/Actions/DebugActionFlagHandler.cs:
--------------------------------------------------------------------------------
1 | using BennyKok.RuntimeDebug.Actions;
2 | using UnityEngine;
3 | using UnityEngine.Events;
4 | using BennyKok.RuntimeDebug.Utils;
5 |
6 | #if UNITY_EDITOR
7 | using UnityEditor;
8 | #endif
9 |
10 | namespace BennyKok.RuntimeDebug.Components
11 | {
12 | [AddComponentMenu("Runtime Debug Action/Actions/Debug Action Flag")]
13 | public class DebugActionFlagHandler : BaseDebugActionHandler
14 | {
15 | [Comment("The event at corresponsing index will be called when the flag is changed or init from persistence value")]
16 | public UnityEvent[] flagActions;
17 |
18 | protected override void Awake()
19 | {
20 | base.Awake();
21 | action.WithFlagListener((flag) =>
22 | {
23 | if (flag < flagActions.Length)
24 | flagActions[flag].Invoke();
25 | else
26 | Debug.LogWarning("Not matching UnityEvent counts for flag listener callback.");
27 | });
28 | }
29 | }
30 |
31 | #if UNITY_EDITOR
32 | [UnityEditor.CanEditMultipleObjects]
33 | [UnityEditor.CustomEditor(typeof(DebugActionFlagHandler))]
34 | public class DebugActionFlagHandlerEditor : DebugActionHandlerEditor
35 | {
36 | protected SerializedProperty flagValuesProp;
37 | protected SerializedProperty flagActionsProp;
38 |
39 | protected override void OnEnable()
40 | {
41 | base.OnEnable();
42 |
43 | flagActionsProp = serializedObject.FindProperty("flagActions");
44 | flagValuesProp = actionProp.FindPropertyRelative("flagValues");
45 | }
46 | public override void OnInspectorGUI()
47 | {
48 | base.OnInspectorGUI();
49 |
50 | serializedObject.Update();
51 |
52 | // Sync the UnityEvents size with the values size
53 | if (flagValuesProp.arraySize != flagActionsProp.arraySize)
54 | flagActionsProp.arraySize = flagValuesProp.arraySize;
55 |
56 | serializedObject.ApplyModifiedProperties();
57 | }
58 | }
59 | #endif
60 | }
--------------------------------------------------------------------------------
/Runtime/Components/Actions/DebugActionFlagHandler.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 056712b5f6ad4e948b123da60880d498
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Runtime/Components/Actions/DebugActionInputHandler.cs:
--------------------------------------------------------------------------------
1 | using BennyKok.RuntimeDebug.Actions;
2 | using UnityEngine;
3 |
4 | namespace BennyKok.RuntimeDebug.Components
5 | {
6 | [AddComponentMenu("Runtime Debug Action/Actions/Debug Action Input")]
7 | public class DebugActionInputHandler : BaseDebugActionHandler
8 | {
9 |
10 | }
11 |
12 | #if UNITY_EDITOR
13 | [UnityEditor.CanEditMultipleObjects]
14 | [UnityEditor.CustomEditor(typeof(DebugActionInputHandler))]
15 | public class DebugActionInputHandlerEditor : DebugActionHandlerEditor { }
16 | #endif
17 | }
--------------------------------------------------------------------------------
/Runtime/Components/Actions/DebugActionInputHandler.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: fca7b0bdb38389748b591d497ee84a46
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Runtime/Components/Actions/DebugActionToggleHandler.cs:
--------------------------------------------------------------------------------
1 | using BennyKok.RuntimeDebug.Actions;
2 | using UnityEngine;
3 |
4 | namespace BennyKok.RuntimeDebug.Components
5 | {
6 | [AddComponentMenu("Runtime Debug Action/Actions/Debug Action Toggle")]
7 | public class DebugActionToggleHandler : BaseDebugActionHandler
8 | {
9 |
10 | }
11 |
12 | #if UNITY_EDITOR
13 | [UnityEditor.CanEditMultipleObjects]
14 | [UnityEditor.CustomEditor(typeof(DebugActionToggleHandler))]
15 | public class DebugActionToggleHandlerEditor : DebugActionHandlerEditor { }
16 | #endif
17 | }
--------------------------------------------------------------------------------
/Runtime/Components/Actions/DebugActionToggleHandler.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 5317351a64bd7ae4bbe9f9f191b5f7e3
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Runtime/Components/Actions/RuntimeDebugBehaviour.cs:
--------------------------------------------------------------------------------
1 | using BennyKok.RuntimeDebug.Actions;
2 | using BennyKok.RuntimeDebug.Systems;
3 | using UnityEngine;
4 |
5 | namespace BennyKok.RuntimeDebug.Components
6 | {
7 | public abstract class RuntimeDebugBehaviour : MonoBehaviour
8 | {
9 | private BaseDebugAction[] actions;
10 |
11 | protected virtual void Awake()
12 | {
13 | actions = RuntimeDebugSystem.RegisterActionsAuto(this);
14 | }
15 |
16 | protected virtual void OnDestroy()
17 | {
18 | RuntimeDebugSystem.UnregisterActions(actions);
19 | }
20 | }
21 | }
--------------------------------------------------------------------------------
/Runtime/Components/Actions/RuntimeDebugBehaviour.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: f8f3f88eb3d763e4489349afac0ac2b7
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Runtime/Components/Event.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 15ebec5fef1ff7c4aa9eb5fed42f76bf
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Runtime/Components/Event/DebugSystemEventHandler.cs:
--------------------------------------------------------------------------------
1 | using BennyKok.RuntimeDebug;
2 | using BennyKok.RuntimeDebug.Systems;
3 | using BennyKok.RuntimeDebug.Utils;
4 | using UnityEngine;
5 | using UnityEngine.Events;
6 |
7 | namespace BennyKok.RuntimeDebug.Components.UI
8 | {
9 | [AddComponentMenu("Runtime Debug Action/Event/Debug System Event Handler")]
10 | public class DebugSystemEventHandler : MonoBehaviour
11 | {
12 | [Title("Events", false, 2)]
13 | [CollapsedEvent]
14 | public UnityEvent onDebugMenuShow = new UnityEvent();
15 |
16 | [CollapsedEvent]
17 | public UnityEvent onDebugMenuHide = new UnityEvent();
18 |
19 |
20 | private void OnEnable() => RuntimeDebugSystem.Instance.OnDebugMenuToggleEvent += OnToggle;
21 |
22 | private void OnDisable() => RuntimeDebugSystem.Instance.OnDebugMenuToggleEvent -= OnToggle;
23 |
24 | public void OnToggle(bool isVisible)
25 | {
26 | if (isVisible)
27 | onDebugMenuShow.Invoke();
28 | else
29 | onDebugMenuHide.Invoke();
30 | }
31 | }
32 | }
--------------------------------------------------------------------------------
/Runtime/Components/Event/DebugSystemEventHandler.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 2fd103875d06b9d4e8bb042afd73ed1e
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Runtime/Components/UI.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 5494a79eacc55d44eb24aee8ae0c22d8
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Runtime/Components/UI/AutoFacingCamera.cs:
--------------------------------------------------------------------------------
1 | using BennyKok.RuntimeDebug.Systems;
2 | using UnityEngine;
3 |
4 | namespace BennyKok.RuntimeDebug.Components.UI
5 | {
6 | public class AutoFacingCamera : MonoBehaviour
7 | {
8 | public float distanceAwayCamera = 1;
9 | public float recenterTime = 0.2f;
10 | public float distanceThreshold = 2.5f;
11 |
12 | [Range(0, 300)]
13 | public float angleThreshold = 50f;
14 |
15 | private bool isUpdating;
16 |
17 | private Camera m_Camera;
18 | private Camera Camera
19 | {
20 | get
21 | {
22 | if (m_Camera == null) m_Camera = Camera.main;
23 | return m_Camera;
24 | }
25 | }
26 |
27 | private void Start()
28 | {
29 | Recenter();
30 | }
31 |
32 | private void OnEnable()
33 | {
34 | RuntimeDebugSystem.Instance.OnDebugMenuToggleEvent += OnMenuToggle;
35 | }
36 |
37 | private void OnDisable()
38 | {
39 | RuntimeDebugSystem.Instance.OnDebugMenuToggleEvent -= OnMenuToggle;
40 | }
41 |
42 | private void OnMenuToggle(bool isShowing)
43 | {
44 | if (isShowing) Recenter();
45 | }
46 |
47 | private Vector3 newPosition;
48 | private Quaternion newRotation;
49 | private Vector3 velocity = Vector3.zero;
50 |
51 | private void Recenter()
52 | {
53 | isUpdating = true;
54 |
55 | var dir = Camera.transform.forward;
56 | dir.y = 0;
57 |
58 | newPosition = Camera.transform.position + dir * distanceAwayCamera;
59 | }
60 |
61 | private void Update()
62 | {
63 | var distanceDiff = Vector3.Distance(transform.position, Camera.transform.position);
64 | var diff = transform.position - Camera.transform.position;
65 | diff.y = 0;
66 | newRotation = Quaternion.LookRotation(diff.normalized);
67 | transform.rotation = Quaternion.Slerp(transform.rotation, newRotation, Time.unscaledDeltaTime / recenterTime);
68 |
69 | Vector3 lookDir = Camera.transform.position - transform.position;
70 | lookDir.y = 0;
71 | Vector3 yourDir = Camera.transform.forward;
72 | yourDir.y = 0;
73 |
74 | float angleDiff = Vector3.Angle(yourDir, -lookDir);
75 | // Debug.Log(angleDiff);
76 | if (distanceDiff > distanceThreshold || angleDiff > angleThreshold)
77 | {
78 | Recenter();
79 | }
80 |
81 | if (isUpdating)
82 | {
83 | transform.position = Vector3.SmoothDamp(transform.position, newPosition, ref velocity, recenterTime, 20, Time.unscaledDeltaTime);
84 | if (transform.position == newPosition)
85 | {
86 | isUpdating = false;
87 | }
88 | }
89 | }
90 | }
91 | }
--------------------------------------------------------------------------------
/Runtime/Components/UI/AutoFacingCamera.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: c98349c16945f2643b89ff8fa466ec87
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Runtime/Components/UI/DebugUIHandler.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: e2f92e4dd1f1ae44298c58b5886a03a5
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Runtime/Components/UI/FontSetter.cs:
--------------------------------------------------------------------------------
1 | using BennyKok.RuntimeDebug.Data;
2 | using BennyKok.RuntimeDebug.Systems;
3 | using TMPro;
4 | using UnityEngine;
5 |
6 | namespace BennyKok.RuntimeDebug.Components.UI
7 | {
8 | [AddComponentMenu("Runtime Debug Action/UI/Font Setter")]
9 | public class FontSetter : MonoBehaviour
10 | {
11 | public DebugUIHandler uiHandler;
12 |
13 | private void Awake()
14 | {
15 | if (uiHandler && uiHandler.customFont && TryGetComponent(out var text))
16 | {
17 | text.font = uiHandler.customFont;
18 | }
19 | }
20 | }
21 | }
--------------------------------------------------------------------------------
/Runtime/Components/UI/FontSetter.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 3a661a3f39da566469dffa2d9dd23610
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Runtime/Components/UI/InputUIHandler.cs:
--------------------------------------------------------------------------------
1 | using System.Collections;
2 | using System;
3 | using BennyKok.RuntimeDebug.Data;
4 | using BennyKok.RuntimeDebug.DebugInput;
5 | using BennyKok.RuntimeDebug.Systems;
6 | using BennyKok.RuntimeDebug.Utils;
7 | using TMPro;
8 | using UnityEngine;
9 | using UnityEngine.EventSystems;
10 | using UnityEngine.UI;
11 | using System.Linq;
12 |
13 | namespace BennyKok.RuntimeDebug.Components.UI
14 | {
15 | [RequireComponent(typeof(TMP_InputField))]
16 | public class InputUIHandler : MonoBehaviour
17 | {
18 | [Title("References", false, 3)]
19 | public TMP_InputField inputField;
20 | public Button cancelButton;
21 |
22 | public InputUISlider sliderHelper;
23 |
24 | private Action resultCallback;
25 | private Action cancelCallback;
26 |
27 | private void Awake()
28 | {
29 | gameObject.SetActive(false);
30 |
31 | if (cancelButton) cancelButton.onClick.AddListener(DimissInput);
32 |
33 | inputField.onSubmit.AddListener((val) =>
34 | {
35 | OnConfirm();
36 | });
37 | }
38 |
39 | private void Update()
40 | {
41 | if (!RuntimeDebugSystem.UIHandler.IsVisible) return;
42 |
43 | if (RuntimeDebugSystem.isInputLayerReady && RuntimeDebugSystem.InputLayer.IsMenuAction())
44 | {
45 | cancelCallback?.Invoke();
46 | DimissInput();
47 | }
48 | }
49 |
50 | private void OnConfirm()
51 | {
52 | if (confirmDelayCoroutine != null) StopCoroutine(confirmDelayCoroutine);
53 | confirmDelayCoroutine = StartCoroutine(OnConfirmDelay());
54 | }
55 |
56 | private Coroutine confirmDelayCoroutine;
57 |
58 | private IEnumerator OnConfirmDelay()
59 | {
60 | yield return new WaitForEndOfFrame();
61 | //User confirm input
62 | resultCallback?.Invoke(inputField.text);
63 | // RuntimeDebugSystem.UIHandler.TogglePanel(true, false);
64 |
65 | // Make sure the submit key is being consumed until next frame
66 | DimissInput();
67 | }
68 |
69 | ///
70 | /// Dismiss the input, which will deactivate the gameobject and replease the input block of the
71 | ///
72 | public void DimissInput()
73 | {
74 | inputField.text = null;
75 | DebugUIHandler.currentInputField = null;
76 |
77 | gameObject.SetActive(false);
78 | RuntimeDebugSystem.Instance.ReleaseInputBlock();
79 |
80 | sliderHelper?.Clear();
81 | }
82 |
83 | public void AskForInput(InputQuery query, Action resultCallback, Action cancelCallback = null)
84 | {
85 | this.resultCallback = resultCallback;
86 | this.cancelCallback = cancelCallback;
87 |
88 | RuntimeDebugSystem.Instance.RequsetInputBlock();
89 |
90 | gameObject.SetActive(true);
91 | (inputField.placeholder as TextMeshProUGUI).text = query.GetParamsDisplay();
92 | var prefill = query.allParams.Aggregate("",
93 | (result, param) =>
94 | {
95 | if (param.valuePrefillCallback == null) return result;
96 | var prefillValue = param.valuePrefillCallback?.Invoke();
97 | var prefillString = prefillValue != null ? prefillValue.ToString() : "";
98 | if (prefillValue is string && !string.IsNullOrEmpty(prefillString) && query.allParams.Count > 1)
99 | prefillString = "\"" + prefillString + "\"";
100 | return result + (result.Length > 0 ? " " : null) + prefillString;
101 | });
102 | if (!string.IsNullOrWhiteSpace(prefill))
103 | {
104 | inputField.text = prefill;
105 | inputField.caretPosition = prefill.Length;
106 | }
107 |
108 | sliderHelper?.OnNewInput(query);
109 |
110 | if (!inputField.isFocused)
111 | inputField.ActivateInputField();
112 |
113 | DebugUIHandler.currentInputField = inputField;
114 | }
115 | }
116 | }
--------------------------------------------------------------------------------
/Runtime/Components/UI/InputUIHandler.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 582e34cab83f1c84ba767bfc4c9ec38e
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Runtime/Components/UI/InputUISlider.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Globalization;
3 | using System.Security;
4 | using BennyKok.RuntimeDebug.DebugInput;
5 | using UnityEngine;
6 | using UnityEngine.EventSystems;
7 |
8 | namespace BennyKok.RuntimeDebug.Components.UI
9 | {
10 | public class InputUISlider : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
11 | {
12 | public InputUIHandler target;
13 |
14 | private Param currentParma;
15 |
16 | private double currentValue, step;
17 |
18 | private void Awake()
19 | {
20 | gameObject.SetActive(false);
21 | }
22 |
23 | public void OnBeginDrag(PointerEventData eventData)
24 | {
25 | if (currentParma == null) return;
26 | if (double.TryParse(target.inputField.text, out var value))
27 | currentValue = RoundToNearest(value, step);
28 | // currentValue = step;
29 | else
30 | currentValue = 0;
31 | target.inputField.text = currentValue.ToString();
32 | }
33 |
34 | public void OnDrag(PointerEventData eventData)
35 | {
36 | if (currentParma == null) return;
37 | var draggedValue = eventData.delta.y * step;
38 | currentValue = RoundToNearest(currentValue + draggedValue, step);
39 | // currentValue += draggedValue;
40 | // Debug.Log(currentValue);
41 | target.inputField.text = currentValue.ToString();
42 | target.inputField.caretPosition = target.inputField.text.Length;
43 | }
44 |
45 | public static double RoundToNearest(double value, double step)
46 | {
47 | return System.Math.Round(value * (1 / step), System.MidpointRounding.ToEven) / (1 / step);
48 | }
49 |
50 | public void OnEndDrag(PointerEventData eventData) { }
51 |
52 | public void OnNewInput(InputQuery query)
53 | {
54 | if (query.allParams.Count != 1) return;
55 |
56 | var param = query.allParams[0];
57 | if (!(param.type == ParamType.Int || param.type == ParamType.Float)) return;
58 |
59 | gameObject.SetActive(true);
60 | currentParma = param;
61 | step = currentParma.type == ParamType.Float ? 0.1 : 1.0;
62 | }
63 |
64 | public void Clear()
65 | {
66 | gameObject.SetActive(false);
67 | currentParma = null;
68 | }
69 | }
70 | }
--------------------------------------------------------------------------------
/Runtime/Components/UI/InputUISlider.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 8f8fee089e8055f419ee5e9a9a650fe2
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Runtime/Components/UI/ListItemView.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: ea543a93c197b664a8b31130de7aeb81
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Runtime/Components/UI/ListView.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: a1db088aa9053b74295fe1415b5484e0
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Runtime/Components/UI/LoggerHandler.cs:
--------------------------------------------------------------------------------
1 | using System.Linq;
2 | using System;
3 | using System.Collections.Generic;
4 | using BennyKok.RuntimeDebug.Systems;
5 | using UnityEngine;
6 | using UnityEngine.UI;
7 | using BennyKok.RuntimeDebug.Actions;
8 |
9 | namespace BennyKok.RuntimeDebug.Components.UI
10 | {
11 | public class LoggerHandler : MonoBehaviour
12 | {
13 | public TMPro.TextMeshProUGUI logText;
14 | public ScrollRect scrollRect;
15 |
16 | public List allLogs = new List();
17 |
18 | private string textCache;
19 | private Vector2 textScrollCache;
20 | private bool isOnHold;
21 |
22 | public struct Log
23 | {
24 | public string logString;
25 | public string stackTrace;
26 | public LogType type;
27 | public DateTime time;
28 |
29 | public Log(string logString, string stackTrace, LogType type, DateTime time)
30 | {
31 | this.logString = logString;
32 | this.stackTrace = stackTrace;
33 | this.type = type;
34 | this.time = time;
35 | }
36 |
37 | public override string ToString()
38 | {
39 | var log = $"{type} | {time.ToString("hh:mm:ss")} | {logString}";
40 | switch (type)
41 | {
42 | case LogType.Exception:
43 | case LogType.Error:
44 | log = $"{log}";
45 | break;
46 | case LogType.Warning:
47 | log = $"{log}";
48 | break;
49 | }
50 | return log + "\n";
51 | }
52 | }
53 |
54 | public void Hold()
55 | {
56 | isOnHold = true;
57 | textScrollCache = scrollRect.normalizedPosition;
58 | textCache = logText.text;
59 | }
60 |
61 | public void Resume()
62 | {
63 | isOnHold = false;
64 | textScrollCache = scrollRect.normalizedPosition;
65 | logText.text = textCache;
66 | }
67 |
68 | private void Awake()
69 | {
70 | if (RuntimeDebugSystem.GetPersistantFlagValue("show-logger") == 0)
71 | {
72 | scrollRect.gameObject.SetActive(false);
73 | }
74 | }
75 |
76 | private DebugActionFlag panelFlag;
77 | private DebugActionFlag loggerFlag;
78 |
79 | private DebugActionFlag PanelFlag
80 | {
81 | get
82 | {
83 | if (panelFlag == null)
84 | panelFlag = RuntimeDebugSystem.GetFlag("bottom-panel-height");
85 |
86 | return panelFlag;
87 | }
88 | }
89 |
90 | private DebugActionFlag LoggerFlag
91 | {
92 | get
93 | {
94 | if (loggerFlag == null)
95 | loggerFlag = RuntimeDebugSystem.GetFlag("show-logger");
96 |
97 | return loggerFlag;
98 | }
99 | }
100 |
101 | private void Start()
102 | {
103 | if (PanelFlag != null)
104 | {
105 | PanelFlag.InvokeFlagListener();
106 | }
107 | }
108 |
109 | public void Close()
110 | {
111 | LoggerFlag.SetFlagValue(0);
112 | }
113 |
114 | public void SwitchHeight()
115 | {
116 | PanelFlag.CycleFlagValue();
117 | }
118 |
119 | public void OnLogUpdated(string logString, string stackTrace, LogType type)
120 | {
121 | Log item = new Log(logString, stackTrace, type, DateTime.Now);
122 |
123 | if (allLogs.Count == RuntimeDebugSystem.Settings.loggerMaxLine)
124 | {
125 | logText.text = logText.text.Remove(0, allLogs[0].ToString().Count());
126 | allLogs.RemoveAt(0);
127 | }
128 |
129 | if (isOnHold)
130 | textCache += item;
131 | else
132 | logText.text += item;
133 | allLogs.Add(item);
134 | }
135 | }
136 | }
--------------------------------------------------------------------------------
/Runtime/Components/UI/LoggerHandler.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 3941d01c19ec9db4da6455c697773c9a
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Runtime/Components/UI/LoggerLineSelectHandler.cs:
--------------------------------------------------------------------------------
1 | using TMPro;
2 | using UnityEngine;
3 | using UnityEngine.EventSystems;
4 | using UnityEngine.UI;
5 |
6 | namespace BennyKok.RuntimeDebug.Components.UI
7 | {
8 | public class LoggerLineSelectHandler : MonoBehaviour, IPointerClickHandler, IBeginDragHandler, IEndDragHandler
9 | {
10 | public LoggerHandler loggerHandler;
11 | public TextMeshProUGUI text;
12 | // public TextMeshProUGUI detailText;
13 | public ScrollRect scrollRect;
14 |
15 | private bool isDragging;
16 | private bool isShowingDetails;
17 |
18 | private Canvas canvas;
19 |
20 | private void Awake()
21 | {
22 | canvas = GetComponentInParent