1. 程式人生 > 其它 >Unity滑鼠在螢幕邊緣移動視角

Unity滑鼠在螢幕邊緣移動視角

效果類似RTS遊戲中滑鼠在螢幕邊緣移動視角

在場景中任意新增一個參照物即可

1.首先是2D場景

新建空物體並搭載指令碼CamMove

public class CamMove : MonoBehaviour
{
    public float edgeSize;	//會產生移動效果的邊緣寬度
    public float moveAmount;    //移動速度

    public Camera myCamera;	//會移動的攝像機

    private Vector3 camFollowPos;	//用於給攝像機賦值

    private bool edgeScrolling = true;	//移動開關
    // Start is called before the first frame update
    void Start()
    {
        camFollowPos = myCamera.transform.position;	//儲存攝像機初始位置,移動是在初始位置的基礎上計算
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))	//移動開關
        {
            edgeScrolling = !edgeScrolling;
        }
        if (edgeScrolling)	//如果開啟
        {
            //螢幕左下角為座標(0, 0)
            if (Input.mousePosition.x > Screen.width - edgeSize)//如果滑鼠位置在右側
            {
                camFollowPos.x += moveAmount * Time.deltaTime;//就向右移動
            }
            if (Input.mousePosition.x < edgeSize)
            {
                camFollowPos.x -= moveAmount * Time.deltaTime;
            }
            if (Input.mousePosition.y > Screen.height - edgeSize)
            {
                camFollowPos.y += moveAmount * Time.deltaTime;
            }
            if (Input.mousePosition.y < edgeSize)
            {
                camFollowPos.y -= moveAmount * Time.deltaTime;
            }
            myCamera.transform.position = camFollowPos;//重新整理攝像機位置
        }
    }
}

這樣滑鼠移動到螢幕邊緣時攝像頭就會移動

2.然後是3D場景

將指令碼中會變化的camFollowPos.y改為camFollowPos.z即可

public class CamMove : MonoBehaviour
{
    ......
            if (Input.mousePosition.y > Screen.height - edgeSize)
            {
                camFollowPos.z += moveAmount * Time.deltaTime;
            }
            if (Input.mousePosition.y < edgeSize)
            {
                camFollowPos.z -= moveAmount * Time.deltaTime;
            }
        }
    }
}