├── AndroidPanelModule.prefab
├── AndroidPanelModule.prefab.meta
├── LICENSE
├── LICENSE.meta
├── PortablePanel.prefab
├── PortablePanel.prefab.meta
├── Prefabs.meta
├── Prefabs
├── Basic Example.meta
├── Basic Example
│ ├── GrabbablePanel.prefab
│ └── GrabbablePanel.prefab.meta
├── RigidBody Example.meta
└── RigidBody Example
│ ├── GrabbablePanelWithRigidBody.prefab
│ ├── GrabbablePanelWithRigidBody.prefab.meta
│ ├── Panel Material.mat
│ ├── Panel Material.mat.meta
│ ├── PanelParticleMaterial.mat
│ ├── PanelParticleMaterial.mat.meta
│ ├── PortablePanelWithRigidBody.asset
│ ├── PortablePanelWithRigidBody.asset.meta
│ ├── PortablePanelWithRigidBody.cs
│ └── PortablePanelWithRigidBody.cs.meta
├── README.md
├── README.md.meta
├── Res.meta
├── Res
├── Android.PNG
├── Android.PNG.meta
├── PanelHierarchy.PNG
├── PanelHierarchy.PNG.meta
├── Parameters.png
├── Parameters.png.meta
├── Presentation1.gif
├── Presentation1.gif.meta
├── Presentation2.gif
└── Presentation2.gif.meta
├── Scripts.meta
├── Scripts
├── AndroidPanelModule.asset
├── AndroidPanelModule.asset.meta
├── AndroidPanelModule.cs
├── AndroidPanelModule.cs.meta
├── PortablePanel.asset
├── PortablePanel.asset.meta
├── PortablePanel.cs
├── PortablePanel.cs.meta
├── PortablePanelPickupModule.asset
├── PortablePanelPickupModule.asset.meta
├── PortablePanelPickupModule.cs
└── PortablePanelPickupModule.cs.meta
├── ThrowablePanel.prefab
└── ThrowablePanel.prefab.meta
/AndroidPanelModule.prefab:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!1 &3764922133343136984
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: 1884747349897913452}
12 | - component: {fileID: 4472827621752594383}
13 | - component: {fileID: 3375193750615995457}
14 | m_Layer: 0
15 | m_Name: AndroidModule
16 | m_TagString: Untagged
17 | m_Icon: {fileID: 0}
18 | m_NavMeshLayer: 0
19 | m_StaticEditorFlags: 0
20 | m_IsActive: 1
21 | --- !u!4 &1884747349897913452
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: 3764922133343136984}
28 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
29 | m_LocalPosition: {x: 0.6869443, y: -1.5459756, z: 6.192684}
30 | m_LocalScale: {x: 1, y: 1, z: 1}
31 | m_Children:
32 | - {fileID: 6322727466328258209}
33 | m_Father: {fileID: 0}
34 | m_RootOrder: 0
35 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
36 | --- !u!114 &4472827621752594383
37 | MonoBehaviour:
38 | m_ObjectHideFlags: 0
39 | m_CorrespondingSourceObject: {fileID: 0}
40 | m_PrefabInstance: {fileID: 0}
41 | m_PrefabAsset: {fileID: 0}
42 | m_GameObject: {fileID: 3764922133343136984}
43 | m_Enabled: 1
44 | m_EditorHideFlags: 0
45 | m_Script: {fileID: 11500000, guid: f043114674f43f2448af5493f1cacf41, type: 3}
46 | m_Name:
47 | m_EditorClassIdentifier:
48 | serializationData:
49 | SerializedFormat: 2
50 | SerializedBytes:
51 | ReferencedUnityObjects: []
52 | SerializedBytesString:
53 | Prefab: {fileID: 0}
54 | PrefabModificationsReferencedUnityObjects: []
55 | PrefabModifications: []
56 | SerializationNodes: []
57 | _udonSharpBackingUdonBehaviour: {fileID: 3375193750615995457}
58 | PortablePanelInstance: {fileID: 0}
59 | CanvasInstance: {fileID: 5806126486146550018}
60 | --- !u!114 &3375193750615995457
61 | MonoBehaviour:
62 | m_ObjectHideFlags: 0
63 | m_CorrespondingSourceObject: {fileID: 0}
64 | m_PrefabInstance: {fileID: 0}
65 | m_PrefabAsset: {fileID: 0}
66 | m_GameObject: {fileID: 3764922133343136984}
67 | m_Enabled: 1
68 | m_EditorHideFlags: 0
69 | m_Script: {fileID: 11500000, guid: 45115577ef41a5b4ca741ed302693907, type: 3}
70 | m_Name:
71 | m_EditorClassIdentifier:
72 | interactTextPlacement: {fileID: 0}
73 | interactText: Use
74 | interactTextGO: {fileID: 0}
75 | proximity: 2
76 | SynchronizePosition: 0
77 | AllowCollisionOwnershipTransfer: 0
78 | Reliable: 0
79 | _syncMethod: 1
80 | serializedProgramAsset: {fileID: 11400000, guid: d934a01d057aa214c832458f807b8003,
81 | type: 2}
82 | programSource: {fileID: 11400000, guid: 872edc65781d9904a950c69f6602c83c, type: 2}
83 | serializedPublicVariablesBytesString: Ai8AAAAAATIAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAFQAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AAAAAAAYBAAAAAAAAACcBBAAAAHQAeQBwAGUAAWgAAABTAHkAcwB0AGUAbQAuAEMAbwBsAGwAZQBjAHQAaQBvAG4AcwAuAEcAZQBuAGUAcgBpAGMALgBMAGkAcwB0AGAAMQBbAFsAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBJAG4AdABlAHIAZgBhAGMAZQBzAC4ASQBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AXQBdACwAIABtAHMAYwBvAHIAbABpAGIAAQEJAAAAVgBhAHIAaQBhAGIAbABlAHMALwEAAAABaAAAAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ARwBlAG4AZQByAGkAYwAuAEwAaQBzAHQAYAAxAFsAWwBWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAEkAbgB0AGUAcgBmAGEAYwBlAHMALgBJAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgBdAF0ALAAgAG0AcwBjAG8AcgBsAGkAYgABAAAABgEAAAAAAAAAAi8CAAAAAUkAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAIAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAR8AAABfAF8AXwBVAGQAbwBuAFMAaABhAHIAcABCAGUAaABhAHYAaQBvAHUAcgBWAGUAcgBzAGkAbwBuAF8AXwBfACcBBAAAAHQAeQBwAGUAARYAAABTAHkAcwB0AGUAbQAuAEkAbgB0ADMAMgAsACAAbQBzAGMAbwByAGwAaQBiABcBBQAAAFYAYQBsAHUAZQACAAAABwUHBQcF
84 | publicVariablesUnityEngineObjects: []
85 | publicVariablesSerializationDataFormat: 0
86 | --- !u!1 &4367019252113600669
87 | GameObject:
88 | m_ObjectHideFlags: 0
89 | m_CorrespondingSourceObject: {fileID: 0}
90 | m_PrefabInstance: {fileID: 0}
91 | m_PrefabAsset: {fileID: 0}
92 | serializedVersion: 6
93 | m_Component:
94 | - component: {fileID: 1588211458845382089}
95 | - component: {fileID: 5942941983311299061}
96 | - component: {fileID: 7594780536231908624}
97 | m_Layer: 0
98 | m_Name: Text (TMP)
99 | m_TagString: Untagged
100 | m_Icon: {fileID: 0}
101 | m_NavMeshLayer: 0
102 | m_StaticEditorFlags: 0
103 | m_IsActive: 1
104 | --- !u!224 &1588211458845382089
105 | RectTransform:
106 | m_ObjectHideFlags: 0
107 | m_CorrespondingSourceObject: {fileID: 0}
108 | m_PrefabInstance: {fileID: 0}
109 | m_PrefabAsset: {fileID: 0}
110 | m_GameObject: {fileID: 4367019252113600669}
111 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
112 | m_LocalPosition: {x: 0, y: 0, z: 0}
113 | m_LocalScale: {x: 1, y: 1, z: 1}
114 | m_Children: []
115 | m_Father: {fileID: 1531182488482796981}
116 | m_RootOrder: 0
117 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
118 | m_AnchorMin: {x: 0, y: 0}
119 | m_AnchorMax: {x: 1, y: 1}
120 | m_AnchoredPosition: {x: 0, y: 0}
121 | m_SizeDelta: {x: 0, y: 0}
122 | m_Pivot: {x: 0.5, y: 0.5}
123 | --- !u!222 &5942941983311299061
124 | CanvasRenderer:
125 | m_ObjectHideFlags: 0
126 | m_CorrespondingSourceObject: {fileID: 0}
127 | m_PrefabInstance: {fileID: 0}
128 | m_PrefabAsset: {fileID: 0}
129 | m_GameObject: {fileID: 4367019252113600669}
130 | m_CullTransparentMesh: 0
131 | --- !u!114 &7594780536231908624
132 | MonoBehaviour:
133 | m_ObjectHideFlags: 0
134 | m_CorrespondingSourceObject: {fileID: 0}
135 | m_PrefabInstance: {fileID: 0}
136 | m_PrefabAsset: {fileID: 0}
137 | m_GameObject: {fileID: 4367019252113600669}
138 | m_Enabled: 1
139 | m_EditorHideFlags: 0
140 | m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
141 | m_Name:
142 | m_EditorClassIdentifier:
143 | m_Material: {fileID: 0}
144 | m_Color: {r: 1, g: 1, b: 1, a: 1}
145 | m_RaycastTarget: 1
146 | m_Maskable: 1
147 | m_OnCullStateChanged:
148 | m_PersistentCalls:
149 | m_Calls: []
150 | m_text: Panel
151 | m_isRightToLeft: 0
152 | m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
153 | m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
154 | m_fontSharedMaterials: []
155 | m_fontMaterial: {fileID: 0}
156 | m_fontMaterials: []
157 | m_fontColor32:
158 | serializedVersion: 2
159 | rgba: 4281479730
160 | m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
161 | m_enableVertexGradient: 0
162 | m_colorMode: 3
163 | m_fontColorGradient:
164 | topLeft: {r: 1, g: 1, b: 1, a: 1}
165 | topRight: {r: 1, g: 1, b: 1, a: 1}
166 | bottomLeft: {r: 1, g: 1, b: 1, a: 1}
167 | bottomRight: {r: 1, g: 1, b: 1, a: 1}
168 | m_fontColorGradientPreset: {fileID: 0}
169 | m_spriteAsset: {fileID: 0}
170 | m_tintAllSprites: 0
171 | m_StyleSheet: {fileID: 0}
172 | m_TextStyleHashCode: -1183493901
173 | m_overrideHtmlColors: 0
174 | m_faceColor:
175 | serializedVersion: 2
176 | rgba: 4294967295
177 | m_fontSize: 24
178 | m_fontSizeBase: 24
179 | m_fontWeight: 400
180 | m_enableAutoSizing: 0
181 | m_fontSizeMin: 18
182 | m_fontSizeMax: 72
183 | m_fontStyle: 0
184 | m_HorizontalAlignment: 2
185 | m_VerticalAlignment: 512
186 | m_textAlignment: 65535
187 | m_characterSpacing: 0
188 | m_wordSpacing: 0
189 | m_lineSpacing: 0
190 | m_lineSpacingMax: 0
191 | m_paragraphSpacing: 0
192 | m_charWidthMaxAdj: 0
193 | m_enableWordWrapping: 1
194 | m_wordWrappingRatios: 0.4
195 | m_overflowMode: 0
196 | m_linkedTextComponent: {fileID: 0}
197 | parentLinkedComponent: {fileID: 0}
198 | m_enableKerning: 1
199 | m_enableExtraPadding: 0
200 | checkPaddingRequired: 0
201 | m_isRichText: 1
202 | m_parseCtrlCharacters: 1
203 | m_isOrthographic: 1
204 | m_isCullingEnabled: 0
205 | m_horizontalMapping: 0
206 | m_verticalMapping: 0
207 | m_uvLineOffset: 0
208 | m_geometrySortingOrder: 0
209 | m_IsTextObjectScaleStatic: 0
210 | m_VertexBufferAutoSizeReduction: 0
211 | m_useMaxVisibleDescender: 1
212 | m_pageToDisplay: 1
213 | m_margin: {x: 0, y: 0, z: 0, w: 0}
214 | m_isUsingLegacyAnimationComponent: 0
215 | m_isVolumetricText: 0
216 | m_hasFontAssetChanged: 0
217 | m_baseMaterial: {fileID: 0}
218 | m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
219 | --- !u!1 &8098409514734976703
220 | GameObject:
221 | m_ObjectHideFlags: 0
222 | m_CorrespondingSourceObject: {fileID: 0}
223 | m_PrefabInstance: {fileID: 0}
224 | m_PrefabAsset: {fileID: 0}
225 | serializedVersion: 6
226 | m_Component:
227 | - component: {fileID: 1531182488482796981}
228 | - component: {fileID: 3638087404488727502}
229 | - component: {fileID: 7302953359352975616}
230 | - component: {fileID: 7058503471817273753}
231 | m_Layer: 0
232 | m_Name: Button
233 | m_TagString: Untagged
234 | m_Icon: {fileID: 0}
235 | m_NavMeshLayer: 0
236 | m_StaticEditorFlags: 0
237 | m_IsActive: 1
238 | --- !u!224 &1531182488482796981
239 | RectTransform:
240 | m_ObjectHideFlags: 0
241 | m_CorrespondingSourceObject: {fileID: 0}
242 | m_PrefabInstance: {fileID: 0}
243 | m_PrefabAsset: {fileID: 0}
244 | m_GameObject: {fileID: 8098409514734976703}
245 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
246 | m_LocalPosition: {x: 0, y: 0, z: 0}
247 | m_LocalScale: {x: 1, y: 1, z: 1}
248 | m_Children:
249 | - {fileID: 1588211458845382089}
250 | m_Father: {fileID: 6322727466328258209}
251 | m_RootOrder: 0
252 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
253 | m_AnchorMin: {x: 0, y: 1}
254 | m_AnchorMax: {x: 0, y: 1}
255 | m_AnchoredPosition: {x: 20, y: -20}
256 | m_SizeDelta: {x: 160, y: 40}
257 | m_Pivot: {x: 0, y: 1}
258 | --- !u!222 &3638087404488727502
259 | CanvasRenderer:
260 | m_ObjectHideFlags: 0
261 | m_CorrespondingSourceObject: {fileID: 0}
262 | m_PrefabInstance: {fileID: 0}
263 | m_PrefabAsset: {fileID: 0}
264 | m_GameObject: {fileID: 8098409514734976703}
265 | m_CullTransparentMesh: 0
266 | --- !u!114 &7302953359352975616
267 | MonoBehaviour:
268 | m_ObjectHideFlags: 0
269 | m_CorrespondingSourceObject: {fileID: 0}
270 | m_PrefabInstance: {fileID: 0}
271 | m_PrefabAsset: {fileID: 0}
272 | m_GameObject: {fileID: 8098409514734976703}
273 | m_Enabled: 1
274 | m_EditorHideFlags: 0
275 | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
276 | m_Name:
277 | m_EditorClassIdentifier:
278 | m_Material: {fileID: 0}
279 | m_Color: {r: 1, g: 1, b: 1, a: 1}
280 | m_RaycastTarget: 1
281 | m_Maskable: 1
282 | m_OnCullStateChanged:
283 | m_PersistentCalls:
284 | m_Calls: []
285 | m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
286 | m_Type: 1
287 | m_PreserveAspect: 0
288 | m_FillCenter: 1
289 | m_FillMethod: 4
290 | m_FillAmount: 1
291 | m_FillClockwise: 1
292 | m_FillOrigin: 0
293 | m_UseSpriteMesh: 0
294 | m_PixelsPerUnitMultiplier: 1
295 | --- !u!114 &7058503471817273753
296 | MonoBehaviour:
297 | m_ObjectHideFlags: 0
298 | m_CorrespondingSourceObject: {fileID: 0}
299 | m_PrefabInstance: {fileID: 0}
300 | m_PrefabAsset: {fileID: 0}
301 | m_GameObject: {fileID: 8098409514734976703}
302 | m_Enabled: 1
303 | m_EditorHideFlags: 0
304 | m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
305 | m_Name:
306 | m_EditorClassIdentifier:
307 | m_Navigation:
308 | m_Mode: 3
309 | m_SelectOnUp: {fileID: 0}
310 | m_SelectOnDown: {fileID: 0}
311 | m_SelectOnLeft: {fileID: 0}
312 | m_SelectOnRight: {fileID: 0}
313 | m_Transition: 1
314 | m_Colors:
315 | m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
316 | m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
317 | m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
318 | m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
319 | m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
320 | m_ColorMultiplier: 1
321 | m_FadeDuration: 0.1
322 | m_SpriteState:
323 | m_HighlightedSprite: {fileID: 0}
324 | m_PressedSprite: {fileID: 0}
325 | m_SelectedSprite: {fileID: 0}
326 | m_DisabledSprite: {fileID: 0}
327 | m_AnimationTriggers:
328 | m_NormalTrigger: Normal
329 | m_HighlightedTrigger: Highlighted
330 | m_PressedTrigger: Pressed
331 | m_SelectedTrigger: Selected
332 | m_DisabledTrigger: Disabled
333 | m_Interactable: 1
334 | m_TargetGraphic: {fileID: 7302953359352975616}
335 | m_OnClick:
336 | m_PersistentCalls:
337 | m_Calls:
338 | - m_Target: {fileID: 3375193750615995457}
339 | m_MethodName: SendCustomEvent
340 | m_Mode: 5
341 | m_Arguments:
342 | m_ObjectArgument: {fileID: 0}
343 | m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
344 | m_IntArgument: 0
345 | m_FloatArgument: 0
346 | m_StringArgument: ToggleMenu
347 | m_BoolArgument: 0
348 | m_CallState: 2
349 | --- !u!1 &8782409873214502432
350 | GameObject:
351 | m_ObjectHideFlags: 0
352 | m_CorrespondingSourceObject: {fileID: 0}
353 | m_PrefabInstance: {fileID: 0}
354 | m_PrefabAsset: {fileID: 0}
355 | serializedVersion: 6
356 | m_Component:
357 | - component: {fileID: 6322727466328258209}
358 | - component: {fileID: 5806126486146550018}
359 | - component: {fileID: 5072826710587021207}
360 | - component: {fileID: 3933027235913866682}
361 | m_Layer: 0
362 | m_Name: Canvas
363 | m_TagString: Untagged
364 | m_Icon: {fileID: 0}
365 | m_NavMeshLayer: 0
366 | m_StaticEditorFlags: 0
367 | m_IsActive: 0
368 | --- !u!224 &6322727466328258209
369 | RectTransform:
370 | m_ObjectHideFlags: 0
371 | m_CorrespondingSourceObject: {fileID: 0}
372 | m_PrefabInstance: {fileID: 0}
373 | m_PrefabAsset: {fileID: 0}
374 | m_GameObject: {fileID: 8782409873214502432}
375 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
376 | m_LocalPosition: {x: 0, y: 0, z: 0}
377 | m_LocalScale: {x: 0, y: 0, z: 0}
378 | m_Children:
379 | - {fileID: 1531182488482796981}
380 | m_Father: {fileID: 1884747349897913452}
381 | m_RootOrder: 0
382 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
383 | m_AnchorMin: {x: 0, y: 0}
384 | m_AnchorMax: {x: 0, y: 0}
385 | m_AnchoredPosition: {x: 0, y: 0}
386 | m_SizeDelta: {x: 0, y: 0}
387 | m_Pivot: {x: 0, y: 0}
388 | --- !u!223 &5806126486146550018
389 | Canvas:
390 | m_ObjectHideFlags: 0
391 | m_CorrespondingSourceObject: {fileID: 0}
392 | m_PrefabInstance: {fileID: 0}
393 | m_PrefabAsset: {fileID: 0}
394 | m_GameObject: {fileID: 8782409873214502432}
395 | m_Enabled: 1
396 | serializedVersion: 3
397 | m_RenderMode: 0
398 | m_Camera: {fileID: 0}
399 | m_PlaneDistance: 100
400 | m_PixelPerfect: 0
401 | m_ReceivesEvents: 1
402 | m_OverrideSorting: 0
403 | m_OverridePixelPerfect: 0
404 | m_SortingBucketNormalizedSize: 0
405 | m_AdditionalShaderChannelsFlag: 25
406 | m_SortingLayerID: 0
407 | m_SortingOrder: 0
408 | m_TargetDisplay: 0
409 | --- !u!114 &5072826710587021207
410 | MonoBehaviour:
411 | m_ObjectHideFlags: 0
412 | m_CorrespondingSourceObject: {fileID: 0}
413 | m_PrefabInstance: {fileID: 0}
414 | m_PrefabAsset: {fileID: 0}
415 | m_GameObject: {fileID: 8782409873214502432}
416 | m_Enabled: 1
417 | m_EditorHideFlags: 0
418 | m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
419 | m_Name:
420 | m_EditorClassIdentifier:
421 | m_UiScaleMode: 1
422 | m_ReferencePixelsPerUnit: 100
423 | m_ScaleFactor: 1
424 | m_ReferenceResolution: {x: 1280, y: 720}
425 | m_ScreenMatchMode: 0
426 | m_MatchWidthOrHeight: 0
427 | m_PhysicalUnit: 3
428 | m_FallbackScreenDPI: 96
429 | m_DefaultSpriteDPI: 96
430 | m_DynamicPixelsPerUnit: 1
431 | --- !u!114 &3933027235913866682
432 | MonoBehaviour:
433 | m_ObjectHideFlags: 0
434 | m_CorrespondingSourceObject: {fileID: 0}
435 | m_PrefabInstance: {fileID: 0}
436 | m_PrefabAsset: {fileID: 0}
437 | m_GameObject: {fileID: 8782409873214502432}
438 | m_Enabled: 1
439 | m_EditorHideFlags: 0
440 | m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
441 | m_Name:
442 | m_EditorClassIdentifier:
443 | m_IgnoreReversedGraphics: 1
444 | m_BlockingObjects: 0
445 | m_BlockingMask:
446 | serializedVersion: 2
447 | m_Bits: 4294967295
448 |
--------------------------------------------------------------------------------
/AndroidPanelModule.prefab.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 2c8d1f92e6885a74f886ec168beeac66
3 | PrefabImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 MyroP
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: b9f5155ef9654064d9e0894a64862339
3 | DefaultImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/PortablePanel.prefab:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!1 &1216727722377721200
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: 7531146285904012144}
12 | m_Layer: 0
13 | m_Name: '[ADD YOUR PANEL AS A CHILD OF THIS GAMEOBJECT]'
14 | m_TagString: Untagged
15 | m_Icon: {fileID: 0}
16 | m_NavMeshLayer: 0
17 | m_StaticEditorFlags: 0
18 | m_IsActive: 1
19 | --- !u!4 &7531146285904012144
20 | Transform:
21 | m_ObjectHideFlags: 0
22 | m_CorrespondingSourceObject: {fileID: 0}
23 | m_PrefabInstance: {fileID: 0}
24 | m_PrefabAsset: {fileID: 0}
25 | m_GameObject: {fileID: 1216727722377721200}
26 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
27 | m_LocalPosition: {x: 0, y: 0, z: 0}
28 | m_LocalScale: {x: 1, y: 1, z: 1}
29 | m_Children:
30 | - {fileID: 3658407098491778260}
31 | m_Father: {fileID: 8659203161166647251}
32 | m_RootOrder: 0
33 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
34 | --- !u!1 &3258420194863700279
35 | GameObject:
36 | m_ObjectHideFlags: 0
37 | m_CorrespondingSourceObject: {fileID: 0}
38 | m_PrefabInstance: {fileID: 0}
39 | m_PrefabAsset: {fileID: 0}
40 | serializedVersion: 6
41 | m_Component:
42 | - component: {fileID: 8659203161166647251}
43 | - component: {fileID: 7443599571650023776}
44 | - component: {fileID: 8874036614593792104}
45 | m_Layer: 0
46 | m_Name: PortablePanel
47 | m_TagString: Untagged
48 | m_Icon: {fileID: 0}
49 | m_NavMeshLayer: 0
50 | m_StaticEditorFlags: 0
51 | m_IsActive: 1
52 | --- !u!4 &8659203161166647251
53 | Transform:
54 | m_ObjectHideFlags: 0
55 | m_CorrespondingSourceObject: {fileID: 0}
56 | m_PrefabInstance: {fileID: 0}
57 | m_PrefabAsset: {fileID: 0}
58 | m_GameObject: {fileID: 3258420194863700279}
59 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
60 | m_LocalPosition: {x: 0, y: 0, z: 0}
61 | m_LocalScale: {x: 1, y: 1, z: 1}
62 | m_Children:
63 | - {fileID: 7531146285904012144}
64 | m_Father: {fileID: 0}
65 | m_RootOrder: 0
66 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
67 | --- !u!114 &7443599571650023776
68 | MonoBehaviour:
69 | m_ObjectHideFlags: 0
70 | m_CorrespondingSourceObject: {fileID: 0}
71 | m_PrefabInstance: {fileID: 0}
72 | m_PrefabAsset: {fileID: 0}
73 | m_GameObject: {fileID: 3258420194863700279}
74 | m_Enabled: 1
75 | m_EditorHideFlags: 0
76 | m_Script: {fileID: 11500000, guid: 6c16e461e59a5a340a22f538d64095e8, type: 3}
77 | m_Name:
78 | m_EditorClassIdentifier:
79 | serializationData:
80 | SerializedFormat: 2
81 | SerializedBytes:
82 | ReferencedUnityObjects: []
83 | SerializedBytesString:
84 | Prefab: {fileID: 0}
85 | PrefabModificationsReferencedUnityObjects: []
86 | PrefabModifications: []
87 | SerializationNodes: []
88 | _udonSharpBackingUdonBehaviour: {fileID: 8874036614593792104}
89 | Panel: {fileID: 1216727722377721200}
90 | TabOnHold: 1
91 | GestureMode: 0
92 | CloseBehaviour: 0
93 | _isPickupable: 1
94 | MaxScale: 3
95 | MinScale: 0.1
96 | MaxDistanceBeforeClosingThePanel: 2
97 | PanelScaleOnDesktop: 0.5
98 | _delayInitialisation: 0
99 | --- !u!114 &8874036614593792104
100 | MonoBehaviour:
101 | m_ObjectHideFlags: 0
102 | m_CorrespondingSourceObject: {fileID: 0}
103 | m_PrefabInstance: {fileID: 0}
104 | m_PrefabAsset: {fileID: 0}
105 | m_GameObject: {fileID: 3258420194863700279}
106 | m_Enabled: 1
107 | m_EditorHideFlags: 0
108 | m_Script: {fileID: 11500000, guid: 45115577ef41a5b4ca741ed302693907, type: 3}
109 | m_Name:
110 | m_EditorClassIdentifier:
111 | interactTextPlacement: {fileID: 0}
112 | interactText: Use
113 | interactTextGO: {fileID: 0}
114 | proximity: 2
115 | SynchronizePosition: 0
116 | AllowCollisionOwnershipTransfer: 0
117 | Reliable: 0
118 | _syncMethod: 1
119 | serializedProgramAsset: {fileID: 11400000, guid: fc0a2d339cee7da4d9d94b4b65d2d2d1,
120 | type: 2}
121 | programSource: {fileID: 11400000, guid: 16f82f9ec93c4be49951c5183c885032, type: 2}
122 | serializedPublicVariablesBytesString: Ai8AAAAAATIAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAFQAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AAAAAAAYBAAAAAAAAACcBBAAAAHQAeQBwAGUAAWgAAABTAHkAcwB0AGUAbQAuAEMAbwBsAGwAZQBjAHQAaQBvAG4AcwAuAEcAZQBuAGUAcgBpAGMALgBMAGkAcwB0AGAAMQBbAFsAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBJAG4AdABlAHIAZgBhAGMAZQBzAC4ASQBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AXQBdACwAIABtAHMAYwBvAHIAbABpAGIAAQEJAAAAVgBhAHIAaQBhAGIAbABlAHMALwEAAAABaAAAAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ARwBlAG4AZQByAGkAYwAuAEwAaQBzAHQAYAAxAFsAWwBWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAEkAbgB0AGUAcgBmAGEAYwBlAHMALgBJAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgBdAF0ALAAgAG0AcwBjAG8AcgBsAGkAYgABAAAABgEAAAAAAAAAAi8CAAAAAUkAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAIAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAR8AAABfAF8AXwBVAGQAbwBuAFMAaABhAHIAcABCAGUAaABhAHYAaQBvAHUAcgBWAGUAcgBzAGkAbwBuAF8AXwBfACcBBAAAAHQAeQBwAGUAARYAAABTAHkAcwB0AGUAbQAuAEkAbgB0ADMAMgAsACAAbQBzAGMAbwByAGwAaQBiABcBBQAAAFYAYQBsAHUAZQACAAAABwUHBQcF
123 | publicVariablesUnityEngineObjects: []
124 | publicVariablesSerializationDataFormat: 0
125 | --- !u!1 &3967312580591935724
126 | GameObject:
127 | m_ObjectHideFlags: 0
128 | m_CorrespondingSourceObject: {fileID: 0}
129 | m_PrefabInstance: {fileID: 0}
130 | m_PrefabAsset: {fileID: 0}
131 | serializedVersion: 6
132 | m_Component:
133 | - component: {fileID: 4275710173028544777}
134 | - component: {fileID: 7773693860768129393}
135 | - component: {fileID: 2457320658494291693}
136 | m_Layer: 0
137 | m_Name: Text (TMP)
138 | m_TagString: Untagged
139 | m_Icon: {fileID: 0}
140 | m_NavMeshLayer: 0
141 | m_StaticEditorFlags: 0
142 | m_IsActive: 1
143 | --- !u!224 &4275710173028544777
144 | RectTransform:
145 | m_ObjectHideFlags: 0
146 | m_CorrespondingSourceObject: {fileID: 0}
147 | m_PrefabInstance: {fileID: 0}
148 | m_PrefabAsset: {fileID: 0}
149 | m_GameObject: {fileID: 3967312580591935724}
150 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
151 | m_LocalPosition: {x: 0, y: 0, z: 0}
152 | m_LocalScale: {x: 1, y: 1, z: 1}
153 | m_Children: []
154 | m_Father: {fileID: 1245948148898441782}
155 | m_RootOrder: 0
156 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
157 | m_AnchorMin: {x: 0, y: 0}
158 | m_AnchorMax: {x: 1, y: 1}
159 | m_AnchoredPosition: {x: 0, y: 0}
160 | m_SizeDelta: {x: 0, y: 0}
161 | m_Pivot: {x: 0.5, y: 0.5}
162 | --- !u!222 &7773693860768129393
163 | CanvasRenderer:
164 | m_ObjectHideFlags: 0
165 | m_CorrespondingSourceObject: {fileID: 0}
166 | m_PrefabInstance: {fileID: 0}
167 | m_PrefabAsset: {fileID: 0}
168 | m_GameObject: {fileID: 3967312580591935724}
169 | m_CullTransparentMesh: 0
170 | --- !u!114 &2457320658494291693
171 | MonoBehaviour:
172 | m_ObjectHideFlags: 0
173 | m_CorrespondingSourceObject: {fileID: 0}
174 | m_PrefabInstance: {fileID: 0}
175 | m_PrefabAsset: {fileID: 0}
176 | m_GameObject: {fileID: 3967312580591935724}
177 | m_Enabled: 1
178 | m_EditorHideFlags: 0
179 | m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
180 | m_Name:
181 | m_EditorClassIdentifier:
182 | m_Material: {fileID: 0}
183 | m_Color: {r: 1, g: 1, b: 1, a: 1}
184 | m_RaycastTarget: 1
185 | m_Maskable: 1
186 | m_OnCullStateChanged:
187 | m_PersistentCalls:
188 | m_Calls: []
189 | m_text: Front
190 | m_isRightToLeft: 0
191 | m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
192 | m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
193 | m_fontSharedMaterials: []
194 | m_fontMaterial: {fileID: 0}
195 | m_fontMaterials: []
196 | m_fontColor32:
197 | serializedVersion: 2
198 | rgba: 4278190080
199 | m_fontColor: {r: 0, g: 0, b: 0, a: 1}
200 | m_enableVertexGradient: 0
201 | m_colorMode: 3
202 | m_fontColorGradient:
203 | topLeft: {r: 1, g: 1, b: 1, a: 1}
204 | topRight: {r: 1, g: 1, b: 1, a: 1}
205 | bottomLeft: {r: 1, g: 1, b: 1, a: 1}
206 | bottomRight: {r: 1, g: 1, b: 1, a: 1}
207 | m_fontColorGradientPreset: {fileID: 0}
208 | m_spriteAsset: {fileID: 0}
209 | m_tintAllSprites: 0
210 | m_StyleSheet: {fileID: 0}
211 | m_TextStyleHashCode: -1183493901
212 | m_overrideHtmlColors: 0
213 | m_faceColor:
214 | serializedVersion: 2
215 | rgba: 4294967295
216 | m_fontSize: 13
217 | m_fontSizeBase: 13
218 | m_fontWeight: 400
219 | m_enableAutoSizing: 0
220 | m_fontSizeMin: 18
221 | m_fontSizeMax: 72
222 | m_fontStyle: 0
223 | m_HorizontalAlignment: 2
224 | m_VerticalAlignment: 512
225 | m_textAlignment: 65535
226 | m_characterSpacing: 0
227 | m_wordSpacing: 0
228 | m_lineSpacing: 0
229 | m_lineSpacingMax: 0
230 | m_paragraphSpacing: 0
231 | m_charWidthMaxAdj: 0
232 | m_enableWordWrapping: 1
233 | m_wordWrappingRatios: 0.4
234 | m_overflowMode: 0
235 | m_linkedTextComponent: {fileID: 0}
236 | parentLinkedComponent: {fileID: 0}
237 | m_enableKerning: 1
238 | m_enableExtraPadding: 0
239 | checkPaddingRequired: 0
240 | m_isRichText: 1
241 | m_parseCtrlCharacters: 1
242 | m_isOrthographic: 1
243 | m_isCullingEnabled: 0
244 | m_horizontalMapping: 0
245 | m_verticalMapping: 0
246 | m_uvLineOffset: 0
247 | m_geometrySortingOrder: 0
248 | m_IsTextObjectScaleStatic: 0
249 | m_VertexBufferAutoSizeReduction: 0
250 | m_useMaxVisibleDescender: 1
251 | m_pageToDisplay: 1
252 | m_margin: {x: 0, y: 0, z: 0, w: 46.387047}
253 | m_isUsingLegacyAnimationComponent: 0
254 | m_isVolumetricText: 0
255 | m_hasFontAssetChanged: 0
256 | m_baseMaterial: {fileID: 0}
257 | m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
258 | --- !u!1 &3986745309421431315
259 | GameObject:
260 | m_ObjectHideFlags: 0
261 | m_CorrespondingSourceObject: {fileID: 0}
262 | m_PrefabInstance: {fileID: 0}
263 | m_PrefabAsset: {fileID: 0}
264 | serializedVersion: 6
265 | m_Component:
266 | - component: {fileID: 3658407098491778260}
267 | - component: {fileID: 6105147029748509206}
268 | - component: {fileID: 1244028421486629802}
269 | m_Layer: 0
270 | m_Name: '[DELETE THIS]'
271 | m_TagString: Untagged
272 | m_Icon: {fileID: 0}
273 | m_NavMeshLayer: 0
274 | m_StaticEditorFlags: 0
275 | m_IsActive: 1
276 | --- !u!4 &3658407098491778260
277 | Transform:
278 | m_ObjectHideFlags: 0
279 | m_CorrespondingSourceObject: {fileID: 0}
280 | m_PrefabInstance: {fileID: 0}
281 | m_PrefabAsset: {fileID: 0}
282 | m_GameObject: {fileID: 3986745309421431315}
283 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
284 | m_LocalPosition: {x: 0, y: 0, z: 0}
285 | m_LocalScale: {x: 1, y: 0.5685, z: 0.025936}
286 | m_Children:
287 | - {fileID: 1245948148898441782}
288 | m_Father: {fileID: 7531146285904012144}
289 | m_RootOrder: 0
290 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
291 | --- !u!33 &6105147029748509206
292 | MeshFilter:
293 | m_ObjectHideFlags: 0
294 | m_CorrespondingSourceObject: {fileID: 0}
295 | m_PrefabInstance: {fileID: 0}
296 | m_PrefabAsset: {fileID: 0}
297 | m_GameObject: {fileID: 3986745309421431315}
298 | m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
299 | --- !u!23 &1244028421486629802
300 | MeshRenderer:
301 | m_ObjectHideFlags: 0
302 | m_CorrespondingSourceObject: {fileID: 0}
303 | m_PrefabInstance: {fileID: 0}
304 | m_PrefabAsset: {fileID: 0}
305 | m_GameObject: {fileID: 3986745309421431315}
306 | m_Enabled: 1
307 | m_CastShadows: 1
308 | m_ReceiveShadows: 1
309 | m_DynamicOccludee: 1
310 | m_MotionVectors: 1
311 | m_LightProbeUsage: 1
312 | m_ReflectionProbeUsage: 1
313 | m_RayTracingMode: 2
314 | m_RenderingLayerMask: 1
315 | m_RendererPriority: 0
316 | m_Materials:
317 | - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
318 | m_StaticBatchInfo:
319 | firstSubMesh: 0
320 | subMeshCount: 0
321 | m_StaticBatchRoot: {fileID: 0}
322 | m_ProbeAnchor: {fileID: 0}
323 | m_LightProbeVolumeOverride: {fileID: 0}
324 | m_ScaleInLightmap: 1
325 | m_ReceiveGI: 1
326 | m_PreserveUVs: 0
327 | m_IgnoreNormalsForChartDetection: 0
328 | m_ImportantGI: 0
329 | m_StitchLightmapSeams: 1
330 | m_SelectedEditorRenderState: 3
331 | m_MinimumChartSize: 4
332 | m_AutoUVMaxDistance: 0.5
333 | m_AutoUVMaxAngle: 89
334 | m_LightmapParameters: {fileID: 0}
335 | m_SortingLayerID: 0
336 | m_SortingLayer: 0
337 | m_SortingOrder: 0
338 | --- !u!1 &6495216020917304646
339 | GameObject:
340 | m_ObjectHideFlags: 0
341 | m_CorrespondingSourceObject: {fileID: 0}
342 | m_PrefabInstance: {fileID: 0}
343 | m_PrefabAsset: {fileID: 0}
344 | serializedVersion: 6
345 | m_Component:
346 | - component: {fileID: 1245948148898441782}
347 | - component: {fileID: 3523353780344268111}
348 | - component: {fileID: 4432120425424414615}
349 | - component: {fileID: 8966109807728725698}
350 | - component: {fileID: 3806969658428941430}
351 | - component: {fileID: 6817875292097603696}
352 | m_Layer: 0
353 | m_Name: Canvas
354 | m_TagString: Untagged
355 | m_Icon: {fileID: 0}
356 | m_NavMeshLayer: 0
357 | m_StaticEditorFlags: 0
358 | m_IsActive: 1
359 | --- !u!224 &1245948148898441782
360 | RectTransform:
361 | m_ObjectHideFlags: 0
362 | m_CorrespondingSourceObject: {fileID: 0}
363 | m_PrefabInstance: {fileID: 0}
364 | m_PrefabAsset: {fileID: 0}
365 | m_GameObject: {fileID: 6495216020917304646}
366 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
367 | m_LocalPosition: {x: 0, y: 0, z: -1.0795805}
368 | m_LocalScale: {x: 0.0031973666, y: 0.0056242156, z: 0.123279095}
369 | m_Children:
370 | - {fileID: 4275710173028544777}
371 | m_Father: {fileID: 3658407098491778260}
372 | m_RootOrder: 0
373 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
374 | m_AnchorMin: {x: 0, y: 0}
375 | m_AnchorMax: {x: 0, y: 0}
376 | m_AnchoredPosition: {x: 0, y: 0}
377 | m_SizeDelta: {x: 300, y: 150}
378 | m_Pivot: {x: 0.5, y: 0.5}
379 | --- !u!223 &3523353780344268111
380 | Canvas:
381 | m_ObjectHideFlags: 0
382 | m_CorrespondingSourceObject: {fileID: 0}
383 | m_PrefabInstance: {fileID: 0}
384 | m_PrefabAsset: {fileID: 0}
385 | m_GameObject: {fileID: 6495216020917304646}
386 | m_Enabled: 1
387 | serializedVersion: 3
388 | m_RenderMode: 2
389 | m_Camera: {fileID: 0}
390 | m_PlaneDistance: 100
391 | m_PixelPerfect: 0
392 | m_ReceivesEvents: 1
393 | m_OverrideSorting: 0
394 | m_OverridePixelPerfect: 0
395 | m_SortingBucketNormalizedSize: 0
396 | m_AdditionalShaderChannelsFlag: 25
397 | m_SortingLayerID: 0
398 | m_SortingOrder: 0
399 | m_TargetDisplay: 0
400 | --- !u!114 &4432120425424414615
401 | MonoBehaviour:
402 | m_ObjectHideFlags: 0
403 | m_CorrespondingSourceObject: {fileID: 0}
404 | m_PrefabInstance: {fileID: 0}
405 | m_PrefabAsset: {fileID: 0}
406 | m_GameObject: {fileID: 6495216020917304646}
407 | m_Enabled: 1
408 | m_EditorHideFlags: 0
409 | m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
410 | m_Name:
411 | m_EditorClassIdentifier:
412 | m_UiScaleMode: 0
413 | m_ReferencePixelsPerUnit: 100
414 | m_ScaleFactor: 1
415 | m_ReferenceResolution: {x: 800, y: 600}
416 | m_ScreenMatchMode: 0
417 | m_MatchWidthOrHeight: 0
418 | m_PhysicalUnit: 3
419 | m_FallbackScreenDPI: 96
420 | m_DefaultSpriteDPI: 96
421 | m_DynamicPixelsPerUnit: 1
422 | --- !u!114 &8966109807728725698
423 | MonoBehaviour:
424 | m_ObjectHideFlags: 0
425 | m_CorrespondingSourceObject: {fileID: 0}
426 | m_PrefabInstance: {fileID: 0}
427 | m_PrefabAsset: {fileID: 0}
428 | m_GameObject: {fileID: 6495216020917304646}
429 | m_Enabled: 1
430 | m_EditorHideFlags: 0
431 | m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
432 | m_Name:
433 | m_EditorClassIdentifier:
434 | m_IgnoreReversedGraphics: 1
435 | m_BlockingObjects: 0
436 | m_BlockingMask:
437 | serializedVersion: 2
438 | m_Bits: 4294967295
439 | --- !u!114 &3806969658428941430
440 | MonoBehaviour:
441 | m_ObjectHideFlags: 0
442 | m_CorrespondingSourceObject: {fileID: 0}
443 | m_PrefabInstance: {fileID: 0}
444 | m_PrefabAsset: {fileID: 0}
445 | m_GameObject: {fileID: 6495216020917304646}
446 | m_Enabled: 1
447 | m_EditorHideFlags: 0
448 | m_Script: {fileID: -1533785930, guid: 661092b4961be7145bfbe56e1e62337b, type: 3}
449 | m_Name:
450 | m_EditorClassIdentifier:
451 | --- !u!65 &6817875292097603696
452 | BoxCollider:
453 | m_ObjectHideFlags: 0
454 | m_CorrespondingSourceObject: {fileID: 0}
455 | m_PrefabInstance: {fileID: 0}
456 | m_PrefabAsset: {fileID: 0}
457 | m_GameObject: {fileID: 6495216020917304646}
458 | m_Material: {fileID: 0}
459 | m_IsTrigger: 1
460 | m_Enabled: 1
461 | serializedVersion: 2
462 | m_Size: {x: 1, y: 1, z: 1}
463 | m_Center: {x: 0, y: 0, z: 0}
464 |
--------------------------------------------------------------------------------
/PortablePanel.prefab.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: b7c6fcf83c505a54a9f2bb3ac2a4639b
3 | PrefabImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Prefabs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: f2813ff6098db594cac9a86a1e986802
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Prefabs/Basic Example.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: eb4ce8dfc6cbfa841a276946a7d730b8
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Prefabs/Basic Example/GrabbablePanel.prefab:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!1 &53886571877916344
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: 537400906750518193}
12 | - component: {fileID: 9159839778344914810}
13 | - component: {fileID: 8447741667041101492}
14 | - component: {fileID: 5701201927919729780}
15 | m_Layer: 0
16 | m_Name: Button
17 | m_TagString: Untagged
18 | m_Icon: {fileID: 0}
19 | m_NavMeshLayer: 0
20 | m_StaticEditorFlags: 0
21 | m_IsActive: 1
22 | --- !u!224 &537400906750518193
23 | RectTransform:
24 | m_ObjectHideFlags: 0
25 | m_CorrespondingSourceObject: {fileID: 0}
26 | m_PrefabInstance: {fileID: 0}
27 | m_PrefabAsset: {fileID: 0}
28 | m_GameObject: {fileID: 53886571877916344}
29 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
30 | m_LocalPosition: {x: 0, y: 0, z: 0}
31 | m_LocalScale: {x: 1, y: 1, z: 1}
32 | m_Children:
33 | - {fileID: 1653792799720219580}
34 | m_Father: {fileID: 1245948148898441782}
35 | m_RootOrder: 1
36 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
37 | m_AnchorMin: {x: 0.5, y: 0.5}
38 | m_AnchorMax: {x: 0.5, y: 0.5}
39 | m_AnchoredPosition: {x: 0, y: -46.6}
40 | m_SizeDelta: {x: 160, y: 30}
41 | m_Pivot: {x: 0.5, y: 0.5}
42 | --- !u!222 &9159839778344914810
43 | CanvasRenderer:
44 | m_ObjectHideFlags: 0
45 | m_CorrespondingSourceObject: {fileID: 0}
46 | m_PrefabInstance: {fileID: 0}
47 | m_PrefabAsset: {fileID: 0}
48 | m_GameObject: {fileID: 53886571877916344}
49 | m_CullTransparentMesh: 0
50 | --- !u!114 &8447741667041101492
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: 53886571877916344}
57 | m_Enabled: 1
58 | m_EditorHideFlags: 0
59 | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
60 | m_Name:
61 | m_EditorClassIdentifier:
62 | m_Material: {fileID: 0}
63 | m_Color: {r: 1, g: 1, b: 1, a: 1}
64 | m_RaycastTarget: 1
65 | m_Maskable: 1
66 | m_OnCullStateChanged:
67 | m_PersistentCalls:
68 | m_Calls: []
69 | m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
70 | m_Type: 1
71 | m_PreserveAspect: 0
72 | m_FillCenter: 1
73 | m_FillMethod: 4
74 | m_FillAmount: 1
75 | m_FillClockwise: 1
76 | m_FillOrigin: 0
77 | m_UseSpriteMesh: 0
78 | m_PixelsPerUnitMultiplier: 1
79 | --- !u!114 &5701201927919729780
80 | MonoBehaviour:
81 | m_ObjectHideFlags: 0
82 | m_CorrespondingSourceObject: {fileID: 0}
83 | m_PrefabInstance: {fileID: 0}
84 | m_PrefabAsset: {fileID: 0}
85 | m_GameObject: {fileID: 53886571877916344}
86 | m_Enabled: 1
87 | m_EditorHideFlags: 0
88 | m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
89 | m_Name:
90 | m_EditorClassIdentifier:
91 | m_Navigation:
92 | m_Mode: 3
93 | m_SelectOnUp: {fileID: 0}
94 | m_SelectOnDown: {fileID: 0}
95 | m_SelectOnLeft: {fileID: 0}
96 | m_SelectOnRight: {fileID: 0}
97 | m_Transition: 1
98 | m_Colors:
99 | m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
100 | m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
101 | m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
102 | m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
103 | m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
104 | m_ColorMultiplier: 1
105 | m_FadeDuration: 0.1
106 | m_SpriteState:
107 | m_HighlightedSprite: {fileID: 0}
108 | m_PressedSprite: {fileID: 0}
109 | m_SelectedSprite: {fileID: 0}
110 | m_DisabledSprite: {fileID: 0}
111 | m_AnimationTriggers:
112 | m_NormalTrigger: Normal
113 | m_HighlightedTrigger: Highlighted
114 | m_PressedTrigger: Pressed
115 | m_SelectedTrigger: Selected
116 | m_DisabledTrigger: Disabled
117 | m_Interactable: 1
118 | m_TargetGraphic: {fileID: 8447741667041101492}
119 | m_OnClick:
120 | m_PersistentCalls:
121 | m_Calls:
122 | - m_Target: {fileID: 8874036614593792104}
123 | m_MethodName: SendCustomEvent
124 | m_Mode: 5
125 | m_Arguments:
126 | m_ObjectArgument: {fileID: 0}
127 | m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
128 | m_IntArgument: 0
129 | m_FloatArgument: 0
130 | m_StringArgument: ForceClosePanel
131 | m_BoolArgument: 0
132 | m_CallState: 2
133 | --- !u!1 &1216727722377721200
134 | GameObject:
135 | m_ObjectHideFlags: 0
136 | m_CorrespondingSourceObject: {fileID: 0}
137 | m_PrefabInstance: {fileID: 0}
138 | m_PrefabAsset: {fileID: 0}
139 | serializedVersion: 6
140 | m_Component:
141 | - component: {fileID: 7531146285904012144}
142 | m_Layer: 0
143 | m_Name: ExamplePanel
144 | m_TagString: Untagged
145 | m_Icon: {fileID: 0}
146 | m_NavMeshLayer: 0
147 | m_StaticEditorFlags: 0
148 | m_IsActive: 1
149 | --- !u!4 &7531146285904012144
150 | Transform:
151 | m_ObjectHideFlags: 0
152 | m_CorrespondingSourceObject: {fileID: 0}
153 | m_PrefabInstance: {fileID: 0}
154 | m_PrefabAsset: {fileID: 0}
155 | m_GameObject: {fileID: 1216727722377721200}
156 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
157 | m_LocalPosition: {x: 0, y: 0, z: 0}
158 | m_LocalScale: {x: 1, y: 1, z: 1}
159 | m_Children:
160 | - {fileID: 3658407098491778260}
161 | - {fileID: 1245948148898441782}
162 | m_Father: {fileID: 8659203161166647251}
163 | m_RootOrder: 0
164 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
165 | --- !u!1 &3258420194863700279
166 | GameObject:
167 | m_ObjectHideFlags: 0
168 | m_CorrespondingSourceObject: {fileID: 0}
169 | m_PrefabInstance: {fileID: 0}
170 | m_PrefabAsset: {fileID: 0}
171 | serializedVersion: 6
172 | m_Component:
173 | - component: {fileID: 8659203161166647251}
174 | - component: {fileID: 7443599571650023776}
175 | - component: {fileID: 8874036614593792104}
176 | m_Layer: 0
177 | m_Name: GrabbablePanel
178 | m_TagString: Untagged
179 | m_Icon: {fileID: 0}
180 | m_NavMeshLayer: 0
181 | m_StaticEditorFlags: 0
182 | m_IsActive: 1
183 | --- !u!4 &8659203161166647251
184 | Transform:
185 | m_ObjectHideFlags: 0
186 | m_CorrespondingSourceObject: {fileID: 0}
187 | m_PrefabInstance: {fileID: 0}
188 | m_PrefabAsset: {fileID: 0}
189 | m_GameObject: {fileID: 3258420194863700279}
190 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
191 | m_LocalPosition: {x: 0, y: 0, z: 0}
192 | m_LocalScale: {x: 1, y: 1, z: 1}
193 | m_Children:
194 | - {fileID: 7531146285904012144}
195 | m_Father: {fileID: 0}
196 | m_RootOrder: 0
197 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
198 | --- !u!114 &7443599571650023776
199 | MonoBehaviour:
200 | m_ObjectHideFlags: 0
201 | m_CorrespondingSourceObject: {fileID: 0}
202 | m_PrefabInstance: {fileID: 0}
203 | m_PrefabAsset: {fileID: 0}
204 | m_GameObject: {fileID: 3258420194863700279}
205 | m_Enabled: 1
206 | m_EditorHideFlags: 0
207 | m_Script: {fileID: 11500000, guid: 6c16e461e59a5a340a22f538d64095e8, type: 3}
208 | m_Name:
209 | m_EditorClassIdentifier:
210 | serializationData:
211 | SerializedFormat: 2
212 | SerializedBytes:
213 | ReferencedUnityObjects: []
214 | SerializedBytesString:
215 | Prefab: {fileID: 0}
216 | PrefabModificationsReferencedUnityObjects: []
217 | PrefabModifications: []
218 | SerializationNodes: []
219 | _udonSharpBackingUdonBehaviour: {fileID: 8874036614593792104}
220 | Panel: {fileID: 1216727722377721200}
221 | TabOnHold: 1
222 | GestureMode: 0
223 | GrabbablePanel: 1
224 | MaxScale: 3
225 | MinScale: 0.1
226 | MaxDistanceBeforeClosingThePanel: 2
227 | PanelScaleOnDesktop: 0.5
228 | ScaleAndDistanceRelativeToAvatarScale: 1
229 | --- !u!114 &8874036614593792104
230 | MonoBehaviour:
231 | m_ObjectHideFlags: 0
232 | m_CorrespondingSourceObject: {fileID: 0}
233 | m_PrefabInstance: {fileID: 0}
234 | m_PrefabAsset: {fileID: 0}
235 | m_GameObject: {fileID: 3258420194863700279}
236 | m_Enabled: 1
237 | m_EditorHideFlags: 0
238 | m_Script: {fileID: 11500000, guid: 45115577ef41a5b4ca741ed302693907, type: 3}
239 | m_Name:
240 | m_EditorClassIdentifier:
241 | interactTextPlacement: {fileID: 0}
242 | interactText: Use
243 | interactTextGO: {fileID: 0}
244 | proximity: 2
245 | SynchronizePosition: 0
246 | AllowCollisionOwnershipTransfer: 0
247 | Reliable: 0
248 | _syncMethod: 1
249 | serializedProgramAsset: {fileID: 11400000, guid: fc0a2d339cee7da4d9d94b4b65d2d2d1,
250 | type: 2}
251 | programSource: {fileID: 11400000, guid: 16f82f9ec93c4be49951c5183c885032, type: 2}
252 | serializedPublicVariablesBytesString: Ai8AAAAAATIAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAFQAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AAAAAAAYBAAAAAAAAACcBBAAAAHQAeQBwAGUAAWgAAABTAHkAcwB0AGUAbQAuAEMAbwBsAGwAZQBjAHQAaQBvAG4AcwAuAEcAZQBuAGUAcgBpAGMALgBMAGkAcwB0AGAAMQBbAFsAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBJAG4AdABlAHIAZgBhAGMAZQBzAC4ASQBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AXQBdACwAIABtAHMAYwBvAHIAbABpAGIAAQEJAAAAVgBhAHIAaQBhAGIAbABlAHMALwEAAAABaAAAAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ARwBlAG4AZQByAGkAYwAuAEwAaQBzAHQAYAAxAFsAWwBWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAEkAbgB0AGUAcgBmAGEAYwBlAHMALgBJAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgBdAF0ALAAgAG0AcwBjAG8AcgBsAGkAYgABAAAABgEAAAAAAAAAAi8CAAAAAUkAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAIAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAR8AAABfAF8AXwBVAGQAbwBuAFMAaABhAHIAcABCAGUAaABhAHYAaQBvAHUAcgBWAGUAcgBzAGkAbwBuAF8AXwBfACcBBAAAAHQAeQBwAGUAARYAAABTAHkAcwB0AGUAbQAuAEkAbgB0ADMAMgAsACAAbQBzAGMAbwByAGwAaQBiABcBBQAAAFYAYQBsAHUAZQACAAAABwUHBQcF
253 | publicVariablesUnityEngineObjects: []
254 | publicVariablesSerializationDataFormat: 0
255 | --- !u!1 &3967312580591935724
256 | GameObject:
257 | m_ObjectHideFlags: 0
258 | m_CorrespondingSourceObject: {fileID: 0}
259 | m_PrefabInstance: {fileID: 0}
260 | m_PrefabAsset: {fileID: 0}
261 | serializedVersion: 6
262 | m_Component:
263 | - component: {fileID: 4275710173028544777}
264 | - component: {fileID: 7773693860768129393}
265 | - component: {fileID: 2457320658494291693}
266 | m_Layer: 0
267 | m_Name: Text (TMP)
268 | m_TagString: Untagged
269 | m_Icon: {fileID: 0}
270 | m_NavMeshLayer: 0
271 | m_StaticEditorFlags: 0
272 | m_IsActive: 1
273 | --- !u!224 &4275710173028544777
274 | RectTransform:
275 | m_ObjectHideFlags: 0
276 | m_CorrespondingSourceObject: {fileID: 0}
277 | m_PrefabInstance: {fileID: 0}
278 | m_PrefabAsset: {fileID: 0}
279 | m_GameObject: {fileID: 3967312580591935724}
280 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
281 | m_LocalPosition: {x: 0, y: 0, z: 0}
282 | m_LocalScale: {x: 1, y: 1, z: 1}
283 | m_Children: []
284 | m_Father: {fileID: 1245948148898441782}
285 | m_RootOrder: 0
286 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
287 | m_AnchorMin: {x: 0, y: 0}
288 | m_AnchorMax: {x: 1, y: 1}
289 | m_AnchoredPosition: {x: 0, y: 0}
290 | m_SizeDelta: {x: 0, y: 0}
291 | m_Pivot: {x: 0.5, y: 0.5}
292 | --- !u!222 &7773693860768129393
293 | CanvasRenderer:
294 | m_ObjectHideFlags: 0
295 | m_CorrespondingSourceObject: {fileID: 0}
296 | m_PrefabInstance: {fileID: 0}
297 | m_PrefabAsset: {fileID: 0}
298 | m_GameObject: {fileID: 3967312580591935724}
299 | m_CullTransparentMesh: 0
300 | --- !u!114 &2457320658494291693
301 | MonoBehaviour:
302 | m_ObjectHideFlags: 0
303 | m_CorrespondingSourceObject: {fileID: 0}
304 | m_PrefabInstance: {fileID: 0}
305 | m_PrefabAsset: {fileID: 0}
306 | m_GameObject: {fileID: 3967312580591935724}
307 | m_Enabled: 1
308 | m_EditorHideFlags: 0
309 | m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
310 | m_Name:
311 | m_EditorClassIdentifier:
312 | m_Material: {fileID: 0}
313 | m_Color: {r: 1, g: 1, b: 1, a: 1}
314 | m_RaycastTarget: 1
315 | m_Maskable: 1
316 | m_OnCullStateChanged:
317 | m_PersistentCalls:
318 | m_Calls: []
319 | m_text: Here is some text, you can put anything you want on this panel.
320 | m_isRightToLeft: 0
321 | m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
322 | m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
323 | m_fontSharedMaterials: []
324 | m_fontMaterial: {fileID: 0}
325 | m_fontMaterials: []
326 | m_fontColor32:
327 | serializedVersion: 2
328 | rgba: 4278190080
329 | m_fontColor: {r: 0, g: 0, b: 0, a: 1}
330 | m_enableVertexGradient: 0
331 | m_colorMode: 3
332 | m_fontColorGradient:
333 | topLeft: {r: 1, g: 1, b: 1, a: 1}
334 | topRight: {r: 1, g: 1, b: 1, a: 1}
335 | bottomLeft: {r: 1, g: 1, b: 1, a: 1}
336 | bottomRight: {r: 1, g: 1, b: 1, a: 1}
337 | m_fontColorGradientPreset: {fileID: 0}
338 | m_spriteAsset: {fileID: 0}
339 | m_tintAllSprites: 0
340 | m_StyleSheet: {fileID: 0}
341 | m_TextStyleHashCode: -1183493901
342 | m_overrideHtmlColors: 0
343 | m_faceColor:
344 | serializedVersion: 2
345 | rgba: 4294967295
346 | m_fontSize: 13
347 | m_fontSizeBase: 13
348 | m_fontWeight: 400
349 | m_enableAutoSizing: 0
350 | m_fontSizeMin: 18
351 | m_fontSizeMax: 72
352 | m_fontStyle: 0
353 | m_HorizontalAlignment: 1
354 | m_VerticalAlignment: 256
355 | m_textAlignment: 65535
356 | m_characterSpacing: 0
357 | m_wordSpacing: 0
358 | m_lineSpacing: 0
359 | m_lineSpacingMax: 0
360 | m_paragraphSpacing: 0
361 | m_charWidthMaxAdj: 0
362 | m_enableWordWrapping: 1
363 | m_wordWrappingRatios: 0.4
364 | m_overflowMode: 0
365 | m_linkedTextComponent: {fileID: 0}
366 | parentLinkedComponent: {fileID: 0}
367 | m_enableKerning: 1
368 | m_enableExtraPadding: 0
369 | checkPaddingRequired: 0
370 | m_isRichText: 1
371 | m_parseCtrlCharacters: 1
372 | m_isOrthographic: 1
373 | m_isCullingEnabled: 0
374 | m_horizontalMapping: 0
375 | m_verticalMapping: 0
376 | m_uvLineOffset: 0
377 | m_geometrySortingOrder: 0
378 | m_IsTextObjectScaleStatic: 0
379 | m_VertexBufferAutoSizeReduction: 0
380 | m_useMaxVisibleDescender: 1
381 | m_pageToDisplay: 1
382 | m_margin: {x: 0, y: 0, z: 0, w: 46.387047}
383 | m_isUsingLegacyAnimationComponent: 0
384 | m_isVolumetricText: 0
385 | m_hasFontAssetChanged: 0
386 | m_baseMaterial: {fileID: 0}
387 | m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
388 | --- !u!1 &3986745309421431315
389 | GameObject:
390 | m_ObjectHideFlags: 0
391 | m_CorrespondingSourceObject: {fileID: 0}
392 | m_PrefabInstance: {fileID: 0}
393 | m_PrefabAsset: {fileID: 0}
394 | serializedVersion: 6
395 | m_Component:
396 | - component: {fileID: 3658407098491778260}
397 | - component: {fileID: 6105147029748509206}
398 | - component: {fileID: 1244028421486629802}
399 | m_Layer: 0
400 | m_Name: DefaultUnityCube
401 | m_TagString: Untagged
402 | m_Icon: {fileID: 0}
403 | m_NavMeshLayer: 0
404 | m_StaticEditorFlags: 0
405 | m_IsActive: 1
406 | --- !u!4 &3658407098491778260
407 | Transform:
408 | m_ObjectHideFlags: 0
409 | m_CorrespondingSourceObject: {fileID: 0}
410 | m_PrefabInstance: {fileID: 0}
411 | m_PrefabAsset: {fileID: 0}
412 | m_GameObject: {fileID: 3986745309421431315}
413 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
414 | m_LocalPosition: {x: 0, y: 0, z: 0}
415 | m_LocalScale: {x: 1, y: 0.5685, z: 0.025936}
416 | m_Children: []
417 | m_Father: {fileID: 7531146285904012144}
418 | m_RootOrder: 0
419 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
420 | --- !u!33 &6105147029748509206
421 | MeshFilter:
422 | m_ObjectHideFlags: 0
423 | m_CorrespondingSourceObject: {fileID: 0}
424 | m_PrefabInstance: {fileID: 0}
425 | m_PrefabAsset: {fileID: 0}
426 | m_GameObject: {fileID: 3986745309421431315}
427 | m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
428 | --- !u!23 &1244028421486629802
429 | MeshRenderer:
430 | m_ObjectHideFlags: 0
431 | m_CorrespondingSourceObject: {fileID: 0}
432 | m_PrefabInstance: {fileID: 0}
433 | m_PrefabAsset: {fileID: 0}
434 | m_GameObject: {fileID: 3986745309421431315}
435 | m_Enabled: 1
436 | m_CastShadows: 1
437 | m_ReceiveShadows: 1
438 | m_DynamicOccludee: 1
439 | m_MotionVectors: 1
440 | m_LightProbeUsage: 1
441 | m_ReflectionProbeUsage: 1
442 | m_RayTracingMode: 2
443 | m_RenderingLayerMask: 1
444 | m_RendererPriority: 0
445 | m_Materials:
446 | - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
447 | m_StaticBatchInfo:
448 | firstSubMesh: 0
449 | subMeshCount: 0
450 | m_StaticBatchRoot: {fileID: 0}
451 | m_ProbeAnchor: {fileID: 0}
452 | m_LightProbeVolumeOverride: {fileID: 0}
453 | m_ScaleInLightmap: 1
454 | m_ReceiveGI: 1
455 | m_PreserveUVs: 0
456 | m_IgnoreNormalsForChartDetection: 0
457 | m_ImportantGI: 0
458 | m_StitchLightmapSeams: 1
459 | m_SelectedEditorRenderState: 3
460 | m_MinimumChartSize: 4
461 | m_AutoUVMaxDistance: 0.5
462 | m_AutoUVMaxAngle: 89
463 | m_LightmapParameters: {fileID: 0}
464 | m_SortingLayerID: 0
465 | m_SortingLayer: 0
466 | m_SortingOrder: 0
467 | --- !u!1 &6495216020917304646
468 | GameObject:
469 | m_ObjectHideFlags: 0
470 | m_CorrespondingSourceObject: {fileID: 0}
471 | m_PrefabInstance: {fileID: 0}
472 | m_PrefabAsset: {fileID: 0}
473 | serializedVersion: 6
474 | m_Component:
475 | - component: {fileID: 1245948148898441782}
476 | - component: {fileID: 3523353780344268111}
477 | - component: {fileID: 4432120425424414615}
478 | - component: {fileID: 8966109807728725698}
479 | - component: {fileID: 3806969658428941430}
480 | - component: {fileID: 6817875292097603696}
481 | m_Layer: 0
482 | m_Name: Canvas
483 | m_TagString: Untagged
484 | m_Icon: {fileID: 0}
485 | m_NavMeshLayer: 0
486 | m_StaticEditorFlags: 0
487 | m_IsActive: 1
488 | --- !u!224 &1245948148898441782
489 | RectTransform:
490 | m_ObjectHideFlags: 0
491 | m_CorrespondingSourceObject: {fileID: 0}
492 | m_PrefabInstance: {fileID: 0}
493 | m_PrefabAsset: {fileID: 0}
494 | m_GameObject: {fileID: 6495216020917304646}
495 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
496 | m_LocalPosition: {x: 0, y: 0, z: -0.028}
497 | m_LocalScale: {x: 0.0031973666, y: 0.0031973666, z: 0.0031973666}
498 | m_Children:
499 | - {fileID: 4275710173028544777}
500 | - {fileID: 537400906750518193}
501 | m_Father: {fileID: 7531146285904012144}
502 | m_RootOrder: 1
503 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
504 | m_AnchorMin: {x: 0, y: 0}
505 | m_AnchorMax: {x: 0, y: 0}
506 | m_AnchoredPosition: {x: 0, y: 0}
507 | m_SizeDelta: {x: 300, y: 150}
508 | m_Pivot: {x: 0.5, y: 0.5}
509 | --- !u!223 &3523353780344268111
510 | Canvas:
511 | m_ObjectHideFlags: 0
512 | m_CorrespondingSourceObject: {fileID: 0}
513 | m_PrefabInstance: {fileID: 0}
514 | m_PrefabAsset: {fileID: 0}
515 | m_GameObject: {fileID: 6495216020917304646}
516 | m_Enabled: 1
517 | serializedVersion: 3
518 | m_RenderMode: 2
519 | m_Camera: {fileID: 0}
520 | m_PlaneDistance: 100
521 | m_PixelPerfect: 0
522 | m_ReceivesEvents: 1
523 | m_OverrideSorting: 0
524 | m_OverridePixelPerfect: 0
525 | m_SortingBucketNormalizedSize: 0
526 | m_AdditionalShaderChannelsFlag: 25
527 | m_SortingLayerID: 0
528 | m_SortingOrder: 0
529 | m_TargetDisplay: 0
530 | --- !u!114 &4432120425424414615
531 | MonoBehaviour:
532 | m_ObjectHideFlags: 0
533 | m_CorrespondingSourceObject: {fileID: 0}
534 | m_PrefabInstance: {fileID: 0}
535 | m_PrefabAsset: {fileID: 0}
536 | m_GameObject: {fileID: 6495216020917304646}
537 | m_Enabled: 1
538 | m_EditorHideFlags: 0
539 | m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
540 | m_Name:
541 | m_EditorClassIdentifier:
542 | m_UiScaleMode: 0
543 | m_ReferencePixelsPerUnit: 100
544 | m_ScaleFactor: 1
545 | m_ReferenceResolution: {x: 800, y: 600}
546 | m_ScreenMatchMode: 0
547 | m_MatchWidthOrHeight: 0
548 | m_PhysicalUnit: 3
549 | m_FallbackScreenDPI: 96
550 | m_DefaultSpriteDPI: 96
551 | m_DynamicPixelsPerUnit: 1
552 | --- !u!114 &8966109807728725698
553 | MonoBehaviour:
554 | m_ObjectHideFlags: 0
555 | m_CorrespondingSourceObject: {fileID: 0}
556 | m_PrefabInstance: {fileID: 0}
557 | m_PrefabAsset: {fileID: 0}
558 | m_GameObject: {fileID: 6495216020917304646}
559 | m_Enabled: 1
560 | m_EditorHideFlags: 0
561 | m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
562 | m_Name:
563 | m_EditorClassIdentifier:
564 | m_IgnoreReversedGraphics: 1
565 | m_BlockingObjects: 0
566 | m_BlockingMask:
567 | serializedVersion: 2
568 | m_Bits: 4294967295
569 | --- !u!114 &3806969658428941430
570 | MonoBehaviour:
571 | m_ObjectHideFlags: 0
572 | m_CorrespondingSourceObject: {fileID: 0}
573 | m_PrefabInstance: {fileID: 0}
574 | m_PrefabAsset: {fileID: 0}
575 | m_GameObject: {fileID: 6495216020917304646}
576 | m_Enabled: 1
577 | m_EditorHideFlags: 0
578 | m_Script: {fileID: -1533785930, guid: 661092b4961be7145bfbe56e1e62337b, type: 3}
579 | m_Name:
580 | m_EditorClassIdentifier:
581 | --- !u!65 &6817875292097603696
582 | BoxCollider:
583 | m_ObjectHideFlags: 0
584 | m_CorrespondingSourceObject: {fileID: 0}
585 | m_PrefabInstance: {fileID: 0}
586 | m_PrefabAsset: {fileID: 0}
587 | m_GameObject: {fileID: 6495216020917304646}
588 | m_Material: {fileID: 0}
589 | m_IsTrigger: 1
590 | m_Enabled: 1
591 | serializedVersion: 2
592 | m_Size: {x: 1, y: 1, z: 1}
593 | m_Center: {x: 0, y: 0, z: 0}
594 | --- !u!1 &7819706150360753042
595 | GameObject:
596 | m_ObjectHideFlags: 0
597 | m_CorrespondingSourceObject: {fileID: 0}
598 | m_PrefabInstance: {fileID: 0}
599 | m_PrefabAsset: {fileID: 0}
600 | serializedVersion: 6
601 | m_Component:
602 | - component: {fileID: 1653792799720219580}
603 | - component: {fileID: 4775611848043226693}
604 | - component: {fileID: 7359767810667744111}
605 | m_Layer: 0
606 | m_Name: Text (TMP)
607 | m_TagString: Untagged
608 | m_Icon: {fileID: 0}
609 | m_NavMeshLayer: 0
610 | m_StaticEditorFlags: 0
611 | m_IsActive: 1
612 | --- !u!224 &1653792799720219580
613 | RectTransform:
614 | m_ObjectHideFlags: 0
615 | m_CorrespondingSourceObject: {fileID: 0}
616 | m_PrefabInstance: {fileID: 0}
617 | m_PrefabAsset: {fileID: 0}
618 | m_GameObject: {fileID: 7819706150360753042}
619 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
620 | m_LocalPosition: {x: 0, y: 0, z: 0}
621 | m_LocalScale: {x: 1, y: 1, z: 1}
622 | m_Children: []
623 | m_Father: {fileID: 537400906750518193}
624 | m_RootOrder: 0
625 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
626 | m_AnchorMin: {x: 0, y: 0}
627 | m_AnchorMax: {x: 1, y: 1}
628 | m_AnchoredPosition: {x: 0, y: 0}
629 | m_SizeDelta: {x: 0, y: 0}
630 | m_Pivot: {x: 0.5, y: 0.5}
631 | --- !u!222 &4775611848043226693
632 | CanvasRenderer:
633 | m_ObjectHideFlags: 0
634 | m_CorrespondingSourceObject: {fileID: 0}
635 | m_PrefabInstance: {fileID: 0}
636 | m_PrefabAsset: {fileID: 0}
637 | m_GameObject: {fileID: 7819706150360753042}
638 | m_CullTransparentMesh: 0
639 | --- !u!114 &7359767810667744111
640 | MonoBehaviour:
641 | m_ObjectHideFlags: 0
642 | m_CorrespondingSourceObject: {fileID: 0}
643 | m_PrefabInstance: {fileID: 0}
644 | m_PrefabAsset: {fileID: 0}
645 | m_GameObject: {fileID: 7819706150360753042}
646 | m_Enabled: 1
647 | m_EditorHideFlags: 0
648 | m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
649 | m_Name:
650 | m_EditorClassIdentifier:
651 | m_Material: {fileID: 0}
652 | m_Color: {r: 1, g: 1, b: 1, a: 1}
653 | m_RaycastTarget: 1
654 | m_Maskable: 1
655 | m_OnCullStateChanged:
656 | m_PersistentCalls:
657 | m_Calls: []
658 | m_text: Manually Close panel
659 | m_isRightToLeft: 0
660 | m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
661 | m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
662 | m_fontSharedMaterials: []
663 | m_fontMaterial: {fileID: 0}
664 | m_fontMaterials: []
665 | m_fontColor32:
666 | serializedVersion: 2
667 | rgba: 4281479730
668 | m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
669 | m_enableVertexGradient: 0
670 | m_colorMode: 3
671 | m_fontColorGradient:
672 | topLeft: {r: 1, g: 1, b: 1, a: 1}
673 | topRight: {r: 1, g: 1, b: 1, a: 1}
674 | bottomLeft: {r: 1, g: 1, b: 1, a: 1}
675 | bottomRight: {r: 1, g: 1, b: 1, a: 1}
676 | m_fontColorGradientPreset: {fileID: 0}
677 | m_spriteAsset: {fileID: 0}
678 | m_tintAllSprites: 0
679 | m_StyleSheet: {fileID: 0}
680 | m_TextStyleHashCode: -1183493901
681 | m_overrideHtmlColors: 0
682 | m_faceColor:
683 | serializedVersion: 2
684 | rgba: 4294967295
685 | m_fontSize: 14
686 | m_fontSizeBase: 14
687 | m_fontWeight: 400
688 | m_enableAutoSizing: 0
689 | m_fontSizeMin: 18
690 | m_fontSizeMax: 72
691 | m_fontStyle: 0
692 | m_HorizontalAlignment: 2
693 | m_VerticalAlignment: 512
694 | m_textAlignment: 65535
695 | m_characterSpacing: 0
696 | m_wordSpacing: 0
697 | m_lineSpacing: 0
698 | m_lineSpacingMax: 0
699 | m_paragraphSpacing: 0
700 | m_charWidthMaxAdj: 0
701 | m_enableWordWrapping: 1
702 | m_wordWrappingRatios: 0.4
703 | m_overflowMode: 0
704 | m_linkedTextComponent: {fileID: 0}
705 | parentLinkedComponent: {fileID: 0}
706 | m_enableKerning: 1
707 | m_enableExtraPadding: 0
708 | checkPaddingRequired: 0
709 | m_isRichText: 1
710 | m_parseCtrlCharacters: 1
711 | m_isOrthographic: 1
712 | m_isCullingEnabled: 0
713 | m_horizontalMapping: 0
714 | m_verticalMapping: 0
715 | m_uvLineOffset: 0
716 | m_geometrySortingOrder: 0
717 | m_IsTextObjectScaleStatic: 0
718 | m_VertexBufferAutoSizeReduction: 0
719 | m_useMaxVisibleDescender: 1
720 | m_pageToDisplay: 1
721 | m_margin: {x: 0, y: 0, z: 0, w: 0}
722 | m_isUsingLegacyAnimationComponent: 0
723 | m_isVolumetricText: 0
724 | m_hasFontAssetChanged: 0
725 | m_baseMaterial: {fileID: 0}
726 | m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
727 |
--------------------------------------------------------------------------------
/Prefabs/Basic Example/GrabbablePanel.prefab.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 32bdb4d8033651d4aa78033954acf402
3 | PrefabImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Prefabs/RigidBody Example.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 08f7fb93097373541a085b4ae9801228
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Prefabs/RigidBody Example/GrabbablePanelWithRigidBody.prefab.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: b1aca452d1c9aa049b7054fb8b1eafdd
3 | PrefabImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Prefabs/RigidBody Example/Panel Material.mat:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!21 &2100000
4 | Material:
5 | serializedVersion: 6
6 | m_ObjectHideFlags: 0
7 | m_CorrespondingSourceObject: {fileID: 0}
8 | m_PrefabInstance: {fileID: 0}
9 | m_PrefabAsset: {fileID: 0}
10 | m_Name: Panel Material
11 | m_Shader: {fileID: 10755, guid: 0000000000000000f000000000000000, type: 0}
12 | m_ShaderKeywords:
13 | m_LightmapFlags: 4
14 | m_EnableInstancingVariants: 0
15 | m_DoubleSidedGI: 0
16 | m_CustomRenderQueue: -1
17 | stringTagMap: {}
18 | disabledShaderPasses: []
19 | m_SavedProperties:
20 | serializedVersion: 3
21 | m_TexEnvs:
22 | - _BumpMap:
23 | m_Texture: {fileID: 0}
24 | m_Scale: {x: 1, y: 1}
25 | m_Offset: {x: 0, y: 0}
26 | - _DetailAlbedoMap:
27 | m_Texture: {fileID: 0}
28 | m_Scale: {x: 1, y: 1}
29 | m_Offset: {x: 0, y: 0}
30 | - _DetailMask:
31 | m_Texture: {fileID: 0}
32 | m_Scale: {x: 1, y: 1}
33 | m_Offset: {x: 0, y: 0}
34 | - _DetailNormalMap:
35 | m_Texture: {fileID: 0}
36 | m_Scale: {x: 1, y: 1}
37 | m_Offset: {x: 0, y: 0}
38 | - _EmissionMap:
39 | m_Texture: {fileID: 0}
40 | m_Scale: {x: 1, y: 1}
41 | m_Offset: {x: 0, y: 0}
42 | - _MainTex:
43 | m_Texture: {fileID: 0}
44 | m_Scale: {x: 1, y: 1}
45 | m_Offset: {x: 0, y: 0}
46 | - _MetallicGlossMap:
47 | m_Texture: {fileID: 0}
48 | m_Scale: {x: 1, y: 1}
49 | m_Offset: {x: 0, y: 0}
50 | - _OcclusionMap:
51 | m_Texture: {fileID: 0}
52 | m_Scale: {x: 1, y: 1}
53 | m_Offset: {x: 0, y: 0}
54 | - _ParallaxMap:
55 | m_Texture: {fileID: 0}
56 | m_Scale: {x: 1, y: 1}
57 | m_Offset: {x: 0, y: 0}
58 | m_Floats:
59 | - _BumpScale: 1
60 | - _Cutoff: 0.5
61 | - _DetailNormalMapScale: 1
62 | - _DstBlend: 0
63 | - _GlossMapScale: 1
64 | - _Glossiness: 0.5
65 | - _GlossyReflections: 1
66 | - _Metallic: 0
67 | - _Mode: 0
68 | - _OcclusionStrength: 1
69 | - _Parallax: 0.02
70 | - _SmoothnessTextureChannel: 0
71 | - _SpecularHighlights: 1
72 | - _SrcBlend: 1
73 | - _UVSec: 0
74 | - _ZWrite: 1
75 | m_Colors:
76 | - _Color: {r: 1, g: 1, b: 1, a: 1}
77 | - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
78 |
--------------------------------------------------------------------------------
/Prefabs/RigidBody Example/Panel Material.mat.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 42df86af825c49a46978f0086ae11ae4
3 | NativeFormatImporter:
4 | externalObjects: {}
5 | mainObjectFileID: 2100000
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Prefabs/RigidBody Example/PanelParticleMaterial.mat:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!21 &2100000
4 | Material:
5 | serializedVersion: 8
6 | m_ObjectHideFlags: 0
7 | m_CorrespondingSourceObject: {fileID: 0}
8 | m_PrefabInstance: {fileID: 0}
9 | m_PrefabAsset: {fileID: 0}
10 | m_Name: PanelParticleMaterial
11 | m_Shader: {fileID: 211, guid: 0000000000000000f000000000000000, type: 0}
12 | m_Parent: {fileID: 0}
13 | m_ModifiedSerializedProperties: 0
14 | m_ValidKeywords:
15 | - _ALPHABLEND_ON
16 | - _COLORADDSUBDIFF_ON
17 | m_InvalidKeywords: []
18 | m_LightmapFlags: 0
19 | m_EnableInstancingVariants: 0
20 | m_DoubleSidedGI: 0
21 | m_CustomRenderQueue: 3000
22 | stringTagMap:
23 | RenderType: Transparent
24 | disabledShaderPasses:
25 | - GRABPASS
26 | m_LockedProperties:
27 | m_SavedProperties:
28 | serializedVersion: 3
29 | m_TexEnvs:
30 | - _BumpMap:
31 | m_Texture: {fileID: 0}
32 | m_Scale: {x: 1, y: 1}
33 | m_Offset: {x: 0, y: 0}
34 | - _DetailAlbedoMap:
35 | m_Texture: {fileID: 0}
36 | m_Scale: {x: 1, y: 1}
37 | m_Offset: {x: 0, y: 0}
38 | - _DetailMask:
39 | m_Texture: {fileID: 0}
40 | m_Scale: {x: 1, y: 1}
41 | m_Offset: {x: 0, y: 0}
42 | - _DetailNormalMap:
43 | m_Texture: {fileID: 0}
44 | m_Scale: {x: 1, y: 1}
45 | m_Offset: {x: 0, y: 0}
46 | - _EmissionMap:
47 | m_Texture: {fileID: 0}
48 | m_Scale: {x: 1, y: 1}
49 | m_Offset: {x: 0, y: 0}
50 | - _MainTex:
51 | m_Texture: {fileID: 10300, guid: 0000000000000000f000000000000000, type: 0}
52 | m_Scale: {x: 1, y: 1}
53 | m_Offset: {x: 0, y: 0}
54 | - _MetallicGlossMap:
55 | m_Texture: {fileID: 0}
56 | m_Scale: {x: 1, y: 1}
57 | m_Offset: {x: 0, y: 0}
58 | - _OcclusionMap:
59 | m_Texture: {fileID: 0}
60 | m_Scale: {x: 1, y: 1}
61 | m_Offset: {x: 0, y: 0}
62 | - _ParallaxMap:
63 | m_Texture: {fileID: 0}
64 | m_Scale: {x: 1, y: 1}
65 | m_Offset: {x: 0, y: 0}
66 | m_Ints: []
67 | m_Floats:
68 | - _BlendOp: 0
69 | - _BumpScale: 1
70 | - _CameraFadingEnabled: 0
71 | - _CameraFarFadeDistance: 2
72 | - _CameraNearFadeDistance: 1
73 | - _ColorMode: 1
74 | - _Cull: 2
75 | - _Cutoff: 0.5
76 | - _DetailNormalMapScale: 1
77 | - _DistortionBlend: 0.5
78 | - _DistortionEnabled: 0
79 | - _DistortionStrength: 1
80 | - _DistortionStrengthScaled: 0
81 | - _DstBlend: 10
82 | - _EmissionEnabled: 0
83 | - _FlipbookMode: 0
84 | - _GlossMapScale: 1
85 | - _Glossiness: 0
86 | - _GlossyReflections: 1
87 | - _LightingEnabled: 0
88 | - _Metallic: 0
89 | - _Mode: 2
90 | - _OcclusionStrength: 1
91 | - _Parallax: 0.02
92 | - _SmoothnessTextureChannel: 0
93 | - _SoftParticlesEnabled: 0
94 | - _SoftParticlesFarFadeDistance: 1
95 | - _SoftParticlesNearFadeDistance: 0
96 | - _SpecularHighlights: 1
97 | - _SrcBlend: 5
98 | - _UVSec: 0
99 | - _ZWrite: 0
100 | m_Colors:
101 | - _CameraFadeParams: {r: 0, g: Infinity, b: 0, a: 0}
102 | - _Color: {r: 1, g: 1, b: 1, a: 1}
103 | - _ColorAddSubDiff: {r: 1, g: 0, b: 0, a: 0}
104 | - _EmissionColor: {r: 1, g: 1, b: 1, a: 1}
105 | - _SoftParticleFadeParams: {r: 0, g: 0, b: 0, a: 0}
106 | m_BuildTextureStacks: []
107 |
--------------------------------------------------------------------------------
/Prefabs/RigidBody Example/PanelParticleMaterial.mat.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: d73f30518ca49f444852eb6d42d774a0
3 | NativeFormatImporter:
4 | externalObjects: {}
5 | mainObjectFileID: 2100000
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Prefabs/RigidBody Example/PortablePanelWithRigidBody.asset.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: dd9b4f860371a9646ac9b0218a83d442
3 | NativeFormatImporter:
4 | externalObjects: {}
5 | mainObjectFileID: 11400000
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Prefabs/RigidBody Example/PortablePanelWithRigidBody.cs:
--------------------------------------------------------------------------------
1 |
2 | using TMPro;
3 | using UdonSharp;
4 | using UnityEngine;
5 | using VRC.SDKBase;
6 | using VRC.Udon;
7 |
8 | namespace myro
9 | {
10 | ///
11 | /// Here's a script example of a panel connected to a rigid body
12 | /// The idea is to be able to throw the panel away, and once it's further away from the player, it will disintegrate
13 | ///
14 | public class PortablePanelWithRigidBody : PortablePanel
15 | {
16 | public Rigidbody PanelRigidBody;
17 | public ParticleSystem ClosingParticleAnimation;
18 | public BoxCollider PickupCollider;
19 |
20 | private Rigidbody _particleSystemRB;
21 |
22 | private void StopPanel()
23 | {
24 | PanelRigidBody.velocity = Vector3.zero;
25 | PanelRigidBody.angularVelocity = Vector3.zero;
26 | }
27 |
28 | public override void OnStart()
29 | {
30 | _particleSystemRB = ClosingParticleAnimation.GetComponent();
31 |
32 | if (!Networking.LocalPlayer.IsUserInVR())
33 | {
34 | ClosingParticleAnimation.gameObject.SetActive(false);
35 | PickupCollider.enabled = false;
36 | _particleSystemRB.isKinematic = true;
37 | PanelRigidBody.isKinematic = true;
38 | }
39 | }
40 |
41 | public override void OnPanelGrab()
42 | {
43 | //to make sure the panel doesn't uncontrolably fly away when the panel gets dropped, we will set the velocity to 0 once the panel is grabbed
44 | StopPanel();
45 | }
46 |
47 | public override bool OnPanelClosing()
48 | {
49 | //once the panel closes, let's just play a basic disintegration animation
50 | //we first place the particle emitter at the exact location the panel was
51 | ClosingParticleAnimation.transform.position = Panel.transform.position;
52 | ClosingParticleAnimation.transform.rotation = Panel.transform.rotation;
53 | ClosingParticleAnimation.transform.localScale = Panel.transform.localScale;
54 |
55 | //momentum transfer
56 | if (_particleSystemRB != null)
57 | {
58 | _particleSystemRB.velocity = PanelRigidBody.velocity;
59 | _particleSystemRB.angularVelocity = PanelRigidBody.angularVelocity;
60 | }
61 |
62 | StopPanel();
63 |
64 | //playing the animation
65 | ClosingParticleAnimation.Stop();
66 | ClosingParticleAnimation.Play();
67 |
68 | return true; //We want to close the panel
69 | }
70 | }
71 | }
72 |
--------------------------------------------------------------------------------
/Prefabs/RigidBody Example/PortablePanelWithRigidBody.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: acaad520046b24646a93758ea14d988b
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Portable VRChat Panel
2 | A script for a customizable portable panel that can be used in any VRC world. You can use it to create menus, portable video players etc.
3 | - In VR, put your hands close together, then use the "Triggers" or the "Grab" gesture to open the menu.
4 | - On PC, just keep the "Tab" key pressed.
5 |
6 | Requires UdonSharp.
7 |
8 | It can be tested in my Prefab world called "Assets I released" : https://vrchat.com/home/world/wrld_22e9b1a3-1d2e-4800-b46d-ce3501b07001
9 |
10 | ## Prefabs
11 |
12 | This package includes two examples :
13 |
14 | A basic panel
15 |
16 | 
17 |
18 | A more complex example where the panel can be thrown away. Once the player is too far away from the panel, it dissintegrates, which is done with a basic particle animation.
19 |
20 | 
21 |
22 |
23 |
24 | ## Installation
25 |
26 | Version 1.2 requires VRCSDK 3.2.2 or above.
27 | Older versions work with older VRCSDKs, but they do not include features related to avatar scaling.
28 | Once the installation completed, make sure to read about all the possible Settings
29 |
30 | ### Easy installation
31 |
32 | In the folder `Assets/Myorp/PortablePanel`, you'll find two prefabs :
33 | - `PortablePanel` is a version that doesn't have a VRCPickup component, it can still be grabbed.
34 | - `ThrowablePanel` is a version that uses a VRCPickup component, it can be thrown and dissintegrates when the panel gets too far away.
35 |
36 | 1) Open the prefab of your choice, you can also duplicate the prefab if you do not want to override the one present in the folder
37 | 2) The hierarchie looks like this :
38 | 
39 | 3) Add your panel as a child of the GameObject `[ADD YOUR PANEL AS A CHILD OF THIS GAMEOBJECT]`, place it in a way so it matches the placeholder panel (which is named `[DELETE THIS]`)
40 | 4) You can now delete the `[DELETE THIS]` GameObject (You can also just hide the GameObject if you do not want to delete it).
41 | 5) If you're using the ThrowablePanel prefab, and your panel already has a VRCPickup component, remove that component, the `[ADD YOUR PANEL AS A CHILD OF THIS GAMEOBJECT]` GameObject already has the VRCPickup component.
42 |
43 | ### More difficult/Manual installation
44 |
45 | The panel doesn't need to have a VRCPickup component, it can be grabbed even without that component, but if you prefer using a VRCPickup, the installation steps are a bit different :
46 |
47 | If your panel is NOT a VRCPickup :
48 | 1) Attach the `PortablePanel` script on a GameObject, do not attach that script directly on the panel, attach it rather on a separate GameObject.
49 | 2) The `PortablePanel` script has a `Panel` field, make sure that field points towards your panel
50 |
51 | If your panel is a VRCPickup :
52 | 1) Attach the `PortablePanel` script on a GameObject, do not attach that script directly on the panel, attach it rather on a separate GameObject.
53 | 2) Attach the `PortablePanelPickupModule` script next to the VRCPickup component. the `Portable Panel Reference` field should point towards the `Portable Panel` component added in step 1.
54 | 3) The `PortablePanel` script has a `Panel` field, make sure that field points towards your panel.
55 |
56 | ### Android Smartphone
57 |
58 | 
59 |
60 | The prefab `AndroidPanelModule` adds an overlay so the Panel can easily be opened and closed on Android devices, it adds a screen space canvas with a button, the android panel can be customized if needed.
61 | I would recommend to add it into your scene so Android users can open the panel on their device, the field `Portable Panel Instance` needs to reference your panel.
62 |
63 | You'll notice that the "Canvas" GameObject attached as a child is turned off by default, it should be off by default, this is to ensure that the canvas doesn't get shown on the VRChat loading screen.
64 |
65 | ## Settings
66 |
67 | The `PortablePanel` component has a few settings, I'll explain them bellow:
68 |
69 | 
70 |
71 | Certain settings like `Max Scale`, `Min Scale`, `Max Distance Before Closing The Panel`, and `Panel Scale On Desktop` are all based on real-world measurements, like meters you'd use in your room, rather than Unity's internal units. These values automatically adjust based on the size of your avatar. So, for example, if you set `Max Distance Before Closing The Panel` to 5 meters, and your avatar is 1m80 tall, the panel will close when it's 5 meters away from your avatar. But if your avatar is smaller, say 90cm, the panel will close at 2m50, which is half the distance. From your point of view as a player, it will still feel like the panel is closing at 5 meters, even though it adapts to your avatar's size
72 |
73 | | Parameter | Explanation |
74 | |--------------------------------------|----------------------------------------------------------------------------------------------------------------------|
75 | | Panel | The Panel GameObject. As mentioned above, the script should not be attached to the panel directly. It is preferable to attach it on a separate GameObject or as a child GameObject. If you need to resize the panel, do not scale the GameObject that has the PortablePanel script, resize your actual panel instead. |
76 | | Tab On Hold | Desktop only setting, by default the player needs to keep the Tab button pressed, which also unlocks the mouse cursor at the same time aand allows the player to click around, this feature can cause issues if the panel has an input field (the player wouldn't be able to interact with the input field), in that case it is recommended to turn that setting off. |
77 | | Gesture Mode | Set this value to "Grab" if the panel should be opened with the grab gesture, "Triggers" if you prefer trigger buttons, or "Both" if the panel should be opened with a combination of both gestures. Be careful when setting it to "Triggers" as the panel might get accidentally grabbed or scaled when trying to interact with it, especially if it's a menu. |
78 | | Closing Behaviour | Set this value to "Closing" if you want to close/hide the panel, set it to "Respawning" if you want the panel to respawn at it's original location. |
79 | | Is Pickupable | If you want the panel to be grabbable |
80 | | Max Scale | The panel can be scaled up as much as you like, but if you want you can set a max scale, and the panel will not exceed that scale. |
81 | | Min Scale | The panel cannot be scaled below the "MinScale", can be useful if your panel contains stuff that cannot be scaled down so much, otherwise you can keep that value low or event set it to 0 |
82 | | Max Distance Before Closing The Panel | The panel will automatically close if the player walks away from it. The distance can be configured here. |
83 | | Panel Scale On Desktop | Desktop-only setting: Scale of the panel for Desktop users. |
84 | | Delay Initialisation | This is an ugly hack to prevent certain prefabs to break.
When you launch the instance, the panel gets automatically hidden from the player, and that during the loading screen. In most cases, that shouldn't cause any issues, but hiding the panel disables any script that is attached to that panel, which can break certain scripts that really need to get initialised during the loading screen.
For instance, certain video player controls attached to the panel could break because of that. If that happens, you can check that checkbox, this will initialise the panel shortly before the loading screen ends, and ensure that most prefabs attached to that panel will initialise properly, the drawback is that you cannot disable the `PortablePanel` script at the start of the world, as it will break the script...|
85 |
86 | ## Events
87 | If you want to implement custom behaviors to the panel, for instance when the panel closes, or when it gets dropped, you can create a class that inherits from `PortablePanel` ann override the events you need to override.
88 |
89 | | Event name | Parameters | Behavior | Return |
90 | |-----------------|---------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------|--------|
91 | | `OnPanelOpening` | | Gets called when the panel opens. | True - If the panel needs to be opened. If you want to open the panel manually, you can return `false`. |
92 | | `OnPanelClosing` | | Gets called when the panel is about to get closed, so it is called when the panel is not closed yet. | True - If the panel needs to be closed. If you want to close the panel manually, you can return `false` instead. |
93 | | `OnPanelGrab` | | Gets called when the panel is getting grabbed, either by one hand or with both hands. If `Grabbable Panel` is set to false, only scaling triggers that event. | |
94 | | `OnPanelDrop ` | | Gets called when the panel is dropped.| |
95 | | `OnPanelScaled` | float oldScale, float newScale | Gets called when the panel gets scaled.| |
96 | | `OnStart` | | Gets called on Start. Use it if you need to initialize certain values | |
97 |
98 |
99 |
100 | ## Public methods
101 | A few public methods can be called from an external script :
102 |
103 | | Function Name | Return | Explanation | Parameter |
104 | |------------------------|--------|----------------------------------------------------------------------------------------------------------------------| --------- |
105 | | `ForceClosePanel()` | | Closes the panel even if it is currently being held or scaled. |
106 | | `ForceOpenPanel(float unscaledDistance)` | | Opens the panel:
- On Desktop, the panel will be shown on the screen and can be closed again with the "Tab" key.
- In VR, the panel will be placed in front of the player's face. | The `unscaledDistance` parameter is optional, it allows you to set the distance you want to place the panel in front of the player, it is "unscaled" because that distance is scaled based on the size of the avatar, the panel will be placed closer if the avatar is smaller. |
107 | | `IsPanelHoldByOneHand()`| bool | Returns true if the panel is being held with one hand. |
108 | | `SetRespawnPoint(Vector3 position, Quaternion rotation, Vector3 scale)` | | Sets the respawn point of the panel, which can be useful if you want to move the panel to a different place. | |
109 | | `RespawnPanel` | | Respawns the panel, only works when `Closing Behaviour` is set to `Respawning`, it has a similar behaviour as `ForceClosePanel`, except that `ForceClosePanel` checks if the panel already got closed. |
110 | | `SetPickupable(bool newPickupableState)` | | Sets the "pickupable" state of your panel. This will also work for VRCPickups | The new pickupable state |
111 |
112 | ## Constants
113 | I use three contants I didn't exposed in the inspector, because I didn't wanted to fill up the inspector with parameters no one will change, but if needed you can change them directly in the code.
114 | - MAX_DISTANCE_HAND_GESTURE : Max distance between both hands to trigger a panel opening, it is set at 30cm, so to open the panel the distance between your hands should not exceed 30 centimeters.
115 | - TIME_INTERVAL_HAND_GESTURE : To open the panel and to scale it, the right and left hand gestures should occur with a time gap of less than the time given by that constant, it is set to 0.15 second.
116 | - PLACEMENT_DISTANCE_FROM_HEAD : The default distance the panel gets opened on Desktop, do not set it to 0.
117 | - CLOSING_HAND_DISTANCE : If the distance between both hands is smaller than the value of this const variable, then the panel will close. Note that this variable is scaled based on the size of the avatar.
118 |
119 | ## License
120 | MIT, see the include LICENSE file
121 |
122 | ## Credits
123 | No need to credit me, but if you want you can credit my VRChat username (MyroP) with or without a link to this GitHub page.
124 |
125 | ## Socials and contact
126 | For bug reports or suggestion, please use the "Issue" tab, but you can also contact me on X/Twitter (my DM's are open)
127 | - My Twitter/X account : https://x.com/MyroDev or https://twitter.com/MyroDev
128 | - My VRChat profile : https://vrchat.com/home/user/usr_0d0d4ccf-7352-46bd-b1d1-ec804f0c3490
129 | - My VRCList profile : https://vrclist.com/user/MyroP
130 | - Tip jar: https://www.patreon.com/myrop
131 |
132 |
--------------------------------------------------------------------------------
/README.md.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 33b2f9478b6024a48aa079613101927b
3 | TextScriptImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Res.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 033d75e0497b24348a973eb063a7be5f
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Res/Android.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MyroG/Portable-Panel/243eaaea0f293f5290f330f12afb9319eddb9302/Res/Android.PNG
--------------------------------------------------------------------------------
/Res/Android.PNG.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: cc1992fa2d95bf841b727dca744159eb
3 | TextureImporter:
4 | internalIDToNameTable: []
5 | externalObjects: {}
6 | serializedVersion: 11
7 | mipmaps:
8 | mipMapMode: 0
9 | enableMipMap: 1
10 | sRGBTexture: 1
11 | linearTexture: 0
12 | fadeOut: 0
13 | borderMipMap: 0
14 | mipMapsPreserveCoverage: 0
15 | alphaTestReferenceValue: 0.5
16 | mipMapFadeDistanceStart: 1
17 | mipMapFadeDistanceEnd: 3
18 | bumpmap:
19 | convertToNormalMap: 0
20 | externalNormalMap: 0
21 | heightScale: 0.25
22 | normalMapFilter: 0
23 | isReadable: 0
24 | streamingMipmaps: 0
25 | streamingMipmapsPriority: 0
26 | grayScaleToAlpha: 0
27 | generateCubemap: 6
28 | cubemapConvolution: 0
29 | seamlessCubemap: 0
30 | textureFormat: 1
31 | maxTextureSize: 2048
32 | textureSettings:
33 | serializedVersion: 2
34 | filterMode: 1
35 | aniso: 1
36 | mipBias: 0
37 | wrapU: 0
38 | wrapV: 0
39 | wrapW: 0
40 | nPOTScale: 1
41 | lightmap: 0
42 | compressionQuality: 50
43 | spriteMode: 0
44 | spriteExtrude: 1
45 | spriteMeshType: 1
46 | alignment: 0
47 | spritePivot: {x: 0.5, y: 0.5}
48 | spritePixelsToUnits: 100
49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0}
50 | spriteGenerateFallbackPhysicsShape: 1
51 | alphaUsage: 1
52 | alphaIsTransparency: 0
53 | spriteTessellationDetail: -1
54 | textureType: 0
55 | textureShape: 1
56 | singleChannelComponent: 0
57 | maxTextureSizeSet: 0
58 | compressionQualitySet: 0
59 | textureFormatSet: 0
60 | applyGammaDecoding: 0
61 | platformSettings:
62 | - serializedVersion: 3
63 | buildTarget: DefaultTexturePlatform
64 | maxTextureSize: 2048
65 | resizeAlgorithm: 0
66 | textureFormat: -1
67 | textureCompression: 1
68 | compressionQuality: 50
69 | crunchedCompression: 0
70 | allowsAlphaSplitting: 0
71 | overridden: 0
72 | androidETC2FallbackOverride: 0
73 | forceMaximumCompressionQuality_BC6H_BC7: 0
74 | spriteSheet:
75 | serializedVersion: 2
76 | sprites: []
77 | outline: []
78 | physicsShape: []
79 | bones: []
80 | spriteID:
81 | internalID: 0
82 | vertices: []
83 | indices:
84 | edges: []
85 | weights: []
86 | secondaryTextures: []
87 | spritePackingTag:
88 | pSDRemoveMatte: 0
89 | pSDShowRemoveMatteOption: 0
90 | userData:
91 | assetBundleName:
92 | assetBundleVariant:
93 |
--------------------------------------------------------------------------------
/Res/PanelHierarchy.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MyroG/Portable-Panel/243eaaea0f293f5290f330f12afb9319eddb9302/Res/PanelHierarchy.PNG
--------------------------------------------------------------------------------
/Res/PanelHierarchy.PNG.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 119dc245157a7d545844d3f784cdf090
3 | TextureImporter:
4 | internalIDToNameTable: []
5 | externalObjects: {}
6 | serializedVersion: 11
7 | mipmaps:
8 | mipMapMode: 0
9 | enableMipMap: 1
10 | sRGBTexture: 1
11 | linearTexture: 0
12 | fadeOut: 0
13 | borderMipMap: 0
14 | mipMapsPreserveCoverage: 0
15 | alphaTestReferenceValue: 0.5
16 | mipMapFadeDistanceStart: 1
17 | mipMapFadeDistanceEnd: 3
18 | bumpmap:
19 | convertToNormalMap: 0
20 | externalNormalMap: 0
21 | heightScale: 0.25
22 | normalMapFilter: 0
23 | isReadable: 0
24 | streamingMipmaps: 0
25 | streamingMipmapsPriority: 0
26 | grayScaleToAlpha: 0
27 | generateCubemap: 6
28 | cubemapConvolution: 0
29 | seamlessCubemap: 0
30 | textureFormat: 1
31 | maxTextureSize: 2048
32 | textureSettings:
33 | serializedVersion: 2
34 | filterMode: 1
35 | aniso: 1
36 | mipBias: 0
37 | wrapU: 0
38 | wrapV: 0
39 | wrapW: 0
40 | nPOTScale: 1
41 | lightmap: 0
42 | compressionQuality: 50
43 | spriteMode: 0
44 | spriteExtrude: 1
45 | spriteMeshType: 1
46 | alignment: 0
47 | spritePivot: {x: 0.5, y: 0.5}
48 | spritePixelsToUnits: 100
49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0}
50 | spriteGenerateFallbackPhysicsShape: 1
51 | alphaUsage: 1
52 | alphaIsTransparency: 0
53 | spriteTessellationDetail: -1
54 | textureType: 0
55 | textureShape: 1
56 | singleChannelComponent: 0
57 | maxTextureSizeSet: 0
58 | compressionQualitySet: 0
59 | textureFormatSet: 0
60 | applyGammaDecoding: 0
61 | platformSettings:
62 | - serializedVersion: 3
63 | buildTarget: DefaultTexturePlatform
64 | maxTextureSize: 2048
65 | resizeAlgorithm: 0
66 | textureFormat: -1
67 | textureCompression: 1
68 | compressionQuality: 50
69 | crunchedCompression: 0
70 | allowsAlphaSplitting: 0
71 | overridden: 0
72 | androidETC2FallbackOverride: 0
73 | forceMaximumCompressionQuality_BC6H_BC7: 0
74 | spriteSheet:
75 | serializedVersion: 2
76 | sprites: []
77 | outline: []
78 | physicsShape: []
79 | bones: []
80 | spriteID:
81 | internalID: 0
82 | vertices: []
83 | indices:
84 | edges: []
85 | weights: []
86 | secondaryTextures: []
87 | spritePackingTag:
88 | pSDRemoveMatte: 0
89 | pSDShowRemoveMatteOption: 0
90 | userData:
91 | assetBundleName:
92 | assetBundleVariant:
93 |
--------------------------------------------------------------------------------
/Res/Parameters.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MyroG/Portable-Panel/243eaaea0f293f5290f330f12afb9319eddb9302/Res/Parameters.png
--------------------------------------------------------------------------------
/Res/Parameters.png.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 3eb0fec39ac59f744824a15a84fb32e3
3 | TextureImporter:
4 | internalIDToNameTable: []
5 | externalObjects: {}
6 | serializedVersion: 11
7 | mipmaps:
8 | mipMapMode: 0
9 | enableMipMap: 1
10 | sRGBTexture: 1
11 | linearTexture: 0
12 | fadeOut: 0
13 | borderMipMap: 0
14 | mipMapsPreserveCoverage: 0
15 | alphaTestReferenceValue: 0.5
16 | mipMapFadeDistanceStart: 1
17 | mipMapFadeDistanceEnd: 3
18 | bumpmap:
19 | convertToNormalMap: 0
20 | externalNormalMap: 0
21 | heightScale: 0.25
22 | normalMapFilter: 0
23 | isReadable: 0
24 | streamingMipmaps: 0
25 | streamingMipmapsPriority: 0
26 | grayScaleToAlpha: 0
27 | generateCubemap: 6
28 | cubemapConvolution: 0
29 | seamlessCubemap: 0
30 | textureFormat: 1
31 | maxTextureSize: 2048
32 | textureSettings:
33 | serializedVersion: 2
34 | filterMode: 1
35 | aniso: 1
36 | mipBias: 0
37 | wrapU: 0
38 | wrapV: 0
39 | wrapW: 0
40 | nPOTScale: 1
41 | lightmap: 0
42 | compressionQuality: 50
43 | spriteMode: 0
44 | spriteExtrude: 1
45 | spriteMeshType: 1
46 | alignment: 0
47 | spritePivot: {x: 0.5, y: 0.5}
48 | spritePixelsToUnits: 100
49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0}
50 | spriteGenerateFallbackPhysicsShape: 1
51 | alphaUsage: 1
52 | alphaIsTransparency: 0
53 | spriteTessellationDetail: -1
54 | textureType: 0
55 | textureShape: 1
56 | singleChannelComponent: 0
57 | maxTextureSizeSet: 0
58 | compressionQualitySet: 0
59 | textureFormatSet: 0
60 | applyGammaDecoding: 0
61 | platformSettings:
62 | - serializedVersion: 3
63 | buildTarget: DefaultTexturePlatform
64 | maxTextureSize: 2048
65 | resizeAlgorithm: 0
66 | textureFormat: -1
67 | textureCompression: 1
68 | compressionQuality: 50
69 | crunchedCompression: 0
70 | allowsAlphaSplitting: 0
71 | overridden: 0
72 | androidETC2FallbackOverride: 0
73 | forceMaximumCompressionQuality_BC6H_BC7: 0
74 | spriteSheet:
75 | serializedVersion: 2
76 | sprites: []
77 | outline: []
78 | physicsShape: []
79 | bones: []
80 | spriteID:
81 | internalID: 0
82 | vertices: []
83 | indices:
84 | edges: []
85 | weights: []
86 | secondaryTextures: []
87 | spritePackingTag:
88 | pSDRemoveMatte: 0
89 | pSDShowRemoveMatteOption: 0
90 | userData:
91 | assetBundleName:
92 | assetBundleVariant:
93 |
--------------------------------------------------------------------------------
/Res/Presentation1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MyroG/Portable-Panel/243eaaea0f293f5290f330f12afb9319eddb9302/Res/Presentation1.gif
--------------------------------------------------------------------------------
/Res/Presentation1.gif.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: dea1eba27467a4a488e93706e243a838
3 | TextureImporter:
4 | internalIDToNameTable: []
5 | externalObjects: {}
6 | serializedVersion: 11
7 | mipmaps:
8 | mipMapMode: 0
9 | enableMipMap: 1
10 | sRGBTexture: 1
11 | linearTexture: 0
12 | fadeOut: 0
13 | borderMipMap: 0
14 | mipMapsPreserveCoverage: 0
15 | alphaTestReferenceValue: 0.5
16 | mipMapFadeDistanceStart: 1
17 | mipMapFadeDistanceEnd: 3
18 | bumpmap:
19 | convertToNormalMap: 0
20 | externalNormalMap: 0
21 | heightScale: 0.25
22 | normalMapFilter: 0
23 | isReadable: 0
24 | streamingMipmaps: 0
25 | streamingMipmapsPriority: 0
26 | grayScaleToAlpha: 0
27 | generateCubemap: 6
28 | cubemapConvolution: 0
29 | seamlessCubemap: 0
30 | textureFormat: 1
31 | maxTextureSize: 2048
32 | textureSettings:
33 | serializedVersion: 2
34 | filterMode: 1
35 | aniso: 1
36 | mipBias: 0
37 | wrapU: 0
38 | wrapV: 0
39 | wrapW: 0
40 | nPOTScale: 1
41 | lightmap: 0
42 | compressionQuality: 50
43 | spriteMode: 0
44 | spriteExtrude: 1
45 | spriteMeshType: 1
46 | alignment: 0
47 | spritePivot: {x: 0.5, y: 0.5}
48 | spritePixelsToUnits: 100
49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0}
50 | spriteGenerateFallbackPhysicsShape: 1
51 | alphaUsage: 1
52 | alphaIsTransparency: 0
53 | spriteTessellationDetail: -1
54 | textureType: 0
55 | textureShape: 1
56 | singleChannelComponent: 0
57 | maxTextureSizeSet: 0
58 | compressionQualitySet: 0
59 | textureFormatSet: 0
60 | applyGammaDecoding: 0
61 | platformSettings:
62 | - serializedVersion: 3
63 | buildTarget: DefaultTexturePlatform
64 | maxTextureSize: 2048
65 | resizeAlgorithm: 0
66 | textureFormat: -1
67 | textureCompression: 1
68 | compressionQuality: 50
69 | crunchedCompression: 0
70 | allowsAlphaSplitting: 0
71 | overridden: 0
72 | androidETC2FallbackOverride: 0
73 | forceMaximumCompressionQuality_BC6H_BC7: 0
74 | spriteSheet:
75 | serializedVersion: 2
76 | sprites: []
77 | outline: []
78 | physicsShape: []
79 | bones: []
80 | spriteID:
81 | internalID: 0
82 | vertices: []
83 | indices:
84 | edges: []
85 | weights: []
86 | secondaryTextures: []
87 | spritePackingTag:
88 | pSDRemoveMatte: 0
89 | pSDShowRemoveMatteOption: 0
90 | userData:
91 | assetBundleName:
92 | assetBundleVariant:
93 |
--------------------------------------------------------------------------------
/Res/Presentation2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MyroG/Portable-Panel/243eaaea0f293f5290f330f12afb9319eddb9302/Res/Presentation2.gif
--------------------------------------------------------------------------------
/Res/Presentation2.gif.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 35e44f05a6c3fdf47a0f0e80fc673c90
3 | TextureImporter:
4 | internalIDToNameTable: []
5 | externalObjects: {}
6 | serializedVersion: 11
7 | mipmaps:
8 | mipMapMode: 0
9 | enableMipMap: 1
10 | sRGBTexture: 1
11 | linearTexture: 0
12 | fadeOut: 0
13 | borderMipMap: 0
14 | mipMapsPreserveCoverage: 0
15 | alphaTestReferenceValue: 0.5
16 | mipMapFadeDistanceStart: 1
17 | mipMapFadeDistanceEnd: 3
18 | bumpmap:
19 | convertToNormalMap: 0
20 | externalNormalMap: 0
21 | heightScale: 0.25
22 | normalMapFilter: 0
23 | isReadable: 0
24 | streamingMipmaps: 0
25 | streamingMipmapsPriority: 0
26 | grayScaleToAlpha: 0
27 | generateCubemap: 6
28 | cubemapConvolution: 0
29 | seamlessCubemap: 0
30 | textureFormat: 1
31 | maxTextureSize: 2048
32 | textureSettings:
33 | serializedVersion: 2
34 | filterMode: 1
35 | aniso: 1
36 | mipBias: 0
37 | wrapU: 0
38 | wrapV: 0
39 | wrapW: 0
40 | nPOTScale: 1
41 | lightmap: 0
42 | compressionQuality: 50
43 | spriteMode: 0
44 | spriteExtrude: 1
45 | spriteMeshType: 1
46 | alignment: 0
47 | spritePivot: {x: 0.5, y: 0.5}
48 | spritePixelsToUnits: 100
49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0}
50 | spriteGenerateFallbackPhysicsShape: 1
51 | alphaUsage: 1
52 | alphaIsTransparency: 0
53 | spriteTessellationDetail: -1
54 | textureType: 0
55 | textureShape: 1
56 | singleChannelComponent: 0
57 | maxTextureSizeSet: 0
58 | compressionQualitySet: 0
59 | textureFormatSet: 0
60 | applyGammaDecoding: 0
61 | platformSettings:
62 | - serializedVersion: 3
63 | buildTarget: DefaultTexturePlatform
64 | maxTextureSize: 2048
65 | resizeAlgorithm: 0
66 | textureFormat: -1
67 | textureCompression: 1
68 | compressionQuality: 50
69 | crunchedCompression: 0
70 | allowsAlphaSplitting: 0
71 | overridden: 0
72 | androidETC2FallbackOverride: 0
73 | forceMaximumCompressionQuality_BC6H_BC7: 0
74 | spriteSheet:
75 | serializedVersion: 2
76 | sprites: []
77 | outline: []
78 | physicsShape: []
79 | bones: []
80 | spriteID:
81 | internalID: 0
82 | vertices: []
83 | indices:
84 | edges: []
85 | weights: []
86 | secondaryTextures: []
87 | spritePackingTag:
88 | pSDRemoveMatte: 0
89 | pSDShowRemoveMatteOption: 0
90 | userData:
91 | assetBundleName:
92 | assetBundleVariant:
93 |
--------------------------------------------------------------------------------
/Scripts.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: d27be4fb14e24744f89ec680c49d732b
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Scripts/AndroidPanelModule.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!114 &11400000
4 | MonoBehaviour:
5 | m_ObjectHideFlags: 0
6 | m_CorrespondingSourceObject: {fileID: 0}
7 | m_PrefabInstance: {fileID: 0}
8 | m_PrefabAsset: {fileID: 0}
9 | m_GameObject: {fileID: 0}
10 | m_Enabled: 1
11 | m_EditorHideFlags: 0
12 | m_Script: {fileID: 11500000, guid: c333ccfdd0cbdbc4ca30cef2dd6e6b9b, type: 3}
13 | m_Name: AndroidPanelModule
14 | m_EditorClassIdentifier:
15 | serializedUdonProgramAsset: {fileID: 11400000, guid: d934a01d057aa214c832458f807b8003,
16 | type: 2}
17 | udonAssembly:
18 | assemblyError:
19 | sourceCsScript: {fileID: 11500000, guid: f043114674f43f2448af5493f1cacf41, type: 3}
20 | scriptVersion: 2
21 | compiledVersion: 2
22 | behaviourSyncMode: 1
23 | hasInteractEvent: 0
24 | scriptID: 4003125356719091434
25 | serializationData:
26 | SerializedFormat: 2
27 | SerializedBytes:
28 | ReferencedUnityObjects: []
29 | SerializedBytesString:
30 | Prefab: {fileID: 0}
31 | PrefabModificationsReferencedUnityObjects: []
32 | PrefabModifications: []
33 | SerializationNodes:
34 | - Name: fieldDefinitions
35 | Entry: 7
36 | Data: 0|System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[UdonSharp.Compiler.FieldDefinition,
37 | UdonSharp.Editor]], mscorlib
38 | - Name: comparer
39 | Entry: 7
40 | Data: 1|System.Collections.Generic.GenericEqualityComparer`1[[System.String,
41 | mscorlib]], mscorlib
42 | - Name:
43 | Entry: 8
44 | Data:
45 | - Name:
46 | Entry: 12
47 | Data: 2
48 | - Name:
49 | Entry: 7
50 | Data:
51 | - Name: $k
52 | Entry: 1
53 | Data: PortablePanelInstance
54 | - Name: $v
55 | Entry: 7
56 | Data: 2|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
57 | - Name: k__BackingField
58 | Entry: 1
59 | Data: PortablePanelInstance
60 | - Name: k__BackingField
61 | Entry: 7
62 | Data: 3|System.RuntimeType, mscorlib
63 | - Name:
64 | Entry: 1
65 | Data: myro.PortablePanel, Assembly-CSharp
66 | - Name:
67 | Entry: 8
68 | Data:
69 | - Name: k__BackingField
70 | Entry: 7
71 | Data: 4|System.RuntimeType, mscorlib
72 | - Name:
73 | Entry: 1
74 | Data: VRC.Udon.UdonBehaviour, VRC.Udon
75 | - Name:
76 | Entry: 8
77 | Data:
78 | - Name: k__BackingField
79 | Entry: 7
80 | Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
81 | - Name:
82 | Entry: 6
83 | Data:
84 | - Name:
85 | Entry: 8
86 | Data:
87 | - Name: k__BackingField
88 | Entry: 5
89 | Data: true
90 | - Name: _fieldAttributes
91 | Entry: 7
92 | Data: 5|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
93 | - Name:
94 | Entry: 12
95 | Data: 1
96 | - Name:
97 | Entry: 7
98 | Data: 6|UnityEngine.HeaderAttribute, UnityEngine.CoreModule
99 | - Name: header
100 | Entry: 1
101 | Data: Set your panel here
102 | - Name:
103 | Entry: 8
104 | Data:
105 | - Name:
106 | Entry: 13
107 | Data:
108 | - Name:
109 | Entry: 8
110 | Data:
111 | - Name:
112 | Entry: 8
113 | Data:
114 | - Name:
115 | Entry: 8
116 | Data:
117 | - Name:
118 | Entry: 7
119 | Data:
120 | - Name: $k
121 | Entry: 1
122 | Data: CanvasInstance
123 | - Name: $v
124 | Entry: 7
125 | Data: 7|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
126 | - Name: k__BackingField
127 | Entry: 1
128 | Data: CanvasInstance
129 | - Name: k__BackingField
130 | Entry: 7
131 | Data: 8|System.RuntimeType, mscorlib
132 | - Name:
133 | Entry: 1
134 | Data: UnityEngine.Canvas, UnityEngine.UIModule
135 | - Name:
136 | Entry: 8
137 | Data:
138 | - Name: k__BackingField
139 | Entry: 9
140 | Data: 8
141 | - Name: k__BackingField
142 | Entry: 7
143 | Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
144 | - Name:
145 | Entry: 6
146 | Data:
147 | - Name:
148 | Entry: 8
149 | Data:
150 | - Name: k__BackingField
151 | Entry: 5
152 | Data: true
153 | - Name: _fieldAttributes
154 | Entry: 7
155 | Data: 9|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
156 | - Name:
157 | Entry: 12
158 | Data: 1
159 | - Name:
160 | Entry: 7
161 | Data: 10|UnityEngine.HeaderAttribute, UnityEngine.CoreModule
162 | - Name: header
163 | Entry: 1
164 | Data: Used internally, do not change, except if really needed
165 | - Name:
166 | Entry: 8
167 | Data:
168 | - Name:
169 | Entry: 13
170 | Data:
171 | - Name:
172 | Entry: 8
173 | Data:
174 | - Name:
175 | Entry: 8
176 | Data:
177 | - Name:
178 | Entry: 8
179 | Data:
180 | - Name:
181 | Entry: 13
182 | Data:
183 | - Name:
184 | Entry: 8
185 | Data:
186 |
--------------------------------------------------------------------------------
/Scripts/AndroidPanelModule.asset.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 872edc65781d9904a950c69f6602c83c
3 | NativeFormatImporter:
4 | externalObjects: {}
5 | mainObjectFileID: 11400000
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Scripts/AndroidPanelModule.cs:
--------------------------------------------------------------------------------
1 |
2 | using UdonSharp;
3 | using UnityEngine;
4 | using VRC.SDKBase;
5 | using VRC.Udon;
6 |
7 |
8 |
9 | namespace myro
10 | {
11 | [UdonBehaviourSyncMode(BehaviourSyncMode.None)]
12 | public class AndroidPanelModule : UdonSharpBehaviour
13 | {
14 | [Header("Set your panel here")]
15 | public PortablePanel PortablePanelInstance;
16 |
17 | [Header("Used internally, do not change, except if really needed")]
18 | public Canvas CanvasInstance;
19 |
20 | void Start()
21 | {
22 | CanvasInstance.gameObject.SetActive(false);
23 | }
24 |
25 | public void ToggleMenu()
26 | {
27 | if (PortablePanelInstance.IsPanelOpen())
28 | {
29 | PortablePanelInstance.ForceClosePanel();
30 | }
31 | else
32 | {
33 | PortablePanelInstance.ForceOpenPanel();
34 | }
35 | }
36 |
37 | public bool IsPlayerOnAndroid()
38 | {
39 | #if UNITY_ANDROID
40 | return !Networking.LocalPlayer.IsUserInVR();
41 | #else
42 | return false;
43 | #endif
44 | }
45 |
46 | public override void OnPlayerJoined(VRCPlayerApi player)
47 | {
48 | if (player.isLocal)
49 | {
50 | CanvasInstance.gameObject.SetActive(IsPlayerOnAndroid());
51 | }
52 | }
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/Scripts/AndroidPanelModule.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: f043114674f43f2448af5493f1cacf41
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Scripts/PortablePanel.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!114 &11400000
4 | MonoBehaviour:
5 | m_ObjectHideFlags: 0
6 | m_CorrespondingSourceObject: {fileID: 0}
7 | m_PrefabInstance: {fileID: 0}
8 | m_PrefabAsset: {fileID: 0}
9 | m_GameObject: {fileID: 0}
10 | m_Enabled: 1
11 | m_EditorHideFlags: 0
12 | m_Script: {fileID: 11500000, guid: c333ccfdd0cbdbc4ca30cef2dd6e6b9b, type: 3}
13 | m_Name: PortablePanel
14 | m_EditorClassIdentifier:
15 | serializedUdonProgramAsset: {fileID: 11400000, guid: fc0a2d339cee7da4d9d94b4b65d2d2d1,
16 | type: 2}
17 | udonAssembly:
18 | assemblyError:
19 | sourceCsScript: {fileID: 11500000, guid: 6c16e461e59a5a340a22f538d64095e8, type: 3}
20 | scriptVersion: 2
21 | compiledVersion: 2
22 | behaviourSyncMode: 1
23 | hasInteractEvent: 0
24 | scriptID: -4635888521502335671
25 | serializationData:
26 | SerializedFormat: 2
27 | SerializedBytes:
28 | ReferencedUnityObjects: []
29 | SerializedBytesString:
30 | Prefab: {fileID: 0}
31 | PrefabModificationsReferencedUnityObjects: []
32 | PrefabModifications: []
33 | SerializationNodes:
34 | - Name: fieldDefinitions
35 | Entry: 7
36 | Data: 0|System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[UdonSharp.Compiler.FieldDefinition,
37 | UdonSharp.Editor]], mscorlib
38 | - Name: comparer
39 | Entry: 7
40 | Data: 1|System.Collections.Generic.GenericEqualityComparer`1[[System.String,
41 | mscorlib]], mscorlib
42 | - Name:
43 | Entry: 8
44 | Data:
45 | - Name:
46 | Entry: 12
47 | Data: 34
48 | - Name:
49 | Entry: 7
50 | Data:
51 | - Name: $k
52 | Entry: 1
53 | Data: Panel
54 | - Name: $v
55 | Entry: 7
56 | Data: 2|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
57 | - Name: k__BackingField
58 | Entry: 1
59 | Data: Panel
60 | - Name: k__BackingField
61 | Entry: 7
62 | Data: 3|System.RuntimeType, mscorlib
63 | - Name:
64 | Entry: 1
65 | Data: UnityEngine.GameObject, UnityEngine.CoreModule
66 | - Name:
67 | Entry: 8
68 | Data:
69 | - Name: k__BackingField
70 | Entry: 9
71 | Data: 3
72 | - Name: k__BackingField
73 | Entry: 7
74 | Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
75 | - Name:
76 | Entry: 6
77 | Data:
78 | - Name:
79 | Entry: 8
80 | Data:
81 | - Name: k__BackingField
82 | Entry: 5
83 | Data: true
84 | - Name: _fieldAttributes
85 | Entry: 7
86 | Data: 4|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
87 | - Name:
88 | Entry: 12
89 | Data: 1
90 | - Name:
91 | Entry: 7
92 | Data: 5|UnityEngine.HeaderAttribute, UnityEngine.CoreModule
93 | - Name: header
94 | Entry: 1
95 | Data: See README file for additional help and infos
96 | - Name:
97 | Entry: 8
98 | Data:
99 | - Name:
100 | Entry: 13
101 | Data:
102 | - Name:
103 | Entry: 8
104 | Data:
105 | - Name:
106 | Entry: 8
107 | Data:
108 | - Name:
109 | Entry: 8
110 | Data:
111 | - Name:
112 | Entry: 7
113 | Data:
114 | - Name: $k
115 | Entry: 1
116 | Data: _panelTransf
117 | - Name: $v
118 | Entry: 7
119 | Data: 6|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
120 | - Name: k__BackingField
121 | Entry: 1
122 | Data: _panelTransf
123 | - Name: k__BackingField
124 | Entry: 7
125 | Data: 7|System.RuntimeType, mscorlib
126 | - Name:
127 | Entry: 1
128 | Data: UnityEngine.Transform, UnityEngine.CoreModule
129 | - Name:
130 | Entry: 8
131 | Data:
132 | - Name: k__BackingField
133 | Entry: 9
134 | Data: 7
135 | - Name: k__BackingField
136 | Entry: 7
137 | Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
138 | - Name:
139 | Entry: 6
140 | Data:
141 | - Name:
142 | Entry: 8
143 | Data:
144 | - Name: k__BackingField
145 | Entry: 5
146 | Data: false
147 | - Name: _fieldAttributes
148 | Entry: 7
149 | Data: 8|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
150 | - Name:
151 | Entry: 12
152 | Data: 0
153 | - Name:
154 | Entry: 13
155 | Data:
156 | - Name:
157 | Entry: 8
158 | Data:
159 | - Name:
160 | Entry: 8
161 | Data:
162 | - Name:
163 | Entry: 8
164 | Data:
165 | - Name:
166 | Entry: 7
167 | Data:
168 | - Name: $k
169 | Entry: 1
170 | Data: TabOnHold
171 | - Name: $v
172 | Entry: 7
173 | Data: 9|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
174 | - Name: k__BackingField
175 | Entry: 1
176 | Data: TabOnHold
177 | - Name: k__BackingField
178 | Entry: 7
179 | Data: 10|System.RuntimeType, mscorlib
180 | - Name:
181 | Entry: 1
182 | Data: System.Boolean, mscorlib
183 | - Name:
184 | Entry: 8
185 | Data:
186 | - Name: k__BackingField
187 | Entry: 9
188 | Data: 10
189 | - Name: k__BackingField
190 | Entry: 7
191 | Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
192 | - Name:
193 | Entry: 6
194 | Data:
195 | - Name:
196 | Entry: 8
197 | Data:
198 | - Name: k__BackingField
199 | Entry: 5
200 | Data: true
201 | - Name: _fieldAttributes
202 | Entry: 7
203 | Data: 11|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
204 | - Name:
205 | Entry: 12
206 | Data: 0
207 | - Name:
208 | Entry: 13
209 | Data:
210 | - Name:
211 | Entry: 8
212 | Data:
213 | - Name:
214 | Entry: 8
215 | Data:
216 | - Name:
217 | Entry: 8
218 | Data:
219 | - Name:
220 | Entry: 7
221 | Data:
222 | - Name: $k
223 | Entry: 1
224 | Data: GestureMode
225 | - Name: $v
226 | Entry: 7
227 | Data: 12|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
228 | - Name: k__BackingField
229 | Entry: 1
230 | Data: GestureMode
231 | - Name: k__BackingField
232 | Entry: 7
233 | Data: 13|System.RuntimeType, mscorlib
234 | - Name:
235 | Entry: 1
236 | Data: myro.EGestureMode, Assembly-CSharp
237 | - Name:
238 | Entry: 8
239 | Data:
240 | - Name: k__BackingField
241 | Entry: 7
242 | Data: 14|System.RuntimeType, mscorlib
243 | - Name:
244 | Entry: 1
245 | Data: System.Int32, mscorlib
246 | - Name:
247 | Entry: 8
248 | Data:
249 | - Name: k__BackingField
250 | Entry: 7
251 | Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
252 | - Name:
253 | Entry: 6
254 | Data:
255 | - Name:
256 | Entry: 8
257 | Data:
258 | - Name: k__BackingField
259 | Entry: 5
260 | Data: true
261 | - Name: _fieldAttributes
262 | Entry: 7
263 | Data: 15|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
264 | - Name:
265 | Entry: 12
266 | Data: 0
267 | - Name:
268 | Entry: 13
269 | Data:
270 | - Name:
271 | Entry: 8
272 | Data:
273 | - Name:
274 | Entry: 8
275 | Data:
276 | - Name:
277 | Entry: 8
278 | Data:
279 | - Name:
280 | Entry: 7
281 | Data:
282 | - Name: $k
283 | Entry: 1
284 | Data: CloseBehaviour
285 | - Name: $v
286 | Entry: 7
287 | Data: 16|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
288 | - Name: k__BackingField
289 | Entry: 1
290 | Data: CloseBehaviour
291 | - Name: k__BackingField
292 | Entry: 7
293 | Data: 17|System.RuntimeType, mscorlib
294 | - Name:
295 | Entry: 1
296 | Data: myro.EClosingBehaviour, Assembly-CSharp
297 | - Name:
298 | Entry: 8
299 | Data:
300 | - Name: k__BackingField
301 | Entry: 9
302 | Data: 14
303 | - Name: k__BackingField
304 | Entry: 7
305 | Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
306 | - Name:
307 | Entry: 6
308 | Data:
309 | - Name:
310 | Entry: 8
311 | Data:
312 | - Name: k__BackingField
313 | Entry: 5
314 | Data: true
315 | - Name: _fieldAttributes
316 | Entry: 7
317 | Data: 18|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
318 | - Name:
319 | Entry: 12
320 | Data: 0
321 | - Name:
322 | Entry: 13
323 | Data:
324 | - Name:
325 | Entry: 8
326 | Data:
327 | - Name:
328 | Entry: 8
329 | Data:
330 | - Name:
331 | Entry: 8
332 | Data:
333 | - Name:
334 | Entry: 7
335 | Data:
336 | - Name: $k
337 | Entry: 1
338 | Data: _pickupModule
339 | - Name: $v
340 | Entry: 7
341 | Data: 19|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
342 | - Name: k__BackingField
343 | Entry: 1
344 | Data: _pickupModule
345 | - Name: k__BackingField
346 | Entry: 7
347 | Data: 20|System.RuntimeType, mscorlib
348 | - Name:
349 | Entry: 1
350 | Data: myro.PortablePanelPickupModule, Assembly-CSharp
351 | - Name:
352 | Entry: 8
353 | Data:
354 | - Name: k__BackingField
355 | Entry: 7
356 | Data: 21|System.RuntimeType, mscorlib
357 | - Name:
358 | Entry: 1
359 | Data: VRC.Udon.UdonBehaviour, VRC.Udon
360 | - Name:
361 | Entry: 8
362 | Data:
363 | - Name: k__BackingField
364 | Entry: 7
365 | Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
366 | - Name:
367 | Entry: 6
368 | Data:
369 | - Name:
370 | Entry: 8
371 | Data:
372 | - Name: k__BackingField
373 | Entry: 5
374 | Data: false
375 | - Name: _fieldAttributes
376 | Entry: 7
377 | Data: 22|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
378 | - Name:
379 | Entry: 12
380 | Data: 0
381 | - Name:
382 | Entry: 13
383 | Data:
384 | - Name:
385 | Entry: 8
386 | Data:
387 | - Name:
388 | Entry: 8
389 | Data:
390 | - Name:
391 | Entry: 8
392 | Data:
393 | - Name:
394 | Entry: 7
395 | Data:
396 | - Name: $k
397 | Entry: 1
398 | Data: _isPickupable
399 | - Name: $v
400 | Entry: 7
401 | Data: 23|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
402 | - Name: k__BackingField
403 | Entry: 1
404 | Data: _isPickupable
405 | - Name: k__BackingField
406 | Entry: 9
407 | Data: 10
408 | - Name: k__BackingField
409 | Entry: 9
410 | Data: 10
411 | - Name: k__BackingField
412 | Entry: 7
413 | Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
414 | - Name:
415 | Entry: 6
416 | Data:
417 | - Name:
418 | Entry: 8
419 | Data:
420 | - Name: k__BackingField
421 | Entry: 5
422 | Data: true
423 | - Name: _fieldAttributes
424 | Entry: 7
425 | Data: 24|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
426 | - Name:
427 | Entry: 12
428 | Data: 1
429 | - Name:
430 | Entry: 7
431 | Data: 25|UnityEngine.SerializeField, UnityEngine.CoreModule
432 | - Name:
433 | Entry: 8
434 | Data:
435 | - Name:
436 | Entry: 13
437 | Data:
438 | - Name:
439 | Entry: 8
440 | Data:
441 | - Name:
442 | Entry: 8
443 | Data:
444 | - Name:
445 | Entry: 8
446 | Data:
447 | - Name:
448 | Entry: 7
449 | Data:
450 | - Name: $k
451 | Entry: 1
452 | Data: MaxScale
453 | - Name: $v
454 | Entry: 7
455 | Data: 26|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
456 | - Name: k__BackingField
457 | Entry: 1
458 | Data: MaxScale
459 | - Name: k__BackingField
460 | Entry: 7
461 | Data: 27|System.RuntimeType, mscorlib
462 | - Name:
463 | Entry: 1
464 | Data: System.Single, mscorlib
465 | - Name:
466 | Entry: 8
467 | Data:
468 | - Name: k__BackingField
469 | Entry: 9
470 | Data: 27
471 | - Name: k__BackingField
472 | Entry: 7
473 | Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
474 | - Name:
475 | Entry: 6
476 | Data:
477 | - Name:
478 | Entry: 8
479 | Data:
480 | - Name: k__BackingField
481 | Entry: 5
482 | Data: true
483 | - Name: _fieldAttributes
484 | Entry: 7
485 | Data: 28|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
486 | - Name:
487 | Entry: 12
488 | Data: 0
489 | - Name:
490 | Entry: 13
491 | Data:
492 | - Name:
493 | Entry: 8
494 | Data:
495 | - Name:
496 | Entry: 8
497 | Data:
498 | - Name:
499 | Entry: 8
500 | Data:
501 | - Name:
502 | Entry: 7
503 | Data:
504 | - Name: $k
505 | Entry: 1
506 | Data: MinScale
507 | - Name: $v
508 | Entry: 7
509 | Data: 29|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
510 | - Name: k__BackingField
511 | Entry: 1
512 | Data: MinScale
513 | - Name: k__BackingField
514 | Entry: 9
515 | Data: 27
516 | - Name: k__BackingField
517 | Entry: 9
518 | Data: 27
519 | - Name: k__BackingField
520 | Entry: 7
521 | Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
522 | - Name:
523 | Entry: 6
524 | Data:
525 | - Name:
526 | Entry: 8
527 | Data:
528 | - Name: k__BackingField
529 | Entry: 5
530 | Data: true
531 | - Name: _fieldAttributes
532 | Entry: 7
533 | Data: 30|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
534 | - Name:
535 | Entry: 12
536 | Data: 0
537 | - Name:
538 | Entry: 13
539 | Data:
540 | - Name:
541 | Entry: 8
542 | Data:
543 | - Name:
544 | Entry: 8
545 | Data:
546 | - Name:
547 | Entry: 8
548 | Data:
549 | - Name:
550 | Entry: 7
551 | Data:
552 | - Name: $k
553 | Entry: 1
554 | Data: MaxDistanceBeforeClosingThePanel
555 | - Name: $v
556 | Entry: 7
557 | Data: 31|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
558 | - Name: k__BackingField
559 | Entry: 1
560 | Data: MaxDistanceBeforeClosingThePanel
561 | - Name: k__BackingField
562 | Entry: 9
563 | Data: 27
564 | - Name: k__BackingField
565 | Entry: 9
566 | Data: 27
567 | - Name: k__BackingField
568 | Entry: 7
569 | Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
570 | - Name:
571 | Entry: 6
572 | Data:
573 | - Name:
574 | Entry: 8
575 | Data:
576 | - Name: k__BackingField
577 | Entry: 5
578 | Data: true
579 | - Name: _fieldAttributes
580 | Entry: 7
581 | Data: 32|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
582 | - Name:
583 | Entry: 12
584 | Data: 0
585 | - Name:
586 | Entry: 13
587 | Data:
588 | - Name:
589 | Entry: 8
590 | Data:
591 | - Name:
592 | Entry: 8
593 | Data:
594 | - Name:
595 | Entry: 8
596 | Data:
597 | - Name:
598 | Entry: 7
599 | Data:
600 | - Name: $k
601 | Entry: 1
602 | Data: PanelScaleOnDesktop
603 | - Name: $v
604 | Entry: 7
605 | Data: 33|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
606 | - Name: k__BackingField
607 | Entry: 1
608 | Data: PanelScaleOnDesktop
609 | - Name: k__BackingField
610 | Entry: 9
611 | Data: 27
612 | - Name: k__BackingField
613 | Entry: 9
614 | Data: 27
615 | - Name: k__BackingField
616 | Entry: 7
617 | Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
618 | - Name:
619 | Entry: 6
620 | Data:
621 | - Name:
622 | Entry: 8
623 | Data:
624 | - Name: k__BackingField
625 | Entry: 5
626 | Data: true
627 | - Name: _fieldAttributes
628 | Entry: 7
629 | Data: 34|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
630 | - Name:
631 | Entry: 12
632 | Data: 0
633 | - Name:
634 | Entry: 13
635 | Data:
636 | - Name:
637 | Entry: 8
638 | Data:
639 | - Name:
640 | Entry: 8
641 | Data:
642 | - Name:
643 | Entry: 8
644 | Data:
645 | - Name:
646 | Entry: 7
647 | Data:
648 | - Name: $k
649 | Entry: 1
650 | Data: _delayInitialisation
651 | - Name: $v
652 | Entry: 7
653 | Data: 35|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
654 | - Name: k__BackingField
655 | Entry: 1
656 | Data: _delayInitialisation
657 | - Name: k__BackingField
658 | Entry: 9
659 | Data: 10
660 | - Name: k__BackingField
661 | Entry: 9
662 | Data: 10
663 | - Name: k__BackingField
664 | Entry: 7
665 | Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
666 | - Name:
667 | Entry: 6
668 | Data:
669 | - Name:
670 | Entry: 8
671 | Data:
672 | - Name: k__BackingField
673 | Entry: 5
674 | Data: true
675 | - Name: _fieldAttributes
676 | Entry: 7
677 | Data: 36|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
678 | - Name:
679 | Entry: 12
680 | Data: 2
681 | - Name:
682 | Entry: 7
683 | Data: 37|UnityEngine.HeaderAttribute, UnityEngine.CoreModule
684 | - Name: header
685 | Entry: 1
686 | Data: Advanced settings, change them only if you really need to
687 | - Name:
688 | Entry: 8
689 | Data:
690 | - Name:
691 | Entry: 7
692 | Data: 38|UnityEngine.SerializeField, UnityEngine.CoreModule
693 | - Name:
694 | Entry: 8
695 | Data:
696 | - Name:
697 | Entry: 13
698 | Data:
699 | - Name:
700 | Entry: 8
701 | Data:
702 | - Name:
703 | Entry: 8
704 | Data:
705 | - Name:
706 | Entry: 8
707 | Data:
708 | - Name:
709 | Entry: 7
710 | Data:
711 | - Name: $k
712 | Entry: 1
713 | Data: _localPlayer
714 | - Name: $v
715 | Entry: 7
716 | Data: 39|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
717 | - Name: k__BackingField
718 | Entry: 1
719 | Data: _localPlayer
720 | - Name: k__BackingField
721 | Entry: 7
722 | Data: 40|System.RuntimeType, mscorlib
723 | - Name:
724 | Entry: 1
725 | Data: VRC.SDKBase.VRCPlayerApi, VRCSDKBase
726 | - Name:
727 | Entry: 8
728 | Data:
729 | - Name: k__BackingField
730 | Entry: 9
731 | Data: 40
732 | - Name: k__BackingField
733 | Entry: 7
734 | Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
735 | - Name:
736 | Entry: 6
737 | Data:
738 | - Name:
739 | Entry: 8
740 | Data:
741 | - Name: k__BackingField
742 | Entry: 5
743 | Data: false
744 | - Name: _fieldAttributes
745 | Entry: 7
746 | Data: 41|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
747 | - Name:
748 | Entry: 12
749 | Data: 0
750 | - Name:
751 | Entry: 13
752 | Data:
753 | - Name:
754 | Entry: 8
755 | Data:
756 | - Name:
757 | Entry: 8
758 | Data:
759 | - Name:
760 | Entry: 8
761 | Data:
762 | - Name:
763 | Entry: 7
764 | Data:
765 | - Name: $k
766 | Entry: 1
767 | Data: _grabbed
768 | - Name: $v
769 | Entry: 7
770 | Data: 42|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
771 | - Name: k__BackingField
772 | Entry: 1
773 | Data: _grabbed
774 | - Name: k__BackingField
775 | Entry: 7
776 | Data: 43|System.RuntimeType, mscorlib
777 | - Name:
778 | Entry: 1
779 | Data: myro.EGrabbed, Assembly-CSharp
780 | - Name:
781 | Entry: 8
782 | Data:
783 | - Name: k__BackingField
784 | Entry: 9
785 | Data: 14
786 | - Name: k__BackingField
787 | Entry: 7
788 | Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
789 | - Name:
790 | Entry: 6
791 | Data:
792 | - Name:
793 | Entry: 8
794 | Data:
795 | - Name: k__BackingField
796 | Entry: 5
797 | Data: false
798 | - Name: _fieldAttributes
799 | Entry: 7
800 | Data: 44|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
801 | - Name:
802 | Entry: 12
803 | Data: 0
804 | - Name:
805 | Entry: 13
806 | Data:
807 | - Name:
808 | Entry: 8
809 | Data:
810 | - Name:
811 | Entry: 8
812 | Data:
813 | - Name:
814 | Entry: 8
815 | Data:
816 | - Name:
817 | Entry: 7
818 | Data:
819 | - Name: $k
820 | Entry: 1
821 | Data: _isRightHandTriggeredGrab
822 | - Name: $v
823 | Entry: 7
824 | Data: 45|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
825 | - Name: k__BackingField
826 | Entry: 1
827 | Data: _isRightHandTriggeredGrab
828 | - Name: k__BackingField
829 | Entry: 9
830 | Data: 10
831 | - Name: k__BackingField
832 | Entry: 9
833 | Data: 10
834 | - Name: k__BackingField
835 | Entry: 7
836 | Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
837 | - Name:
838 | Entry: 6
839 | Data:
840 | - Name:
841 | Entry: 8
842 | Data:
843 | - Name: k__BackingField
844 | Entry: 5
845 | Data: false
846 | - Name: _fieldAttributes
847 | Entry: 7
848 | Data: 46|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
849 | - Name:
850 | Entry: 12
851 | Data: 0
852 | - Name:
853 | Entry: 13
854 | Data:
855 | - Name:
856 | Entry: 8
857 | Data:
858 | - Name:
859 | Entry: 8
860 | Data:
861 | - Name:
862 | Entry: 8
863 | Data:
864 | - Name:
865 | Entry: 7
866 | Data:
867 | - Name: $k
868 | Entry: 1
869 | Data: _isLeftHandTriggeredGrab
870 | - Name: $v
871 | Entry: 7
872 | Data: 47|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
873 | - Name: k__BackingField
874 | Entry: 1
875 | Data: _isLeftHandTriggeredGrab
876 | - Name: k__BackingField
877 | Entry: 9
878 | Data: 10
879 | - Name: k__BackingField
880 | Entry: 9
881 | Data: 10
882 | - Name: k__BackingField
883 | Entry: 7
884 | Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
885 | - Name:
886 | Entry: 6
887 | Data:
888 | - Name:
889 | Entry: 8
890 | Data:
891 | - Name: k__BackingField
892 | Entry: 5
893 | Data: false
894 | - Name: _fieldAttributes
895 | Entry: 7
896 | Data: 48|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
897 | - Name:
898 | Entry: 12
899 | Data: 0
900 | - Name:
901 | Entry: 13
902 | Data:
903 | - Name:
904 | Entry: 8
905 | Data:
906 | - Name:
907 | Entry: 8
908 | Data:
909 | - Name:
910 | Entry: 8
911 | Data:
912 | - Name:
913 | Entry: 7
914 | Data:
915 | - Name: $k
916 | Entry: 1
917 | Data: _isRightHandTriggeredTrigger
918 | - Name: $v
919 | Entry: 7
920 | Data: 49|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
921 | - Name: k__BackingField
922 | Entry: 1
923 | Data: _isRightHandTriggeredTrigger
924 | - Name: k__BackingField
925 | Entry: 9
926 | Data: 10
927 | - Name: k__BackingField
928 | Entry: 9
929 | Data: 10
930 | - Name: k__BackingField
931 | Entry: 7
932 | Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
933 | - Name:
934 | Entry: 6
935 | Data:
936 | - Name:
937 | Entry: 8
938 | Data:
939 | - Name: k__BackingField
940 | Entry: 5
941 | Data: false
942 | - Name: _fieldAttributes
943 | Entry: 7
944 | Data: 50|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
945 | - Name:
946 | Entry: 12
947 | Data: 0
948 | - Name:
949 | Entry: 13
950 | Data:
951 | - Name:
952 | Entry: 8
953 | Data:
954 | - Name:
955 | Entry: 8
956 | Data:
957 | - Name:
958 | Entry: 8
959 | Data:
960 | - Name:
961 | Entry: 7
962 | Data:
963 | - Name: $k
964 | Entry: 1
965 | Data: _isLeftHandTriggeredTrigger
966 | - Name: $v
967 | Entry: 7
968 | Data: 51|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
969 | - Name: k__BackingField
970 | Entry: 1
971 | Data: _isLeftHandTriggeredTrigger
972 | - Name: k__BackingField
973 | Entry: 9
974 | Data: 10
975 | - Name: k__BackingField
976 | Entry: 9
977 | Data: 10
978 | - Name: k__BackingField
979 | Entry: 7
980 | Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
981 | - Name:
982 | Entry: 6
983 | Data:
984 | - Name:
985 | Entry: 8
986 | Data:
987 | - Name: k__BackingField
988 | Entry: 5
989 | Data: false
990 | - Name: _fieldAttributes
991 | Entry: 7
992 | Data: 52|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
993 | - Name:
994 | Entry: 12
995 | Data: 0
996 | - Name:
997 | Entry: 13
998 | Data:
999 | - Name:
1000 | Entry: 8
1001 | Data:
1002 | - Name:
1003 | Entry: 8
1004 | Data:
1005 | - Name:
1006 | Entry: 8
1007 | Data:
1008 | - Name:
1009 | Entry: 7
1010 | Data:
1011 | - Name: $k
1012 | Entry: 1
1013 | Data: _timeRightHandGesture
1014 | - Name: $v
1015 | Entry: 7
1016 | Data: 53|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
1017 | - Name: k__BackingField
1018 | Entry: 1
1019 | Data: _timeRightHandGesture
1020 | - Name: k__BackingField
1021 | Entry: 9
1022 | Data: 27
1023 | - Name: k__BackingField
1024 | Entry: 9
1025 | Data: 27
1026 | - Name: k__BackingField
1027 | Entry: 7
1028 | Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
1029 | - Name:
1030 | Entry: 6
1031 | Data:
1032 | - Name:
1033 | Entry: 8
1034 | Data:
1035 | - Name: k__BackingField
1036 | Entry: 5
1037 | Data: false
1038 | - Name: _fieldAttributes
1039 | Entry: 7
1040 | Data: 54|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
1041 | - Name:
1042 | Entry: 12
1043 | Data: 0
1044 | - Name:
1045 | Entry: 13
1046 | Data:
1047 | - Name:
1048 | Entry: 8
1049 | Data:
1050 | - Name:
1051 | Entry: 8
1052 | Data:
1053 | - Name:
1054 | Entry: 8
1055 | Data:
1056 | - Name:
1057 | Entry: 7
1058 | Data:
1059 | - Name: $k
1060 | Entry: 1
1061 | Data: _timeLeftHandGesture
1062 | - Name: $v
1063 | Entry: 7
1064 | Data: 55|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
1065 | - Name: k__BackingField
1066 | Entry: 1
1067 | Data: _timeLeftHandGesture
1068 | - Name: k__BackingField
1069 | Entry: 9
1070 | Data: 27
1071 | - Name: k__BackingField
1072 | Entry: 9
1073 | Data: 27
1074 | - Name: k__BackingField
1075 | Entry: 7
1076 | Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
1077 | - Name:
1078 | Entry: 6
1079 | Data:
1080 | - Name:
1081 | Entry: 8
1082 | Data:
1083 | - Name: k__BackingField
1084 | Entry: 5
1085 | Data: false
1086 | - Name: _fieldAttributes
1087 | Entry: 7
1088 | Data: 56|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
1089 | - Name:
1090 | Entry: 12
1091 | Data: 0
1092 | - Name:
1093 | Entry: 13
1094 | Data:
1095 | - Name:
1096 | Entry: 8
1097 | Data:
1098 | - Name:
1099 | Entry: 8
1100 | Data:
1101 | - Name:
1102 | Entry: 8
1103 | Data:
1104 | - Name:
1105 | Entry: 7
1106 | Data:
1107 | - Name: $k
1108 | Entry: 1
1109 | Data: _startDistanceBetweenTwoHands
1110 | - Name: $v
1111 | Entry: 7
1112 | Data: 57|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
1113 | - Name: k__BackingField
1114 | Entry: 1
1115 | Data: _startDistanceBetweenTwoHands
1116 | - Name: k__BackingField
1117 | Entry: 9
1118 | Data: 27
1119 | - Name: k__BackingField
1120 | Entry: 9
1121 | Data: 27
1122 | - Name: k__BackingField
1123 | Entry: 7
1124 | Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
1125 | - Name:
1126 | Entry: 6
1127 | Data:
1128 | - Name:
1129 | Entry: 8
1130 | Data:
1131 | - Name: k__BackingField
1132 | Entry: 5
1133 | Data: false
1134 | - Name: _fieldAttributes
1135 | Entry: 7
1136 | Data: 58|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
1137 | - Name:
1138 | Entry: 12
1139 | Data: 0
1140 | - Name:
1141 | Entry: 13
1142 | Data:
1143 | - Name:
1144 | Entry: 8
1145 | Data:
1146 | - Name:
1147 | Entry: 8
1148 | Data:
1149 | - Name:
1150 | Entry: 8
1151 | Data:
1152 | - Name:
1153 | Entry: 7
1154 | Data:
1155 | - Name: $k
1156 | Entry: 1
1157 | Data: _startScale
1158 | - Name: $v
1159 | Entry: 7
1160 | Data: 59|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
1161 | - Name: k__BackingField
1162 | Entry: 1
1163 | Data: _startScale
1164 | - Name: k__BackingField
1165 | Entry: 9
1166 | Data: 27
1167 | - Name: k__BackingField
1168 | Entry: 9
1169 | Data: 27
1170 | - Name: k__BackingField
1171 | Entry: 7
1172 | Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
1173 | - Name:
1174 | Entry: 6
1175 | Data:
1176 | - Name:
1177 | Entry: 8
1178 | Data:
1179 | - Name: k__BackingField
1180 | Entry: 5
1181 | Data: false
1182 | - Name: _fieldAttributes
1183 | Entry: 7
1184 | Data: 60|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
1185 | - Name:
1186 | Entry: 12
1187 | Data: 0
1188 | - Name:
1189 | Entry: 13
1190 | Data:
1191 | - Name:
1192 | Entry: 8
1193 | Data:
1194 | - Name:
1195 | Entry: 8
1196 | Data:
1197 | - Name:
1198 | Entry: 8
1199 | Data:
1200 | - Name:
1201 | Entry: 7
1202 | Data:
1203 | - Name: $k
1204 | Entry: 1
1205 | Data: _currentScale
1206 | - Name: $v
1207 | Entry: 7
1208 | Data: 61|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
1209 | - Name: k__BackingField
1210 | Entry: 1
1211 | Data: _currentScale
1212 | - Name: k__BackingField
1213 | Entry: 9
1214 | Data: 27
1215 | - Name: k__BackingField
1216 | Entry: 9
1217 | Data: 27
1218 | - Name: k__BackingField
1219 | Entry: 7
1220 | Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
1221 | - Name:
1222 | Entry: 6
1223 | Data:
1224 | - Name:
1225 | Entry: 8
1226 | Data:
1227 | - Name: k__BackingField
1228 | Entry: 5
1229 | Data: false
1230 | - Name: _fieldAttributes
1231 | Entry: 7
1232 | Data: 62|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
1233 | - Name:
1234 | Entry: 12
1235 | Data: 0
1236 | - Name:
1237 | Entry: 13
1238 | Data:
1239 | - Name:
1240 | Entry: 8
1241 | Data:
1242 | - Name:
1243 | Entry: 8
1244 | Data:
1245 | - Name:
1246 | Entry: 8
1247 | Data:
1248 | - Name:
1249 | Entry: 7
1250 | Data:
1251 | - Name: $k
1252 | Entry: 1
1253 | Data: _offsetRotation
1254 | - Name: $v
1255 | Entry: 7
1256 | Data: 63|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
1257 | - Name: k__BackingField
1258 | Entry: 1
1259 | Data: _offsetRotation
1260 | - Name: k__BackingField
1261 | Entry: 7
1262 | Data: 64|System.RuntimeType, mscorlib
1263 | - Name:
1264 | Entry: 1
1265 | Data: UnityEngine.Quaternion, UnityEngine.CoreModule
1266 | - Name:
1267 | Entry: 8
1268 | Data:
1269 | - Name: k__BackingField
1270 | Entry: 9
1271 | Data: 64
1272 | - Name: k__BackingField
1273 | Entry: 7
1274 | Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
1275 | - Name:
1276 | Entry: 6
1277 | Data:
1278 | - Name:
1279 | Entry: 8
1280 | Data:
1281 | - Name: k__BackingField
1282 | Entry: 5
1283 | Data: false
1284 | - Name: _fieldAttributes
1285 | Entry: 7
1286 | Data: 65|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
1287 | - Name:
1288 | Entry: 12
1289 | Data: 0
1290 | - Name:
1291 | Entry: 13
1292 | Data:
1293 | - Name:
1294 | Entry: 8
1295 | Data:
1296 | - Name:
1297 | Entry: 8
1298 | Data:
1299 | - Name:
1300 | Entry: 8
1301 | Data:
1302 | - Name:
1303 | Entry: 7
1304 | Data:
1305 | - Name: $k
1306 | Entry: 1
1307 | Data: _offsetPosition
1308 | - Name: $v
1309 | Entry: 7
1310 | Data: 66|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
1311 | - Name: k__BackingField
1312 | Entry: 1
1313 | Data: _offsetPosition
1314 | - Name: k__BackingField
1315 | Entry: 7
1316 | Data: 67|System.RuntimeType, mscorlib
1317 | - Name:
1318 | Entry: 1
1319 | Data: UnityEngine.Vector3, UnityEngine.CoreModule
1320 | - Name:
1321 | Entry: 8
1322 | Data:
1323 | - Name: k__BackingField
1324 | Entry: 9
1325 | Data: 67
1326 | - Name: k__BackingField
1327 | Entry: 7
1328 | Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
1329 | - Name:
1330 | Entry: 6
1331 | Data:
1332 | - Name:
1333 | Entry: 8
1334 | Data:
1335 | - Name: k__BackingField
1336 | Entry: 5
1337 | Data: false
1338 | - Name: _fieldAttributes
1339 | Entry: 7
1340 | Data: 68|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
1341 | - Name:
1342 | Entry: 12
1343 | Data: 0
1344 | - Name:
1345 | Entry: 13
1346 | Data:
1347 | - Name:
1348 | Entry: 8
1349 | Data:
1350 | - Name:
1351 | Entry: 8
1352 | Data:
1353 | - Name:
1354 | Entry: 8
1355 | Data:
1356 | - Name:
1357 | Entry: 7
1358 | Data:
1359 | - Name: $k
1360 | Entry: 1
1361 | Data: _panelAttachedToHand
1362 | - Name: $v
1363 | Entry: 7
1364 | Data: 69|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
1365 | - Name: k__BackingField
1366 | Entry: 1
1367 | Data: _panelAttachedToHand
1368 | - Name: k__BackingField
1369 | Entry: 7
1370 | Data: 70|System.RuntimeType, mscorlib
1371 | - Name:
1372 | Entry: 1
1373 | Data: VRC.SDKBase.VRCPlayerApi+TrackingDataType, VRCSDKBase
1374 | - Name:
1375 | Entry: 8
1376 | Data:
1377 | - Name: k__BackingField
1378 | Entry: 9
1379 | Data: 70
1380 | - Name: k__BackingField
1381 | Entry: 7
1382 | Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
1383 | - Name:
1384 | Entry: 6
1385 | Data:
1386 | - Name:
1387 | Entry: 8
1388 | Data:
1389 | - Name: k__BackingField
1390 | Entry: 5
1391 | Data: false
1392 | - Name: _fieldAttributes
1393 | Entry: 7
1394 | Data: 71|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
1395 | - Name:
1396 | Entry: 12
1397 | Data: 0
1398 | - Name:
1399 | Entry: 13
1400 | Data:
1401 | - Name:
1402 | Entry: 8
1403 | Data:
1404 | - Name:
1405 | Entry: 8
1406 | Data:
1407 | - Name:
1408 | Entry: 8
1409 | Data:
1410 | - Name:
1411 | Entry: 7
1412 | Data:
1413 | - Name: $k
1414 | Entry: 1
1415 | Data: _eventAlreadySend
1416 | - Name: $v
1417 | Entry: 7
1418 | Data: 72|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
1419 | - Name: k__BackingField
1420 | Entry: 1
1421 | Data: _eventAlreadySend
1422 | - Name: k__BackingField
1423 | Entry: 9
1424 | Data: 10
1425 | - Name: k__BackingField
1426 | Entry: 9
1427 | Data: 10
1428 | - Name: k__BackingField
1429 | Entry: 7
1430 | Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
1431 | - Name:
1432 | Entry: 6
1433 | Data:
1434 | - Name:
1435 | Entry: 8
1436 | Data:
1437 | - Name: k__BackingField
1438 | Entry: 5
1439 | Data: false
1440 | - Name: _fieldAttributes
1441 | Entry: 7
1442 | Data: 73|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
1443 | - Name:
1444 | Entry: 12
1445 | Data: 0
1446 | - Name:
1447 | Entry: 13
1448 | Data:
1449 | - Name:
1450 | Entry: 8
1451 | Data:
1452 | - Name:
1453 | Entry: 8
1454 | Data:
1455 | - Name:
1456 | Entry: 8
1457 | Data:
1458 | - Name:
1459 | Entry: 7
1460 | Data:
1461 | - Name: $k
1462 | Entry: 1
1463 | Data: _forceStateOfPanel
1464 | - Name: $v
1465 | Entry: 7
1466 | Data: 74|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
1467 | - Name: k__BackingField
1468 | Entry: 1
1469 | Data: _forceStateOfPanel
1470 | - Name: k__BackingField
1471 | Entry: 7
1472 | Data: 75|System.RuntimeType, mscorlib
1473 | - Name:
1474 | Entry: 1
1475 | Data: myro.EForceState, Assembly-CSharp
1476 | - Name:
1477 | Entry: 8
1478 | Data:
1479 | - Name: k__BackingField
1480 | Entry: 9
1481 | Data: 14
1482 | - Name: k__BackingField
1483 | Entry: 7
1484 | Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
1485 | - Name:
1486 | Entry: 6
1487 | Data:
1488 | - Name:
1489 | Entry: 8
1490 | Data:
1491 | - Name: k__BackingField
1492 | Entry: 5
1493 | Data: false
1494 | - Name: _fieldAttributes
1495 | Entry: 7
1496 | Data: 76|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
1497 | - Name:
1498 | Entry: 12
1499 | Data: 0
1500 | - Name:
1501 | Entry: 13
1502 | Data:
1503 | - Name:
1504 | Entry: 8
1505 | Data:
1506 | - Name:
1507 | Entry: 8
1508 | Data:
1509 | - Name:
1510 | Entry: 8
1511 | Data:
1512 | - Name:
1513 | Entry: 7
1514 | Data:
1515 | - Name: $k
1516 | Entry: 1
1517 | Data: _position
1518 | - Name: $v
1519 | Entry: 7
1520 | Data: 77|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
1521 | - Name: k__BackingField
1522 | Entry: 1
1523 | Data: _position
1524 | - Name: k__BackingField
1525 | Entry: 9
1526 | Data: 67
1527 | - Name: k__BackingField
1528 | Entry: 9
1529 | Data: 67
1530 | - Name: k__BackingField
1531 | Entry: 7
1532 | Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
1533 | - Name:
1534 | Entry: 6
1535 | Data:
1536 | - Name:
1537 | Entry: 8
1538 | Data:
1539 | - Name: k__BackingField
1540 | Entry: 5
1541 | Data: false
1542 | - Name: _fieldAttributes
1543 | Entry: 7
1544 | Data: 78|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
1545 | - Name:
1546 | Entry: 12
1547 | Data: 0
1548 | - Name:
1549 | Entry: 13
1550 | Data:
1551 | - Name:
1552 | Entry: 8
1553 | Data:
1554 | - Name:
1555 | Entry: 8
1556 | Data:
1557 | - Name:
1558 | Entry: 8
1559 | Data:
1560 | - Name:
1561 | Entry: 7
1562 | Data:
1563 | - Name: $k
1564 | Entry: 1
1565 | Data: _rotation
1566 | - Name: $v
1567 | Entry: 7
1568 | Data: 79|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
1569 | - Name: k__BackingField
1570 | Entry: 1
1571 | Data: _rotation
1572 | - Name: k__BackingField
1573 | Entry: 9
1574 | Data: 64
1575 | - Name: k__BackingField
1576 | Entry: 9
1577 | Data: 64
1578 | - Name: k__BackingField
1579 | Entry: 7
1580 | Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
1581 | - Name:
1582 | Entry: 6
1583 | Data:
1584 | - Name:
1585 | Entry: 8
1586 | Data:
1587 | - Name: k__BackingField
1588 | Entry: 5
1589 | Data: false
1590 | - Name: _fieldAttributes
1591 | Entry: 7
1592 | Data: 80|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
1593 | - Name:
1594 | Entry: 12
1595 | Data: 0
1596 | - Name:
1597 | Entry: 13
1598 | Data:
1599 | - Name:
1600 | Entry: 8
1601 | Data:
1602 | - Name:
1603 | Entry: 8
1604 | Data:
1605 | - Name:
1606 | Entry: 8
1607 | Data:
1608 | - Name:
1609 | Entry: 7
1610 | Data:
1611 | - Name: $k
1612 | Entry: 1
1613 | Data: _scale
1614 | - Name: $v
1615 | Entry: 7
1616 | Data: 81|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
1617 | - Name: k__BackingField
1618 | Entry: 1
1619 | Data: _scale
1620 | - Name: k__BackingField
1621 | Entry: 9
1622 | Data: 67
1623 | - Name: k__BackingField
1624 | Entry: 9
1625 | Data: 67
1626 | - Name: k__BackingField
1627 | Entry: 7
1628 | Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
1629 | - Name:
1630 | Entry: 6
1631 | Data:
1632 | - Name:
1633 | Entry: 8
1634 | Data:
1635 | - Name: k__BackingField
1636 | Entry: 5
1637 | Data: false
1638 | - Name: _fieldAttributes
1639 | Entry: 7
1640 | Data: 82|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
1641 | - Name:
1642 | Entry: 12
1643 | Data: 0
1644 | - Name:
1645 | Entry: 13
1646 | Data:
1647 | - Name:
1648 | Entry: 8
1649 | Data:
1650 | - Name:
1651 | Entry: 8
1652 | Data:
1653 | - Name:
1654 | Entry: 8
1655 | Data:
1656 | - Name:
1657 | Entry: 7
1658 | Data:
1659 | - Name: $k
1660 | Entry: 1
1661 | Data: _isPanelOpen
1662 | - Name: $v
1663 | Entry: 7
1664 | Data: 83|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
1665 | - Name: k__BackingField
1666 | Entry: 1
1667 | Data: _isPanelOpen
1668 | - Name: k__BackingField
1669 | Entry: 9
1670 | Data: 10
1671 | - Name: k__BackingField
1672 | Entry: 9
1673 | Data: 10
1674 | - Name: k__BackingField
1675 | Entry: 7
1676 | Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
1677 | - Name:
1678 | Entry: 6
1679 | Data:
1680 | - Name:
1681 | Entry: 8
1682 | Data:
1683 | - Name: k__BackingField
1684 | Entry: 5
1685 | Data: false
1686 | - Name: _fieldAttributes
1687 | Entry: 7
1688 | Data: 84|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
1689 | - Name:
1690 | Entry: 12
1691 | Data: 0
1692 | - Name:
1693 | Entry: 13
1694 | Data:
1695 | - Name:
1696 | Entry: 8
1697 | Data:
1698 | - Name:
1699 | Entry: 8
1700 | Data:
1701 | - Name:
1702 | Entry: 8
1703 | Data:
1704 | - Name:
1705 | Entry: 7
1706 | Data:
1707 | - Name: $k
1708 | Entry: 1
1709 | Data: _init
1710 | - Name: $v
1711 | Entry: 7
1712 | Data: 85|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
1713 | - Name: k__BackingField
1714 | Entry: 1
1715 | Data: _init
1716 | - Name: k__BackingField
1717 | Entry: 9
1718 | Data: 10
1719 | - Name: k__BackingField
1720 | Entry: 9
1721 | Data: 10
1722 | - Name: k__BackingField
1723 | Entry: 7
1724 | Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
1725 | - Name:
1726 | Entry: 6
1727 | Data:
1728 | - Name:
1729 | Entry: 8
1730 | Data:
1731 | - Name: k__BackingField
1732 | Entry: 5
1733 | Data: false
1734 | - Name: _fieldAttributes
1735 | Entry: 7
1736 | Data: 86|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
1737 | - Name:
1738 | Entry: 12
1739 | Data: 0
1740 | - Name:
1741 | Entry: 13
1742 | Data:
1743 | - Name:
1744 | Entry: 8
1745 | Data:
1746 | - Name:
1747 | Entry: 8
1748 | Data:
1749 | - Name:
1750 | Entry: 8
1751 | Data:
1752 | - Name:
1753 | Entry: 7
1754 | Data:
1755 | - Name: $k
1756 | Entry: 1
1757 | Data: _isUsingViveControllers
1758 | - Name: $v
1759 | Entry: 7
1760 | Data: 87|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
1761 | - Name: k__BackingField
1762 | Entry: 1
1763 | Data: _isUsingViveControllers
1764 | - Name: k__BackingField
1765 | Entry: 9
1766 | Data: 10
1767 | - Name: k__BackingField
1768 | Entry: 9
1769 | Data: 10
1770 | - Name: k__BackingField
1771 | Entry: 7
1772 | Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
1773 | - Name:
1774 | Entry: 6
1775 | Data:
1776 | - Name:
1777 | Entry: 8
1778 | Data:
1779 | - Name: k__BackingField
1780 | Entry: 5
1781 | Data: false
1782 | - Name: _fieldAttributes
1783 | Entry: 7
1784 | Data: 88|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
1785 | - Name:
1786 | Entry: 12
1787 | Data: 0
1788 | - Name:
1789 | Entry: 13
1790 | Data:
1791 | - Name:
1792 | Entry: 8
1793 | Data:
1794 | - Name:
1795 | Entry: 8
1796 | Data:
1797 | - Name:
1798 | Entry: 8
1799 | Data:
1800 | - Name:
1801 | Entry: 13
1802 | Data:
1803 | - Name:
1804 | Entry: 8
1805 | Data:
1806 |
--------------------------------------------------------------------------------
/Scripts/PortablePanel.asset.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 16f82f9ec93c4be49951c5183c885032
3 | NativeFormatImporter:
4 | externalObjects: {}
5 | mainObjectFileID: 11400000
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Scripts/PortablePanel.cs:
--------------------------------------------------------------------------------
1 | using UdonSharp;
2 | using UnityEngine;
3 | using VRC.SDKBase;
4 | using VRC.Udon;
5 | using VRC.Udon.Common;
6 |
7 | namespace myro
8 | {
9 | public enum EGrabbed
10 | {
11 | NONE,
12 | BOTH_HANDS,
13 | ONE_HANDED
14 | }
15 |
16 | public enum EGestureMode
17 | {
18 | Grab,
19 | Trigger,
20 | Both
21 | }
22 |
23 | public enum EClosingBehaviour
24 | {
25 | Closing,
26 | Respawning
27 | }
28 |
29 | public enum EForceState
30 | {
31 | NONE,
32 | FORCE_CLOSE,
33 | FORCE_OPEN
34 | }
35 |
36 |
37 |
38 | [UdonBehaviourSyncMode(BehaviourSyncMode.None)]
39 | [DefaultExecutionOrder(500)]
40 | public class PortablePanel : UdonSharpBehaviour
41 | {
42 | [Header("See README file for additional help and infos")]
43 | public GameObject Panel;
44 | private Transform _panelTransf;
45 |
46 | //public bool ClosedByDefault = true;
47 | public bool TabOnHold = true;
48 | public EGestureMode GestureMode;
49 | public EClosingBehaviour CloseBehaviour;
50 | private PortablePanelPickupModule _pickupModule;
51 | [SerializeField] private bool _isPickupable = true;
52 |
53 | public float MaxScale = 9999.0f;
54 | public float MinScale = 0.1f;
55 | public float MaxDistanceBeforeClosingThePanel = 2f;
56 | public float PanelScaleOnDesktop = 0.5f;
57 |
58 |
59 | [Header("Advanced settings, change them only if you really need to")]
60 | [SerializeField]
61 | private bool _delayInitialisation = false;
62 |
63 | private VRCPlayerApi _localPlayer;
64 | private EGrabbed _grabbed;
65 | private bool _isRightHandTriggeredGrab , _isLeftHandTriggeredGrab;
66 | private bool _isRightHandTriggeredTrigger , _isLeftHandTriggeredTrigger;
67 | private float _timeRightHandGesture , _timeLeftHandGesture;
68 |
69 |
70 | //The variables bellow are used to calculate the position and the scale of the panel once it's hold with both hand
71 | private float _startDistanceBetweenTwoHands;
72 | private float _startScale;
73 | private float _currentScale;
74 |
75 | //The variables bellow are used to calculate the position of the panel once it's hold with one hand
76 | private Quaternion _offsetRotation;
77 | private Vector3 _offsetPosition;
78 | private VRCPlayerApi.TrackingDataType _panelAttachedToHand;
79 |
80 | //This bool is only used to avoid event spams
81 | private bool _eventAlreadySend = false;
82 |
83 | //Boleans used to open or close the panel without player inputs
84 | private EForceState _forceStateOfPanel;
85 |
86 | //Her we are saving the transforms of the panel, so we can respawn it with the original scale.
87 | private Vector3 _position;
88 | private Quaternion _rotation;
89 | private Vector3 _scale;
90 |
91 | private bool _isPanelOpen;
92 | private bool _init;
93 | private bool _isUsingViveControllers;
94 |
95 | private const float TIME_INTERVAL_HAND_GESTURE = 0.15f;
96 | private const float MAX_DISTANCE_HAND_GESTURE = 0.3f;
97 | private const float PLACEMENT_DISTANCE_FROM_HEAD = 0.3f;
98 | private const float CLOSING_HAND_DISTANCE = 0.15f;
99 |
100 | void OnEnable()
101 | {
102 | _localPlayer = Networking.LocalPlayer;
103 | _isRightHandTriggeredGrab = false;
104 | _isLeftHandTriggeredGrab = false;
105 | _isRightHandTriggeredTrigger = false;
106 | _isLeftHandTriggeredTrigger = false;
107 | _panelTransf = Panel.transform;
108 | }
109 |
110 | private void Start()
111 | {
112 | _isUsingViveControllers = IsViveController();
113 |
114 | SetRespawnPoint(_panelTransf.position,
115 | _panelTransf.rotation,
116 | _panelTransf.localScale);
117 |
118 | if (!_delayInitialisation)
119 | Initialisation();
120 | }
121 |
122 | public override void OnPlayerJoined(VRCPlayerApi player)
123 | {
124 | if (_delayInitialisation && player.isLocal)
125 | Initialisation();
126 | }
127 |
128 | public void Initialisation()
129 | {
130 | CloseOrRespawnPanel();
131 | OnStart();
132 | _init = true;
133 | }
134 |
135 | private void SetPanelScale(float newScale)
136 | {
137 | float oldScale = _panelTransf.localScale.x;
138 | if (oldScale != newScale)
139 | {
140 | _panelTransf.localScale = new Vector3(newScale, newScale, newScale);
141 | OnPanelScaled(oldScale, newScale);
142 | }
143 | }
144 |
145 | public void SetPickupModule(PortablePanelPickupModule pickupModule)
146 | {
147 | _pickupModule = pickupModule;
148 | }
149 |
150 | #region Public methods
151 |
152 | ///
153 | /// Sets the "pickupable" state of your panel. This will also work for VRCPickups
154 | ///
155 | /// The new pickupable state
156 | public void SetPickupable(bool newPickupableState)
157 | {
158 | _isPickupable = newPickupableState;
159 | if (_pickupModule != null)
160 | {
161 | if (newPickupableState)
162 | {
163 | _pickupModule.EnablePickup();
164 | }
165 | else
166 | {
167 | _pickupModule.DisablePickup();
168 | }
169 | }
170 | }
171 |
172 | public bool IsPanelOpen()
173 | {
174 | return _isPanelOpen;
175 | }
176 |
177 |
178 |
179 | public void ForceClosePanel()
180 | {
181 | if (IsPanelOpen())
182 | {
183 | CloseOrRespawnPanel();
184 |
185 | if (!_localPlayer.IsUserInVR())
186 | {
187 | //Desktop : this is mostly to make sure that the panel doesn't get reopened if the Desktop player keeps the Tab key pressed
188 | //VR : I guess no need to do anything?
189 | _forceStateOfPanel = EForceState.FORCE_CLOSE;
190 | }
191 | }
192 | }
193 |
194 | public void ForceOpenPanel(float unscaledDistance)
195 | {
196 | if (!IsPanelOpen())
197 | {
198 | OpenPanel();
199 |
200 | PlacePanelInFrontOfPlayer(unscaledDistance);
201 |
202 | if (!_localPlayer.IsUserInVR())
203 | {
204 | _forceStateOfPanel = EForceState.FORCE_OPEN;
205 | }
206 | }
207 | }
208 |
209 | public void ForceOpenPanel()
210 | {
211 | ForceOpenPanel(PLACEMENT_DISTANCE_FROM_HEAD);
212 | }
213 |
214 | public bool IsPanelHoldByOneHand()
215 | {
216 | return _grabbed == EGrabbed.ONE_HANDED;
217 | }
218 |
219 | public void SetRespawnPoint(Vector3 position, Quaternion rotation, Vector3 scale)
220 | {
221 | _position = position;
222 | _rotation = rotation;
223 | _scale = scale;
224 | }
225 |
226 | public void RespawnPanel()
227 | {
228 | //we currently just need to close it
229 | CloseOrRespawnPanel();
230 | }
231 |
232 | #endregion
233 |
234 | #region Overridable events
235 |
236 | ///
237 | /// Gets called when the panel opens
238 | ///
239 | /// True if the panel needs to be opened.
240 | /// If you want to open the panel manually, for instance with an animator, then you can `return false;`
241 | ///
242 | public virtual bool OnPanelOpening()
243 | {
244 | return true;
245 | }
246 |
247 | ///
248 | /// Gets called when "Start" is called
249 | ///
250 | public virtual void OnStart()
251 | {
252 |
253 | }
254 |
255 | ///
256 | /// Gets called when the panel is about to get closed, so it is called when the panel is not closed yet
257 | ///
258 | /// True if the panel needs to be closed.
259 | /// If you want to close the panel manually, for instance with an animator, then you can `return false;` instead
260 | ///
261 | public virtual bool OnPanelClosing()
262 | {
263 | return true;
264 | }
265 |
266 | ///
267 | /// Gets called when the panel is getting grabbed, either by one hand or with both hands.
268 | /// If the parameter "GrabbablePanel" is set to false, the the event will ony be called while scaling the panel 8so when it's grabbed with both hands.
269 | ///
270 | public virtual void OnPanelGrab()
271 | {
272 | }
273 |
274 | ///
275 | /// Gets called when the panel is dropped
276 | ///
277 | public virtual void OnPanelDrop()
278 | {
279 | }
280 |
281 | ///
282 | /// Gets called when the panel gets scaled
283 | ///
284 | /// The scale of the panel before it got scaled
285 | /// The new scale of the panel
286 | /// You could for instance use that method to change what's written on the panel based on the size, or
287 | /// change the color based on the speed it gets scaled.
288 | public virtual void OnPanelScaled(float oldScale, float newScale)
289 | {
290 | }
291 |
292 | #endregion
293 |
294 | #region Main code
295 |
296 | private void CloseOrRespawnPanel()
297 | {
298 | _grabbed = EGrabbed.NONE;
299 | _isRightHandTriggeredGrab = false;
300 | _isLeftHandTriggeredGrab = false;
301 | _isRightHandTriggeredTrigger = false;
302 | _isLeftHandTriggeredTrigger = false;
303 |
304 | if (OnPanelClosing())
305 | {
306 | if (CloseBehaviour == EClosingBehaviour.Closing)
307 | {
308 | Panel.SetActive(false);
309 | }
310 | else
311 | {
312 | RespawnToOriginalLocation();
313 | }
314 | }
315 | _isPanelOpen = false;
316 | }
317 |
318 | private void OpenPanel()
319 | {
320 | if (OnPanelOpening())
321 | {
322 | Panel.SetActive(true);
323 | }
324 | _isPanelOpen = true;
325 | }
326 |
327 | public void RespawnToOriginalLocation()
328 | {
329 | _panelTransf.position = _position;
330 | _panelTransf.rotation = _rotation;
331 | _panelTransf.localScale = _scale;
332 | }
333 |
334 | ///
335 | /// Scales the value based on the size of the avatar.
336 | /// If The avatar is 1m80 tall, 1 meter = 1 meter
337 | /// If the avatar is 1m60 tall, 1 meter will be turned into 1.60*1/1.80 = 0.88 meter
338 | ///
339 | /// The value the needs to be scaled based on the avatar size
340 | ///
341 | protected float ScaleValueToAvatar(float value)
342 | {
343 | #if UNITY_EDITOR
344 | return value; // A Client Sim bug makes the script crash if "GetAvatarEyeHeightAsMeters" gets called, temporary fix until GetAvatarEyeHeightAsMeters is fully exposed in ClientSim...
345 | #else
346 | return _localPlayer.GetAvatarEyeHeightAsMeters() * value / 1.80f;
347 | #endif
348 | }
349 |
350 | private bool IsRightHandTriggered()
351 | {
352 | if (GestureMode != EGestureMode.Both)
353 | return _isRightHandTriggeredGrab || _isRightHandTriggeredTrigger;
354 | return _isRightHandTriggeredGrab && _isRightHandTriggeredTrigger;
355 | }
356 |
357 | private bool IsLeftHandTriggered()
358 | {
359 | if (GestureMode != EGestureMode.Both)
360 | return _isLeftHandTriggeredGrab || _isLeftHandTriggeredTrigger;
361 | return _isLeftHandTriggeredGrab && _isLeftHandTriggeredTrigger;
362 | }
363 |
364 | private void HandleInput(bool value, UdonInputEventArgs args)
365 | {
366 | float distanceBetweenBothHands = Vector3.Distance(
367 | _localPlayer.GetTrackingData(VRCPlayerApi.TrackingDataType.LeftHand).position,
368 | _localPlayer.GetTrackingData(VRCPlayerApi.TrackingDataType.RightHand).position
369 | );
370 |
371 | if (IsRightHandTriggered() && IsLeftHandTriggered()
372 | && Mathf.Abs(_timeRightHandGesture - _timeLeftHandGesture) < TIME_INTERVAL_HAND_GESTURE
373 | && (distanceBetweenBothHands < ScaleValueToAvatar(MAX_DISTANCE_HAND_GESTURE) || IsPanelOpen()))
374 | {
375 | //If the grab gesture is used on both hands, we open the panel
376 | _startDistanceBetweenTwoHands = distanceBetweenBothHands;
377 |
378 | OnPanelGrab();
379 |
380 | if (!IsPanelOpen() && _forceStateOfPanel != EForceState.FORCE_CLOSE)
381 | {
382 | OpenPanel();
383 |
384 | _startScale = _startDistanceBetweenTwoHands;
385 | }
386 | else
387 | {
388 | _startScale = _panelTransf.localScale.x;
389 | }
390 | _grabbed = EGrabbed.BOTH_HANDS;
391 | }
392 | else if (!IsRightHandTriggered() && !IsLeftHandTriggered())
393 | {
394 | _forceStateOfPanel = EForceState.NONE;
395 |
396 | OnPanelDrop();
397 |
398 | if (IsPanelOpen() && distanceBetweenBothHands < ScaleValueToAvatar(CLOSING_HAND_DISTANCE))
399 | {
400 | CloseOrRespawnPanel();
401 | }
402 | _grabbed = EGrabbed.NONE;
403 | }
404 | else if (IsRightHandTriggered() || IsLeftHandTriggered())
405 | {
406 | //Grab gesture with one hand :
407 | //- If the player previously grabbed the panel with both hands, we can add a little delay before "ungrabbing" the panel to avoid accidental
408 | // displacements of the panel
409 | //- If not, then the player didn't used the grab gesture, in that case we will attach the panel on one hand
410 | if (_grabbed == EGrabbed.BOTH_HANDS && !_eventAlreadySend)
411 | {
412 | _eventAlreadySend = true;
413 | SendCustomEventDelayedSeconds(nameof(EventEnableOneHandMovement), 0.1f);
414 | return;
415 | }
416 | else if (_pickupModule == null && IsPanelOpen())
417 | {
418 | AttachToHand();
419 | }
420 | }
421 | }
422 |
423 | private void HandleInputGrab(bool value, UdonInputEventArgs args)
424 | {
425 | if (!_localPlayer.IsUserInVR() || GestureMode == EGestureMode.Trigger)
426 | {
427 | return;
428 | }
429 |
430 | if (args.handType == HandType.RIGHT)
431 | {
432 | _isRightHandTriggeredGrab = value;
433 | _timeRightHandGesture = Time.time;
434 | }
435 | else if (args.handType == HandType.LEFT)
436 | {
437 | _isLeftHandTriggeredGrab = value;
438 | _timeLeftHandGesture = Time.time;
439 | }
440 |
441 | HandleInput(value, args);
442 | }
443 |
444 | private bool IsViveController()
445 | {
446 | string[] joystickNames = Input.GetJoystickNames();
447 | foreach(var joystickName in joystickNames)
448 | {
449 | if (joystickName.ToLower().Contains("vive"))
450 | return true;
451 | }
452 | return false;
453 | }
454 |
455 | public override void InputDrop(bool value, UdonInputEventArgs args)
456 | {
457 | if (!_init || !_isUsingViveControllers) return;
458 |
459 | HandleInputGrab(value, args);
460 | }
461 |
462 | public override void InputGrab(bool value, UdonInputEventArgs args)
463 | {
464 | if (!_init || _isUsingViveControllers) return;
465 |
466 | HandleInputGrab(value, args);
467 | }
468 |
469 | public override void InputUse(bool value, UdonInputEventArgs args)
470 | {
471 | if (!_init) return;
472 |
473 | if (!_localPlayer.IsUserInVR() || GestureMode == EGestureMode.Grab)
474 | {
475 | return;
476 | }
477 |
478 | if (args.handType == HandType.RIGHT)
479 | {
480 | _isRightHandTriggeredTrigger = value;
481 | _timeRightHandGesture = Time.time;
482 | }
483 | else if (args.handType == HandType.LEFT)
484 | {
485 | _isLeftHandTriggeredTrigger = value;
486 | _timeLeftHandGesture = Time.time;
487 | }
488 |
489 | HandleInput(value, args);
490 | }
491 |
492 | public void EventEnableOneHandMovement()
493 | {
494 | if (_grabbed == EGrabbed.BOTH_HANDS)
495 | {
496 | AttachToHand();
497 | }
498 | _eventAlreadySend = false;
499 | }
500 |
501 | private bool PanelTooFarAway()
502 | {
503 | return Vector3.Distance(_localPlayer.GetTrackingData(VRCPlayerApi.TrackingDataType.Head).position, _panelTransf.position)
504 | > ScaleValueToAvatar(MaxDistanceBeforeClosingThePanel);
505 | }
506 |
507 | private void AttachToHand()
508 | {
509 | if (_pickupModule != null)
510 | {
511 | return;
512 | }
513 | else
514 | {
515 | _isPanelOpen = true;
516 | _grabbed = EGrabbed.ONE_HANDED;
517 |
518 | if (_isLeftHandTriggeredGrab)
519 | _panelAttachedToHand = VRCPlayerApi.TrackingDataType.LeftHand;
520 | else
521 | _panelAttachedToHand = VRCPlayerApi.TrackingDataType.RightHand;
522 |
523 | VRCPlayerApi.TrackingData hand = _localPlayer.GetTrackingData(_panelAttachedToHand);
524 | _offsetRotation = Quaternion.Inverse(hand.rotation) * _panelTransf.rotation;
525 | _offsetPosition = Quaternion.Inverse(hand.rotation) * (_panelTransf.position - hand.position);
526 |
527 | OnPanelGrab();
528 | }
529 | }
530 |
531 | public void PanelPickedUp()
532 | {
533 | _isPanelOpen = true;
534 | _grabbed = EGrabbed.ONE_HANDED;
535 | _startScale = _panelTransf.localScale.x;
536 | _currentScale = _startScale;
537 | OnPanelGrab();
538 | }
539 |
540 | public void PanelDropped()
541 | {
542 | _grabbed = EGrabbed.NONE;
543 | OnPanelDrop();
544 | }
545 |
546 | public override void PostLateUpdate()
547 | {
548 | if (!_init) return;
549 |
550 | if (!_localPlayer.IsUserInVR())
551 | {
552 | if (TabOnHold)
553 | {
554 | bool tabPressed = Input.GetKey(KeyCode.Tab);
555 |
556 | if ((tabPressed && _forceStateOfPanel != EForceState.FORCE_CLOSE)
557 | || _forceStateOfPanel == EForceState.FORCE_OPEN)
558 | {
559 | if (!IsPanelOpen())
560 | {
561 | OpenPanel();
562 | }
563 | PlacePanelInFrontOfPlayer();
564 |
565 | if (tabPressed)
566 | {
567 | _forceStateOfPanel = EForceState.NONE;
568 | }
569 | }
570 | else if (!tabPressed || _forceStateOfPanel == EForceState.FORCE_CLOSE)
571 | {
572 | if (IsPanelOpen())
573 | {
574 | CloseOrRespawnPanel();
575 | }
576 | if (!tabPressed)
577 | {
578 | _forceStateOfPanel = EForceState.NONE;
579 | }
580 | }
581 | }
582 | else
583 | {
584 | bool tabPressedDown = Input.GetKeyDown(KeyCode.Tab);
585 |
586 | if (!IsPanelOpen() && (tabPressedDown || _forceStateOfPanel == EForceState.FORCE_OPEN))
587 | {
588 | OpenPanel();
589 | PlacePanelInFrontOfPlayer();
590 |
591 | _forceStateOfPanel = EForceState.NONE;
592 | }
593 | else if (IsPanelOpen() && (tabPressedDown || _forceStateOfPanel == EForceState.FORCE_CLOSE || PanelTooFarAway()))
594 | {
595 | CloseOrRespawnPanel();
596 | _forceStateOfPanel = EForceState.NONE;
597 | }
598 | }
599 | }
600 | else
601 | {
602 | if (_grabbed == EGrabbed.NONE)
603 | {
604 | if (IsPanelOpen() && PanelTooFarAway())
605 | {
606 | CloseOrRespawnPanel();
607 | }
608 | return;
609 | }
610 | else if (_grabbed == EGrabbed.ONE_HANDED)
611 | {
612 | if (_isPickupable && !_pickupModule)
613 | {
614 | VRCPlayerApi.TrackingData hand = _localPlayer.GetTrackingData(_panelAttachedToHand);
615 |
616 | _panelTransf.position = (hand.position + (hand.rotation * _offsetPosition));
617 | _panelTransf.rotation = (hand.rotation * _offsetRotation);
618 | }
619 | }
620 | else
621 | {
622 | Vector3 left = _localPlayer.GetTrackingData(VRCPlayerApi.TrackingDataType.LeftHand).position;
623 | Vector3 right = _localPlayer.GetTrackingData(VRCPlayerApi.TrackingDataType.RightHand).position;
624 | Vector3 headPos = _localPlayer.GetTrackingData(VRCPlayerApi.TrackingDataType.Head).position;
625 |
626 | _currentScale = Mathf.Clamp(_startScale * Vector3.Distance(left, right) / _startDistanceBetweenTwoHands, ScaleValueToAvatar(MinScale), ScaleValueToAvatar(MaxScale));
627 |
628 | _panelTransf.position = ((left + right) / 2.0f);
629 | SetPanelScale(_currentScale);
630 | _panelTransf.LookAt(headPos);
631 | _panelTransf.forward = -_panelTransf.forward;
632 | }
633 | }
634 | }
635 |
636 | private void PlacePanelInFrontOfPlayer(float unscaledDistance = PLACEMENT_DISTANCE_FROM_HEAD)
637 | {
638 | Quaternion headRot = _localPlayer.GetTrackingData(VRCPlayerApi.TrackingDataType.Head).rotation;
639 | Vector3 headPos = _localPlayer.GetTrackingData(VRCPlayerApi.TrackingDataType.Head).position;
640 |
641 | float distance = ScaleValueToAvatar(unscaledDistance);
642 | float scale = ScaleValueToAvatar(PanelScaleOnDesktop) * unscaledDistance / PLACEMENT_DISTANCE_FROM_HEAD;
643 | if (distance < 0.08f)
644 | {
645 | //If the avatar is really small, we need to place the menu a bit further away so it doesn't get clipped by the camera
646 | distance = 0.08f;
647 | scale = distance * PanelScaleOnDesktop / 0.3f;
648 | }
649 | if (scale < MinScale)
650 | {
651 | //Now, if the scale is smaller than MinScale, we need to readjust the scale and the distance.
652 | distance = MinScale * distance / scale;
653 | scale = MinScale;
654 | }
655 |
656 | _panelTransf.position = (headPos + headRot * Vector3.forward * distance);
657 | SetPanelScale(scale);
658 | _panelTransf.LookAt(headPos);
659 | _panelTransf.forward = -_panelTransf.forward;
660 | }
661 |
662 | #endregion
663 | }
664 | }
665 |
--------------------------------------------------------------------------------
/Scripts/PortablePanel.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 6c16e461e59a5a340a22f538d64095e8
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Scripts/PortablePanelPickupModule.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!114 &11400000
4 | MonoBehaviour:
5 | m_ObjectHideFlags: 0
6 | m_CorrespondingSourceObject: {fileID: 0}
7 | m_PrefabInstance: {fileID: 0}
8 | m_PrefabAsset: {fileID: 0}
9 | m_GameObject: {fileID: 0}
10 | m_Enabled: 1
11 | m_EditorHideFlags: 0
12 | m_Script: {fileID: 11500000, guid: c333ccfdd0cbdbc4ca30cef2dd6e6b9b, type: 3}
13 | m_Name: PortablePanelPickupModule
14 | m_EditorClassIdentifier:
15 | serializedUdonProgramAsset: {fileID: 11400000, guid: 2dd4796dc9c6ffd4d9b9e70b94968c63,
16 | type: 2}
17 | udonAssembly:
18 | assemblyError:
19 | sourceCsScript: {fileID: 11500000, guid: dfe5de7ae2147f2438fa668f28956550, type: 3}
20 | scriptVersion: 2
21 | compiledVersion: 2
22 | behaviourSyncMode: 0
23 | hasInteractEvent: 0
24 | scriptID: 118033673553187740
25 | serializationData:
26 | SerializedFormat: 2
27 | SerializedBytes:
28 | ReferencedUnityObjects: []
29 | SerializedBytesString:
30 | Prefab: {fileID: 0}
31 | PrefabModificationsReferencedUnityObjects: []
32 | PrefabModifications: []
33 | SerializationNodes:
34 | - Name: fieldDefinitions
35 | Entry: 7
36 | Data: 0|System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[UdonSharp.Compiler.FieldDefinition,
37 | UdonSharp.Editor]], mscorlib
38 | - Name: comparer
39 | Entry: 7
40 | Data: 1|System.Collections.Generic.GenericEqualityComparer`1[[System.String,
41 | mscorlib]], mscorlib
42 | - Name:
43 | Entry: 8
44 | Data:
45 | - Name:
46 | Entry: 12
47 | Data: 2
48 | - Name:
49 | Entry: 7
50 | Data:
51 | - Name: $k
52 | Entry: 1
53 | Data: PortablePanelReference
54 | - Name: $v
55 | Entry: 7
56 | Data: 2|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
57 | - Name: k__BackingField
58 | Entry: 1
59 | Data: PortablePanelReference
60 | - Name: k__BackingField
61 | Entry: 7
62 | Data: 3|System.RuntimeType, mscorlib
63 | - Name:
64 | Entry: 1
65 | Data: myro.PortablePanel, Assembly-CSharp
66 | - Name:
67 | Entry: 8
68 | Data:
69 | - Name: k__BackingField
70 | Entry: 7
71 | Data: 4|System.RuntimeType, mscorlib
72 | - Name:
73 | Entry: 1
74 | Data: VRC.Udon.UdonBehaviour, VRC.Udon
75 | - Name:
76 | Entry: 8
77 | Data:
78 | - Name: k__BackingField
79 | Entry: 7
80 | Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
81 | - Name:
82 | Entry: 6
83 | Data:
84 | - Name:
85 | Entry: 8
86 | Data:
87 | - Name: k__BackingField
88 | Entry: 5
89 | Data: true
90 | - Name: _fieldAttributes
91 | Entry: 7
92 | Data: 5|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
93 | - Name:
94 | Entry: 12
95 | Data: 2
96 | - Name:
97 | Entry: 7
98 | Data: 6|UnityEngine.HeaderAttribute, UnityEngine.CoreModule
99 | - Name: header
100 | Entry: 1
101 | Data: See README file for additional help and infos
102 | - Name:
103 | Entry: 8
104 | Data:
105 | - Name:
106 | Entry: 7
107 | Data: 7|UnityEngine.HeaderAttribute, UnityEngine.CoreModule
108 | - Name: header
109 | Entry: 1
110 | Data: This script should be attached next to the VRCPickup component
111 | - Name:
112 | Entry: 8
113 | Data:
114 | - Name:
115 | Entry: 13
116 | Data:
117 | - Name:
118 | Entry: 8
119 | Data:
120 | - Name:
121 | Entry: 8
122 | Data:
123 | - Name:
124 | Entry: 8
125 | Data:
126 | - Name:
127 | Entry: 7
128 | Data:
129 | - Name: $k
130 | Entry: 1
131 | Data: _pickupReference
132 | - Name: $v
133 | Entry: 7
134 | Data: 8|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
135 | - Name: k__BackingField
136 | Entry: 1
137 | Data: _pickupReference
138 | - Name: k__BackingField
139 | Entry: 7
140 | Data: 9|System.RuntimeType, mscorlib
141 | - Name:
142 | Entry: 1
143 | Data: VRC.SDK3.Components.VRCPickup, VRCSDK3
144 | - Name:
145 | Entry: 8
146 | Data:
147 | - Name: k__BackingField
148 | Entry: 9
149 | Data: 9
150 | - Name: k__BackingField
151 | Entry: 7
152 | Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
153 | - Name:
154 | Entry: 6
155 | Data:
156 | - Name:
157 | Entry: 8
158 | Data:
159 | - Name: k__BackingField
160 | Entry: 5
161 | Data: false
162 | - Name: _fieldAttributes
163 | Entry: 7
164 | Data: 10|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
165 | - Name:
166 | Entry: 12
167 | Data: 0
168 | - Name:
169 | Entry: 13
170 | Data:
171 | - Name:
172 | Entry: 8
173 | Data:
174 | - Name:
175 | Entry: 8
176 | Data:
177 | - Name:
178 | Entry: 8
179 | Data:
180 | - Name:
181 | Entry: 13
182 | Data:
183 | - Name:
184 | Entry: 8
185 | Data:
186 |
--------------------------------------------------------------------------------
/Scripts/PortablePanelPickupModule.asset.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: eb7672cab5b1ff741938807b63df3a23
3 | NativeFormatImporter:
4 | externalObjects: {}
5 | mainObjectFileID: 11400000
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Scripts/PortablePanelPickupModule.cs:
--------------------------------------------------------------------------------
1 |
2 | using System;
3 | using UdonSharp;
4 | using UnityEngine;
5 | using VRC.SDK3.Components;
6 | using VRC.SDKBase;
7 | using VRC.Udon;
8 |
9 | namespace myro
10 | {
11 | public class PortablePanelPickupModule : UdonSharpBehaviour
12 | {
13 | [Header("See README file for additional help and infos")]
14 | [Header("This script should be attached next to the VRCPickup component")]
15 | public PortablePanel PortablePanelReference;
16 | private VRCPickup _pickupReference;
17 |
18 | void OnEnable()
19 | {
20 | if (PortablePanelReference)
21 | PortablePanelReference.SetPickupModule(this);
22 |
23 | _pickupReference = GetComponent();
24 | }
25 |
26 | public override void OnPickup()
27 | {
28 | if (PortablePanelReference)
29 | PortablePanelReference.PanelPickedUp();
30 | }
31 |
32 | public override void OnDrop()
33 | {
34 | if (PortablePanelReference)
35 | PortablePanelReference.PanelDropped();
36 | }
37 |
38 | public void DisablePickup()
39 | {
40 | if (_pickupReference)
41 | {
42 | _pickupReference.pickupable = false;
43 | }
44 | }
45 |
46 | public void EnablePickup()
47 | {
48 | if (_pickupReference)
49 | {
50 | _pickupReference.pickupable = true;
51 | }
52 | }
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/Scripts/PortablePanelPickupModule.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: dfe5de7ae2147f2438fa668f28956550
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/ThrowablePanel.prefab.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 5d6d0819c573c1046b26676a28573fc3
3 | PrefabImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------