[討論] 攔路豬鉤子的命中計算機制
原文:https://goo.gl/XShMQx
此篇報導講解攔路豬的勾子命中計算的背後機制
一直以來相信大家都對於攔路豬的勾子命中機制頗有怨言
像是躲在豬視線外牆角落、或是從勾子上方跳/瞬移過去(源氏、閃光)等
都會被奇妙的異次元勾鉤中
原本網路上的猜測是可能是因為網路延遲或是hitscan*的運算命中機制而導致
(註:勾子像條瞬間發出的光線,按下去在直線路徑上的角色就算被鉤)
然而Blizzard公開回應攔路豬勾子判斷機制如下:
基本上就是在勾子尖端放顆命中判斷的球體
直線投射出去,只要在球體內範圍即是命中範圍,
所以才會有像是原文影片裡面那種隔牆勾人或是跳過勾子上方也會被鉤的狀況發生
所以以後對面有攔路豬的時候、記得躲牆角要離得遠一點
不然即使不在勾子鉤中的直線範圍內還是有可能會被命中的
所以根本就不是勾子,是一顆棘鐵球啊...
但這篇沒有解釋為什麼有時候源氏開反彈還會被勾的情況
可能猜想鉤子的圓球範圍碰到源氏可反彈範圍的外側觸發鉤中的判斷
但源氏的正面反彈範圍真的不是想像中的大
reddit測試反彈範圍文與影片:https://goo.gl/5bYPIZ
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 27.110.57.143
※ 文章網址: https://www.ptt.cc/bbs/OverWatch/M.1475809681.A.DBE.html
推
10/07 11:19, , 1F
10/07 11:19, 1F
→
10/07 11:19, , 2F
10/07 11:19, 2F
→
10/07 11:19, , 3F
10/07 11:19, 3F
那句原本是我個人看文章後的推導,回頭看了一下好像對翻譯文章有點失準
我把它刪掉好了
推
10/07 11:21, , 4F
10/07 11:21, 4F
→
10/07 11:21, , 5F
10/07 11:21, 5F
因為在球體範圍中所以他會先讓鉤中的角色瞬移到勾子判定鉤中的位置
再拉回來,所以才會有瞬移狀況發生吧
推
10/07 11:23, , 6F
10/07 11:23, 6F
推
10/07 11:27, , 7F
10/07 11:27, 7F
推
10/07 11:28, , 8F
10/07 11:28, 8F
→
10/07 11:30, , 9F
10/07 11:30, 9F
沒錯
推
10/07 11:35, , 10F
10/07 11:35, 10F
噓
10/07 11:35, , 11F
10/07 11:35, 11F
那個註釋是解釋大家之前以為是hitscan的註解
blizzard解釋的就像是一顆看不見的磁鐵鐵球丟出去,途中經過的範圍有角色就會被鉤
推
10/07 11:38, , 12F
10/07 11:38, 12F
→
10/07 11:38, , 13F
10/07 11:38, 13F
hitbox是指每個角色模組身上的攻擊範圍,
勾子的命中範圍不會改變角色模組的hitbox大小
hitbox大 = 因為要判別鉤中/不鉤中所以每個角色都有專門給鉤子判斷的大hitbox
他的命中機制不是這樣設計的
推
10/07 11:38, , 14F
10/07 11:38, 14F
剛好都是犯罪者XD
推
10/07 11:56, , 15F
10/07 11:56, 15F
→
10/07 11:56, , 16F
10/07 11:56, 16F
→
10/07 11:57, , 17F
10/07 11:57, 17F
畫張圖解釋好了 http://imgur.com/a/q6J28
(比例隨便畫的不要當真)
橘色半透明範圍就是在勾子尖端的命中範圍,只要在範圍內的角色就會被判定為被鉤
當豬對牆角射出勾子勾子抵達牆角時時,站在牆背面的角色沒在鉤子的直線上
但是因為勾子的命中判斷是以尖端為圓心的一個範圍,
所以即使站在牆角後的角色也會被鉤,
所以這就回到我原本推測沒有對地圖做的cliping的那句話,
如果要在牆角後面的角色不被鉤中,就要對牆壁的延伸面做出cliping(黑色框)
這樣命中圓球就不會超出牆角範圍
推
10/07 12:00, , 18F
10/07 12:00, 18F
→
10/07 12:00, , 19F
10/07 12:00, 19F
我個人是懷疑萊茵撞也是這種機制...
基本上出現的狀況蠻像的(被判定命中角色就會瞬移到角色面前)
推
10/07 12:23, , 20F
10/07 12:23, 20F
→
10/07 12:24, , 21F
10/07 12:24, 21F
可能要實驗一下,但個人認為不會
因為兩者不一樣 直接朝牆壁射勾子中牆的時候命中範圍球體和牆壁界線有直接相交
所以應該會做cliping (不做就太蠢了)
球體與直線的cliping計算方式蠻簡單的 超過直線以上(例如x=0,y=0以上的判定不考慮)
但勾牆角的時候因為勾子沒有跟牆壁範圍有直接的接觸命中,不會對牆壁做cliping
所以現在的現況就是沒對牆壁延伸線做cliping才會出現打中牆角後的角色的狀況
^
: <-命中球體沒有跟牆壁直角的"延伸線"做cliping
角色:
---------------
wall | c
--------------- /
/
/
推
10/07 12:37, , 22F
10/07 12:37, 22F
→
10/07 12:38, , 23F
10/07 12:38, 23F
→
10/07 12:41, , 24F
10/07 12:41, 24F
→
10/07 12:41, , 25F
10/07 12:41, 25F
推
10/07 12:43, , 26F
10/07 12:43, 26F
→
10/07 12:43, , 27F
10/07 12:43, 27F
推
10/07 12:45, , 28F
10/07 12:45, 28F
推
10/07 12:52, , 29F
10/07 12:52, 29F
→
10/07 12:52, , 30F
10/07 12:52, 30F
→
10/07 12:52, , 31F
10/07 12:52, 31F
→
10/07 12:52, , 32F
10/07 12:52, 32F
→
10/07 12:52, , 33F
10/07 12:52, 33F
→
10/07 12:52, , 34F
10/07 12:52, 34F
推
10/07 12:57, , 35F
10/07 12:57, 35F
→
10/07 12:57, , 36F
10/07 12:57, 36F
推
10/07 13:01, , 37F
10/07 13:01, 37F
→
10/07 13:01, , 38F
10/07 13:01, 38F
你的理解跟我講的一樣啊XD (除了hitbox超出牆角這部分)
我講解cliping的情況其實很簡化,遊戲裡面有許多不規則的物體/障礙物
要即時運算球體穿過環境障礙物邊界的延長線再去做判斷其實頗難
推
10/07 13:07, , 39F
10/07 13:07, 39F
→
10/07 13:07, , 40F
10/07 13:07, 40F
→
10/07 13:09, , 41F
10/07 13:09, 41F
我也覺得這樣比較好,比起對環境做cliping
對可視範圍做cliping比較合理
推
10/07 13:29, , 42F
10/07 13:29, 42F
我朋友有遇到幾次,shadder實況也有遇到幾次過
推
10/07 13:57, , 43F
10/07 13:57, 43F
※ 編輯: han960691 (27.110.57.143), 10/07/2016 14:15:52
※ 編輯: han960691 (27.110.57.143), 10/07/2016 14:17:04
→
10/07 14:20, , 44F
10/07 14:20, 44F
→
10/07 14:21, , 45F
10/07 14:21, 45F
→
10/07 14:22, , 46F
10/07 14:22, 46F
推
10/07 14:31, , 47F
10/07 14:31, 47F
→
10/07 14:31, , 48F
10/07 14:31, 48F
→
10/07 14:33, , 49F
10/07 14:33, 49F
→
10/07 14:40, , 50F
10/07 14:40, 50F
→
10/07 14:41, , 51F
10/07 14:41, 51F
→
10/07 14:41, , 52F
10/07 14:41, 52F
→
10/07 14:45, , 53F
10/07 14:45, 53F
→
10/07 15:26, , 54F
10/07 15:26, 54F
→
10/07 15:27, , 55F
10/07 15:27, 55F
→
10/07 15:27, , 56F
10/07 15:27, 56F
→
10/07 15:33, , 57F
10/07 15:33, 57F
→
10/07 15:36, , 58F
10/07 15:36, 58F
→
10/07 15:36, , 59F
10/07 15:36, 59F
推
10/07 16:26, , 60F
10/07 16:26, 60F
→
10/07 16:43, , 61F
10/07 16:43, 61F
推
10/07 19:10, , 62F
10/07 19:10, 62F
→
10/07 19:10, , 63F
10/07 19:10, 63F
→
10/07 19:18, , 64F
10/07 19:18, 64F
推
10/07 22:43, , 65F
10/07 22:43, 65F
→
10/07 22:48, , 66F
10/07 22:48, 66F
→
10/08 09:50, , 67F
10/08 09:50, 67F
→
10/08 09:50, , 68F
10/08 09:50, 68F