Unity 用于控制摄像机的旋转、远近

/// <summary>
/// 用于控制摄像机的旋转、远近
/// </summary>
public class CameraTransform : MonoBehaviour
{
    public Transform player;
    public float scrollSpeed;  //滚轮速度
    public float rotateSpeed;  //旋转速度

    public int scrollMin;
    public int scrollMax;

    public bool ____________;

    public Vector3 offsetPosition;   //偏移位置
    public float distance;

    public bool isRotate;
    private Transform last;
    public float distanceAway;		//向后距离	
    public float distanceUp;		//向上距离	

    void Start()
    {
        AdjustPosition();
        offsetPosition = transform.position - player.transform.position;
    }

    void ScrollView() //滚轮控制远近
    {
        distance = offsetPosition.magnitude;
        distance -= Input.GetAxis("Mouse ScrollWheel") * scrollSpeed;
        //if (distance>5&&distance<30)
        if (distance > scrollMin && distance < scrollMax)
        {
            offsetPosition = offsetPosition.normalized * distance;
        }
    }

    void Update()
    {
        if (last!=player)
        {
            AdjustPosition();
            last = player;
            offsetPosition = transform.position - player.transform.position;
        }
        ScrollView();
        RotateView();
        transform.position = offsetPosition + player.position;
    }

    void AdjustPosition()
    {
        transform.position = player.position + Vector3.up * distanceUp - player.forward * distanceAway;
        transform.LookAt(player);
    }

    void RotateView()
    {
        if (Input.GetMouseButtonDown(0))
        {
            isRotate = true;
        }

        if (Input.GetMouseButtonUp(0))
        {
            isRotate = false;
        }

        if (isRotate)
        {
            Vector3 originalPosition = transform.position;
            Quaternion originalRotation = transform.rotation;
            transform.RotateAround(player.position, Vector3.up, rotateSpeed * Input.GetAxis("Mouse X"));
            transform.RotateAround(player.position, -transform.right, rotateSpeed * Input.GetAxis("Mouse Y"));
            float x = transform.eulerAngles.x;
            if (x < 5 || x > 85)   //上下观看角度
            {
                transform.position = originalPosition;
                transform.rotation = originalRotation;
            }
            offsetPosition = transform.position - player.position;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_43705303/article/details/94462762