unity4.6_摄像机跟随模式、观察模式融合(平滑)

来源:互联网 发布:数控编程培训教程 编辑:程序博客网 时间:2024/06/06 14:19
using UnityEngine;
using System.Collections;
public struct state
{
    public int mode;
    public Quaternion rotation;
    public Vector3 position;
    public state(int m,Quaternion q,Vector3 p)
    {
        mode = m;
        rotation = q;
        position = p;
    }
}

public class Camara : MonoBehaviour {
    public Transform player;//
    public float disToPlayer;
    public Vector3 startPosition;
    public Quaternion startRotation;
    public float Dx;
    public float Dy;
    public Vector3 targetPosition;
    public Quaternion targetRotation;
    public float mouseX;
    public float mouseY;
    // Use this for initialization
    void Start () {
        mouseX = 0;
        mouseY = 0;
        player = GameObject.FindWithTag ("Player").transform;
        disToPlayer = 200;
        startPosition = new Vector3 (0,50,-disToPlayer);
        startRotation = player.rotation;
        Dx = 0;
        Dy = 0;
        transform.position = player.rotation * startPosition + player.position;
        transform.rotation = player.rotation * startRotation;
     }
    // Update is called once per frame
    void Update () {
        mouseX = 0;
        mouseY = 0;
        //Mouse scrollWheel hange origin distance from camera to player;
        float sw = Input.GetAxis ("Mouse ScrollWheel");
        if (Input.GetMouseButton (0))
        {
            mouseX=Input.GetAxis("Mouse X");
            mouseY=Input.GetAxis("Mouse Y");
        }
        if (Input.GetMouseButton (1)) 
        {
            player.Rotate(0,Input.GetAxis("Mouse X")*StaticAllInfo.playerRotateSpeed*Time.deltaTime,0,Space.World);
            Dx=0;
            Dy=0;
        }
        if (Input.GetKey (KeyCode.LeftControl) || Input.GetKey (KeyCode.RightControl))
            Screen.lockCursor = !Screen.lockCursor;
        disToPlayer -= sw * StaticAllInfo.scrollSpeed * Time.deltaTime;
        startPosition = new Vector3 (0,50,-disToPlayer);
        Dx += mouseX*StaticAllInfo.cameraRotateSpeed*Time.deltaTime;
        Dy += mouseY*StaticAllInfo.cameraRotateSpeed*Time.deltaTime;
        Dx = Dx%360;
        Dy = Mathf.Clamp (Dy,-60,10);
        Quaternion R = Quaternion.Euler (-Dy,Dx,0);
        targetPosition = player.rotation * R*startPosition + player.position;
        targetRotation = player.rotation * R*startRotation;
        transform.position = Vector3.Lerp (transform.position,targetPosition,Time.deltaTime*3);
        transform.rotation = Quaternion.Lerp (transform.rotation,targetRotation,Time.deltaTime*3);
    }
}
0 0
原创粉丝点击