重装机兵重构3-剧情篇

上一篇重装机兵重构2-地图篇的后续

Day16

  1. 认识一些像素人物的生成工具;
  2. 增加持久化的能力,基于json 的文件的 SaveSystem的实现

Day17

  1. 认识 Unity 的 Timeline
  2. 认识 Timeline 的 Playable Track, Signal Track

Day18

  1. 利用 ProcessFrame 实现 Timeline 中两个 playableAsset 的暂停,等待用户输入才继续播放

  2. 认识 Timeline 的 Animation Track,实现人物移动 + 动画播放
    效果图

  3. 修复 PlayableDirector.Pause 会导致人物会回到初始地点的bug:

    1
    2
    //director.Pause();
    director.playableGraph.GetRootPlayable(0).Pause();

Day19

  1. 处理TextMeshPro的中文乱码:
    从windows-> TextMeshPro -> Font Asset Creator 创建没有效果
    从*.ttf -> creat ->TextMeshPro ->Font Asset -> SPF 这样可以
  2. 简单过场黑屏动画 天亮了 使用 UI -> Panel + UI -> TextMeshPro 实现
  3. 封装打字机,过场动画 天亮了 也可以使用

Day20

  1. 解决Visual Studio 的中文在Unity 乱码的问题:
    在VS里面安装 扩展 -> 管理扩展, 搜索Force UTF-8(No BOM) 2022
  2. 增加逻辑, 开始游戏 -> 三选一角色 + 用户名称 -> 存档
  3. 增加逻辑, 记载游戏 -> 选择存档 -> 进入游戏

Day21

  1. 实现gameObject 在 UI Document 的展示(通过将GameObject 渲染到 RenderTexture)

  2. 实现Player的prefab, 根据职业选择渲染不同的人物

Day22

  1. 根据玩家选择的职业, 动态更新Timeline中animation track的人物的gameobject, 以及更新animation track 中的 animation clip

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    private void UpdateAnimationTrack(PlayableDirector director)
    {
    var playerObject = GameObject.FindWithTag("Player");
    Animator playerAnimator = playerObject.GetComponentInChildren<Animator>();
    Debug.Log("playerAnimator is " + playerAnimator);
    foreach (var track in director.playableAsset.outputs)
    {
    if (track.streamName == "PlayerPosition" || track.streamName == "PlayerAnimation")
    {
    if (track.streamName == "PlayerAnimation")
    {
    UpdateAnimationClip(track, playerAnimator);
    }
    director.SetGenericBinding(track.sourceObject, playerAnimator);
    }
    }
    }
    private void UpdateAnimationClip(PlayableBinding track, Animator animator)
    {
    if (track.sourceObject is AnimationTrack animationTrack)
    {
    // 获取该 Track 上的所有绑定(这里是 Animation Clip)
    foreach (var clip in animationTrack.GetClips())
    {
    // 替换现有的 Animation Clip
    foreach (var newClip in animator.runtimeAnimatorController.animationClips)
    {
    if (clip.displayName == newClip.name)
    {
    clip.asset = newClip; // 将新的 Animation Clip 赋值给 Track
    break;
    }
    }
    }
    }

    }

  2. 增加postTimeline 脚本, 实现剧情中人物的销毁和常规人物的位置重置

  3. 在camera上面增加audio source, *.m4a 需要转成 *.wav

    1
    ffmpeg -i input.m4a output.wav

Day23

  1. 打字机支持加速(左键跳过)
  2. 利用UI Docuemnt 实现tab
    tabs

Day24

  1. 实现menu 的隐藏出现,menu里面包含退出,实现游戏的开始->退出->开始的闭环:
    注意UIDocument 的隐藏不要使用SetActive(false), 这样会导致按钮的事件丢失

至此, 素材篇基本结束了,后面进入功能篇

作者

amano

发布于

2025-02-12

更新于

2025-02-28

许可协议

评论