Browse Source

修改移动窗口逻辑

胡佳骏 1 year ago
parent
commit
21dd25e861
1 changed files with 38 additions and 11 deletions
  1. 38 11
      Assets/Game/CameraFollowerLangChao.cs

+ 38 - 11
Assets/Game/CameraFollowerLangChao.cs

@@ -19,6 +19,7 @@ namespace SC.XR.Unity
         Vector3 viewPoint_top = Vector3.zero;
         Vector3 viewPoint_bot = Vector3.zero;
         bool isFollower = false;
+        bool isFollower2 = false;
         Vector3 originPos = Vector3.zero;
         Vector3 desPos = Vector3.zero;
         float journeyLength = 0f;
@@ -28,7 +29,7 @@ namespace SC.XR.Unity
             initViewPoint = Camera.main.WorldToViewportPoint(_slamHead.position + (_slamHead.forward * WindowDistance));
             InstantFollow();
         }
-
+        public Vector3 nowV3;
         //Nonlinear Following by default
         protected override void Follow()
         {
@@ -37,6 +38,7 @@ namespace SC.XR.Unity
                 return;
             }
             Vector3 v3 = CalculateWindowPosition(Camera.main.transform);
+            nowV3 = new Vector3(v3.x, Camera.main.transform.position.y, v3.z);
             transform.position = Vector3.Lerp(transform.position,new Vector3(v3.x, Camera.main.transform.position.y, v3.z) , WindowFollowSpeed * Time.deltaTime);
             transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.Euler( new Vector3(0, CalculateWindowRotation(Camera.main.transform).eulerAngles.y, 0)), WindowFollowSpeed * Time.deltaTime);
         }
@@ -64,19 +66,44 @@ namespace SC.XR.Unity
         {
             if ((StopFollower == false)&& !InstantFollowing)
             {
-                if (IsFollower() && !LinearFollowing)
-                {
-                    Follow();
-                }
-                else if (IsFollower() && LinearFollowing)
+                if ( !isFollower2&& IsFollower())
                 {
-                    LinearFollow();
+                    StartCoroutine(startyidong());
                 }
             }
-            else if ((StopFollower == false) && InstantFollowing)
+        }
+        IEnumerator startyidong()
+        {
+            while (IsFollower())
+            {
+                Follow();
+                yield return new WaitForSeconds(0.2f);
+            }
+            isFollower2 = false;
+        }
+
+        protected bool IsFollower2()
+        {
+            if (Camera.main == null || Camera.main == null)
+            {
+                return false;
+            }
+
+            viewPoint = Camera.main.WorldToViewportPoint(transform.position);// 面板在相机画面上的坐标
+            viewPoint_right = Camera.main.WorldToViewportPoint(transform.TransformPoint(new Vector3(menu_size.x / 2, 0, 0)));// 面板边界在相机画面上的坐标
+            viewPoint_left = Camera.main.WorldToViewportPoint(transform.TransformPoint(new Vector3(-menu_size.x / 2, 0, 0)));
+            viewPoint_top = Camera.main.WorldToViewportPoint(transform.TransformPoint(new Vector3(0, menu_size.y / 2, 0)));
+            viewPoint_bot = Camera.main.WorldToViewportPoint(transform.TransformPoint(new Vector3(0, -menu_size.y / 2, 0)));
+
+            if (viewPoint_right.x > 1 || viewPoint_left.x < 0 )//边界判断
+            {
+                isFollower2 = true;
+            }
+            else if (Mathf.Abs(viewPoint.x - initViewPoint.x) < 0.05f )//停止跟随的边界判断
             {
-                InstantFollow();
+                isFollower2 = false;
             }
+            return isFollower;
         }
 
         protected bool IsFollower()
@@ -92,11 +119,11 @@ namespace SC.XR.Unity
             viewPoint_top = Camera.main.WorldToViewportPoint(transform.TransformPoint(new Vector3(0, menu_size.y/2, 0)));
             viewPoint_bot = Camera.main.WorldToViewportPoint(transform.TransformPoint(new Vector3(0, -menu_size.y/2, 0)));
 
-            if (viewPoint_right.x > 1 || viewPoint_left.x < 0 || viewPoint_bot.y < 0 || viewPoint_top.y > 1)//边界判断
+            if (viewPoint_right.x > 1.5f || viewPoint_left.x < -0.5f)//边界判断
             {
                 isFollower = true;
             }
-            else if (Mathf.Abs(viewPoint.x - initViewPoint.x) < 0.05f && Mathf.Abs(viewPoint.y - initViewPoint.y) < 0.05f)//停止跟随的边界判断
+            else if (Mathf.Abs(viewPoint.x - initViewPoint.x) < 0.05f )//停止跟随的边界判断
             {
                 isFollower = false;
             }