2020年1月1日 星期三

Unity筆記:2D戰略沙盒角色相機完美控制。


2020/7/14
Day1000

第一千天的上午,
來把相機給完善一下,
之前只會跟著角色太單調了,
玩家也很想要直接往角色以外的地方看敵人的城鎮在做什麼,
做出來也才有那種沙盒觀察的感覺。
(つд⊂)

實現項目如下:


-----------------------
1.相機跟隨角色
*當角色移動時,相機僅跟隨角色而不自由移動,
而開新遊戲或讀檔也要記得在載入完資料後設定一下位置。

相機跟隨角色();
        cam.transform.position = player.transform.position + new Vector3(0, 0, -10);
        更新左上位置狀態資訊();
        //相機跟隨角色一樣的東西
-----------------------
2.相機自由移動
*當相機沒有其他工作時,
滑鼠靠近螢幕邊緣自動移動相機。

if (是否移動單位 == false)
        {
            float 相機移動速度 = (float)相機大小 / (float)100;

            if (Input.mousePosition.y + 10 > Screen.height)
                cam.transform.position += new Vector3(0, 相機移動速度, 0);
            else if (Input.mousePosition.y - 10 < 0)
                cam.transform.position -= new Vector3(0, 相機移動速度, 0);


            if (Input.mousePosition.x + 10 > Screen.width)
                cam.transform.position += new Vector3(相機移動速度, 0, 0);
            else if (Input.mousePosition.x - 10 < 0)
                cam.transform.position -= new Vector3(相機移動速度, 0, 0);
        }
-----------------------
3.相機鏡頭縮放
*通過按鈕和滾輪來縮放相機。

if (Input.GetAxis("Mouse ScrollWheel") < 0)
        {
            相機縮小();
            播放按鈕音效();
        }
        else if (Input.GetAxis("Mouse ScrollWheel") > 0)
        {
            相機放大();
            播放按鈕音效();
        }


public const int 相機標準值 = 7;
    public void 相機縮小()
    {
        int 大變化值 = 20;

        if (相機大小 <= 相機標準值)
        {
            相機大小 -= 1;
        }
        else
        {
            相機大小 -= 大變化值;
            if (相機大小 < 相機標準值)
            {
                相機大小 = 相機標準值;
            }
        }


        if(相機大小 < 1)
        {
            相機大小 = 1;
        }

        cam.orthographicSize = 相機大小;

        相機跟隨角色();
    }
    public void 相機放大 ()
    {
       

        int 大變化值 = 20;

        long 相機大小上限 = 40 + 玩家.神力等級();
       

        if (相機大小 < 相機大小上限)
        {
            if (相機大小 < 相機標準值)
            {
                相機大小 += 1;
            }
            else
            {
                相機大小 += 大變化值;
                更新所有單位狀態UI();
            }
            cam.orthographicSize = 相機大小;
        }
        else
        {
            string 相機大小上限描述 = "(" + 相機大小 + "/" + 相機大小上限 + ")";

            新增左上日誌文字
                (
                "Need a higher level to increase vision scale!" + 相機大小上限描述 + "\n",
                "需要更高的等級來增加視野範圍!" + 相機大小上限描述 + "\n"
                );
            開啟左上UI();
        }


        相機跟隨角色();
    }
-----------------------
4.相機移動速度受鏡頭大小影響
*相機鏡頭愈大,移動速度愈快。

上面自由移動的部分就直接套用了鏡頭大小。
-----------------------
5.相機回到角色
*一個簡單的Home鍵。

其實就是相機跟隨角色。
-----------------------


比想像中簡單多了,
還好我有做一下,
做完效果很不錯,
CP值高的工作量感覺真好!
(〃∀〃)ゞ

2 則留言:

  1. 另外有一個直觀的操作是鏡頭向滾時自動往縮放的位置移動,
    這個在許多地圖的程式上都會用到,
    可以把縮放到位置的範圍跟鏡頭的大小作關聯,
    另外這個功能通常只有"縮"才會用到,
    實裝好之後鏡頭的位移加上滾輪縮放會方便很多。

    回覆刪除

你發現了這篇網誌的留言板,在這留點什麼吧|д・)