diff --git a/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorCreator.cs b/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorCreator.cs index e5b02da..b881e41 100644 --- a/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorCreator.cs +++ b/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorCreator.cs @@ -4,9 +4,26 @@ using MeshForwardDirection = uDesktopDuplication.Texture.MeshForwardDirection; public class MultipleMonitorCreator : MonoBehaviour { - [SerializeField] GameObject monitorPrefab; - [SerializeField] bool removeIfUnsupported = true; - [SerializeField] float removeWaitDuration = 5f; + [Tooltip("Create monitors using this prefab.")] + [SerializeField] + GameObject monitorPrefab; + + [Tooltip("Use same scale as real using DPI.")] + [SerializeField] + bool useRealScale = true; + + [Tooltip("Use this sacle as width if useRealScale is false.")] + [SerializeField] + float scale = 0.5f; + + [Tooltip("Remove unsupported monitors automatically after removeWaitDuration.")] + [SerializeField] + bool removeIfUnsupported = true; + + [Tooltip("Remove unsupported monitors automatically after removeWaitDuration.")] + [SerializeField] + float removeWaitDuration = 5f; + bool hasMonitorUnsupportStateChecked = false; float removeWaitTimer_ = 0f; @@ -96,10 +113,18 @@ public class MultipleMonitorCreator : MonoBehaviour var monitor = texture.monitor; // Set width / height - if (meshForwardDirection == MeshForwardDirection.Y) { - go.transform.localScale = new Vector3(monitor.widthMeter, go.transform.localScale.y, monitor.heightMeter); + float width, height; + if (useRealScale) { + width = monitor.widthMeter; + height = monitor.heightMeter; } else { - go.transform.localScale = new Vector3(monitor.widthMeter, monitor.heightMeter, go.transform.localScale.z); + width = scale * (monitor.isHorizontal ? 1f : monitor.aspect); + height = scale * (monitor.isHorizontal ? 1f / monitor.aspect : 1f); + } + if (meshForwardDirection == MeshForwardDirection.Y) { + go.transform.localScale = new Vector3(width, go.transform.localScale.y, height); + } else { + go.transform.localScale = new Vector3(width, height, go.transform.localScale.z); } // Set parent as this object @@ -126,7 +151,8 @@ public class MultipleMonitorCreator : MonoBehaviour monitors_.Clear(); } - void Recreate() + [ContextMenu("Recreate")] + public void Recreate() { Clear(); Create(); diff --git a/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorLayouter.cs b/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorLayouter.cs index 6a8ea84..f7d81e7 100644 --- a/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorLayouter.cs +++ b/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorLayouter.cs @@ -30,7 +30,7 @@ public class MultipleMonitorLayouter : MonoBehaviour var totalWidth = 0f; foreach (var info in monitors) { - var width = info.uddTexture.monitor.widthMeter * (info.mesh.bounds.extents.x * 2f); + var width = info.gameObject.transform.localEulerAngles.x * (info.mesh.bounds.extents.x * 2f); totalWidth += width; } totalWidth += margin * (n - 1); @@ -38,11 +38,11 @@ public class MultipleMonitorLayouter : MonoBehaviour var x = -totalWidth / 2; foreach (var info in monitors) { - var monitor = info.uddTexture.monitor; - x += (monitor.widthMeter * info.mesh.bounds.extents.x); + var width = info.gameObject.transform.localEulerAngles.x; + x += (width * info.mesh.bounds.extents.x); info.gameObject.transform.localPosition = new Vector3(x, 0f, 0f); info.gameObject.transform.localRotation = info.originalRotation; - x += (monitor.widthMeter * info.mesh.bounds.extents.x) + margin; + x += (width * info.mesh.bounds.extents.x) + margin; } foreach (var info in monitors) { diff --git a/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorRoundLayouter.cs b/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorRoundLayouter.cs index 9c5c4e5..5a64117 100644 --- a/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorRoundLayouter.cs +++ b/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorRoundLayouter.cs @@ -19,7 +19,7 @@ public class MultipleMonitorRoundLayouter : MultipleMonitorLayouter var totalWidth = 0f; foreach (var info in monitors) { - var width = info.uddTexture.monitor.widthMeter * (info.mesh.bounds.extents.x * 2f); + var width = info.gameObject.transform.localScale.x * (info.mesh.bounds.extents.x * 2f); totalWidth += width; } totalWidth += margin * (n - 1); @@ -30,7 +30,7 @@ public class MultipleMonitorRoundLayouter : MultipleMonitorLayouter float angle = -totalAngle / 2 + offsetAngle * Mathf.Deg2Rad; foreach (var info in monitors) { var uddTex = info.uddTexture; - var width = uddTex.monitor.widthMeter * (info.mesh.bounds.extents.x * 2f); + var width = info.gameObject.transform.localScale.x * (info.mesh.bounds.extents.x * 2f); angle += (width / radius) * 0.5f; uddTex.transform.localPosition = radius * new Vector3(Mathf.Sin(angle), 0f, Mathf.Cos(angle) - 1f);