public void toggleArrow() { if (arrow != null) { destroyArrow(); return; } var ammoItem = Player.m_localPlayer.GetAmmoItem(); if (ammoItem == null || ammoItem.m_shared.m_itemType != ItemDrop.ItemData.ItemType.Ammo) { // out of ammo return; } try { arrow = Instantiate(ammoItem.m_shared.m_attack.m_attackProjectile, arrowAttach.transform); } catch { return; } // we need to disable the Projectile Component, else the arrow will shoot out of the hands like a New Year rocket arrow.GetComponent <Projectile>().enabled = false; // also Destroy the Trail, as this produces particles when moving with arrow in hand Destroy(findTrail(arrow.transform)); Destroy(arrow.GetComponentInChildren <Collider>()); arrow.transform.localRotation = Quaternion.identity; arrow.transform.localPosition = new Vector3(0, 0, 1.25f); foreach (ParticleSystem particleSystem in arrow.GetComponentsInChildren <ParticleSystem>()) { particleSystem.transform.localScale *= VHVRConfig.ArrowParticleSize(); } arrowAttach.transform.localRotation = Quaternion.identity; arrowAttach.transform.localPosition = Vector3.zero; var currentAttack = Player.m_localPlayer.GetCurrentWeapon().m_shared.m_attack; projectileVel = currentAttack.m_projectileVel + ammoItem.m_shared.m_attack.m_projectileVel; projectileVelMin = currentAttack.m_projectileVelMin + ammoItem.m_shared.m_attack.m_projectileVelMin; }