using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class InScreenFollowScene : MonoBehaviour
{
private Transform mFollowTrans;
private RectTransform mRectTrans;
private void Awake ()
{
mRectTrans = this.GetComponent<RectTransform> ();
}
public void InitFollow (Transform followTrans)
{
mFollowTrans = followTrans;
CalculateFollowPosAndScale ();
}
// Update is called once per frame
void Update ()
{
if (null == mFollowTrans)
return;
UpdateTitlePosition ();
}
private Vector2 mAnchorMin;
private Vector2 mAnchorMax;
private Vector3 mLocalPos;
const float OriginSize = 1.6f;
const float FarSize = 0.5f;
const float InvisibaleSize = 0.8f;
private void UpdateTitlePosition ()
{
// if (Time.frameCount % 5 != 0)
// return;
if (null == mFollowTrans)
return;
CalculateFollowPosAndScale ();
}
private void CalculateFollowPosAndScale ()
{
Vector3 screenPos = InfraredFightController.Instance.mainCamera.WorldToScreenPoint (mFollowTrans.position);
mAnchorMin.x = screenPos.x / InfraredFightController.Instance.mainCamera.pixelWidth;
mAnchorMin.y = screenPos.y / InfraredFightController.Instance.mainCamera.pixelHeight;
float scaleZ = screenPos.z;
Camera cam = InfraredFightController.Instance.mainCamera;
float sz = OriginSize - (OriginSize - FarSize) * (scaleZ - cam.nearClipPlane) / (cam.farClipPlane - cam.nearClipPlane);
if (scaleZ < cam.nearClipPlane || sz < InvisibaleSize) {
if (gameObject.activeSelf)
gameObject.SetActive (false);
} else {
if (!gameObject.activeSelf)
gameObject.SetActive (true);
transform.localScale = Vector3.one * sz * 5f;//CalculateScaleFactorByCameraFov ();
}
mAnchorMax.x = mAnchorMin.x;
mAnchorMax.y = mAnchorMin.y;
mRectTrans.anchorMin = mAnchorMin;
mRectTrans.anchorMax = mAnchorMax;
mRectTrans.anchoredPosition = Vector2.zero;
mLocalPos = transform.localPosition;
mLocalPos.z = 0;
transform.localPosition = mLocalPos;
}
private const float MaxZoomScaleFactor = 0.6f;
private const float MinZoomScaleFactor = 1f;
//private float CalculateScaleFactorByCameraFov ()
//{
// float max = UIManager.Instance.MoblieTouchScript.CamZoomMax;
// float f = Mathf.Clamp01 ((max - UIManager.Instance.MoblieTouchScript.CamZoom) / (max - UIManager.Instance.MoblieTouchScript.CamZoomMin));
// return Mathf.Lerp (MaxZoomScaleFactor, MinZoomScaleFactor, f);
//}
}
using System.Collections.Generic;
using UnityEngine;
public class InScreenFollowScene : MonoBehaviour
{
private Transform mFollowTrans;
private RectTransform mRectTrans;
private void Awake ()
{
mRectTrans = this.GetComponent<RectTransform> ();
}
public void InitFollow (Transform followTrans)
{
mFollowTrans = followTrans;
CalculateFollowPosAndScale ();
}
// Update is called once per frame
void Update ()
{
if (null == mFollowTrans)
return;
UpdateTitlePosition ();
}
private Vector2 mAnchorMin;
private Vector2 mAnchorMax;
private Vector3 mLocalPos;
const float OriginSize = 1.6f;
const float FarSize = 0.5f;
const float InvisibaleSize = 0.8f;
private void UpdateTitlePosition ()
{
// if (Time.frameCount % 5 != 0)
// return;
if (null == mFollowTrans)
return;
CalculateFollowPosAndScale ();
}
private void CalculateFollowPosAndScale ()
{
Vector3 screenPos = InfraredFightController.Instance.mainCamera.WorldToScreenPoint (mFollowTrans.position);
mAnchorMin.x = screenPos.x / InfraredFightController.Instance.mainCamera.pixelWidth;
mAnchorMin.y = screenPos.y / InfraredFightController.Instance.mainCamera.pixelHeight;
float scaleZ = screenPos.z;
Camera cam = InfraredFightController.Instance.mainCamera;
float sz = OriginSize - (OriginSize - FarSize) * (scaleZ - cam.nearClipPlane) / (cam.farClipPlane - cam.nearClipPlane);
if (scaleZ < cam.nearClipPlane || sz < InvisibaleSize) {
if (gameObject.activeSelf)
gameObject.SetActive (false);
} else {
if (!gameObject.activeSelf)
gameObject.SetActive (true);
transform.localScale = Vector3.one * sz * 5f;//CalculateScaleFactorByCameraFov ();
}
mAnchorMax.x = mAnchorMin.x;
mAnchorMax.y = mAnchorMin.y;
mRectTrans.anchorMin = mAnchorMin;
mRectTrans.anchorMax = mAnchorMax;
mRectTrans.anchoredPosition = Vector2.zero;
mLocalPos = transform.localPosition;
mLocalPos.z = 0;
transform.localPosition = mLocalPos;
}
private const float MaxZoomScaleFactor = 0.6f;
private const float MinZoomScaleFactor = 1f;
//private float CalculateScaleFactorByCameraFov ()
//{
// float max = UIManager.Instance.MoblieTouchScript.CamZoomMax;
// float f = Mathf.Clamp01 ((max - UIManager.Instance.MoblieTouchScript.CamZoom) / (max - UIManager.Instance.MoblieTouchScript.CamZoomMin));
// return Mathf.Lerp (MaxZoomScaleFactor, MinZoomScaleFactor, f);
//}
}