【unity小技巧】实现FPS武器的瞄准放大效果(UGUI实现反向遮罩,全屏遮挡,局部镂空效果)

简介: 【unity小技巧】实现FPS武器的瞄准放大效果(UGUI实现反向遮罩,全屏遮挡,局部镂空效果)

最终效果

新增两个材质

镂空材质

全屏遮挡材质

配置对应材质

这里镂空使用一个圆形图片

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;
        }
    }
}

配置参数

效果

目录
相关文章
|
5月前
|
图形学 开发者
【Unity小技巧】unity移动物体的探究——使用8个不同方法
【Unity小技巧】unity移动物体的探究——使用8个不同方法
171 1
|
5月前
|
图形学
【unity小技巧】实现投掷物品,比如长矛,刀具,手榴弹和其他物体
【unity小技巧】实现投掷物品,比如长矛,刀具,手榴弹和其他物体
60 1
|
5月前
|
图形学
【unity小技巧】Unity中实现一个战斗连击连招系统,可以动态添加减少连击连招段数功能
【unity小技巧】Unity中实现一个战斗连击连招系统,可以动态添加减少连击连招段数功能
117 0
|
5月前
|
存储 图形学
【unity小技巧】unity事件系统创建通用的对象交互的功能
【unity小技巧】unity事件系统创建通用的对象交互的功能
54 0
|
5月前
|
图形学
【unity小技巧】unity通过代码进行更改后处理效果
【unity小技巧】unity通过代码进行更改后处理效果
72 0
|
5月前
|
数据可视化 大数据 API
【推荐100个unity插件之22】基于UGUI的功能强大的简单易用的Unity数据可视化图表插件——XCharts3.0插件的使用
【推荐100个unity插件之22】基于UGUI的功能强大的简单易用的Unity数据可视化图表插件——XCharts3.0插件的使用
184 0
|
5月前
|
图形学
【unity小技巧】unity3D寻路指示轨迹预测
【unity小技巧】unity3D寻路指示轨迹预测
72 0
|
5月前
|
图形学
【unity小技巧】unity读excel配置表操作,excel转txt文本,并读取txt文本内容,实例说明
【unity小技巧】unity读excel配置表操作,excel转txt文本,并读取txt文本内容,实例说明
173 0
|
5月前
|
编解码 算法 图形学
【unity小技巧】减少Unity中的构建打包大小
【unity小技巧】减少Unity中的构建打包大小
150 0
|
5月前
|
图形学
【unity小技巧】Unity人物衣服布料系统的探究 —— Cloth组件
【unity小技巧】Unity人物衣服布料系统的探究 —— Cloth组件
197 0