2018年5月2日 星期三

「傘之下」開發記錄—07

出拳就要被打的覺悟
所以上次講完攻擊,這次就來說受傷這東西


當玩家受傷時,因為要優先播放受傷的動畫,因此假如正在攻擊中的話,會被強制停止
然後玩家和敵方等Layer會取消碰撞,以防玩家接連受到傷害
與此同時,玩家亦短暫地不能移動
_StopMove是已經宣告好的參數,為Vector2(0, _PlayerRgbd2D.velocity.y)
意思是停止左右移動,但維持玩家本身的上下移動
沒有讓Y軸一起鎖,是想讓玩家受傷時,仍會受重力影響而下降

受傷會播放受傷動畫,而且攝影機會有一個晃動
晃動的幅度和受傷強度有關
而這個強度,每只敵方都不一樣(甚至同一只敵人的不同攻擊也不一樣)
簡單來說就是一個數值被不停調用就對了www
講到敵方AI的時候可能會補充這點吧



第一張圖的最後一句,是呼叫一個協程來製作無敵時間
所謂無敵,其實是「取消/打開玩家與敵方的碰撞」
這東西是用程式來調整,但畫面上不會有任何顯示
所以這時就要用較視覺化的呈現,令玩家知道「現在不會被攻擊到」

「無敵時間」的呈現有很多種——或者說這其實是吃美術風格的一環
 (比如可以被打中後變成蝙蝠,時間後再變回來之類的。只要程式配合到,這也不是難事XD)
 現在的做法,是用兩個Material來切換
 一個是「純白」(亦即人物原本的顏色),和一個「透明」
 透明時玩家會看不到人物,但因為是快速的切換,以人類的眼睛來說還是有辦法判斷人物的位置
而當快速切換幾次之後,恢復玩家敵方的碰撞,無敵時間因此完結
所以,這功能是美術和程式配合好的一環((廢話


然後啦……我現在這樣寫,自己也感覺有不人性化ww
要想延長無敵時間的話,還要複製那幾行程式才行,超~不方便
所以其實感覺,在協程裡用個Loop的話會方便很多
不過還是那句,這些早期的程式碼中,我甚至還駕御不了Loop這東西XD
所以嘛((遠目/

沒有留言:

張貼留言