看板 GameDesign 關於我們 聯絡資訊
最近趕工都沒時間寫文,改po小技巧好了 :) 這只是個小概念,不是什麼深奧的技術 知道它存在之後應該就不會忘記了 我以前也只是隱約知道它的存在 開始著手遊戲AI的時候,才注意到同事們非常重視這個概念 時域錯位(Time-Staggering) 意即當核心AI邏輯做了一個決策時,所有NPC"不"同時採取行動 e.g. 主角行蹤暴露時,不要讓所有敵人同時轉身,轉身時機稍微互相錯開 這樣一個簡單的小技巧 就可以讓整體AI看起來更有機、而不會過於機械化 如果你的遊戲有多個NPC 不妨試試看這個技巧,讓他們看起來更生動一點 :) [補充] 同樣的概念也可以套用到gameplay上 像是被同一個爆破炸飛的敵人 飛空動畫的起頭時間、撥放速度也可以稍微錯開 看起來就不會像是同步空中芭蕾 早期三國無雙同一次擊飛的敵人們就有這種機械化的同步感 -- Web http://AllenChou.net Twitter http://twitter.com/TheAllenChou LinkedIn http://linkedin.com/in/MingLunChou -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 160.33.43.15 ※ 文章網址: https://www.ptt.cc/bbs/GameDesign/M.1455340945.A.0EA.html ※ 編輯: cjcat2266 (160.33.43.15), 02/13/2016 13:35:19
dklassic: 推CJ貓,等秘境等好苦啊( 02/13 13:55
damody: 現實生活應該會同時吧? 02/13 14:12
cjcat2266: 不會喔,有反應時間差異,差零點幾秒感覺就不機械化了 02/13 14:20
cjcat2266: 一群NPC完全同時採取行動,其實很難看 02/13 14:21
waldfantasy: 推 02/13 15:13
Dsakura: 除非Npcs會心電感應 02/13 15:22
※ 編輯: cjcat2266 (172.91.156.131), 02/14/2016 01:29:02
ddavid: 爆破的話就應該開頭同時,但是後續用播放速度不同或數種不 02/14 02:15
ddavid: 同動作模組來做差異吧 02/14 02:16
cjcat2266: 我是指開頭anim phase稍微不同,不是開始播放時間不同 02/14 04:15
cjcat2266: 不過的確,不同動畫和播放速度差異的效果較明顯 02/14 04:16
cjcat2266: 反正最終目的就是不要讓一群NPC表現出過度同步 02/14 04:17
cjcat2266: 不論是視覺上或感覺上(行動時機) 02/14 04:18
Frostx: 推,不過我私心覺得,無雙那樣滿有喜感的XD 02/14 09:58
LayerZ: 我個人的想法是,同時廣播給所有NPC同步反應是OK的,但是 02/14 13:03
LayerZ: 每個NPC要先停下手上的工作再轉過來 02/14 13:03
LayerZ: 前提是每個NPC閒置時都有動作 02/14 13:04
cjcat2266: 我的經驗是,"停下手邊工作"這個動作也要時機稍微錯開 02/14 17:19
cjcat2266: 不然還是會看起來有心電感應的樣子 02/14 17:19
cowbaying: 把AI的陣列先打亂 然後每個AI都睡個10~50ms再執行 02/15 09:41
cowbaying: 看起來就很"不同步"了 02/15 09:41
Schottky: 樓上應該是說 100ms~500ms 吧? 02/15 15:12
Schottky: 小於 100ms 人眼不容易分得出差別 02/15 15:12
cjcat2266: 嗯,我平常是用100ms為延遲單位,200ms以上就很明顯了 02/16 04:25
cowbaying: 我不是打錯 XD 真的是打10~50ms 02/18 09:22
LayerZ: 我的意思是,同時進行停下手邊動作的"動作" 02/18 14:52
LayerZ: 例如警鈴響起或大喊,所有人就該同時反應,不過怎麼反應的 02/18 14:52
LayerZ: 動作差異,就會造成不會同時轉頭 02/18 14:52
GALINE: https://output.jsbin.com/focowukipe 10~50 有點難區分 02/18 23:53
osanaosana: 樓上這個...玩到後來感覺有點像是新兵訓練向後轉 02/19 16:38
damody: GALINE那個讚 02/21 14:43
Frostx: 推GALINE的demo 02/24 10:38
LayerZ: 推個,我把rand換成(s-m)*i/5 XD 02/26 11:04
LayerZ: s+ 才對.. 02/26 11:06
leograss: 推 03/17 11:09