/// <summary> /// Shooting using RayCast. /// </summary> protected virtual void RayBulletShootingProcess() { RaycastHit raycastHit; for (int i = 0; i < rayBullet.GetNumberBullet(); i++) { if (rayBullet.GetNumberBullet() > 1) { firePoint.localRotation = SpreadProperties.GetSpreadRotation(-rayBullet.GetVariance(), rayBullet.GetVariance()); } if (Physics.Raycast(firePoint.position, firePoint.forward, out raycastHit, fireRange)) { Debug.DrawLine(firePoint.position, firePoint.forward, Color.red); Transform hitTransform = raycastHit.transform; SendDamage(hitTransform, rayBullet.GetDamage()); if (rayBullet.GetDecalProperties() != null) { DecalProperty decalProperty = DecalHelper.GetDecalPropertyBySurface(rayBullet.GetDecalProperties(), raycastHit); GameObject decal = decalProperty.GetRandomDecal(); AudioClip decalSoundEffect = decalProperty.GetRandomSound(); if (decal != null) { PoolManager.Instantiate(decal, raycastHit.point, Quaternion.LookRotation(raycastHit.normal)); } if (decalSoundEffect != null) { audioSource.PlayOneShot(decalSoundEffect); } } AddImpulse(transform, raycastHit.point); } } }
/// <summary> /// Shooting using physics bullet. /// </summary> protected virtual void PhysicsBulletShootingProcess() { for (int i = 0; i < physicsBullet.GetNumberBullet(); i++) { if (physicsBullet.GetNumberBullet() > 1) { firePoint.localRotation = SpreadProperties.GetSpreadRotation(-physicsBullet.GetVariance(), physicsBullet.GetVariance()); } GameObject physicsBulletClone = PoolManager.Instantiate(physicsBullet.gameObject, firePoint.position, firePoint.rotation); Rigidbody rigidbody = physicsBulletClone.GetComponent <Rigidbody>(); if (rigidbody != null) { rigidbody.AddForce(firePoint.forward * fireImpulse, ForceMode.Impulse); } } }
public void SetSpreadProperties(SpreadProperties value) { spreadProperties = value; }