最终效果
新增两个材质
镂空材质
全屏遮挡材质
配置对应材质
这里镂空使用一个圆形图片
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; } } }
配置参数
效果