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

配置参数

效果

目录
相关文章
|
10天前
|
图形学
Unity UGUI拖拽移动
本文介绍了两种UI拖拽实现方式:精准拖拽和克隆拖拽。精准拖拽通过计算鼠标点击点与UI中心的偏移量,使UI跟随鼠标移动,适用于需要精确控制的场景。代码中通过`IBeginDragHandler`、`IDragHandler`和`IEndDragHandler`接口实现拖拽逻辑。克隆拖拽则在拖拽时克隆一个UI对象,使其跟随鼠标移动,适合视觉效果需求较高的场景。代码中同样使用上述接口,并在拖拽结束时销毁克隆对象。具体实现可参考提供的代码示例。
|
10天前
|
图形学
Unity 获取鼠标位置下的UGUI或3D物体
本文总结了两种检测方法,分别用于UGUI和3D物体的检测。第一种方法`GetOverUIobj`专门用于检测鼠标悬停的UGUI元素,通过`GraphicRaycaster`实现。第二种方法`GetOverWordGameObject`则同时适用于UI和3D物体检测,利用`PhysicsRaycaster`进行射线检测。两者均返回悬停对象或null。
|
10天前
|
前端开发 图形学
unity UGUI跟随3D物体的坐标转换
在 Unity 中实现 UGUI 元素跟随 3D 物体,关键是将 3D 物体的世界坐标转换为屏幕或画布坐标。通过 Camera.WorldToScreenPoint 方法,可将 3D 物体位置映射到屏幕上,再更新 UGUI 元素的位置。代码示例展示了如何使用该方法,使 UGUI 图像跟随 3D 模型,并提供文字显示、图像和线条的显示/隐藏功能。
|
11天前
|
图形学
Unity UGUI实现鼠标拖动图片
在 Unity UGUI 中实现鼠标拖动图片功能,主要涉及事件检测、坐标转换和物体位置更新。根据鼠标移动量更新图片位置。代码示例展示了如何通过这些步骤实现拖动效果。
|
8月前
|
图形学 开发者
【Unity小技巧】unity移动物体的探究——使用8个不同方法
【Unity小技巧】unity移动物体的探究——使用8个不同方法
397 1
|
8月前
|
图形学
【unity小技巧】Unity中实现一个战斗连击连招系统,可以动态添加减少连击连招段数功能
【unity小技巧】Unity中实现一个战斗连击连招系统,可以动态添加减少连击连招段数功能
189 0
|
8月前
|
存储 图形学
【unity小技巧】unity事件系统创建通用的对象交互的功能
【unity小技巧】unity事件系统创建通用的对象交互的功能
92 0
|
8月前
|
图形学
【unity小技巧】unity通过代码进行更改后处理效果
【unity小技巧】unity通过代码进行更改后处理效果
129 0
|
8月前
|
数据可视化 大数据 API
【推荐100个unity插件之22】基于UGUI的功能强大的简单易用的Unity数据可视化图表插件——XCharts3.0插件的使用
【推荐100个unity插件之22】基于UGUI的功能强大的简单易用的Unity数据可视化图表插件——XCharts3.0插件的使用
357 0
|
8月前
|
图形学
【unity小技巧】unity3D寻路指示轨迹预测
【unity小技巧】unity3D寻路指示轨迹预测
118 0