public void SetTarget(FightElement target) { //TODO pathNode[0] = breedPos; pathNode[1] = shipHead; pathNode[2] = attackPosition; }
public void SetTarget(FightElement target, float lifeTime) { lockTarget = target; this.lifeTime = lifeTime; gameObject.SetActive(true); StartCoroutine(LockTarget()); }
public bool SetTarget(FightElement target) //设定移动目标 { switch (team) //判断自己所在阵营 { case Team.Self: case Team.Alliance: if (target.team == Team.Enemy) { hitTarget = target; moveState = ShipMoveState.MoveToTarget; return(true); } break; case Team.Enemy: if (target.team != team) { hitTarget = target; moveState = ShipMoveState.MoveToTarget; return(true); } break; } return(false); }
//发射炮弹入口(内部处理旋转,角度问题) public void OnFire(Transform belongTo, FightElement target) { this.belongTo = belongTo; if (!CanFire(target)) //首先判断是否可攻击 { return; } Ship hitTarget; if ((hitTarget = target.GetComponent <Ship>()) && hitTarget.isMoving) //判断目标是否正在移动 { #region 来吧!计算一个提前量!!!!!! Vector3 hitPos = GetPointInBounds(hitTarget); float t = Vector3.Distance(hitPos, transform.position) / bulletPrefs.data.moveSpeed; Vector3 targetPos = hitTarget.shipData.moveSpeed * target.transform.forward * (t + fireInterval * .25f) + hitPos;//最终目标中心点 StartCoroutine(RotateTo(targetPos)); #endregion } else { if (target.GetComponent <FightElement>()) { StartCoroutine(RotateTo(GetPointInBounds(target.GetComponent <FightElement>()))); } else { StartCoroutine(RotateTo(target.transform.position)); } } }
public void SetTarget(FightElement self, FightElement target, float lifeTime) { this.skillReleaser = self; lockTarget = target; this.lifeTime = lifeTime; gameObject.SetActive(true); StartCoroutine(LockTarget()); }
/// <summary> /// 获取他妈的碰撞盒之内的一个他妈的随机点,擦! /// </summary> /// <param name="target">拥有他妈的碰撞盒的他妈的战斗元素</param> /// <returns></returns> public Vector3 GetPointInBounds(FightElement target) { Vector3 externts = target.externts; return(target.transform.localToWorldMatrix.MultiplyPoint3x4(new Vector3(Random.Range(-externts.x, externts.x), externts.y, Random.Range(-externts.z, externts.z)))); return(target.transform.rotation * (new Vector3(Random.Range(-externts.x, externts.x), Random.Range(-externts.y, externts.y), Random.Range(-externts.z, externts.z)) + target.transform.worldToLocalMatrix.MultiplyPoint3x4(target.collider.bounds.center + target.transform.position))); }
public void SetTarget(FightElement belongTo, FightElement target) { hitTarget = target; this.belongTo = belongTo; path.Insert(0, belongTo.transform.position); path.Insert(1, belongTo.transform.position + belongTo.transform.forward * 100); path.Insert(2, target.transform.position); }
/// <summary> /// 判断攻击目标是否在可攻击视角内 /// </summary> /// <param name="target">攻击目标</param> /// <returns></returns> public bool CanFire(FightElement target) { switch (cannonType) { case CannonType.主炮: //主炮 if (!(target.fightElementType == FightElementType.Ship || target.fightElementType == FightElementType.Island)) //攻击目标不为战舰或者岛,不可攻击 { return(false); } break; case CannonType.组合炮: //组合炮 //攻击目标为全部,无需判断目标,直接进行下面的角度判断. break; case CannonType.高射炮: //高射炮 if (target.fightElementType != FightElementType.AirCraft) //攻击目标不为飞机,不可攻击 { return(false); } break; case CannonType.副炮: //副炮 if (target.fightElementType != FightElementType.Island) //攻击目标不为岛,不可攻击 { return(false); } break; } Vector3 targetDir = belongTo.worldToLocalMatrix.MultiplyVector(target.transform.position - transform.position); targetDir.y = 0; if (isObtuseAngle) //如果视角 ≥ 180° { if (Vector3.Cross(righSightAxis, targetDir).y > 0 && Vector3.Cross(targetDir, leftSightAxis).y > 0) //判断在右轴与左轴之间. { return(false); } else { return(true); } } else //如果视角 < 180° { if (Vector3.Cross(leftSightAxis, targetDir).y > 0 && Vector3.Cross(targetDir, righSightAxis).y > 0) //判断在左轴与右轴之间. { return(true); } else { return(false); } } }
public Vector3 shipHead; // 甲板尽头 public void OnFire(Transform belongTo, FightElement target) { //TODO //投弹 }
public bool CanFire(FightElement target) { return(true); //TODO }
void OnEnable() { fightElement = target as FightElement; }
public void OnFire(FightElement target) { //TODO }
/// <summary> /// 获取他妈的碰撞盒之内的一个他妈的随机点,擦! /// </summary> /// <param name="target">拥有他妈的碰撞盒的他妈的战斗元素</param> /// <returns></returns> public Vector3 GetPointInBounds(FightElement target) { Vector3 externts = target.externts; return(target.transform.localToWorldMatrix.MultiplyPoint3x4(new Vector3(Random.Range(-externts.x, externts.x), externts.y, Random.Range(-externts.z, externts.z)))); }