// Update is called once per frame void Update() { attackVector = input.OnAttack(); if (attackVector != null) { attackTimer = 0.0f; OrientWeapon(attackVector.GetValueOrDefault()); // even if we check if attackVector is not null, we have to pass it with a null-safe expression if (gameObject.CompareTag("Player") && GetComponentInParent <IAvatar>().GetElement().type == Type.Paper) { ShootProjectile(); } attachedWeapon.gameObject.SetActive(true); } else { if (attackTimer >= attackDuration) { attachedWeapon.gameObject.SetActive(false); } else { attackTimer += Time.deltaTime; } } }