private void ProcessImpact() { if (m_TargetHitInfos != null) { m_TargetHitInfos.Clear(); } Vector3 rayDirRevert = m_BulletInfo.MoveDir * (-1); Vector3 impactScrPos = m_BulletInfo.ImpactSrcPos + rayDirRevert * m_BulletInfo.ImpactInfos.ImpactRadius; Ray ray = new Ray(impactScrPos, m_BulletInfo.MoveDir); float distance = (m_HitPos - m_BulletInfo.ImpactSrcPos).magnitude; RaycastHit[] targetHitInfos = Physics.SphereCastAll(ray, m_BulletInfo.ImpactInfos.ImpactRadius, distance, (int)SceneLayerType.Character); Script_Util.DrawPhysicsSphereCastLine(ray, distance, m_BulletInfo.ImpactInfos.ImpactRadius, Color.red, 10.0f); if (targetHitInfos != null && targetHitInfos.Length > 0) { m_TargetHitInfos = new List <RaycastHit>(targetHitInfos); m_TargetHitInfos = CheckTarget(m_TargetHitInfos, m_BulletInfo.ImpactInfos); foreach (RaycastHit hitInfo in m_TargetHitInfos) { GameObject target = hitInfo.transform.gameObject; if (target != null) { ImpactInfo tImpactInfo = TriggerImpl.ExtractBestImpactInfo(target, m_BulletInfo.ImpactInfos); if (tImpactInfo != null) { tImpactInfo = tImpactInfo.Clone() as ImpactInfo; Script_Util.AdjustImpactEffectDataPos(target, GetAttacker(), tImpactInfo, hitInfo.point, m_BulletInfo.MoveDir); Vector3 faceDir = m_BulletInfo.MoveDir; faceDir.y = 0; tImpactInfo.m_Velocity = Quaternion.LookRotation(faceDir) * tImpactInfo.m_Velocity; tImpactInfo.Attacker = GetAttacker(); ImpactSystem.Instance.SendImpact(GetAttacker(), target, tImpactInfo); TriggerImpl.RecordTarget(GetAttacker(), target); } } } } }