在之前的项目开发里自由观察模型的实现是使用的纯脚本写的,在我的这篇博客Unity 3D模型展示之自由观察模型里介绍了如何使用。
今天通过Unity的Cinemachine中的FreeLook Camera也实现一个自由观察模型的功能。
- Cinemachine的介绍
Unity2017版本推出的摄像机管理官方解决方案,致力于帮助开发者高效的实现游戏中的相机系统。
Cinemachine核心组件包括Brain和Virtual Camera(虚拟相机),Brain负责相机的切换,虚拟相机负责拍摄。
Cinemachine也提供了多种虚拟摄像机供我们选择使用。而我们使用的是FreeLook Camera,其他的可以自己尝试一下。
-
使用FreeLook Camera的效果展示
旋转效果
缩放效果
-
FreeLook Camera的使用
点击工具栏中的Cinemachine选择Create FreeLook Camera在场景中就会创建一个CM FreeLook1
的虚拟摄像机。如下图所示,自由视角相机有上中下三个红圈观察范围。
属性设置说明- 设置Follow 和Look At为要观察的模型。
- 通过改变Y Axis及X Axis的Value可以修改虚拟相机的视角。
- Orbits来设置红色圆圈的高度及半径大小来控制观察区域。
主摄像机自动增加CinemachineBrain脚本,通过此脚本控制启用的虚拟相机,一个场景一般只需存在一个,必须添加在主相机(负责渲染)节点上。
这是运行程序就可以自由观察模型了,只不过观察视角的控制方式默认跟随鼠标进行移动,下面我们进行一下调整。
- FreeLook Camera如何改为右键控制视角,并将脚本挂载在
CM FreeLook1
上。
using Cinemachine;
using UnityEngine;
public class CMFreelookOnlyWhenRightMouseDown : MonoBehaviour
{
private CinemachineFreeLook cinemachineFreeLook;
void Start()
{
cinemachineFreeLook = GetComponent<CinemachineFreeLook>();
CinemachineCore.GetInputAxis = GetAxisCustom;
}
public float GetAxisCustom(string axisName)
{
if (axisName == "Mouse X")
{
if (Input.GetMouseButton(1))
{
return UnityEngine.Input.GetAxis("Mouse X");
}
else
{
return 0;
}
}
else if (axisName == "Mouse Y")
{
if (Input.GetMouseButton(1))
{
return UnityEngine.Input.GetAxis("Mouse Y");
}
else
{
return 0;
}
}
return UnityEngine.Input.GetAxis(axisName);
}
}
在调整上下视角的时候默认是反方向的,只需要在CM FreeLook1
的Axis Control
中的进行设置,如下图所示。
这个也就是反向的意思。
- FreeLook Camera增加鼠标滚轮缩放功能,修改CMFreelookOnlyWhenRightMouseDown 在
FixedUpdate
中增加代码。
if (Input.GetAxis("Mouse ScrollWheel") < 0)
{
if (cinemachineFreeLook.m_Lens.FieldOfView <= 62)
{
cinemachineFreeLook.m_Lens.FieldOfView += 1;
}
//cinemachineFreeLook.m_Lens.OrthographicSize
}
if (Input.GetAxis("Mouse ScrollWheel") > 0)
{
if (cinemachineFreeLook.m_Lens.FieldOfView >= 4)
{
cinemachineFreeLook.m_Lens.FieldOfView -= 1;
}
}
代码中增加了缩放最大值和最小值的限定。
参考文章:
修改cinemachinefreeook控制方式
Unity Cinemachine之第三人称摄像机CinemachineFreeLook属性详解