CanvasButton

Plugins + Scripts CanvasButton

Download [<1 MB]
Yes, if it's a single row, it simply won't be enough. In each of my scenarios, the edges are all filled with buttons. If they are made too small, it would be hard to see clearly. Moreover, we need to add more functions later. Thank you very much for your reply. I'm looking forward to your update.
1787394179036.png

Yes, the new version now supports line and column wrapping. Currently, when displaying in horizontally mode, row and column spacing isn't recalculated, so you need to adjust it manually.

In fact, I use a lot of controls in this version, and the new architecture has been optimized, so creating many controls simultaneously doesn't cause too much lag.
 
chenrong updated CanvasButton with a new update entry:

CanvasButton v4.7

增加slider自增的定时器效果,并且设置定时器的时长
增加expose extra trigger配置项,勾选后隐藏自定义文字和背景的alpha及颜色的隐式触发调用,修复控件非常多的情况下,vam触发器的列表无法显示全的问题
增加living3D的功能,支持位置调整以及中心旋转功能

修复FOV动态变更的时候,控件大小变化的问题
修复点击horizontally mode之后,行列间距无法自适应的问题
修复保存预设下,热键触发器未保存的问题


Added an auto-incrementing timer feature for the slider, including adjustable timer duration.
Added an "expose extra trigger" configuration option; enabling this hides the implicit trigger calls associated with the alpha and color settings for custom text and...

Read the rest of this update entry...
 
Love your plugin, used .6 and now updated to .12 and decided to remake my menus. I ran into an issue and it's probably me misunderstanding the correct way to do it (now) but if i create menus (living 3d buttons to be precise) that trigger another Menu (also via a new instance of this plugin either on the same atom or a new one (tried both) after saving the Menu tied to a subscene (or all seperate atoms with menus that are triggered from the first one) and remove the subscene then load it again the main one shows up but all triggers from that to open the sub menus lose their Reciever Atom connection in the menu trigger and don't work to toggle any of the other menus.

Example: Main Buttons (on an empty atom) that is a Menu with 4 Buttons where any of those buttons triggers a submenu of buttons that run off another instance of this plugin on a new atom (or the same one, tried both). Tied the Main Empty Atom (or all of them if used multiple for each menu, tried both) to a subscene parent.
Saved the Subscene and removed all then added new subscene loaded the saved one. All Sub Menu Toggles lost the Reciever Atom connection in the trigger for them and won't work (aka the submenu does not show up on button press).

Any suggestions, or can i do all submenus in the same plugin instance now and have not figured out how to do it?

Thanks in advance.
 
chenrong updated CanvasButton with a new update entry:

CanvasButton v4.8

增加toggle样式显示,默认启动打勾样式,取消后恢复原本的文字样式
增加delay的链式调用功能,均可自由设置每一级延时触发时间与事件

优化控件数量非常多的情况下,排序卡顿的问题
优化slider字体显示问题以及进度条显示问题,slider与button的文字完成居中对其的统一排版



Added a toggle display style; the checked state is enabled by default, reverting to the original text style when unchecked.
Added support for chained `delay` calls, allowing for the independent configuration of trigger delays and events at each step.

Optimized performance to eliminate lag during sorting when a large number of controls are...

Read the rest of this update entry...
 
加载插件的路径似乎改变了,建议改回去哈,要不然做好的插件预设都泡汤了
 
Great plugin for those who make scenes for desktop use! Thanks for your hard work!

Possibly one bug I've found: If you use an older version of this plugin in a scene and update the plugin with deleting the old version, the scene do not use the new version. I think this is caused by the directory naming inside the plugin's var-file. The scene looks for the cslist-file in the "known" folder structure. If one of the directories have a new name (4.8 instead the known 4.7 in case of recent versions), the scene will not load the plugin and all the buttons are gone. Reloading the newer plugin version need to set up everything again, what is a pain if you have many buttons (and no preset saved). One workaround is to keep the old version, but fixes and additional features cannot be used.
Or is this intented because of compatibility issues with buttons created with older versions?
 
Love your plugin, used .6 and now updated to .12 and decided to remake my menus. I ran into an issue and it's probably me misunderstanding the correct way to do it (now) but if i create menus (living 3d buttons to be precise) that trigger another Menu (also via a new instance of this plugin either on the same atom or a new one (tried both) after saving the Menu tied to a subscene (or all seperate atoms with menus that are triggered from the first one) and remove the subscene then load it again the main one shows up but all triggers from that to open the sub menus lose their Reciever Atom connection in the menu trigger and don't work to toggle any of the other menus.

Example: Main Buttons (on an empty atom) that is a Menu with 4 Buttons where any of those buttons triggers a submenu of buttons that run off another instance of this plugin on a new atom (or the same one, tried both). Tied the Main Empty Atom (or all of them if used multiple for each menu, tried both) to a subscene parent.
Saved the Subscene and removed all then added new subscene loaded the saved one. All Sub Menu Toggles lost the Reciever Atom connection in the trigger for them and won't work (aka the submenu does not show up on button press).

Any suggestions, or can i do all submenus in the same plugin instance now and have not figured out how to do it?

Thanks in advance.
Hi, thank you for your interest.

You need to check your naming conventions. In VAM, if you save to a sub-scene and then change the name, reloading the sub-scene will cause the name to change. However, the JSON name saved inside the trigger is not updated in the callback. Therefore, when saving a sub-scene, you must carefully check that the saved name is the same as the name when you open it.
 
加载插件的路径似乎改变了,建议改回去哈,要不然做好的插件预设都泡汤了
插件加载的路径并没有改变,从v4新增保存预设开始一直存在Saves\PluginData\CanvasButton_*
不过这是我之前开发历史遗留的问题,未来版本中会放在Saves\PluginData\ChenRong\CanvasButton\*里面,保持目录结构整洁,到时候版本更新我会进行说明

另外在v4版本做的预设都可以保存使用后续版本加载,我印象中有一个版本更新进行了跳跃,如果在某个老版本里面保存预设,新版本无法加载的话,可以使用中间版本加载后保存预设,再用最新版本进行加载即可
比如v4.6保存的在4.8打开有问题的话,可以用4.7打开4.6的预设,然后在保存,接着用4.8加载就可以了
 
Great plugin for those who make scenes for desktop use! Thanks for your hard work!

Possibly one bug I've found: If you use an older version of this plugin in a scene and update the plugin with deleting the old version, the scene do not use the new version. I think this is caused by the directory naming inside the plugin's var-file. The scene looks for the cslist-file in the "known" folder structure. If one of the directories have a new name (4.8 instead the known 4.7 in case of recent versions), the scene will not load the plugin and all the buttons are gone. Reloading the newer plugin version need to set up everything again, what is a pain if you have many buttons (and no preset saved). One workaround is to keep the old version, but fixes and additional features cannot be used.
Or is this intented because of compatibility issues with buttons created with older versions?
Hi, this problem can be solved by saving the preset, loading the new version of the plugin, and then reloading the preset.
 
Hi, thank you for your interest.

You need to check your naming conventions. In VAM, if you save to a sub-scene and then change the name, reloading the sub-scene will cause the name to change. However, the JSON name saved inside the trigger is not updated in the callback. Therefore, when saving a sub-scene, you must carefully check that the saved name is the same as the name when you open it.
Thanks for the reply, the subscene buttons not working when you rename any target atoms is not the issue here i think, cause so far this only effects the button menus itself.
I just went through the whole process again to be sure.
a) open default scene, no name changes to the person atom
b) i create an empty atom (no namechange
c) copy that atom, now named empty#2
d) add your plugin to both of them
e) on empty#2 i add one button named "sub"
f) on empty i add one button named "top"
g) I add a trigger to the "Top" button to "toggle all UI" for the "sub" button
h) pressing the "top" button" hides the "sub" button as expected or restores it when pressed again
i) I add a new subscene and "Parent Atom Link" Empty and empty#2 to that subscene and save it as "test"
j) i completely remove the subscene (wich then also removes the 2 empty atoms of course
k) i add a new subscene (still in the same default scene) and load "test" onto it, the buttons appear in same state as when it was saved it but now pressing the "top" button" does not "Toggle All Ui" for the "sub" button and the trigger in "top" shows empty in "reciever atom" and "reciever" the "reciever target still has "Toggle all ui" in the field.

So my Question is am i missing something here or maybe i'm just stupid?

And yes i know you need to have same names for triggers for example clothing items before you load the subscene but that does not seem to be the issue here.. i think

i'll add the contents of the saved subscene to this post, if you have the time to look over it.


Thanks again for this fantastic plugin.


{
"setUnlistedParamsToDefault" : "true",
"drawContainedAtomsLines" : "true",
"subScene" : {
"storables" : [
{
"id" : "PluginManager",
"plugins" : {
}
},
{
"id" : "AnimationMaster",
"linkToAudioSourceControl" : "false",
"autoPlay" : "true",
"loop" : "false",
"audioSourceTimeOffset" : "0",
"playbackCounter" : "0",
"startTimestep" : "0",
"stopTimestep" : "0",
"loopbackTime" : "1",
"playbackSpeed" : "1",
"desiredLength" : "60",
"triggers" : [
]
}
]
},
"atoms" : [
{
"id" : "Empty",
"type" : "Empty",
"on" : "true",
"collisionEnabled" : "false",
"localPosition" : {
"x" : "1.336055",
"y" : "0.1003556",
"z" : "0"
},
"localRotation" : {
"x" : "0",
"y" : "0",
"z" : "0"
},
"containerLocalPosition" : {
"x" : "-1.330232",
"y" : "2.235174E-08",
"z" : "0"
},
"containerLocalRotation" : {
"x" : "0",
"y" : "0",
"z" : "0"
},
"storables" : [
{
"id" : "AtomControl",
"hidden" : "false"
},
{
"id" : "Preset",
"storePresetName" : "false"
},
{
"id" : "PhysicsMaterialControl",
"dynamicFriction" : "0.6",
"staticFriction" : "0.6",
"bounciness" : "0",
"frictionCombine" : "Average",
"bounceCombine" : "Average"
},
{
"id" : "CollisionTrigger",
"triggerEnabled" : "false",
"invertAtomFilter" : "false",
"useRelativeVelocityFilter" : "false",
"invertRelativeVelocityFilter" : "false",
"relativeVelocityFilter" : "1",
"trigger" : {
"startActions" : [
],
"transitionActions" : [
],
"endActions" : [
]
}
},
{
"id" : "scale",
"scale" : "1"
},
{
"id" : "materials",
"hideMaterial" : "false",
"renderQueue" : "3001",
"Diffuse Color" : {
"h" : "0.5",
"s" : "1",
"v" : "1"
}
},
{
"id" : "PluginManager",
"plugins" : {
"plugin#0" : "ChenRong.CanvasButton.13:/Custom/Scripts/ChenRong/CanvasButton/v4.8/CanvasButton.cslist"
}
},
{
"id" : "control",
"detachControl" : "false",
"interactableInPlayMode" : "true",
"deactivateOtherControlsOnPossess" : "true",
"possessable" : "false",
"canGrabPosition" : "true",
"canGrabRotation" : "true",
"freezeAtomPhysicsWhenGrabbed" : "false",
"xPositionLock" : "false",
"yPositionLock" : "false",
"zPositionLock" : "false",
"xPositionLocalLock" : "false",
"yPositionLocalLock" : "false",
"zPositionLocalLock" : "false",
"xRotationLock" : "false",
"yRotationLock" : "false",
"zRotationLock" : "false",
"physicsEnabled" : "false",
"useGravity" : "true",
"maxVelocityEnable" : "true",
"complyPositionThreshold" : "0.001",
"complyRotationThreshold" : "5",
"complySpeed" : "10",
"positionGrid" : "0.1",
"rotationGrid" : "15",
"mass" : "1",
"drag" : "0.1",
"maxVelocity" : "10",
"angularDrag" : "0.05",
"holdPositionSpring" : "5000",
"holdPositionDamper" : "50",
"holdPositionMaxForce" : "10000",
"holdRotationSpring" : "100",
"holdRotationDamper" : "5",
"holdRotationMaxForce" : "1000",
"complyPositionSpring" : "1500",
"complyPositionDamper" : "100",
"complyRotationSpring" : "150",
"complyRotationDamper" : "10",
"linkPositionSpring" : "250000",
"linkPositionDamper" : "250",
"linkPositionMaxForce" : "1E+08",
"linkRotationSpring" : "250000",
"linkRotationDamper" : "250",
"linkRotationMaxForce" : "1E+08",
"complyJointDriveSpring" : "20",
"jointDriveSpring" : "0",
"jointDriveDamper" : "0",
"jointDriveMaxForce" : "0",
"jointDriveXTarget" : "0",
"jointDriveYTarget" : "0",
"jointDriveZTarget" : "0",
"positionState" : "On",
"rotationState" : "On",
"positionGridMode" : "None",
"rotationGridMode" : "None",
"localPosition" : {
"x" : "-1.330232",
"y" : "2.235174E-08",
"z" : "0"
},
"localRotation" : {
"x" : "0",
"y" : "0",
"z" : "0"
}
},
{
"id" : "animation",
"armedForRecord" : "false",
"playbackEnabled" : "true",
"drawPath" : "false"
},
{
"id" : "plugin#0_ChenRong.CanvasButton",
"enabled" : "true",
"Horizontally Layout" : "false",
"Show Quick Trigger" : "false",
"Show Fire Trigger" : "false",
"Require Ctrl For Hotkey" : "false",
"Button Text Color" : "false",
"Expose Extra Triggers" : "true",
"Living 3D Mode" : "false",
"Open Panel When Creating" : "false",
"[Top] Show/Hide" : "true",
"[Top] Checkmark Style" : "true",
"[Top] Use Custom Color" : "false",
"[Top] Start New Column" : "false",
"[Top] Add Invisible Spacer" : "false",
"counts" : "1",
"Background Alpha" : "0.2",
"Text Alpha" : "1",
"Spacing" : "0.05",
"Column Spacing" : "0.15",
"Position (x)" : "1",
"Position (y)" : "1",
"Position (z)" : "0",
"Width" : "140",
"Height" : "40",
"Living3D Rot X" : "0",
"Living3D Rot Y" : "0",
"Living3D Rot Z" : "0",
"[Top] Button Alpha" : "0.2",
"[Top] Text Alpha" : "1",
"pluginLabel" : "",
"PresetName" : "CanvasPreset1",
"Toggle Hotkey" : "None",
"Global Button Color" : {
"h" : "0",
"s" : "1",
"v" : "1"
},
"[Top] Custom Button Color" : {
"h" : "0",
"s" : "1",
"v" : "1"
},
"[Top] Custom Text Color" : {
"h" : "0",
"s" : "0",
"v" : "1"
},
"global_active" : "true",
"global_text_color" : {
"r" : "1",
"g" : "1",
"b" : "1",
"a" : "1"
},
"global_button_color" : {
"r" : "1",
"g" : "0",
"b" : "0",
"a" : "0.2"
},
"requireCtrl" : "false",
"Toggle All Event" : {
"startActions" : [
],
"transitionActions" : [
],
"endActions" : [
]
},
"classid0" : "ButtonWidget",
"ButtonWidget0" : {
"use_custom_color" : "false",
"custom_button_color" : {
"h" : "0",
"s" : "1",
"v" : "1"
},
"custom_button_alpha" : "0.2",
"custom_text_color" : {
"h" : "0",
"s" : "0",
"v" : "1"
},
"custom_text_alpha" : "1",
"isColumnBreak" : "false",
"isBlankLine" : "false",
"name" : "Top",
"geometry" : {
"w" : "140",
"h" : "40"
},
"toggle_enable" : "false",
"delay_levels" : "0",
"is_show" : "true",
"toggle_status" : "false",
"use_checkmark_style" : "true"
},
"Top0" : {
"displayName" : "A_Toggle All UI",
"startActions" : [
{
"name" : "A_Toggle All UI",
"receiverAtom" : "test/Empty#2",
"receiver" : "plugin#0_ChenRong.CanvasButton",
"receiverTargetName" : "Toggle All UI"
}
],
"transitionActions" : [
],
"endActions" : [
]
}
}
]
},
{
"id" : "Empty#2",
"type" : "Empty",
"on" : "true",
"collisionEnabled" : "false",
"localPosition" : {
"x" : "1.336055",
"y" : "0.1003556",
"z" : "0"
},
"localRotation" : {
"x" : "0",
"y" : "0",
"z" : "0"
},
"containerLocalPosition" : {
"x" : "-1.325821",
"y" : "0.09630515",
"z" : "0"
},
"containerLocalRotation" : {
"x" : "0",
"y" : "0",
"z" : "0"
},
"storables" : [
{
"id" : "AtomControl",
"hidden" : "false"
},
{
"id" : "Preset",
"storePresetName" : "false"
},
{
"id" : "PhysicsMaterialControl",
"dynamicFriction" : "0.6",
"staticFriction" : "0.6",
"bounciness" : "0",
"frictionCombine" : "Average",
"bounceCombine" : "Average"
},
{
"id" : "CollisionTrigger",
"triggerEnabled" : "false",
"invertAtomFilter" : "false",
"useRelativeVelocityFilter" : "false",
"invertRelativeVelocityFilter" : "false",
"relativeVelocityFilter" : "1",
"trigger" : {
"startActions" : [
],
"transitionActions" : [
],
"endActions" : [
]
}
},
{
"id" : "scale",
"scale" : "1"
},
{
"id" : "materials",
"hideMaterial" : "false",
"renderQueue" : "3001",
"Diffuse Color" : {
"h" : "0.5",
"s" : "1",
"v" : "1"
}
},
{
"id" : "PluginManager",
"plugins" : {
"plugin#0" : "ChenRong.CanvasButton.13:/Custom/Scripts/ChenRong/CanvasButton/v4.8/CanvasButton.cslist"
}
},
{
"id" : "control",
"detachControl" : "false",
"interactableInPlayMode" : "true",
"deactivateOtherControlsOnPossess" : "true",
"possessable" : "false",
"canGrabPosition" : "true",
"canGrabRotation" : "true",
"freezeAtomPhysicsWhenGrabbed" : "false",
"xPositionLock" : "false",
"yPositionLock" : "false",
"zPositionLock" : "false",
"xPositionLocalLock" : "false",
"yPositionLocalLock" : "false",
"zPositionLocalLock" : "false",
"xRotationLock" : "false",
"yRotationLock" : "false",
"zRotationLock" : "false",
"physicsEnabled" : "false",
"useGravity" : "true",
"maxVelocityEnable" : "true",
"complyPositionThreshold" : "0.001",
"complyRotationThreshold" : "5",
"complySpeed" : "10",
"positionGrid" : "0.1",
"rotationGrid" : "15",
"mass" : "1",
"drag" : "0.1",
"maxVelocity" : "10",
"angularDrag" : "0.05",
"holdPositionSpring" : "5000",
"holdPositionDamper" : "50",
"holdPositionMaxForce" : "10000",
"holdRotationSpring" : "100",
"holdRotationDamper" : "5",
"holdRotationMaxForce" : "1000",
"complyPositionSpring" : "1500",
"complyPositionDamper" : "100",
"complyRotationSpring" : "150",
"complyRotationDamper" : "10",
"linkPositionSpring" : "250000",
"linkPositionDamper" : "250",
"linkPositionMaxForce" : "1E+08",
"linkRotationSpring" : "250000",
"linkRotationDamper" : "250",
"linkRotationMaxForce" : "1E+08",
"complyJointDriveSpring" : "20",
"jointDriveSpring" : "0",
"jointDriveDamper" : "0",
"jointDriveMaxForce" : "0",
"jointDriveXTarget" : "0",
"jointDriveYTarget" : "0",
"jointDriveZTarget" : "0",
"positionState" : "On",
"rotationState" : "On",
"positionGridMode" : "None",
"rotationGridMode" : "None",
"localPosition" : {
"x" : "-1.325821",
"y" : "0.09630515",
"z" : "0"
},
"localRotation" : {
"x" : "0",
"y" : "0",
"z" : "0"
}
},
{
"id" : "animation",
"armedForRecord" : "false",
"playbackEnabled" : "true",
"drawPath" : "false"
},
{
"id" : "plugin#0_ChenRong.CanvasButton",
"enabled" : "true",
"Horizontally Layout" : "false",
"Show Quick Trigger" : "false",
"Show Fire Trigger" : "false",
"Require Ctrl For Hotkey" : "false",
"Button Text Color" : "false",
"Expose Extra Triggers" : "true",
"Living 3D Mode" : "false",
"Open Panel When Creating" : "false",
"[sub] Show/Hide" : "true",
"[sub] Checkmark Style" : "true",
"[sub] Use Custom Color" : "false",
"[sub] Start New Column" : "false",
"[sub] Add Invisible Spacer" : "false",
"counts" : "1",
"Background Alpha" : "0.2",
"Text Alpha" : "1",
"Spacing" : "0.05",
"Column Spacing" : "0.15",
"Position (x)" : "1",
"Position (y)" : "0.9639402",
"Position (z)" : "0",
"Width" : "140",
"Height" : "40",
"Living3D Rot X" : "0",
"Living3D Rot Y" : "0",
"Living3D Rot Z" : "0",
"[sub] Button Alpha" : "0.2",
"[sub] Text Alpha" : "1",
"pluginLabel" : "",
"PresetName" : "CanvasPreset1",
"Toggle Hotkey" : "None",
"Global Button Color" : {
"h" : "0",
"s" : "1",
"v" : "1"
},
"[sub] Custom Button Color" : {
"h" : "0",
"s" : "1",
"v" : "1"
},
"[sub] Custom Text Color" : {
"h" : "0",
"s" : "0",
"v" : "1"
},
"global_active" : "true",
"global_text_color" : {
"r" : "1",
"g" : "1",
"b" : "1",
"a" : "1"
},
"global_button_color" : {
"r" : "1",
"g" : "0",
"b" : "0",
"a" : "0.2"
},
"requireCtrl" : "false",
"Toggle All Event" : {
"startActions" : [
],
"transitionActions" : [
],
"endActions" : [
]
},
"classid0" : "ButtonWidget",
"ButtonWidget0" : {
"use_custom_color" : "false",
"custom_button_color" : {
"h" : "0",
"s" : "1",
"v" : "1"
},
"custom_button_alpha" : "0.2",
"custom_text_color" : {
"h" : "0",
"s" : "0",
"v" : "1"
},
"custom_text_alpha" : "1",
"isColumnBreak" : "false",
"isBlankLine" : "false",
"name" : "sub",
"geometry" : {
"w" : "140",
"h" : "40"
},
"toggle_enable" : "false",
"delay_levels" : "0",
"is_show" : "true",
"toggle_status" : "false",
"use_checkmark_style" : "true"
},
"sub0" : {
"startActions" : [
],
"transitionActions" : [
],
"endActions" : [
]
}
}
]
}
]
}
 
Thanks for the reply, the subscene buttons not working when you rename any target atoms is not the issue here i think, cause so far this only effects the button menus itself.
I just went through the whole process again to be sure.
a) open default scene, no name changes to the person atom
b) i create an empty atom (no namechange
c) copy that atom, now named empty#2
d) add your plugin to both of them
e) on empty#2 i add one button named "sub"
f) on empty i add one button named "top"
g) I add a trigger to the "Top" button to "toggle all UI" for the "sub" button
h) pressing the "top" button" hides the "sub" button as expected or restores it when pressed again
i) I add a new subscene and "Parent Atom Link" Empty and empty#2 to that subscene and save it as "test"
j) i completely remove the subscene (wich then also removes the 2 empty atoms of course
k) i add a new subscene (still in the same default scene) and load "test" onto it, the buttons appear in same state as when it was saved it but now pressing the "top" button" does not "Toggle All Ui" for the "sub" button and the trigger in "top" shows empty in "reciever atom" and "reciever" the "reciever target still has "Toggle all ui" in the field.

So my Question is am i missing something here or maybe i'm just stupid?

And yes i know you need to have same names for triggers for example clothing items before you load the subscene but that does not seem to be the issue here.. i think

i'll add the contents of the saved subscene to this post, if you have the time to look over it.


Thanks again for this fantastic plugin.


{
"setUnlistedParamsToDefault" : "true",
"drawContainedAtomsLines" : "true",
"subScene" : {
"storables" : [
{
"id" : "PluginManager",
"plugins" : {
}
},
{
"id" : "AnimationMaster",
"linkToAudioSourceControl" : "false",
"autoPlay" : "true",
"loop" : "false",
"audioSourceTimeOffset" : "0",
"playbackCounter" : "0",
"startTimestep" : "0",
"stopTimestep" : "0",
"loopbackTime" : "1",
"playbackSpeed" : "1",
"desiredLength" : "60",
"triggers" : [
]
}
]
},
"atoms" : [
{
"id" : "Empty",
"type" : "Empty",
"on" : "true",
"collisionEnabled" : "false",
"localPosition" : {
"x" : "1.336055",
"y" : "0.1003556",
"z" : "0"
},
"localRotation" : {
"x" : "0",
"y" : "0",
"z" : "0"
},
"containerLocalPosition" : {
"x" : "-1.330232",
"y" : "2.235174E-08",
"z" : "0"
},
"containerLocalRotation" : {
"x" : "0",
"y" : "0",
"z" : "0"
},
"storables" : [
{
"id" : "AtomControl",
"hidden" : "false"
},
{
"id" : "Preset",
"storePresetName" : "false"
},
{
"id" : "PhysicsMaterialControl",
"dynamicFriction" : "0.6",
"staticFriction" : "0.6",
"bounciness" : "0",
"frictionCombine" : "Average",
"bounceCombine" : "Average"
},
{
"id" : "CollisionTrigger",
"triggerEnabled" : "false",
"invertAtomFilter" : "false",
"useRelativeVelocityFilter" : "false",
"invertRelativeVelocityFilter" : "false",
"relativeVelocityFilter" : "1",
"trigger" : {
"startActions" : [
],
"transitionActions" : [
],
"endActions" : [
]
}
},
{
"id" : "scale",
"scale" : "1"
},
{
"id" : "materials",
"hideMaterial" : "false",
"renderQueue" : "3001",
"Diffuse Color" : {
"h" : "0.5",
"s" : "1",
"v" : "1"
}
},
{
"id" : "PluginManager",
"plugins" : {
"plugin#0" : "ChenRong.CanvasButton.13:/Custom/Scripts/ChenRong/CanvasButton/v4.8/CanvasButton.cslist"
}
},
{
"id" : "control",
"detachControl" : "false",
"interactableInPlayMode" : "true",
"deactivateOtherControlsOnPossess" : "true",
"possessable" : "false",
"canGrabPosition" : "true",
"canGrabRotation" : "true",
"freezeAtomPhysicsWhenGrabbed" : "false",
"xPositionLock" : "false",
"yPositionLock" : "false",
"zPositionLock" : "false",
"xPositionLocalLock" : "false",
"yPositionLocalLock" : "false",
"zPositionLocalLock" : "false",
"xRotationLock" : "false",
"yRotationLock" : "false",
"zRotationLock" : "false",
"physicsEnabled" : "false",
"useGravity" : "true",
"maxVelocityEnable" : "true",
"complyPositionThreshold" : "0.001",
"complyRotationThreshold" : "5",
"complySpeed" : "10",
"positionGrid" : "0.1",
"rotationGrid" : "15",
"mass" : "1",
"drag" : "0.1",
"maxVelocity" : "10",
"angularDrag" : "0.05",
"holdPositionSpring" : "5000",
"holdPositionDamper" : "50",
"holdPositionMaxForce" : "10000",
"holdRotationSpring" : "100",
"holdRotationDamper" : "5",
"holdRotationMaxForce" : "1000",
"complyPositionSpring" : "1500",
"complyPositionDamper" : "100",
"complyRotationSpring" : "150",
"complyRotationDamper" : "10",
"linkPositionSpring" : "250000",
"linkPositionDamper" : "250",
"linkPositionMaxForce" : "1E+08",
"linkRotationSpring" : "250000",
"linkRotationDamper" : "250",
"linkRotationMaxForce" : "1E+08",
"complyJointDriveSpring" : "20",
"jointDriveSpring" : "0",
"jointDriveDamper" : "0",
"jointDriveMaxForce" : "0",
"jointDriveXTarget" : "0",
"jointDriveYTarget" : "0",
"jointDriveZTarget" : "0",
"positionState" : "On",
"rotationState" : "On",
"positionGridMode" : "None",
"rotationGridMode" : "None",
"localPosition" : {
"x" : "-1.330232",
"y" : "2.235174E-08",
"z" : "0"
},
"localRotation" : {
"x" : "0",
"y" : "0",
"z" : "0"
}
},
{
"id" : "animation",
"armedForRecord" : "false",
"playbackEnabled" : "true",
"drawPath" : "false"
},
{
"id" : "plugin#0_ChenRong.CanvasButton",
"enabled" : "true",
"Horizontally Layout" : "false",
"Show Quick Trigger" : "false",
"Show Fire Trigger" : "false",
"Require Ctrl For Hotkey" : "false",
"Button Text Color" : "false",
"Expose Extra Triggers" : "true",
"Living 3D Mode" : "false",
"Open Panel When Creating" : "false",
"[Top] Show/Hide" : "true",
"[Top] Checkmark Style" : "true",
"[Top] Use Custom Color" : "false",
"[Top] Start New Column" : "false",
"[Top] Add Invisible Spacer" : "false",
"counts" : "1",
"Background Alpha" : "0.2",
"Text Alpha" : "1",
"Spacing" : "0.05",
"Column Spacing" : "0.15",
"Position (x)" : "1",
"Position (y)" : "1",
"Position (z)" : "0",
"Width" : "140",
"Height" : "40",
"Living3D Rot X" : "0",
"Living3D Rot Y" : "0",
"Living3D Rot Z" : "0",
"[Top] Button Alpha" : "0.2",
"[Top] Text Alpha" : "1",
"pluginLabel" : "",
"PresetName" : "CanvasPreset1",
"Toggle Hotkey" : "None",
"Global Button Color" : {
"h" : "0",
"s" : "1",
"v" : "1"
},
"[Top] Custom Button Color" : {
"h" : "0",
"s" : "1",
"v" : "1"
},
"[Top] Custom Text Color" : {
"h" : "0",
"s" : "0",
"v" : "1"
},
"global_active" : "true",
"global_text_color" : {
"r" : "1",
"g" : "1",
"b" : "1",
"a" : "1"
},
"global_button_color" : {
"r" : "1",
"g" : "0",
"b" : "0",
"a" : "0.2"
},
"requireCtrl" : "false",
"Toggle All Event" : {
"startActions" : [
],
"transitionActions" : [
],
"endActions" : [
]
},
"classid0" : "ButtonWidget",
"ButtonWidget0" : {
"use_custom_color" : "false",
"custom_button_color" : {
"h" : "0",
"s" : "1",
"v" : "1"
},
"custom_button_alpha" : "0.2",
"custom_text_color" : {
"h" : "0",
"s" : "0",
"v" : "1"
},
"custom_text_alpha" : "1",
"isColumnBreak" : "false",
"isBlankLine" : "false",
"name" : "Top",
"geometry" : {
"w" : "140",
"h" : "40"
},
"toggle_enable" : "false",
"delay_levels" : "0",
"is_show" : "true",
"toggle_status" : "false",
"use_checkmark_style" : "true"
},
"Top0" : {
"displayName" : "A_Toggle All UI",
"startActions" : [
{
"name" : "A_Toggle All UI",
"receiverAtom" : "test/Empty#2",
"receiver" : "plugin#0_ChenRong.CanvasButton",
"receiverTargetName" : "Toggle All UI"
}
],
"transitionActions" : [
],
"endActions" : [
]
}
}
]
},
{
"id" : "Empty#2",
"type" : "Empty",
"on" : "true",
"collisionEnabled" : "false",
"localPosition" : {
"x" : "1.336055",
"y" : "0.1003556",
"z" : "0"
},
"localRotation" : {
"x" : "0",
"y" : "0",
"z" : "0"
},
"containerLocalPosition" : {
"x" : "-1.325821",
"y" : "0.09630515",
"z" : "0"
},
"containerLocalRotation" : {
"x" : "0",
"y" : "0",
"z" : "0"
},
"storables" : [
{
"id" : "AtomControl",
"hidden" : "false"
},
{
"id" : "Preset",
"storePresetName" : "false"
},
{
"id" : "PhysicsMaterialControl",
"dynamicFriction" : "0.6",
"staticFriction" : "0.6",
"bounciness" : "0",
"frictionCombine" : "Average",
"bounceCombine" : "Average"
},
{
"id" : "CollisionTrigger",
"triggerEnabled" : "false",
"invertAtomFilter" : "false",
"useRelativeVelocityFilter" : "false",
"invertRelativeVelocityFilter" : "false",
"relativeVelocityFilter" : "1",
"trigger" : {
"startActions" : [
],
"transitionActions" : [
],
"endActions" : [
]
}
},
{
"id" : "scale",
"scale" : "1"
},
{
"id" : "materials",
"hideMaterial" : "false",
"renderQueue" : "3001",
"Diffuse Color" : {
"h" : "0.5",
"s" : "1",
"v" : "1"
}
},
{
"id" : "PluginManager",
"plugins" : {
"plugin#0" : "ChenRong.CanvasButton.13:/Custom/Scripts/ChenRong/CanvasButton/v4.8/CanvasButton.cslist"
}
},
{
"id" : "control",
"detachControl" : "false",
"interactableInPlayMode" : "true",
"deactivateOtherControlsOnPossess" : "true",
"possessable" : "false",
"canGrabPosition" : "true",
"canGrabRotation" : "true",
"freezeAtomPhysicsWhenGrabbed" : "false",
"xPositionLock" : "false",
"yPositionLock" : "false",
"zPositionLock" : "false",
"xPositionLocalLock" : "false",
"yPositionLocalLock" : "false",
"zPositionLocalLock" : "false",
"xRotationLock" : "false",
"yRotationLock" : "false",
"zRotationLock" : "false",
"physicsEnabled" : "false",
"useGravity" : "true",
"maxVelocityEnable" : "true",
"complyPositionThreshold" : "0.001",
"complyRotationThreshold" : "5",
"complySpeed" : "10",
"positionGrid" : "0.1",
"rotationGrid" : "15",
"mass" : "1",
"drag" : "0.1",
"maxVelocity" : "10",
"angularDrag" : "0.05",
"holdPositionSpring" : "5000",
"holdPositionDamper" : "50",
"holdPositionMaxForce" : "10000",
"holdRotationSpring" : "100",
"holdRotationDamper" : "5",
"holdRotationMaxForce" : "1000",
"complyPositionSpring" : "1500",
"complyPositionDamper" : "100",
"complyRotationSpring" : "150",
"complyRotationDamper" : "10",
"linkPositionSpring" : "250000",
"linkPositionDamper" : "250",
"linkPositionMaxForce" : "1E+08",
"linkRotationSpring" : "250000",
"linkRotationDamper" : "250",
"linkRotationMaxForce" : "1E+08",
"complyJointDriveSpring" : "20",
"jointDriveSpring" : "0",
"jointDriveDamper" : "0",
"jointDriveMaxForce" : "0",
"jointDriveXTarget" : "0",
"jointDriveYTarget" : "0",
"jointDriveZTarget" : "0",
"positionState" : "On",
"rotationState" : "On",
"positionGridMode" : "None",
"rotationGridMode" : "None",
"localPosition" : {
"x" : "-1.325821",
"y" : "0.09630515",
"z" : "0"
},
"localRotation" : {
"x" : "0",
"y" : "0",
"z" : "0"
}
},
{
"id" : "animation",
"armedForRecord" : "false",
"playbackEnabled" : "true",
"drawPath" : "false"
},
{
"id" : "plugin#0_ChenRong.CanvasButton",
"enabled" : "true",
"Horizontally Layout" : "false",
"Show Quick Trigger" : "false",
"Show Fire Trigger" : "false",
"Require Ctrl For Hotkey" : "false",
"Button Text Color" : "false",
"Expose Extra Triggers" : "true",
"Living 3D Mode" : "false",
"Open Panel When Creating" : "false",
"[sub] Show/Hide" : "true",
"[sub] Checkmark Style" : "true",
"[sub] Use Custom Color" : "false",
"[sub] Start New Column" : "false",
"[sub] Add Invisible Spacer" : "false",
"counts" : "1",
"Background Alpha" : "0.2",
"Text Alpha" : "1",
"Spacing" : "0.05",
"Column Spacing" : "0.15",
"Position (x)" : "1",
"Position (y)" : "0.9639402",
"Position (z)" : "0",
"Width" : "140",
"Height" : "40",
"Living3D Rot X" : "0",
"Living3D Rot Y" : "0",
"Living3D Rot Z" : "0",
"[sub] Button Alpha" : "0.2",
"[sub] Text Alpha" : "1",
"pluginLabel" : "",
"PresetName" : "CanvasPreset1",
"Toggle Hotkey" : "None",
"Global Button Color" : {
"h" : "0",
"s" : "1",
"v" : "1"
},
"[sub] Custom Button Color" : {
"h" : "0",
"s" : "1",
"v" : "1"
},
"[sub] Custom Text Color" : {
"h" : "0",
"s" : "0",
"v" : "1"
},
"global_active" : "true",
"global_text_color" : {
"r" : "1",
"g" : "1",
"b" : "1",
"a" : "1"
},
"global_button_color" : {
"r" : "1",
"g" : "0",
"b" : "0",
"a" : "0.2"
},
"requireCtrl" : "false",
"Toggle All Event" : {
"startActions" : [
],
"transitionActions" : [
],
"endActions" : [
]
},
"classid0" : "ButtonWidget",
"ButtonWidget0" : {
"use_custom_color" : "false",
"custom_button_color" : {
"h" : "0",
"s" : "1",
"v" : "1"
},
"custom_button_alpha" : "0.2",
"custom_text_color" : {
"h" : "0",
"s" : "0",
"v" : "1"
},
"custom_text_alpha" : "1",
"isColumnBreak" : "false",
"isBlankLine" : "false",
"name" : "sub",
"geometry" : {
"w" : "140",
"h" : "40"
},
"toggle_enable" : "false",
"delay_levels" : "0",
"is_show" : "true",
"toggle_status" : "false",
"use_checkmark_style" : "true"
},
"sub0" : {
"startActions" : [
],
"transitionActions" : [
],
"endActions" : [
]
}
}
]
}
]
}
I just tried it, and it's true that the Receiver Atom is lost after saving again in a sub-scene.

In my current use case, I usually save in Empty and then save the preset; I almost never save through SubScene. I will document this and try to fix this issue in a future version.

In the current version, saving in Empty and then loading for use could be considered.
 
I just tried it, and it's true that the Receiver Atom is lost after saving again in a sub-scene.

In my current use case, I usually save in Empty and then save the preset; I almost never save through SubScene. I will document this and try to fix this issue in a future version.

In the current version, saving in Empty and then loading for use could be considered.
Thanks again for the reply.

I will try the way you proposed and save it as preset instead.

fyi, If it helps for fixing:
putting your plugin twice on same empty atom instead of 2 empty atoms (for this example connected to a subscene) also results in loss of the target atom aswell.
also Putting both on the subscene itself as plugins ends in the same result.



Thanks for your work.
 
Back
Top Bottom