private void HitTarget(Collider col) { if (((1 << col.gameObject.layer) & GameLibrary.GetAllLayer()) != 0) { CharacterState mCurTargetCs = col.GetComponent <CharacterState>(); if (mCurTargetCs != null && CheckHitCondition(mCurTargetCs)) { mCurMonsters.Add(col.gameObject); HitAction(); } } }
public virtual GameObject CheckColiderByCondition(Collider col, Func <CharacterState, bool> func) { GameObject result = null; if (((1 << col.gameObject.layer) & GameLibrary.GetAllLayer()) != 0) { CharacterState mCurTargetCs = col.GetComponent <CharacterState>(); if (mCurTargetCs != null && func(mCurTargetCs) && CheckInView(mCurTargetCs, attackerCs)) { result = col.gameObject; } } return(result); }
void SetLockTarget() { mTouches = Input.touches; if (Input.GetMouseButtonDown(0) || mTouches.Length > 0) { if (mTouches.Length > 0) { for (int i = 0; i < mTouches.Length; i++) { Touch touch = mTouches[i]; if (touch.phase != TouchPhase.Ended && touch.phase != TouchPhase.Canceled) { mIsTouched = true; mTouchPos = touch.position; } } } else { mIsTouched = true; mTouchPos = Input.mousePosition; } } if (mIsTouched) { mIsTouched = false; Ray ray = Camera.main.ScreenPointToRay(mTouchPos); RaycastHit hit; if (Physics.Raycast(ray, out hit, GameLibrary.GetMaxRayDistance(), GameLibrary.GetAllLayer())) { CharacterState hitCS = hit.transform.GetComponent <CharacterState>(); if (hitCS != null && hitCS.groupIndex != playerGroupIndex) { lockedTarget = hitCS; } } } }
//获取攻击到的敌人 List <GameObject> GetDamageRange() { int layMask = GameLibrary.GetAllLayer(); Collider[] colliders = Physics.OverlapSphere(this.transform.position, range, layMask); CharacterState mcs = attackerTrans.GetComponent <CharacterState>(); if (colliders != null) { monsters.Clear(); foreach (Collider item in colliders) { CharacterState cs = item.GetComponent <CharacterState>(); if (cs != null && mcs != null && cs.groupIndex != mcs.groupIndex) { monsters.Add(item.gameObject);//攻击范围内的敌人 } } } return(monsters); }
public List <GameObject> GetMultiTargetByCondition(SkillNode skillNode) { List <GameObject> mTempMonsters = new List <GameObject>(); Collider[] colliders = Physics.OverlapSphere(cs.transform.position, GameLibrary.Instance().GetSkillDistBySkillAndTarget(cs, skillNode), GameLibrary.GetAllLayer()); for (int i = 0; i < colliders.Length; i++) { CharacterState mCurTargetCs = colliders[i].GetComponent <CharacterState>(); if (mCurTargetCs != null) { Vector3 direction = mCurTargetCs.transform.position - cs.transform.position; if (GameLibrary.Instance().CheckHitCondition(skillNode, cs, mCurTargetCs) && GameLibrary.Instance().IsInvisiblityCanSetTarget(cs, mCurTargetCs) && (skillNode.angle == 0 ? true : direction == Vector3.zero ? true : Vector3.Angle(cs.transform.forward, direction) <= skillNode.angle / 2)) { mTempMonsters.Add(mCurTargetCs.gameObject); } } } if (skillNode.target_ceiling != 0) { mTempMonsters.Sort((a, b) => { if (a == cs.attackTarget) { return(-1); } if (b == cs.attackTarget) { return(1); } float aDis = Vector3.Distance(cs.transform.position, a.transform.position); float bDis = Vector3.Distance(cs.transform.position, b.transform.position); return(Mathf.FloorToInt(aDis - bDis)); }); mTempMonsters = mTempMonsters.GetRange(0, mTempMonsters.Count < skillNode.target_ceiling ? mTempMonsters.Count : skillNode.target_ceiling); } return(mTempMonsters); }
public List <GameObject> GetTargetByCondition(GameObject target, SkillNode skillNode) { List <GameObject> mTempMonsters = new List <GameObject>(); Collider[] colliders = Physics.OverlapSphere(cs.transform.position, GameLibrary.Instance().GetSkillDistBySkillAndTarget(cs, skillNode), GameLibrary.GetAllLayer()); for (int i = 0; i < colliders.Length; i++) { CharacterState mCurTargetCs = colliders[i].GetComponent <CharacterState>(); if (mCurTargetCs != null) { Vector3 direction = mCurTargetCs.transform.position - cs.transform.position; if (GameLibrary.Instance().CheckHitCondition(skillNode, cs, mCurTargetCs) && (skillNode.isSingle ? (target == null ? false : target.transform == mCurTargetCs.transform) : true) && (skillNode.angle == 0 ? true : direction == Vector3.zero ? true : Vector3.Angle(cs.transform.forward, direction) <= skillNode.angle / 2)) { mTempMonsters.Add(colliders[i].gameObject); } } } return(mTempMonsters); }