namespace UnityEngine.XR.Interaction.Toolkit.Samples.SpatialKeyboard { /// /// This component moves a set of transforms to the same local z-axis position as a poke follow transform. /// This is useful for batchable objects that need to move together. /// public class KeyboardBatchFollow : MonoBehaviour { [Tooltip("The transform to follow.")] [SerializeField] Transform m_FollowTransform; /// /// The transform to follow. /// public Transform followTransform { get => m_FollowTransform; set => m_FollowTransform = value; } [Tooltip("The transforms to move to the same local z-axis position as the poke follow transform.")] [SerializeField] Transform[] m_FollowerTransforms; /// /// The transforms to move to the same local z-axis position as the poke follow transform. /// public Transform[] followerTransforms { get => m_FollowerTransforms; set => m_FollowerTransforms = value; } /// /// See . /// protected void OnDisable() { if (m_FollowerTransforms == null || m_FollowerTransforms.Length == 0) return; for (var index = 0; index < m_FollowerTransforms.Length; ++index) { var follower = m_FollowerTransforms[index]; var localPosition = follower.localPosition; localPosition.z = 0f; follower.localPosition = localPosition; } } /// /// See . /// protected void LateUpdate() { if (m_FollowTransform == null || m_FollowerTransforms == null || m_FollowerTransforms.Length == 0) return; var followLocalZ = m_FollowTransform.localPosition.z; for (var index = 0; index < m_FollowerTransforms.Length; ++index) { var follower = m_FollowerTransforms[index]; var localPosition = follower.localPosition; localPosition.z = followLocalZ; follower.localPosition = localPosition; } } } }