>>898
もっと効率良くはなると思うがわかりやすく書くとこんなところかね

//ガードしているかどうか
bool isGuarded;
//fireRateのうちどこで撃つか
int fireTiming;
//何フレームに1回撃つか、メソッド内に数値リテラル書きたくないしインスペクタから変更したいが面倒なのでパブリック
public int fireRate=5;

void Update(){
if(Input.GetKeyDown(KeyCode.Z)){
//Zが押されたタイミングをキャッシュしとく
fireTiming=Time.frameCount%fireRate;
}
bool fire=Input.GetKey(KeyCode.Z);
bool guard=Input.GetKey(KeyCode.X)&&!fire;
if(fire&&Time.frameCount%fireRate==fireTiming){
this.Fire();//弾を発射するメソッド
}else if(!isGuarded&&guard){
isGuarded=true;
this.Guard();//ガード開始するメソッド
}else if(isGuarded&&!guard){
isGuarded=false;
this.Unguard();//ガード解除するメソッド
}
}