public override bool Check() { var list = Detect.DetectObject(focus); foreach (var p in list) { if (p.GetComponent <Unit>()) { return(false); } } return(true); }
public override bool Check() { var list = Detect.DetectObject(focus); foreach (var p in list) { if (p.GetComponent <Unit>() && character.GetComponent <Unit>() != p.GetComponent <Unit>()) { target = p; return(true); } } return(false); }
protected bool DetectObstacle(Vector3 position) { var cols = Detect.DetectObject(position); foreach (var col in cols) { if (col.parent) { if (col.parent.GetComponent <Obstacle>()) { return(true); } } } return(false); }
public override bool Check() { var list = Detect.DetectObject(focus); foreach (var p in list) { if (p.GetComponent <Unit>()) { if (p.Find("Render").gameObject.activeInHierarchy) { return(false); } } } return(true); }
protected override void InitSkill() { base.InitSkill(); var list = Detect.DetectObject <CharacterStatus>(character.position + character.right - character.forward); if (list.Count == 1) { var comboCS = list[0]; if (comboCS != null && comboCS.roleEName == character.GetComponent <CharacterStatus>().roleEName) { comboCS.transform.forward = character.forward; comboCS.GetComponent <Animator>().SetInteger("Skill", 9); GameController.GetInstance().Invoke(() => { comboCS.GetComponent <Animator>().SetInteger("Skill", 0); }, 0.1f); damage *= 2; } } Camera.main.GetComponent <RTSCamera>().FollowTarget(character.position); GameController.GetInstance().Invoke(() => { FXManager.GetInstance().Spawn("Rasengan", character.GetComponent <Animator>().GetBoneTransform(HumanBodyBones.RightHand), 3.2f); }, 0.5f); }
public override bool Check() { var list = Detect.DetectObject(focus); foreach (var p in list) { if (p.GetComponent <CharacterStatus>()) { if (!character.GetComponent <CharacterStatus>().IsEnemy(p.GetComponent <CharacterStatus>())) { other.Add(p); } } } if (other.Count > 0) { return(true); } return(false); }
//传入范围和创建范围角色的transform.position即可创建。p即transform.position public void CreateMoveRange(Transform character) { this.character = character; startRotation = character.rotation; range = character.GetComponent <CharacterStatus>().attributes.Find(d => d.eName == "mrg").value; if (range < 1) { return; } var list = CreateRange(range, character.position); //比list大一圈以保证enemy在范围外一圈时范围内颜色的正常显示。 var detect = CreateRange(range + 1, character.position); //此处创建范围比应有范围大1,正确的显示效果 是在下面 A*检测到路径但距离大于角色mrg的地块不显示 处得到保证。 //检测到敌人时地块不显示,且加入名单。 foreach (var position in detect) { if (CheckEnemy(Detect.DetectObject(position)) == 2) { enemyFloor.Add(position); continue; } //检测到障碍物时地块不显示。后期实现水上行走,跳远,树上行走。 if (DetectObstacle(position)) { continue; } BattleFieldManager.GetInstance().GetFloor(position).SetActive(true); rangeDic.Add(position, BattleFieldManager.GetInstance().GetFloor(position)); } //添加enemyFloor周围的坐标进入容器。 foreach (var floor in enemyFloor) { Vector3 V1 = new Vector3(floor.x - 1, 0, floor.z); Vector3 V2 = new Vector3(floor.x + 1, 0, floor.z); Vector3 V3 = new Vector3(floor.x, 0, floor.z - 1); Vector3 V4 = new Vector3(floor.x, 0, floor.z + 1); TryAddValue(floorAroundEnemy, V1); TryAddValue(floorAroundEnemy, V2); TryAddValue(floorAroundEnemy, V3); TryAddValue(floorAroundEnemy, V4); } var buffer0 = new List <Vector3>(); foreach (var floor in rangeDic) { if (!list.Contains(floor.Key)) { floor.Value.SetActive(false); buffer0.Add(floor.Key); } } foreach (var a in buffer0) { rangeDic.Remove(a); } //A*检测到路径但距离大于角色mrg的地块不显示。A*无法检测到路径的地块不显示。必须第二次遍历,即创建完成,A*寻路才有意义。 //不能迭代时改变或删除Dictionary中的元素。 var buffer = new List <Vector3>(); foreach (var floor in rangeDic) { if ((UseAstar(character.position, floor.Key, range).Count > range + 1) || (floor.Key != character.position && UseAstar(character.position, floor.Key, range).Count == 0)) { floor.Value.SetActive(false); buffer.Add(floor.Key); } } foreach (var a in buffer) { rangeDic.Remove(a); } RecoverColor(); }
public void CreateStraightSkillRange(int range, Transform character, bool aliesObstruct) { this.character = character; startRotation = character.rotation; var list = CreateStraightRange(range, character.position); var listBuffer = new List <Vector3>(); foreach (var position in list) { int check = CheckEnemy(Detect.DetectObject(position)); if (check > 0) { if (check == 2) { enemyFloor.Add(position); } else if (check == 1 && aliesObstruct) { listBuffer.Add(position); //技能现在可被友军阻挡。 } } else if (DetectObstacle(position)) { obstacleFloor.Add(position); continue; } BFM.GetFloor(position).SetActive(true); rangeDic.Add(position, BFM.GetFloor(position)); } //直线施法的障碍物遮挡效果 var buffer = new Dictionary <Vector3, GameObject>(); foreach (var a in enemyFloor) { listBuffer.Add(a); } foreach (var a in obstacleFloor) { if (!listBuffer.Contains(a)) { listBuffer.Add(a); } } foreach (var floor in rangeDic.Values) { foreach (var f in listBuffer) { if (floor.activeInHierarchy) { var dis = floor.transform.position - character.position; var eDis = f - character.position; //两向量方向相同,且dis距离大于eDis,则不显示。即被遮挡住。 if ((dis.normalized == eDis.normalized) && (dis.magnitude > eDis.magnitude)) { BFM.GetFloor(floor.transform.position).SetActive(false); buffer.Add(floor.transform.position, floor); } } } } foreach (var pair in buffer) { rangeDic.Remove(pair.Key); } }
// Update is called once per frame void Update() { GetMousePosition(); unit = Selectunit(Detect.DetectObject(HandleMouse())); LogMessage(); }