本文主要是介绍unity相机插件Cinemachine的使用笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
首先导入插件,本插件主要用于做相机控制,先
记录三个小功能的使用方法。
第一,多个视角的切换。如果在场景中需要进行视角切换,首先点击菜单栏Cinemachine->Create Virtual Camera,就可以得到一个虚拟相机。
这些虚拟相机都是被主摄像机控制的,并不是真实存在的。
调整相机的角度,可以点击虚拟相机上的solo按钮来查看当前相机的视角
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Cinemachine;
using UnityEngine.PostProcessing;public class CameraManager : MonoBehaviour
{public static CameraManager Instance;public CinemachineBrain CameraBrainScript;public List<CinemachineVirtualCamera> childCameraLst = new List<CinemachineVirtualCamera>();public CinemachineVirtualCamera CameraFollow;private PostProcessingBehaviour localProfile;public FireItem TargetFireItem;void Awake(){Instance = this;}// Use this for initializationvoid Start (){CinemachineVirtualCamera[] cameras = this.transform.GetComponentsInChildren<CinemachineVirtualCamera>();for (int i = 0; i < cameras.Length; i++){childCameraLst.Add(cameras[i]);}childCameraLst[0].MoveToTopOfPrioritySubqueue();localProfile = CameraBrainScript.transform.GetComponent<PostProcessingBehaviour>();localProfile.profile.vignette.settings = new VignetteModel.Settings(){mode = VignetteModel.Mode.Classic,color = Color.black,center = new Vector2(0.5f, 0.5f),intensity = 0.45f,smoothness = 0.2f,roundness = 1,rounded = false,};}private float i=0;// Update is called once per framevoid Update (){if (TargetFireItem.IsHappened){i += 0.01f;localProfile.profile.vignette.settings = new VignetteModel.Settings(){mode = VignetteModel.Mode.Classic,color = Color.red,center = new Vector2(0.5f, 0.5f),intensity = Mathf.PingPong(i,0.5f),smoothness = 0.28f,roundness = 1,rounded = false,};}else{localProfile.profile.vignette.settings = new VignetteModel.Settings(){mode = VignetteModel.Mode.Classic,color = Color.white,center = new Vector2(0.5f, 0.5f),intensity = Mathf.PingPong(i, 0.5f),smoothness = 0.28f,roundness = 1,rounded = false,};}}public int index = 0;public void SwitchCamera(){index++;index = index % 5;Debug.Log("难道没有执行" + index);for (int i = 0; i < childCameraLst.Count; i++){if (index==i){Debug.Log("开启了Camera的相机"+index);childCameraLst[index].MoveToTopOfPrioritySubqueue();}} }
第二个作用是做人物跟随,在虚拟相机的面板设置任务跟随的对象以及注视的对象部位,就可以实现跟随了,同时可以设置跟随抖动等特效。
第三,结合timeline实现相机融合。
将拍摄对象动画放在上面,然后分别设置三个虚拟相机对着对象不同的身体部位,本例子实现了镜头从腿到头到背后的镜头过度融合。
第四,轨道摄像机
轨道相机分为两种,第一种是直接生成一个会跟随轨道运动的摄像机,第二种生成一个叫DollyCart的物体,需要自己生成一个虚拟相机置于DollyCart下。
第五,自由观察相机 FreeLook Camera
此相机用于针对一个物体进行观察,相机组件提供了上、中、下以及纵向四个相机运动轨迹。(一定要对follow和look at两个值都赋值,才会出现三个圈)
四个圈形运动轨迹分别代表围绕目标物体的四种观察路线,当物体在运动过程中,可以通过控制以下x,y的参数控制相机在四个轨迹中过渡。
该相机存在一个很大的问题是,物体的transform和相机的视角没有直接关系,所以不能够通过此相机来对ui进行交互,而且也不能根据虚拟相机的transform来在视野的前方生成3d ui。
这篇关于unity相机插件Cinemachine的使用笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!