Cinemachine学习笔记

Cinemachine学习笔记以下都是转载内容,能够比较直观的学习一些基础内容。现在的Cinemachine更新了许多新的功能,但是Cinemachine插件都ExamplesScences,去看一下官方例子和文档来学习更佳*版本要求Unity2017.1及以上。参考资料: [官方]Unity2017.1正式版发布 Cinemachine插件:Cinemachine。 结合Timeline实现动画:Unity…

大家好,又见面了,我是你们的朋友全栈君。

以下都是转载内容,能够比较直观的学习一些基础内容。现在的Cinemachine更新了许多新的功能,但是Cinemachine插件都ExamplesScences,去看一下官方例子和文档来学习更佳

*版本要求Unity2017.1及以上。

参考资料: 
[官方] Unity 2017.1正式版发布 
Cinemachine插件:Cinemachine。 
结合Timeline实现动画:Unity Cinemachine插件学习笔记,结合Timeline实现简单场景动画 
官网教程:Timeline and Cinemachine (Cameras)

  Cinemachine在2017版中正式加入,结合Timeline可以轻松的制作出一下相机动画。相比Unity自带的标准相机,这个新相机插件可操作的变量更多,不同虚拟相机(用来控制相机的)可以平滑转换等,具体可见上方第一个链接。


Cinemachine

Cinemachine学习笔记

选项名 说明
Virtual Camera 普通虚拟相机。最常用的相机设备。其实下面的都是虚拟相机。
FreeLook Camera 自由查看相机。可以保证镜头内出现头和身体,及相机的活动范围在目标周围圆柱(曲面的)表面,常用于第三人称视角。
State-driven Camera 状态驱动相机。添加虚拟相机列表,可以在不同的相机直接直接实现平滑切换,同时其子相机列表如果没有设置LookAt对象等,会直接使用这个父相机的对象。
ClearShot Camera 干净镜头相机。类似上一个相机,区别在于这个相机可以通过判断子相机的CinemachineCollider(如果有),看是否相机被场景物体阻碍,切换相机。具体可看其源码注释。
Dolly Camera with Track 可推拉的轨道相机。通过结合轨道路径,就可以模拟像拍电影般镜头轨道移动。
Group Target Camera 多目标相机。可以同时设置多个目标。

Cinemachine Brain

  相机的脑子,只有这个组件要添加到Camera上,才能实现任何虚拟相机的效果。

Cinemachine学习笔记

变量名 说明
Live Camera 当前选择的虚拟相机。
Live Blend 当前的镜头转换名称。
Show Debug Text 在游戏画面左上角显示调试信息。
Show Camera Frustum 显示相机的视锥体,相比原来自带的边框,这个会裁切掉不在显示范围内的边线。
World Up Override 重载世界的向上方向(y轴),虚拟相机是通过这个来判断世界环境。
Default Blend 默认相机切换模式。
Custom Blends 自定义相机切换模式。
Camera Cut Event 相机立即切换时事件。
Camera Activated Event 相机混合(就是有切换变化,不是Cut时)切换时第一帧事件。

Cinemacine Virtual Camera

Cinemachine学习笔记

变量名 说明
Status : Live/Standby/Disable 当前这个虚拟相机的状态。Live为正在使用,Standby为准备使用(没在用,但如果上一级停用了,可能会切换到当前虚拟相机),Disable为不能用。按Solo按钮会让相机切换到这个虚拟相机(包括Disable)。
Priority 虚拟相机的优先级,如果同时有多个虚拟相机,使用优先级最高的。如果多个同等级的,应该是按Hierarchy顺序找到第一个虚拟相机。
Look At 相机的视角目标。
Follow 相机的跟随目标。
Lens 镜头常用配置。视角区域,最近最远裁切平面, 镜头旋转角度。
Aim 瞄准设置,有三种:Hard constraint,固定距离,没有任何平滑效果。Composer,有平滑效果的瞄准目标。Group Composer,同时瞄准多个目标。
Body 相机本身。四种:Hard constraint,固定距离,相当于第一人称。 Orbital Transposer:轨迹转换器?似乎是模拟第三人称。 Tracked Dolly,轨道推拉,相机只能在轨道上移动(即使设置了Follow对象),需要轨道路径CinemachinePath。 Transposer,普通的镜头转换。
Noise 噪声。可以模拟相机手持抖动效果。

Cinemachine学习笔记 
如上图配置,虚拟相机会找到带脑子的相机并控制他的位置角度,游戏画面中,黄点是目前目标坦克的位置(设置了z轴偏移量5,所以实际位置在坦克向前5个单位)。最里面黄色区域(Dead Zone)为黄点自由移动区域,在这个范围内 目标移动了并不会改变相机位置。第二层绿色区域(Soft Zone)为目标允许在的范围,不过随时间推移最后会限制在最里层。最外层红色区域为目标不允许停留范围,及坦克一旦脱离绿色以外的区域,会立即移动相机来保持目标不离开镜头范围。

单个目标

Cinemachine学习笔记 
实际运行时,是使用Hard constraint。因为主角旋转幅度大,镜头变化大,使用Transposer的自由范围会产生不适。

多个目标

Cinemachine学习笔记

变量名 说明
Position Mode 位置模式。Group Center,所有目标的中心(长方体中心)。 Group Average,所有目标位置和权重的平均值。
Rotation Mode 旋转模式。Manual,手动,就是根据虚拟相机身体设置。Group Average,所有目标旋转平均值。

因为目标不是简单的Transform,而是包含权重和半径的。所以在使用代码添加时,需要创建其结构体:CinemachineTargetGroup.Target。是在类内嵌的结构体,具体可见其源码。下面用代码实现添加对象组。

 
  1. public void SetTargets(params Transform[] targets)

  2. {

  3. if (targets.Length <= 0)

  4. return;

  5. CinemachineTargetGroup.Target[] cmTargets = new CinemachineTargetGroup.Target[targets.Length];

  6. for (int i = 0; i < targets.Length; i++)

  7. cmTargets[i] = new CinemachineTargetGroup.Target() { target = targets[i], weight = 1f, radius = 1f };

  8. targetGroup.m_Targets = cmTargets; //将创建的列表赋给目标对象组。

  9. }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

Cinemachine学习笔记 
(上面粒子有Bug,是更新2017版本后出现的,不要在意。)

单个目标 和 多个目标之间切换

Cinemachine学习笔记 
上图自定义混合变化包含两个虚拟相机的切换,在资源文件中创建(Create/Cinemachine/Blender/Settings),分别是单目标和多目标(其实这里加不加都一样,因为样式和默认的一样)。代码很简单,只要设置虚拟相机是否开启即可。

 
  1. // 多目标转换到单目标

  2. cmFollowCameraRig.followVitualCamera.enabled = true; // 激活单个目标虚拟相机组件

  3. cmMultiTargetCameraRig.multiVirtualCamera.enabled = false; // 关闭多目标虚拟相机组件

  4.  
  5. // 单目标转换到多目标,与上面相反

  6. cmFollowCameraRig.followVitualCamera.enabled = false;

  7. cmMultiTargetCameraRig.multiVirtualCamera.enabled = true;

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

游戏开始,多目标转换到单目标

Cinemachine学习笔记

主角死掉,单目标转多目标

Cinemachine学习笔记

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/140119.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python 实现协同过滤推荐算法

    测试数据http://grouplens.org/datasets/movielens/#!/usr/bin/python3#-*-coding:utf-8-*-fromnumpyimport*importtimefromtexttableimportTexttable#协同过滤推荐算法主要分为:#1、基于用户。根据相邻用户,预测当前用户没有偏好的未涉及物

    2022年4月9日
    39
  • 研华acdp手机版_generation z

    研华acdp手机版_generation z上帝手中有 N 种世界元素,每种元素可以限制另外 1 种元素,把第 i 种世界元素能够限制的那种世界元素记为 A[i]。现在,上帝要把它们中的一部分投放到一个新的空间中去建造世界。为了世界的和平与安宁,上帝希望所有被投放的世界元素都有至少一个没有被投放的世界元素限制它。上帝希望知道,在此前提下,他最多可以投放多少种世界元素?输入格式第一行是一个整数 N,表示世界元素的数目。第二行有 N 个整数 A[1],A[2],…,A[N]。A[i] 表示第 i 个世界元素能够限制的世界元素的编号。输出格式

    2022年8月11日
    0
  • ettercap详细使用教程

    ettercap简介ettercap是一款强大的嗅探工具。ettercap主页面mitm方法ARPARP欺骗 ICMP发送ICMP数据包重定向到kali,然后由kali转发(只有受害者发出的数据包经过kali) DHCP发送DHCP数据包,让受害者认为kali是路由器,(只有受害者发…

    2022年4月4日
    440
  • QQ空间缓存图片_QQ空间原图

    QQ空间缓存图片_QQ空间原图不知各位遇到特别长的图片时是怎么处理的?是截取符合长宽的部分做临时展示?还是硬要长宽100%模糊(啥也看不清)展示?还是先拿一个压缩的图片做占位,在鼠标移入或点击时放大预览?今天偶然打开PC端QQ空间时,我发现了一种似乎更好的方式——鼠标移入时在范围内上下滚动图片预览,移出时停止滚动。直到用户点击图片跳转到详情展示:分析这种方式着实让我“眼前一亮”,一定程度上带给了用户新奇的体验感。顺着思路,一键f12打开源码,我看到了这样的代码:显而易见,QQ应该是采用了js监听鼠标位

    2022年8月10日
    4
  • Linux安装nmtui(nmtui连接wifi)

    Step1yuminstallNetworkManager-tuiStep2systemctlstartNetworkManagerStep3nmtui

    2022年4月18日
    172
  • 命令模式 Command「建议收藏」

    命令模式 Command「建议收藏」命令模式 Command动机模式定义实例结构要点总结笔记动机在软件构建过程中,“行为请求者”与”行为实现者”通常呈现一种”紧耦合”,但在某些场合—-比如需要对行为进行记录,撤销/重(Undo / Redo),事务”等处理,这种无法抵御变化的紧耦合是不合适的在这种情况下,如何将”行为请求者”和”行为实现这”解耦?将一组行为抽象为对象,可以实现两者之间的松耦合模式定义将一个请求(行为)封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作实例#i

    2022年8月8日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号