玩过射击类游戏,里面的狙击枪是带有瞄准镜的,可以方便玩家可以瞄准远处的敌人,本篇文章要介绍的就是这个功能的实现,通过 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);}}
}

调整后效果:

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

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

  1. Unity实现瞄准镜效果

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

  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. windows/linux计算文件 MD5值
  2. Android工程目录
  3. ai字体素材网站_4个网站,涵盖几乎所有素材,字体、设计、图片各种资源管够...
  4. High Logic MainType 10中文版
  5. 东北全面放开生育,数据揭秘人口和GDP和房价间联系
  6. 【广告技术】如何科学地划分用户群体?在聚类中考虑用户特征和社会关系
  7. TensorSpace:超酷炫3D神经网络可视化框架
  8. 为Qt Designer创建自定义Widgets小部件
  9. git已经删除了远程分支,但本地环境仍能看到远程分支
  10. 计算机无法显示外接硬盘,移动硬盘不显示怎么办解决教程
  11. busybox内置tftpd服务器配置
  12. 【微信小程序】从零开始搭建一个英语学习小程序01——基础准备
  13. 计算机内存条能装几个,4G内存条和2G内存条能不能装到一个电脑上?
  14. CentOS yum方式升级内核kernel
  15. 我们向印度人学习什么?
  16. 一加6点击五下出来Android10,一加6T现已推送Android 10.0公测版更新
  17. python-CST MWS自动采样
  18. java excel 设置列为日期,POI - 如何将单元格值设置为日期并应用默认Excel日期格式?...
  19. 有些不知道自己应该做些什么
  20. Android Kotlin : 困惑解答

热门文章

  1. JAVA_OPTS讲解【转】
  2. Programming Rust Fast, Safe Systems Development(译) 引用(第五章 完)
  3. 《刻意练习》读书笔记之一
  4. java argument type mismatch_解决mybatisplus插入报错argument type mismatch的问题
  5. linux驱动管道,Xilinx Linux 如何理解V4L2的管道驱动程序
  6. web微信Android版,android实现用户体验超棒的微信WebView进度条
  7. 一起使用Mac和iPhone的10种便捷方法
  8. VS2019源码,通过基址+偏移修改软件内阳光数值(植物大战僵尸单机版)
  9. 三维重建(1):坐标系之间的变换
  10. 李宏毅《机器学习》笔记:3.误差分析和梯度下降