在第一或第三人称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. MS SQL 批量操作

    MS SQL支持 sysobject,因此可以用以下条件语句查询表对象 select Name from sysobjects where xtype='U' and Name like 'dnt_% ...

  2. CodeForces-1265E(期望)

    题意 有1~n镜子,每个镜子说你漂亮的概率是pi/100,如果第i个回答你漂亮那么就一直问到第n个说漂亮为止,否则重新从1开始问,一天只问一个镜子,问直到镜子n说你漂亮的期望天数. 思路 设Ei为问到 ...

  3. [专题总结]初探插头dp

    彻彻底底写到自闭的一个专题. 就是大型分类讨论,压行+宏定义很有优势. 常用滚动数组+哈希表+位运算.当然还有轮廓线. Formula 1: 经过所有格子的哈密顿回路数. 每个非障碍点必须有且仅有2个 ...

  4. Java 创建线程的3种方法及各自优势

    1. 继承 Thread 类,然后调用 start 方法. class MyThread extends Thread { //重写run方法,线程运行后,跑的就是run方法 public void ...

  5. SpringCloud微服务(06):Config组件,实现配置统一管理

    本文源码:GitHub·点这里 || GitEE·点这里 一.Config简介 在微服务系统中,服务较多,相同的配置:如数据库信息.缓存.参数等,会出现在不同的服务上,如果一个配置发生变化,需要修改很 ...

  6. Git原理入门解析

    前言: 之前听过公司大佬分享过 Git 原理之后就想来自己总结一下,最近一忙起来就拖得久了,本来想塞更多的干货,但是不喜欢拖太久,所以先出一版足够入门的: 一.Git 简介 Git 是当前流行的分布式 ...

  7. SpringCloud的入门学习之概念理解、Hystrix断路器

    1.分布式系统面临的问题,复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免地失败. 2.什么是服务雪崩? 答:多个微服务之间调用的时候,假设微服务A调用微服务B和微服务 ...

  8. 一起学Android之ContentProvider

    本文主要讲解在Android开发中ContentProvider的常规用法,仅供学习分享使用,如有不足之处,还请指正. 访问一个ContentProvider 在Android开发中,应用程序通过Co ...

  9. 使用 Polly 实现复杂策略(超时重试)

    一.背景 第一次接触 Polly 还是在做某个微服务系统的时候,那时只会使用单一的超时策略与重试策略,更加高级的特性就没有再进行学习了.最近开为某个客户开发 PC 端的上位机的时候,客户有个需求,在发 ...

  10. PlayJava Day016

    今日所学: /* 2019.08.19开始学习,此为补档. */ 数组 1.一维数组:数据类型[ ] 变量名 = new 数据类型[长度] 获取长度:array.length 在使用下标时确保不超过a ...