diff --git a/Assets/Cryville/Common/Unity/Input/UnityCameraUtils.cs b/Assets/Cryville/Common/Unity/Input/UnityCameraUtils.cs new file mode 100644 index 0000000..5000146 --- /dev/null +++ b/Assets/Cryville/Common/Unity/Input/UnityCameraUtils.cs @@ -0,0 +1,12 @@ +using UnityEngine; + +namespace Cryville.Common.Unity.Input { + public static class UnityCameraUtils { + public static Vector2 ScreenToWorldPoint(Vector2 pos) { + Vector3 i = pos; + i.z = -Camera.main.transform.localPosition.z; + i = Camera.main.ScreenToWorldPoint(i); + return i; + } + } +} diff --git a/Assets/Cryville/Common/Unity/Input/UnityCameraUtils.cs.meta b/Assets/Cryville/Common/Unity/Input/UnityCameraUtils.cs.meta new file mode 100644 index 0000000..f8c8464 --- /dev/null +++ b/Assets/Cryville/Common/Unity/Input/UnityCameraUtils.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 35a1c45601c39f94db20178505a68be2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville/Common/Unity/Input/UnityMouseHandler.cs b/Assets/Cryville/Common/Unity/Input/UnityMouseHandler.cs index 565fde9..516a45c 100644 --- a/Assets/Cryville/Common/Unity/Input/UnityMouseHandler.cs +++ b/Assets/Cryville/Common/Unity/Input/UnityMouseHandler.cs @@ -55,8 +55,7 @@ namespace Cryville.Common.Unity.Input { } void Update() { double time = Time.timeAsDouble; - Vector2 pos = unity::Input.mousePosition; - pos.y = Screen.height - pos.y; + Vector3 pos = UnityCameraUtils.ScreenToWorldPoint(unity::Input.mousePosition); handler.Feed(0, 0, new InputVector(time, pos)); } } diff --git a/Assets/Cryville/Common/Unity/Input/UnityTouchHandler.cs b/Assets/Cryville/Common/Unity/Input/UnityTouchHandler.cs index cef659e..7fd5c44 100644 --- a/Assets/Cryville/Common/Unity/Input/UnityTouchHandler.cs +++ b/Assets/Cryville/Common/Unity/Input/UnityTouchHandler.cs @@ -57,8 +57,7 @@ namespace Cryville.Common.Unity.Input { double time = Time.timeAsDouble; for (int i = 0; i < unity::Input.touchCount; i++) { var t = unity::Input.GetTouch(i); - Vector2 pos = t.position; - pos.y = Screen.height - pos.y; + Vector2 pos = UnityCameraUtils.ScreenToWorldPoint(t.position); var vec = new InputVector(time, pos); if (t.phase == TouchPhase.Began || t.phase == TouchPhase.Stationary || t.phase == TouchPhase.Moved) { handler.Feed(0, t.fingerId, vec); diff --git a/Assets/Cryville/Common/Unity/Input/WindowsPointerHandler.cs b/Assets/Cryville/Common/Unity/Input/WindowsPointerHandler.cs index 515b34c..ead3a86 100644 --- a/Assets/Cryville/Common/Unity/Input/WindowsPointerHandler.cs +++ b/Assets/Cryville/Common/Unity/Input/WindowsPointerHandler.cs @@ -214,7 +214,7 @@ namespace Cryville.Common.Unity.Input { NativeMethods.POINT p = rawpinfo.ptPixelLocation; NativeMethods.ScreenToClient(hMainWindow, ref p); - Vector2 _p = new Vector2(p.X, p.Y); + Vector2 _p = UnityCameraUtils.ScreenToWorldPoint(new Vector2(p.X, Screen.height - p.Y)); double time = (double)rawpinfo.PerformanceCount / freq; @@ -300,7 +300,7 @@ namespace Cryville.Common.Unity.Input { Y = touch.y / 100 }; NativeMethods.ScreenToClient(hMainWindow, ref p); - Vector2 _p = new Vector2(p.X, p.Y); + Vector2 _p = UnityCameraUtils.ScreenToWorldPoint(new Vector2(p.X, Screen.height - p.Y)); /*Vector2? _cs = null; if (touch.dwMask.HasFlag(NativeMethods.TOUCHINPUT_Mask.TOUCHINPUTMASKF_CONTACTAREA)) {