Unity 3D模型展示框架篇之自由观察(Cinemachine)

本项目将整合之前Unity程序基础小框架专栏在Unity 3D模型展示项目基础上进行整合,并记录了集成过程中对原脚本的调整过程。增加了Asset Bundle+ILRuntime热更新技术流程。

在Unity 3D模型展示专栏中自由观察物体使用的第三方脚本实现,这篇文章使用Unity为开发者提供专业的虚拟摄像机插件Cinemachine,虚拟摄像机可以实现电影级别的分镜,推拉式镜头等,需要2017以上的版本才能使用,配合TimeLine一起使用和Animator可以做些项目漫游、案例展示、行业工作标准流程演示等。
下面这个就是Cinemachine结合TimeLine做的案例

斜切进刀场景模拟

本篇文章只涉及其中一个虚拟摄像机cinemachineFreeLook的使用,首先需要在PackageManager中搜索并安装Cinemachine
在这里插入图片描述
在搜索框中搜索 Cinemachine进行安装即可。
在这里插入图片描述
安装之后,创建cinemachineFreeLook虚拟摄像机,并命名为CMFreeLook
在这里插入图片描述
Main Camera下增加一个名为CinemachineBrain组件,相当于虚拟相机的总管理。这里使用默认参数即可。
在这里插入图片描述
CMFreeLook组件参数进行如下设置。来调整观察的最佳位置
在这里插入图片描述
调整过程是运行时不断进行修正的…,调整上中下轨道范围。能够完美的从不同角度观察物体。
在这里插入图片描述
在这里插入图片描述

重点来了,如果是观察的物体提前创建好可以进行提前设置LookAtFollow以及Middle Rig等参数,由于本项目是动态创建的观察物体,所以需要使用脚本进行设置修改MyGameManager以上参数在此脚本中进行设置。

public class MyGameManager : MonoBehaviour
{
    public GameObject parentObj;
    public CinemachineFreeLook camera;
    // Start is called before the first frame update
    void Start()
    {
        var tempGB = ResMgr.GetInstance().Load<GameObject>("Prefabs/Switch");
        tempGB.transform.SetParent(parentObj.transform);
        tempGB.name = "Switch";
        camera.LookAt = tempGB.transform;
        camera.Follow = tempGB.transform;
        tempGB.transform.position = new Vector3(5f, 0f, 50f);
        camera.GetRig(1).LookAt = tempGB.transform;
    }
}

说明:关于 camera.GetRig(1).LookAt GetRig是个数组索引值分别对应下面参数 GetRig(1)是对Middle Rig进行设置。
在这里插入图片描述
注意:cinemachineFreeLook默认是鼠标左键控制视角的,在此项目中用起来非常不便。所以需要使用脚本改变控制方式。

CMFreelookOnlyWhenRightMouseDown脚本内容:鼠标右键控制视角,鼠标滚轮控制焦距。


public class CMFreelookOnlyWhenRightMouseDown : MonoBehaviour
{
    private CinemachineFreeLook cinemachineFreeLook;
    // Start is called before the first frame update
    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);
    }
    // Update is called once per frame
    void FixedUpdate()
    {
        if (Input.GetAxis("Mouse ScrollWheel") < 0)
        {
            if (cinemachineFreeLook.m_Lens.FieldOfView <= 62)
            {
                cinemachineFreeLook.m_Lens.FieldOfView += 0.5f;
            }
            //cinemachineFreeLook.m_Lens.OrthographicSize
        }
        if (Input.GetAxis("Mouse ScrollWheel") > 0)
        {
            if (cinemachineFreeLook.m_Lens.FieldOfView >= 4)
            {
                cinemachineFreeLook.m_Lens.FieldOfView -= 0.5f;
            }
        }
    }
}

将其挂载到CMFreeLook上。

效果展示

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

yxlalm

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

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

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

打赏作者

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

抵扣说明:

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

余额充值