public bool IsInAttackRange(ActorBase enemy, DBSkillDamageConf damage) { //伤害中心 Vector3 damageCenter = Vector3.zero; Vector3 t = damage.damageCenterPos; if (damage.damageCenterType == EmDamageCenterType.Attacker) { if (!actor.objectbase.isFacingRight) { t.x = -t.x; } damageCenter = actor.objectbase.realPos + t; } else if (damage.damageCenterType == EmDamageCenterType.Target) { damageCenter = enemy.objectbase.realPos + damage.damageCenterPos; } else if (damage.damageCenterType == EmDamageCenterType.AttackObject) { damageCenter = eo.effectObject.realPos + damage.damageCenterPos; } else { Debug.LogError("damage.damageCenterType is none"); } //球形区域不用判断 if (damage.damageArenaType == EmDamageArenaType.FrontArena) { if (!actor.objectbase.IsInFrontOfMe(enemy.objectbase.realLocalPos)) { return(false); } } //伤害区域这样处理是以伤害中心为球心的球 //todo,中心为Target和AttackObject作为球体处理,Attacker才具有多样化,因为attacker可以获取到朝向。其他的朝向都是未知/变动的。 //float dist = (damageCenter - enemy.objectbase.realLocalPos).sqrMagnitude; //Debug.Log(dist); //if(dist > damage.damageDistance * damage.damageDistance) // return false; //伤害区域这样处理是以伤害中心为中心的立方体 return(ColliderManager.IsCollision(damageCenter, new Vector3(damage.damageArenaRadius, damage.damageArenaRadius, damage.damageArenaRadius), enemy.objectbase.realLocalPos + new Vector3(0, enemy.actorConf.size.y * 0.5f, 0), enemy.actorConf.size)); //return true; }
void Update_Collide() { if (attackConf.damageMode != 2) { return; } //目前只与怪物做碰撞 List <ActorBase> enemyList = GameMain.curSceneManager.GetEnemyList(actor); foreach (ActorBase a in enemyList) { if (ColliderManager.IsCollision(eo.effectObject.realPos, new Vector3(1, 1, 1), a.objectbase.realPos, a.objectcollider.size)) { isInCollision = true; isAttackObjectMoving = false; //不让攻击物继续移动了 isLifeTimeEnd = true; //碰撞后即消失 eo.x2dEffect.Stop(); Debug.Log("isInCollision"); break; } } }