Unity3D鼠标控制物体移动,缩放,旋转

using UnityEngine;
using System.Collections;

public class ControlObject : MonoBehaviour {


    public GameObject target;
    Vector3 screenPoint;
    Vector3 StartPosition;
    Vector3 previousPosition;
    Vector3 offset;
    Vector3 finalOffset;
    Vector3 eulerAngle;
    public float RotateSpeed = 1;               //旋转速度
    public float RotateInertiaSpeed = 0;        //旋转惯性速度
    bool isSlide;
    float angle;
    public float MouseWheelSensitivity = 10;    //缩放单位
    public float MouseZoomMin = 1f;             //最小缩放 
    public float MouseZoomMax = 100f;           //最大缩放


    void Start()
    {

    }


    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            screenPoint = Camera.main.WorldToScreenPoint(target.transform.position);
            offset = target.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, 0, screenPoint.z));
        }

        if (Input.GetMouseButton(0))
        {
            Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);

            Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint) + offset;
            target.transform.position = curPosition;
        }


        if (Input.GetAxis("Mouse ScrollWheel") != 0)
        {
            if (Camera.main.GetComponent<Camera>().fieldOfView >= MouseZoomMin && Camera.main.GetComponent<Camera>().fieldOfView <= MouseZoomMax)
            {
                Camera.main.GetComponent<Camera>().fieldOfView += Input.GetAxis("Mouse ScrollWheel") * MouseWheelSensitivity;
            }
            if (Camera.main.GetComponent<Camera>().fieldOfView < MouseZoomMin)
            {
                Camera.main.GetComponent<Camera>().fieldOfView = MouseZoomMin;
            }
            if (Camera.main.GetComponent<Camera>().fieldOfView > MouseZoomMax)
            {
                Camera.main.GetComponent<Camera>().fieldOfView = MouseZoomMax;
            }
        }




        if (Input.GetMouseButtonDown(1))
        {
            StartPosition = Input.mousePosition;
            previousPosition = Input.mousePosition;
        }
        if (Input.GetMouseButton(1))
        {
            offset = Input.mousePosition - previousPosition;
            previousPosition = Input.mousePosition;
            transform.Rotate(Vector3.Cross(offset, Vector3.forward).normalized, offset.magnitude * RotateSpeed, Space.World);
        }
        if (Input.GetMouseButtonUp(1))
        {
            finalOffset = Input.mousePosition - StartPosition;
            isSlide = true;
            angle = finalOffset.magnitude;
        }
        if (isSlide)
        {
            transform.Rotate(Vector3.Cross(finalOffset, Vector3.forward).normalized, angle * RotateInertiaSpeed * Time.deltaTime, Space.World);
            if (angle > 0)
            {
                angle -= 5;
            }
            else
            {
                angle = 0;
            }
        }
    }
}

 

posted @ 2015-11-12 12:56  风从哪里来  阅读(1261)  评论(0)    收藏  举报