1. 程式人生 > >關於相機實現在scene場景中的效果,包括移動,旋轉,拉近,方便在遊戲執行時檢視場景

關於相機實現在scene場景中的效果,包括移動,旋轉,拉近,方便在遊戲執行時檢視場景

我們都知道在scene場景內利用滑鼠可以隨意檢視場景,拉近拉遠,移動,那麼在遊戲執行時是無法做到的,這就需要我們利用程式碼來控制相機。

首先我們需要以下欄位等,儲存相機元件是為了可以使程式碼靈活。,不必掛載相機上。有兩種模式,一種計算基於螢幕中心,即你的操作中心點在螢幕中心,還有一種是基於上一幀點選位置。

    public  Camera cam;//相機元件
    //計算中心點選取
    public enum MouseCenter
    {
        ScreeenCenter,//螢幕中心
        LastPosition,//點選點
    }
    public MouseCenter mouseCenter= MouseCenter.LastPosition ;//

    public float RotateSpeed = 1;//旋轉速度
    public float MoveSpeed = 10;//移動速度
    public float ZoomSpeed=1;//縮放速度
    private  Vector3 MoveDir;//方向
    private Vector3 RotateDir;//
    public int Sensitivity = 1;//靈敏度
    private Vector2 mouseDownPos;//記錄按下時滑鼠位置

 在這裡我對靈敏度進行強行限制,阻止負值。.

 void Start()
    {
        if (Sensitivity < 0)
            Sensitivity = 0;
    }

下邊為計算,在update中呼叫:

 //計算
    private void Calculate()
    {
        Vector2 newpos = Vector2.zero;
        switch (mouseCenter)
        {
            case MouseCenter.ScreeenCenter:
                newpos = new Vector2(Input.mousePosition.x - Screen.width / 2, Input.mousePosition.y - Screen.height / 2);//獲取滑鼠點相對螢幕中心向量差
                break;
            case MouseCenter.LastPosition:
                newpos = new Vector2(Input.mousePosition.x - mouseDownPos.x, Input.mousePosition.y - mouseDownPos.y);//獲取基於按下瞬間的向量差值
                mouseDownPos = Input.mousePosition;
                break;
            default:
                return;
        }
        Space spacetype = Space.Self;
        if (Mathf.Abs(newpos.x) > Sensitivity || Mathf.Abs(newpos.y) > Sensitivity)//拖動距離太短,不計算
        {
            //計算
            if (Mathf.Abs(newpos.x) > Mathf.Abs(newpos.y))
            {
                if (newpos.x < 0)
                {
                    MoveDir = cam.transform.right;
                    RotateDir = Vector3.down;
                }
                else
                {
                    MoveDir = -cam.transform.right;
                    RotateDir = Vector3.up;
                }
            }
            else
            {
                if (newpos.y < 0)
                {
                    MoveDir = Vector3.left;
                    RotateDir = Vector3.right;
                }
                else
                {
                    MoveDir = Vector3.right;
                    RotateDir = Vector3.left;
                }
            }
            if (Input.GetMouseButton(1))
            {
                if (Mathf.Abs(newpos.x) > 10 && Mathf.Abs(newpos.y) > 10)
                    spacetype = Space.World;
                cam.transform.Rotate(RotateDir*RotateSpeed * Time.deltaTime * 50, spacetype);
            }
            if (Input.GetMouseButton(2))
            {
                //transform.Translate(MoveDir * MoveSpeed * Time.deltaTime * 10);
                cam.transform.position += MoveDir * MoveSpeed * Time.deltaTime * 10;
                return;
            }

        }
        else
        {
            float h = Input.GetAxis("Mouse ScrollWheel");
            if (h == 0)
                return;
            int dir = h > 0 ? 1 : -1;
            cam.transform.position += transform.forward * dir * ZoomSpeed * Time.deltaTime * 20;
        }
    }

執行即可實現相機的移動縮放,旋轉。

  想要原始碼的可以去這裡下載,只要1積分

https://download.csdn.net/download/nt_xs_j/10754690