当前位置: 首页 > article >正文

Unity实现瞄准镜效果之美

玩过射击类游戏,里面的狙击枪是带有瞄准镜的,可以方便玩家可以瞄准远处的敌人,本篇文章要介绍的就是这个功能的实现,通过 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 在引用它的时候,会没有智能提示,完整的代码如下:

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

 

调整后效果:

 

 

这样效果是不是就明显多了,以上就是关于瞄准镜效果的实现,功能上要说实现也不复杂,就是需要大家不出错。

 

http://www.lryc.cn/news/2421099.html

相关文章:

  • PC装MAC OS 10.6雪豹系统教程
  • windows 执行CMD命令
  • Java爬虫实践:Jsoup+HttpUnit爬取今日头条、网易、搜狐、凤凰新闻
  • 开发WAP网站入门
  • 2021-03-01
  • .NET Framework 3.5 SP1 离线安装时下载文件问题及精简方法
  • chinaren同学录的字数倒记数
  • as3.0舞台自适应
  • 虚拟光驱DAEMONTools 3.47特别版/汇编版/珍藏版
  • flask中jinja2设置使用全局变量
  • iPad2 4.3.3完美越狱教程
  • 中间继电器
  • 2008年卫星地图_黄河入海口1984年-2016年,34年卫星地图变化
  • 【转】怎样将APP或PXL转为IPA格式
  • 天河一号超算集群编译安装OpenFOAM5.x
  • SSM博雅学校教务管理系统 毕业设计-附源码86203
  • VirtualBox 详细介绍:核心概念、安装步骤及高级用法
  • 【win】Beyondcompared 3 试用过期 修改注册表
  • 好用的android高清播放器,高清播放器哪个好用(推荐4款4K高清画质播放器)
  • 说透Applet的数字签名之1——Applet及其运行
  • HTC T328W 刷机后,WLAN、蓝牙无法使用的解决方法[亲测有效]
  • TCP/IP Monitor监控工具应用
  • Learning to See in the Dark
  • 巧遇卡自动聊天(约炮加强板)
  • 漂浮广告的代码汇总
  • Rational Rose 2007的详细安装步骤
  • BUUCTF题目Misc部分wp(持续更新)
  • InfluxDB源码解析
  • 使用ettercap进行ARP欺骗攻击实验(保姆级教程)
  • [转帖]手机报IN语