void OnHit(RaycastHit hit) { transform.position = hit.point + (hit.normal * collideOffset); if (impactParticle) { GameObject impactP = Instantiate(impactParticle, transform.position, Quaternion.FromToRotation(Vector3.up, hit.normal)); var collider = impactP.GetComponent <Collider>(); if (collider) { collider.isTrigger = true; } Destroy(impactP, 3.5f); } if (mDeleteAfterHit || mIsFollowProjectile) { DestroyProjectile(); } if (!mIsFollowProjectile) //非指定目标 { var actor = hit.transform.GetComponent <ISkillActor>(); if (actor != null) { mParam.ResetTarget(); mParam.AddTarget(actor); } } if (mSkill != null && mParam != null) { mSkill.OnProjectileHit(mParam.IdentifyId); mSkill.OnBounceNodeEnd(mParam.IdentifyId, mData.Id); //1.不在弹射状态才调用,弹射状态由OnBounceNodeEnd函数内部去调用RemoveAction //2.弹射可能会因为超过最大弹射次数而提前结束技能(此时弹射状态已经重置) if (!mParam.IsBounce && !mSkill.IsSKillEnd(mParam.IdentifyId)) { mSkill.RemoveSkillAction(mData.Id, mParam); } } }