Unity 自由观察物体原来还可以这么玩!?

在之前的项目开发里自由观察模型的实现是使用的纯脚本写的,在我的这篇博客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的虚拟摄像机。如下图所示,自由视角相机有上中下三个红圈观察范围。
    在这里插入图片描述
    属性设置说明

    1. 设置Follow 和Look At为要观察的模型。
    2. 通过改变Y Axis及X Axis的Value可以修改虚拟相机的视角。
    3. 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 FreeLook1Axis 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属性详解

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yxlalm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值