在第一或第三人称ACT和FPS游戏中,相机的运动需求是多种多样的,Unity内置的Cinemachine包可以助你快速实现不同相机功能,例如范围追踪,边界设置等。

例如,考虑这样一个功能,这在很多游戏中都是非常常用的:

1.在屏幕中心的一定范围内摄像机追踪一个主角单位,但这是一个惰性相机,当且仅当主角快要离开屏幕中心向屏幕边缘移动时相机才跟随过去。

2.当摄像机运动到了地图边缘时,它不再继续追踪目标,也就是说,相机还需要界定一个运动范围。

观察上图,图中黄色的点为摄像机跟踪的目标,淡蓝色的框为屏幕相机追踪的过渡区域,只有当追踪目标移动到淡蓝色的框中时,摄像机才开始朝角色的运动方向追踪,角色运动停止后,摄像机会保证追踪的主角停止在淡蓝色框内,红色框外。

图中主角已经运动到地图的边缘,所以摄像机不会继续向上或向右运动,这是因为利用碰撞盒子设置了摄像机的运动范围。

如上图,摄像机已经运动到了黄色碰撞盒子的边界,它无法再继续向上或向右运动,这样可以保证摄像机的视野范围不会超出地图的边缘。

知道了这些后,再来了解Cinemachine的功能将变得非常容易。

Cinemachine的功能看上去非常之多,但最终还是离不开虚拟摄像机这一组件。

我们可以利用菜单栏先创建一个虚拟摄像机:

虽然后面有各种各样的摄像机组件可以选择,但其实都是虚拟摄像机的不同设置而已,只要弄清楚了这一个组件的用法,其他都可以利用设置或自定义脚本来实现。

基本模块中比较重要的就是Follow和Look At,Follow是追踪的主角Transform,也可以运行后动态设置。

Look At根据需要选择是否设置,如果摄像机需要需要进行视角方位的旋转变换,则需要有一个Look At的目标,可以根据该目标的朝向来进行视角的旋转;只是跟随主角在固定的视角方向进行平移运动的话,就可以不用设置Look At。

Body模块主要功能是处理场景中相机和它的目标之间的位置关系。

用的比较多的是Ransposer和Framing Transposer,Framing Transposer可以很方便的实现惰性相机,里边有一个参数是Dead Zone区域设置,默认情况下是零,这时相机始终跟随目标位置反复移动,当Dead Zone扩大后,相机在屏幕中间的区域就会变得非常懒,就像死了一样,只有角色移动出死亡区域后相机才重新开始追踪目标。(如最上面图中的全透明区域)

Extentions提供了额外的扩展组件功能:

本例中增加了摄像机的区域设置,选择之后会自动增加一个脚本:

通过该脚本组件可以指定一个2D或3D的碰撞盒子作为作为摄像机的运动范围,利用该组件可以快速控制摄像机只在地图视野范围内运动。

官方参考:

https://connect.unity.com/p/li-yong-cinemachinekuai-su-chuang-jian-you-xi-zhong-de-xiang-ji-xi-tong

Unity 利用Cinemachine快速创建灵活的相机系统的更多相关文章

  1. MySQL Database on Azure - 利用PowerShell快速创建使用数据库服务

    如果您的应用需要通过脚本快速创建一个或多个MySQL数据库,MySQL Database on Azure目前开放了对于PowerShell的支持,可以帮助您快速利用自动化脚本进行数据库服务的创建.管 ...

  2. 如何利用Dreamwever快速创建表格???

    这样的一张表,用table写完感觉好累,很多单元格都不一样大,还要单独设置样式,今天还分享下用Dreamwever快速创建表格. 可能这会有人知道了!当然是插入表格了!

  3. 利用Docker快速创建Nginx负载均衡节点

    本文版权归博客园和作者吴双本人共同所有 转载和爬虫请注明原文地址 www.cnblogs.com/tdws 一.Self-Host Kestrel 1. 在vs2017中新建dotnet core2. ...

  4. 三分钟入坑指北 🔜 Docsify + Serverless Framework 快速创建个人博客系统

    之前由于学摄影的关系,为了提高自己的审美,顺便锻炼下自己的英文能力,翻译了不少国外艺术类的 文章.最近一直想搭一个个人博客来存放这些内容,又懒得折腾建站,遂一直搁置. 直到偶然发现了 docsify ...

  5. 利用 Create React Native App 快速创建 React Native 应用

    本文介绍的 Create-React-Native-App 是非常 Awesome 的工具,而其背后的 Expo 整个平台也让笔者感觉非常的不错.笔者目前公司是采用 APICloud 进行移动应用开发 ...

  6. Hyper-v之利用差异磁盘快速创建多个虚拟机

    在新建Hyper-v磁盘的时候 有3种选项 其中分别是 固定大小 动态扩展 和 差异(differencing,个人习惯叫 差分) 其中 固定大小是新建的时候 Hyper-v创建一个设置大小值的文件, ...

  7. 利用sublime的snippet功能快速创建代码段

    在前端开发中我们经常会输入相同的一些基本代码,例如常用的jquery引用,bootstrap框架,cssreset等等,如果每次使用时在复制粘贴感觉很麻烦,这里介绍一种更为简洁的方法 利用sublim ...

  8. Unity 基于Cinemachine计算透视摄像机在地图中的移动范围

    Unity中Cinemachine的基础功能介绍可详见之前写的博客: https://www.cnblogs.com/koshio0219/p/11820654.html 本篇的重点是讨论,在给定规则 ...

  9. 利用vue-cli3快速搭建vue项目详细过程

    一.介绍 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统.有三个组件: CLI:@vue/cli 全局安装的 npm 包,提供了终端里的vue命令(如:vue create .vue ...

随机推荐

  1. C#&.Net干货分享-构造QRCoderHelper生成二维码图片

    不想说废话,直接源码拿去用... /// <summary>    /// 二维码管理    /// </summary>    public class QRCoderHel ...

  2. mysql DDL 锁表

    mysql DDL 锁表 select trx_state, trx_started, trx_mysql_thread_id, trx_query from information_schema.i ...

  3. pip命令详解

    使用详解 1.pip安装软件 # pip install SomePackage 2.pip查看已安装的软件 # pip show --files SomePackage 3.pip检查哪些软件需要更 ...

  4. 【RTOS】基于V7开发板的uCOS-III,uCOS-II,RTX4,RTX5,FreeRTOS原版和带CMSIS-RTOS V2封装层版全部集齐

    RTOS模板制作好后,后面堆各种中间件就方便了. 1.基于V7开发板的最新版uCOS-II V2.92.16程序模板,含MDK和IAR,支持uC/Probe https://www.cnblogs.c ...

  5. C语言程序设计100例之(16):巧解算式

    例16  巧解算式 问题描述 在1.2.3.4.5.6.7.8.9.10个数中间加上加号或减号,使得到的表达式的值为自然数N,如果中间没有符号,则认为前后为一个数,如1 2 3认为是一百二十三(123 ...

  6. angularjs路由监听,uirouter感知路由变化,解决uirouter路由监听不生效的问题

     壹 ❀ 引 angularjs除了惊为天人的双向数据绑定外,路由也是出彩的一笔,通过路由配置,我们能在不发起页面跳转的情况下,对当前页内容进行整体更新,angularjs提供了ngRoute模块用于 ...

  7. Mybatis中的#{}和${}的区别?

    1,首先Mybatis中的#{}与${}到底有什么区别? #{}:表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换,#{} ...

  8. Java入门系列之集合ArrayList源码分析(七)

    前言 上一节我们通过排队类实现了类似ArrayList基本功能,当然还有很多欠缺考虑,只是为了我们学习集合而准备来着,本节我们来看看ArrayList源码中对于常用操作方法是如何进行的,请往下看. A ...

  9. java高并发系列【共34篇,强力建议观看】

    第1天:必须知道的几个概念 第2天:并发级别 第3天:有关并行的两个重要定律 第4天:JMM相关的一些概念 第5天:深入理解进程和线程 第6天:线程的基本操作 第7天:volatile与Java内存模 ...

  10. Java 的 IO 流

    接着上一篇的 “Java 的 File 类” 的随笔,在File类的基础上,我们就走进Java的IO流吧. 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在 ...