CameraTracer.cs

using UnityEngine;

public class CameraTracer : MonoBehaviour
{
    public GameObject PlayerObject;//设定玩家实体
    public float MinViewScale = 0.5f;//最小缩放比例
    public float MaxViewScale = 1.2f;//最大缩放比例

    Vector2 m_lastTouchPos1 = Vector2.zero;
    Vector2 m_lastTouchPos2 = Vector2.zero;

    void Start()
    {
        m_lastTouchPos1 = Vector2.zero;
        m_lastTouchPos2 = Vector2.zero;
    }

    void FixedUpdate()
    {
        if (!PlayerObject.Equals(default(GameObject)))
        {//玩家存在时
            transform.position = PlayerObject.transform.position;//调整相机位置
            //鼠标滚轮调整
            if (Input.GetAxis("Mouse ScrollWheel") != 0)
            {
                GetComponent<Camera>().orthographicSize -= Input.GetAxis("Mouse ScrollWheel");
                resetZoom();//重置缩放以免超过限制
            }
            //触屏缩放调整
            //if (Input.touchCount > 1)
            //{
            //    if (Input.GetTouch(0).phase == TouchPhase.Moved || Input.GetTouch(1).phase == TouchPhase.Moved)
            //    {
            //        float distance = GetDistance(Input.GetTouch(0).position, Input.GetTouch(1).position);
            //        if (Mathf.Abs(distance) > 300000)
            //        {
            //            if (distance > 0)
            //            {//放大
            //                GetComponent<Camera>().orthographicSize -= 0.05f;
            //            }
            //            else
            //            {//缩小
            //                GetComponent<Camera>().orthographicSize += 0.05f;
            //            }
            //            resetZoom();//重置缩放以免超过限制
            //        }
            //        _lastTouchPos1 = Input.GetTouch(0).position;
            //        _lastTouchPos2 = Input.GetTouch(1).position;
            //    }
            //    else
            //    {
            //        _lastTouchPos1 = Vector2.zero;
            //        _lastTouchPos2 = Vector2.zero;
            //    }
            //}
        }
        else
        {//死亡后镜头跟随
            //鼠标滚轮调整
            if (Input.mousePresent)
            {//支持鼠标
                //Debug.Log(Input.mouseScrollDelta);
                if (Input.GetMouseButton(0))
                {
                    var aimPos = Camera.main.ScreenToWorldPoint(new Vector2(Input.mousePosition.x, Input.mousePosition.y));
                    transform.position = aimPos / 3;
                }
            }
            else
            {//支持触屏
                var aimPos = Camera.main.ScreenToWorldPoint(new Vector2(Input.GetTouch(0).position.x, Input.GetTouch(0).position.y));
                transform.position = aimPos / 3;
            }
        }
    }

    float getDistance(Vector2 pos1, Vector2 pos2)
    {
        if (m_lastTouchPos1 == Vector2.zero && m_lastTouchPos2 == Vector2.zero)
        {
            return 0.0f;
        }

        return (pos2 - pos1).sqrMagnitude - (m_lastTouchPos2 - m_lastTouchPos1).sqrMagnitude;//长度平方比较距离反应速度更快因为不需要算开根号
    }

    void resetZoom()
    {
        var size = GetComponent<Camera>().orthographicSize;
        if (size < MinViewScale)
        {
            GetComponent<Camera>().orthographicSize = MinViewScale;
        }
        else if (size > MaxViewScale)
        {
            GetComponent<Camera>().orthographicSize = MaxViewScale;
        }
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值