@@ -9,10 +9,9 @@ namespace MimyLab.FukuroUdon
99 using UdonSharp ;
1010 using UnityEngine ;
1111 using UnityEngine . Animations ;
12- using VRC . Dynamics ;
1312 using VRC . SDK3 . Dynamics . Constraint . Components ;
14- using VRC . SDK3 . Dynamics . Contact . Components ;
1513 using VRC . SDK3 . Dynamics . PhysBone . Components ;
14+ using VRC . SDK3 . Dynamics . Contact . Components ;
1615 using VRC . Udon ;
1716
1817 [ HelpURL ( "https://github.com/mimyquality/FukuroUdon/wiki/Active-Relay#activerelay-to-component" ) ]
@@ -28,26 +27,40 @@ public class ActiveRelayToComponent : UdonSharpBehaviour
2827 [ SerializeField ]
2928 private bool _invert = false ;
3029
30+ [ SerializeField , HideInInspector ]
31+ private UdonSharpBehaviour [ ] _udonSharpBehaviours = new UdonSharpBehaviour [ 0 ] ;
32+
3133#if ! COMPILER_UDONSHARP && UNITY_EDITOR
3234 private void OnValidate ( )
3335 {
34- var count = 0 ;
35- var tmp = new Component [ _components . Length ] ;
36+ var tmp_Components = new Component [ _components . Length ] ;
37+ var componentCount = 0 ;
38+ // U# はプロキシー概念があるので別途 UdonSharpBehaviour 配列を用意して管理する
39+ var tmp_udonSharpBehaviours = new UdonSharpBehaviour [ _components . Length ] ;
40+ var usbCount = 0 ;
3641 foreach ( var component in _components )
3742 {
3843 if ( ValidateComponentType ( component ) )
3944 {
40- tmp [ count ++ ] = component ;
45+ tmp_Components [ componentCount ++ ] = component ;
46+
47+ if ( component is UdonSharpBehaviour usb )
48+ {
49+ tmp_udonSharpBehaviours [ usbCount ++ ] = usb ;
50+ }
4151 }
4252 }
43- System . Array . Resize ( ref tmp , count ) ;
44- _components = tmp ;
53+ System . Array . Resize ( ref tmp_Components , componentCount ) ;
54+ _components = tmp_Components ;
55+ System . Array . Resize ( ref tmp_udonSharpBehaviours , usbCount ) ;
56+ _udonSharpBehaviours = tmp_udonSharpBehaviours ;
4557 }
4658
4759 private bool ValidateComponentType ( Component component )
4860 {
4961 if ( ! component ) { return false ; }
5062
63+ var type = component . GetType ( ) ;
5164 if ( component is Collider ) { return true ; }
5265 if ( component is Renderer ) { return true ; }
5366 // 個別に羅列の必要ある
@@ -72,7 +85,7 @@ private bool ValidateComponentType(Component component)
7285 if ( component is Camera ) { return true ; }
7386 if ( component is Animator ) { return true ; }
7487 if ( component is UdonBehaviour ) { return true ; }
75- // if (component is UdonSharpBehaviour) { return true; } // なんとかする
88+ if ( component is UdonSharpBehaviour ) { return true ; }
7689 if ( component is VRCParentConstraint ) { return true ; }
7790 if ( component is VRCPositionConstraint ) { return true ; }
7891 if ( component is VRCRotationConstraint ) { return true ; }
@@ -156,6 +169,11 @@ private void ToggleComponents(bool value)
156169 // else if (type == typeof(AudioListener)) { var downCasted = (AudioListener)component; downCasted.enabled = value; }
157170 // else if (type == typeof(Cloth)) { var downCasted = (Cloth)component; downCasted.enabled = value; }
158171 }
172+ foreach ( var udonSharpBehaviour in _udonSharpBehaviours )
173+ {
174+ if ( ! udonSharpBehaviour ) continue ;
175+ udonSharpBehaviour . enabled = value ;
176+ }
159177 }
160178 }
161179}
0 commit comments