【unity小技巧】實現FPS武器的瞄準放大效果(UGUI實現反向遮罩,全屏遮擋,區域性鏤空效果)

向宇it發表於2024-03-04

最終效果

在這裡插入圖片描述

新增兩個材質

鏤空材質
在這裡插入圖片描述
全屏遮擋材質
在這裡插入圖片描述

配置對應材質

這裡鏤空使用一個圓形圖片
在這裡插入圖片描述

在這裡插入圖片描述
在這裡插入圖片描述
ps:注意位置Mask和背景位置不可以調換

瞄準鏡的紋理效果

在這裡插入圖片描述
在這裡插入圖片描述

程式碼控制瞄準開鏡放大效果

public class TelescopicView : MonoBehaviour
{
    public float zoomLevel = 2.0f; // 縮放倍數
    public float zoomSpeed = 10f; // 縮放速度

    private float initialFieldOfView; // 初始視野範圍
    private bool isAim;//是否瞄準
    public GameObject uiWindow; // UI視窗物件

    void Start()
    {
        // 獲取攝像機的初始視野範圍,預設值為60
        initialFieldOfView = Camera.main.fieldOfView;
    }

    void Update()
    {
        if (Input.GetMouseButton(1))
        {
            isAim = true;
            uiWindow.SetActive(true); // 啟用UI視窗
        }
        if (Input.GetMouseButtonUp(1))
        {
            isAim = false;
            uiWindow.SetActive(false); // 失活UI視窗
        }

        if (isAim)
        {
            ZoomIn();
        }
        else
        {
            ZoomOut();
        }
    }

    //視野平滑放大
    void ZoomIn()
    {
        float targetFieldOfView = initialFieldOfView / zoomLevel; // 計算目標視野範圍
        Camera.main.fieldOfView = Mathf.Lerp(Camera.main.fieldOfView, targetFieldOfView, Time.deltaTime * zoomSpeed); // 平滑過渡到目標視野範圍
        // 當接近目標視野範圍時,直接設定為目標視野範圍
        if (Mathf.Approximately(Camera.main.fieldOfView, targetFieldOfView))
        {
            Camera.main.fieldOfView = targetFieldOfView;
        }
    }

    //視野平滑縮小
    void ZoomOut()
    {
        Camera.main.fieldOfView = Mathf.Lerp(Camera.main.fieldOfView, initialFieldOfView, Time.deltaTime * zoomSpeed); // 平滑過渡回初始視野範圍

        // 當接近初始視野範圍時,直接設定為初始視野範圍
        if (Mathf.Approximately(Camera.main.fieldOfView, initialFieldOfView))
        {
            Camera.main.fieldOfView = initialFieldOfView;
        }
    }
}

配置引數
在這裡插入圖片描述

效果

在這裡插入圖片描述

完結

贈人玫瑰,手有餘香!如果文章內容對你有所幫助,請不要吝嗇你的點贊評論和關注,以便我第一時間收到反饋,你的每一次支援都是我不斷創作的最大動力。當然如果你發現了文章中存在錯誤或者有更好的解決方法,也歡迎評論私信告訴我哦!

好了,我是向宇https://xiangyu.blog.csdn.net

一位在小公司默默奮鬥的開發者,出於興趣愛好,最近開始自學unity,閒暇之餘,邊學習邊記錄分享,站在巨人的肩膀上,透過學習前輩們的經驗總是會給我很多幫助和啟發!php是工作,unity是生活!如果你遇到任何問題,也歡迎你評論私信找我, 雖然有些問題我也不一定會,但是我會查閱各方資料,爭取給出最好的建議,希望可以幫助更多想學程式設計的人,共勉~

在這裡插入圖片描述

相關文章