

キーボードのGキーを押したら5秒間敵からの攻撃を無効化させる方法を教えてください。

「Unity 攻撃 一定時間
無効化」などでGoogle検索をかけ、Colliderを無効化するという方法でCancelInvokeとTime.deltaTimeを使って試したところ、攻撃は無効化されましたが、攻撃が無効化された状態から戻らなくなってしまいました。よろしければ解決策を教えてください。

[code]

    private float countup = 0.0f;
    public float timeLimit = 5.0f;
    void Muteki()
    {
        Debug.Log("muteki");
        CapCol.enabled = false;
        
    }
    void Update()
    {
        if (Input.GetKey(KeyCode.G))
        {
            Invoke("Muteki", 0.1f);
            countup += Time.deltaTime;
        }
      
        if (countup >= timeLimit)
        {
            CancelInvoke();
            Debug.Log("mutekiowari");
        }
    }
    
[/code]


CC BY-SA 4.0
2023-08-20T17:50:09.407
95992
2023-08-29T15:52:53.383
2023-08-21T00:11:28.717
3060
59532
question
c# unity3d game-development
一定時間敵からの攻撃を無効化したい


3点問題があると思います。

  * CapCol.enabledをtrueに戻す処理がない
  * countupがtimeLimitを超えても0にリセットされない
  * CancelInvokeの使い方が違っている  
CancelInvokeはInvokeを実行するまで(この場合0.1秒まで)に  
指定した関数の実行をキャンセルするときに使います。

最後のifブロックを以下のように変えてみてはいかがでしょうか。

[code]

    if (countup >= timeLimit)
    {
        //以下2行を追記
        CapCol.enabled = true;
        countup = 0.0f;
    
        Debug.Log("mutekiowari");
    }
    
[/code]


CC BY-SA 4.0
2023-08-29T11:39:28.403
96073
2023-08-29T15:52:53.383
2023-08-29T15:52:53.383
3060
59613
95992
answer