一個手繪動畫風格的敘事解謎遊戲,水還能多深? - Harrison Chen

由「曉數碼 Akatsuki Taiwan Inc. 」旗下子品牌「曙光工作室(Silver Lining Studio)」所開發的敘事解謎遊戲《傾聽畫語(Behind the Frame)》即將上市,Harrison 作為此款遊戲的開發工程師,將分享在製作過程中所遇到的一些技術問題及克服方法,聊聊原本以為簡單的敘事解謎類遊戲,原來會踩到那麼多個坑。

目標聽眾

對遊戲開發有興趣、想嘗試自己開發遊戲的人。

先備知識

歡迎大家來到SITCON 2021 ヽ(✿゚▽゚)ノ
共筆入口:https://hackmd.io/@SITCON/2021
手機版請點選上方 按鈕展開議程列表。

請從這裡開始

開發工具

  • unity
    • 跨平台
    • 可能會有一些圖形問題需要克服
    • 成熟的圖形化介面

油畫筆刷的製作

Why

  • 玩家要藉由簡單的繪畫,參與畫家所參與的故事
  • 所以需要製作繪畫筆刷

How

  • 遊戲引擎 can help
    • 攝影機的 camera buffer 設定
    • 簡單設定 texture 的渲染模式

怎麼在遊戲裡頭畫畫

玩家可以在畫面上畫畫

  • 試試將滑鼠點的位置畫上圖案 -> 很分散
  • 試試看用內插的方式
    • 使用 Catmull-Rom 計算

侷限在區域中作畫

  • 如何設定繪製區
    • 使用灰階圖來儲存區域分配的資料
  • 每次變更都需要更改 binary 的 texture
  • 如果要渲染上去的顏色,與限制用 texture 的顏色相差太遠,則設 alpha 為 0

繪圖 puzzle 思路整理

為畫圖多做什麼

  • 與美術多溝通製作所需要的功能
    • 參考現有繪圖軟體的設計
  • 快速移動後,將筆頭的大小作調整
  • 隨機旋轉筆頭貼圖製造隨機性

如何練習

  • 對 2D rednering 的基本理解
  • 實作曲線和內插函數的能力
  • 對筆刷效果的 sense
  • 多找隊友溝通 -> 理解 domain konwledge

敘事

故事流程的編輯工具

  • 製作 editor,讓企劃人員可以在遊戲引擎中設定
  • 使用 Scriptable Object 儲存資料
  • 分成五個 Tab
    • GameFlow
    • NPC 狀態變化
    • Puzzle

GameFlow

  • id
  • 功能 (Type + Value)
    • Cinema
    • Puzzle
    • Quote
    • GameFlow
    • NPC

Puzzle

  • 將一些演出通用參數拆出在編輯器上

看起來是類似狀態機的設計

文本設定

  • 需要顧及
    • 讓企劃方便調整
    • 即時的同步
    • 能夠拆分給翻譯使用 -> 方便多語言
  • 使用 google spreadsheet 進行字串整理

還能更好的地方

動畫播放 - DOTWeen

  • 效能問題
    • Unhandled GC
    • 多個執行會有效能問題
    • Safe 機制會吃掉 Exception
  • 方便但是黑盒子,進行優化相當困難
  • Solution
    • 將 interface 拆清楚,方便替換
    • 自行實作部分 tweener
    • 使用 Job System + Burst compiler

影片播放

  • Unity VideoPlayer
    • unity 內建
    • 支援 local 與串流
    • 可渲染到 texture 上
  • 問題
    • 跨平台沒有想像中的方便
    • 在 iOS / OS X 部分裝置會遇到問題
      • 占用音訊 thread
    • 有些 callback 在後續 LTS 才陸續修正
  • solution
    • 去 assetstore 上面找
    • e.g. AVProVide

對第三方插件的態度

  • 盡信插件不如沒有插件
  • 保留可以替換的餘裕
  • 多使用 DI 將遊戲本體和第三方套件從 interface 拆開
    • e.g. ZenJect
  • 跨平台機制問題不少,時間要多抓一點
Select a repo