|
@@ -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;
|
|
|
|
|
|
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;
|
|
|
}
|