yibaowyb 2023-08-10 16:31 采纳率: 0%
浏览 7
已结题

点击Toggle启动Timeline\Cinemachine

在一个叫Timeline的空物体下创建了一个Timeline,一个叫virtualCameraParent的空物体下有三个虚拟相机,分别叫play CM vcam2、dini CM vcam3、dor CM vcam4,画布下有一个play的空物体(Toggle Group)下有三个Toggle,分别叫PlayToggle、DiniToggle、DorToggle。
Timeline上面有一条Cinemachine Track,把主相机赋给了它,轨道上分别放置了三个虚拟相机,还有三条Animation Track,在对应的虚拟相机位置上分别做了动画。
想要实现的功能:分别点击不同的Toggle,启动Timeline上不同的虚拟相机和动画

using UnityEngine;
using UnityEngine.Playables;
using Cinemachine;
using UnityEngine.Timeline;

public class test : MonoBehaviour
{
    public PlayableDirector timeline; // Timeline 的 PlayableDirector 组件
    public GameObject virtualCameraParent; // 虚拟相机的父对象

    public void PlayToggle()
    {
        PlayVirtualCamera("play"); // 触发 play 相机和动画
        timeline.Play(); // 播放 Timeline
    }

    public void DiniToggle()
    {
        PlayVirtualCamera("dini"); // 触发 dini 相机和动画
        timeline.Play();
    }

    public void DorToggle()
    {
        PlayVirtualCamera("dor"); // 触发 dor 相机和动画
        timeline.Play();
    }

    private void PlayVirtualCamera(string name)
    {
        // 获取虚拟相机
        CinemachineVirtualCamera virtualCamera = virtualCameraParent.transform.Find(name).GetComponent<CinemachineVirtualCamera>();


        // 设置当前的虚拟相机为激活状态
        virtualCamera.gameObject.SetActive(true);

        // 关闭其他相机
        foreach (Transform child in virtualCameraParent.transform)
        {
            if (child.name != name)
            {
                child.gameObject.SetActive(false);
            }
        }
    }
}


  • 写回答

8条回答 默认 最新

  • 炎热的夏季 2023-08-10 16:46
    关注

    引用chatgpt内容作答:
    在下面修改后的代码中,我直接在脚本中引用了 Timeline 上的各个虚拟相机(playVcam、diniVcam、dorVcam)。每个 Toggle 点击事件都会调用 SwitchVirtualCamera() 方法,根据所选的相机,将其他相机禁用,并激活选定的相机。然后通过 timeline.Play() 来播放 Timeline。

    using UnityEngine;
    using UnityEngine.Playables;
    using Cinemachine;
    using UnityEngine.Timeline;
    
    public class Test : MonoBehaviour
    {
        public PlayableDirector timeline; // Timeline 的 PlayableDirector 组件
        public CinemachineVirtualCamera playVcam; // 对应 play 相机
        public CinemachineVirtualCamera diniVcam; // 对应 dini 相机
        public CinemachineVirtualCamera dorVcam; // 对应 dor 相机
    
        public void PlayToggle()
        {
            SwitchVirtualCamera(playVcam);
            timeline.Play(); // 播放 Timeline
        }
    
        public void DiniToggle()
        {
            SwitchVirtualCamera(diniVcam);
            timeline.Play();
        }
    
        public void DorToggle()
        {
            SwitchVirtualCamera(dorVcam);
            timeline.Play();
        }
    
        private void SwitchVirtualCamera(CinemachineVirtualCamera vcam)
        {
            // 禁用所有虚拟相机
            playVcam.gameObject.SetActive(false);
            diniVcam.gameObject.SetActive(false);
            dorVcam.gameObject.SetActive(false);
    
            // 激活指定的虚拟相机
            vcam.gameObject.SetActive(true);
        }
    }
    

    要使这段代码正常工作,确保你已经将对应的虚拟相机分配到脚本中的相应字段中,并将该脚本附加到适当的游戏对象上。此外,确保 Timeline 中的相机轨道上正确配置了这些虚拟相机。

    评论

报告相同问题?

问题事件

  • 系统已结题 8月18日
  • 创建了问题 8月10日

悬赏问题

  • ¥15 SQL Server下载
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?
  • ¥15 python爬取bilibili校园招聘网站
  • ¥30 求解达问题(有红包)
  • ¥15 请解包一个pak文件
  • ¥15 不同系统编译兼容问题
  • ¥100 三相直流充电模块对数字电源芯片在物理上它必须具备哪些功能和性能?
  • ¥30 数字电源对DSP芯片的具体要求