这篇文章我们讨论一下如何通过 Camera来制作一个瞄准镜的效果,玩射击类游戏比较多的朋友大概就能感觉出来这个功能大致的实现效果如何了。

主要的方法就是通过调整 Camera的 Field Of View,让其渐大渐小来实现

当我们瞄准的时候,我们只需要将 Field Of View 变小,停止瞄准的时候,再将Field Of View 恢复成原来的大小

 if (Mathf.Abs(Camera.main.fieldOfView-(initFOV/ZoomLevel))<0.5f){Camera.main.fieldOfView = initFOV/ZoomLevel;}else if (Camera.main.fieldOfView-(Time.deltaTime*ZoomInSpeed)>=initFOV/ZoomLevel){Camera.main.fieldOfView -= Time.deltaTime*ZoomInSpeed;}
if (Mathf.Abs(Camera.main.fieldOfView - (initFOV/ZoomLevel)) < 0.5f){Camera.main.fieldOfView = initFOV;}else if (Camera.main.fieldOfView+(Time.deltaTime*ZoomOutSpeed)<=initFOV){Camera.main.fieldOfView += Time.deltaTime*ZoomOutSpeed;}

效果如下:瞄准前

瞄准后:

简单的效果大致是有了,但是总觉得有些不足,我们实际上可以 瞄准时候只在圆圈方位内显示所看到的物体

还好,我们的Unity 为我们提供了 Image Effect 制作后期效果的资源包,可以把  Vignetting脚本附加到 Camera上,然后通过在脚本中 控制 Vignetting 实例的 intensity来达到我们所想要的镜头的效果。

由于 Vignetting脚本是用 javascript编写的,CSharp 在引用它的时候,会没有智能提示,o(╯□╰)o,完整的代码如下:

public class TelescopicView : MonoBehaviour
{public float ZoomLevel = 2;public float ZoomInSpeed = 100f;public float ZoomOutSpeed = 100f;private float initFOV;private Vignetting vignette;private float vignetteAmount = 10.0f;// Use this for initializationvoid Start(){initFOV = Camera.main.fieldOfView;vignette = GetComponent<Vignetting>();}// Update is called once per framevoid Update(){if (Input.GetMouseButton(1)){ZoomView();}else{ZoomOut();}}private void ZoomView(){if (Mathf.Abs(Camera.main.fieldOfView-(initFOV/ZoomLevel))<0.5f){Camera.main.fieldOfView = initFOV/ZoomLevel;vignette.intensity = vignetteAmount;}else if (Camera.main.fieldOfView-(Time.deltaTime*ZoomInSpeed)>=initFOV/ZoomLevel){Camera.main.fieldOfView -= Time.deltaTime*ZoomInSpeed;vignette.intensity = vignetteAmount * (Camera.main.fieldOfView - initFOV) / ((initFOV / ZoomLevel) - initFOV);}}private void ZoomOut(){if (Mathf.Abs(Camera.main.fieldOfView - (initFOV/ZoomLevel)) < 0.5f){Camera.main.fieldOfView = initFOV;vignette.intensity = 0;}else if (Camera.main.fieldOfView+(Time.deltaTime*ZoomOutSpeed)<=initFOV){Camera.main.fieldOfView += Time.deltaTime*ZoomOutSpeed;vignette.intensity = vignetteAmount * (Camera.main.fieldOfView - initFOV) / ((initFOV / ZoomLevel) - initFOV);}}
}

实现效果也贴出来:

是不是很生动啊。。。

Unity实现瞄准镜效果相关推荐

  1. Unity实现瞄准镜效果之美

    玩过射击类游戏,里面的狙击枪是带有瞄准镜的,可以方便玩家可以瞄准远处的敌人,本篇文章要介绍的就是这个功能的实现,通过 Camera来制作一个瞄准镜的效果. 主要的方法就是通过调整 Camera的 Fi ...

  2. 【unity 3d】--- 瞄准镜效果

    瞄准镜效果的实现 using System.Collections; using System.Collections.Generic; using UnityEngine; /// <summ ...

  3. unity 条目换位效果_Unity AI主题博客条目

    unity 条目换位效果 Welcome to the first of Unity's new AI-themed blog entries! We have set up this space a ...

  4. Unity 实现贴花效果的制作教程

    c#教程​https://www.cnblogs.com/Yesi/p/15829200.html ​ 有些游戏中的战斗痕迹的效果会通过贴花来实现的,贴花的方式多种多样.而在Unity中,有一种给官方 ...

  5. unity气流模拟效果

    机房气流模拟效果 参考 效果展示: 资源链接:unity气流模拟效果-Unity3D文档类资源-CSDN下载

  6. 用Unity实现景深效果

    用Unity实现景深效果 景深也是一种非常常见的后处理手段,它用来模拟相机拍摄画面的效果.今天我们讨论如何在Unity中实现它. 简单来说,景深效果可以拆分为两个部分,一个部分是聚焦,使画面中指定的区 ...

  7. Unity 翻书效果

    Unity翻书效果 目前做的VR项目中需要一个翻阅魔法书的效果,考虑过使用UnityBookPageCurl-master插件,但是那个插件是纯UI显示的,只有二维效果,在VR里观感不佳,之后在网上找 ...

  8. Unity时光倒流效果实现

    Unity时光倒流效果实现<25/11/2017> 场景:一个Panel,一个由众多小Cube堆叠而成的巨大Cube,巨大Cube中心放置爆炸点Bomb. 实现方式:一共就三个脚本,每个C ...

  9. Unity UV 水效果实现

    Unity UV 水效果实现 Unity Water Shader 组件搭载 基本参数调节 所需图片 效果呈现 Unity Water Shader Shader "Custom/SeaWa ...

最新文章

  1. java awt button_AWT Button类
  2. 【随机过程】随机过程之泊松过程的推广
  3. LL-verilog卡诺图sop和pos
  4. Magento 架构原则
  5. linux常用命令(精)
  6. 2019.8.6原型链与继承
  7. 计算机组成原理(白中英) 第二章 课后题答案
  8. Excel 内的 VBS 脚本编程锦策
  9. Facebook引流到独立站的三种技巧~附保姆级教程
  10. android 后台运行管理,Android 后台运行白名单实现保活
  11. 工业相机镜头 参数概念
  12. Excel 某招聘网站职位分析项目
  13. Redis底层数据结构——跳跃列表
  14. android禁止弹出保存此图片,安卓手机相册总是出现陌生图片?教你彻底清除!...
  15. NFC功能移植pn54x系列
  16. document.documentElement对象
  17. 彻底关闭win11自动更新
  18. 如何无损增大C盘容量
  19. CRC32 tools in Ubuntu /fedora
  20. Java8-Stream流整合(1)

热门文章

  1. 【TDA2x学习】TDA2HG 知识点总结
  2. matlab数据接口技术,Matlab与Pspice的数据接口技术
  3. 计算机音乐文爱图片,CG/贺敬轩《文爱》[FLAC/MP3-320K]
  4. 【opencv】双目视觉下空间坐标计算/双目测距 6/13更新
  5. 别忘了看,今年中秋月亮“瘦”了!网友扎心了:我还没瘦…
  6. 计算机的安全模式更改密码,我的电脑进安全模式需要密码,用户名是Administrator,密码忘记了,该怎么办呢?...
  7. css 字体样式设置大全
  8. 中国云计算产业渐成熟 加速传统产业转型升级
  9. 如何在bat文件中切换盘符并执行命令
  10. 【HTML | 模板】自定义 商品列表 (商品表格)