// 选中目标位置召唤(必有目标,才能释放技能) void DoSummonTargetPos(Character actor) { Debug.Log("DoSummonTarget"); s_SummonUID++; int id = cfg.args[0]; int angle = cfg.args[1]; int count = cfg.args[2]; float angleStart = actor.transform.rotation.eulerAngles.y; List <Character> lstActor; if (angle == 360) { // circle lstActor = CharacterManager.Instance.FindActor(actor.transform.position, SkillTarget.SKILL_TARGET_ENEMY, SkillRegion.SKILL_REGION_CIRCLE, ownSkill.Aoe, angle, Vector3.zero); } else { lstActor = CharacterManager.Instance.FindActor(actor.transform.position, SkillTarget.SKILL_TARGET_ENEMY, SkillRegion.SKILL_REGION_SECTOR, ownSkill.Aoe, angle, actor.transform.forward); } lstActor = CharacterManager.Instance.SortActor(actor.transform.position, lstActor); int i = 0; for (; i < count && i < lstActor.Count; i++) { Character target = lstActor[i]; Vector3 dir = target.transform.position - actor.transform.position; dir.y = 0.0f; dir.Normalize(); SkillSummonInfo info = new SkillSummonInfo(); info.id = id; info.skillid = ownSkill.ID; info.target = target; actor.AddSummon(s_SummonUID, target.transform.position, Quaternion.identity, info); } }
private int hitcount = 0; // 统计攻击次数 public void SetInfo(int id, Character actor, SkillSummonInfo info) { ID = id; owner = actor; cfg = CfgManager.GetInstance().SkillSummons[info.id]; skill = actor.GetSkill(info.skillid); // skill effects int count = cfg.skilleffects.Length; if (count > 0) { skilleffects = new SkillEffect[count]; for (int i = 0; i < count; i++) { skilleffects[i] = SkillEffect.CreateSkillEffect(cfg.skilleffects[i], skill); } } }
public void AddSummon(int uid, Vector3 pos, Quaternion rot, SkillSummonInfo info) { if (CfgManager.GetInstance().SkillSummons.ContainsKey(info.id)) { CfgSkillSummon cfg = CfgManager.GetInstance().SkillSummons[info.id]; GameObject prefab = (GameObject)ResourceManager.Instance.LoadAsset(cfg.prefab); GameObject go = Instantiate(prefab) as GameObject; go.tag = gameObject.tag + "Missile"; go.transform.localScale = Vector3.one; go.transform.rotation = rot; if (cfg.speed > 0) //移动 { go.transform.position = pos + new Vector3(0, 0.5f, 0) + transform.forward * 0.5f; } else { go.transform.position = pos; } SkillSummon summon = go.AddComponent <SkillSummon>(); summon.SetInfo(uid, this, info); } }
void DoSummon(Character actor) { Debug.Log("DoSummon"); s_SummonUID++; int id = cfg.args[0]; int angle = cfg.args[1]; int count = cfg.args[2]; float angleStart = actor.transform.rotation.eulerAngles.y; SkillSummonInfo info = new SkillSummonInfo(); info.id = id; info.skillid = ownSkill.ID; int angleHalf = angle / 2; if (count % 2 == 0) // 偶数 // border { actor.AddSummon(s_SummonUID, actor.transform.position, Quaternion.Euler(new Vector3(0, angleStart - angleHalf, 0)), info); actor.AddSummon(s_SummonUID, actor.transform.position, Quaternion.Euler(new Vector3(0, angleStart + angleHalf, 0)), info); int left = count - 2; if (left > 0) { int anglePer = angleHalf / (left + 1); angleStart -= angleHalf; for (int i = 0; i < left; i++) { int angleOffset = anglePer * (i + 1); actor.AddSummon(s_SummonUID, actor.transform.position, Quaternion.Euler(new Vector3(0, angleStart + angleOffset, 0)), info); } } } else // 奇数 // middle { actor.AddSummon(s_SummonUID, actor.transform.position, Quaternion.Euler(new Vector3(0, angleStart, 0)), info); if (count > 1) // 3, 5... // border { actor.AddSummon(s_SummonUID, actor.transform.position, Quaternion.Euler(new Vector3(0, angleStart - angleHalf, 0)), info); actor.AddSummon(s_SummonUID, actor.transform.position, Quaternion.Euler(new Vector3(0, angleStart + angleHalf, 0)), info); int left = (count - 3) / 2; if (left > 0) { int anglePer = angleHalf / (left + 1); for (int i = 0; i < left; i++) { int angleOffset = anglePer * (i + 1); actor.AddSummon(s_SummonUID, actor.transform.position, Quaternion.Euler(new Vector3(0, angleStart - angleOffset, 0)), info); actor.AddSummon(s_SummonUID, actor.transform.position, Quaternion.Euler(new Vector3(0, angleStart + angleOffset, 0)), info); } } } } }