IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> [2021.10.26]<呆头熊的开发日记>Timeline & Cinemachine -> 正文阅读

[游戏开发][2021.10.26]<呆头熊的开发日记>Timeline & Cinemachine

今天一天都在跟队长一起研究Timeline,主要用来制作游戏剧情过场动画。

了解过后感觉Timeline功能很强大!

主要也用了Virtual Camera来锁定人物或场景之间的镜头,可在Timeline里实现运镜的效果(平滑过渡)。

关于剧情对话UI:

1.UI----Canvas-----Scale with screen size(自适应)---调整分辨率

2.UI-----Panel----(换成2D视角)调整对话框大小---Alt + Shift + 位置(自动占满对齐)---适当调整

3.UI----Text--- 加入文字? 【设置颜色,例如:<color=red>XXXX</color>】

---添加Outline组件:加深清晰度

4.创建空物体:UIManager-----创建脚本UIManager

(负责UI对话的开启与关闭)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

//负责UI对话的开启和关闭
public class UIManag : MonoBehaviour
{
    public static UIManag instance;

    public GameObject dialogueBox; //开启或关闭对话窗口
    public Text characterNameText1;
    public Text dialogueLineText;
    public GameObject spacebar;
    private void Awake() 
    {
        //将UIManager设置为单例模式
        if (instance == null)
        {
            instance = this;
        }
        else
        {
            if (instance != this)
            {
                Destroy(gameObject);
            }
        }

        DontDestroyOnLoad(gameObject);
    }
    
    //开启or关闭对话窗口
    public void ToggleDialogueBox(bool _isActive)
    {
        dialogueBox.gameObject.SetActive(_isActive);
    }
    public void ToggleSpaceBar(bool _isActive)
    {
        spacebar.gameObject.SetActive(_isActive);
    }

    //以上两种方法也可以写成一个,但是不方便外部调用
    /*public void ToggleFoo(GameObject _foo, bool _isActive)
    {
        _foo.gameObject.SetActive(_isActive);
    }*/

    //导入对话者名字(如果勾选了Best Fit则不用加size)
    public void SetupDialogue(string _name, string _line, int _size)
    {
        //赋值台词、名字
        characterNameText1.text = _name;
        dialogueLineText.text = _line;
        dialogueLineText.fontSize = _size;

        //显示对话框
        ToggleDialogueBox(true);
    }
}

关于Virtual Camera:

1.锁定镜头画面:锁定Solo;(否则其他VirCam可能会也变成此画面)

2.Ctrl + Shift + F 确定画面;

3.将Virtual Camera加入Timeline时别忘了需要将<主相机>放入,作为CinemacheineBrain。

关于Timeline:

1.创建空物体----Timeline? (Window - Sequencing --显示Timeline标签)

2.Timeline窗口---Create---可加入人物动画、虚拟相机、剧情框与文字……等。

?注:放上去的同时都不要忘了把主对象放入左边Track List中。

?3.建立脚本----(实现在Timeline中的剧情对话功能)

a. 创建自定义对话轨道

using UnityEngine;
using UnityEngine.Timeline;


//[TrackBindingType(typeof(Rigidbody))]  绑定挂在类型,如:刚体
[TrackColor(255/255f, 191/255f, 0)]  //设置轨道标签颜色(对应的RGB数值
[TrackClipType(typeof(DialogueClip))]
//对话系统
public class DialogueTrack : TrackAsset
{
    
}

?b.建立出配对轨道的对话Clip片段

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;


//更直接地访问底层动画系统的接口
public class DialogueClip : PlayableAsset
{
    public DialogueBehavior template = new DialogueBehavior();
    public override Playable CreatePlayable(PlayableGraph graph, GameObject owner) 
    {
        var playable = ScriptPlayable<DialogueBehavior>.Create(graph, template);
        return playable;
    }
}

?c.建立对话行为:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;

[System.Serializable]      //序列化之后,才能在窗口显示
public class DialogueBehavior : PlayableBehaviour
{
    //获取playableDirector:负责动画开启、暂停
    private PlayableDirector playableDirector;

    public string characterName;
    [TextArea(8,1)] public string dialogueLine; //[更大的文字编辑空间]
    public int dialogueSize;//字体大小

    private bool isClipPlayed; //是否这个对话Clip片段,已经播放结束了
    public bool requirePause; //用户设置:这个对话完成之后,是否需要玩家按下“空格键”才能继续动画

    private bool pauseScheduled; //暂停的判断条件

    public override void OnPlayableCreate(Playable playable)
    {
        playableDirector = playable.GetGraph().GetResolver() as PlayableDirector;
    }

    //类似Update,每一帧都会调用
    public override void ProcessFrame(Playable playable, FrameData info, object playerData)
    {
        //片段还没有播放
        if (isClipPlayed == false && info.weight > 0)
        {
            UIManag.instance.SetupDialogue(characterName, dialogueLine, dialogueSize);

            //若之前设置好此片段需要暂停
            if (requirePause)
                pauseScheduled = true;

            isClipPlayed = true;  //此片段可以播放

        }
    }

    public override void OnBehaviourPause(Playable playable, FrameData info) 
    {
            //如果资源处于静止、暂停状态
        isClipPlayed = false;
        Debug.Log("Clip is Stoooooooooooop");


        if (pauseScheduled)
        {
            pauseScheduled = false; //先关闭开关
            //Marker Pause TIMELINE 暂停Timeline播放
            GameManager.instance.PauseTimeline(playableDirector);
        }
        else
        {
            UIManag.instance.ToggleDialogueBox(false);
        }
    }
}

4.通过人物移动到某位置(空物体---碰撞体)触发剧情播放:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;

public class TriggerArea : MonoBehaviour
{
    public PlayableDirector playableDirector;
    private void OnTriggerEnter(Collider other)  // other.tag == "Player"开销相对高
    {
        if (other.CompareTag("Player"))
        {
            playableDirector.Play(); //播放过场动画
            GameManager.instance.gameMode = GameManager.GameMode.GamePlay;
        }
    }
}

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-10-29 13:24:30  更:2021-10-29 13:24:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/28 0:58:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码