示例#1
0
    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);
            }
        }
    }