protected override int OnExecute(BtWorkingData workData) { // 1.得到目标坐标target_pos Vector3 targetPos = Vector3.zero; // 2.当前坐标current_pos Vector3 currentPos = Vector3.zero; // 3.距离目标的距离是否小于一定程度 float distToTarget = MathHelper.Distance2D(targetPos, currentPos); if (distToTarget < MIN_DISTANCE) { return(BtRunningStatus.FINISHED); } else { int ret = BtRunningStatus.EXECUTING; // 下一步移动的距离 float moveingStep = 0; if (moveingStep > distToTarget) { ret = BtRunningStatus.FINISHED; } // 实际移动 return(ret); } }
protected override int OnExecute(BtWorkingData workData) { /*AIEntityWorkingData this_data = work_data.As<AIEntityWorkingData>(); * Vector3 target_pos = TMathUtils.Vector3ZeroY(this_data.EntityAi.GetBbValue<Vector3>(BtEntityAi.BBKEY_NEXTMOVINGPOSITION, Vector3.zero)); * Vector3 current_pos = TMathUtils.Vector3ZeroY(this_data.EntityTrans.position); * if (TMathUtils.IsZero((target_pos - current_pos).sqrMagnitude)) * { * return BtRunningStatus.FINISHED; * } * else * { * Vector3 to_target = TMathUtils.GetDirection2D(target_pos, current_pos); * Vector3 cur_facing = this_data.EntityTrans.forward; * float dot_v = Vector3.Dot(to_target, cur_facing); * float delta_angle = Mathf.Acos(Mathf.Clamp(dot_v, -1f, 1f)); * if (delta_angle < 0.1f) * { * this_data.EntityTrans.forward = to_target; * return BtRunningStatus.FINISHED; * } * else * { * Vector3 cross_v = Vector3.Cross(cur_facing, to_target); * float angle_to_turn = Mathf.Min(3f * this_data.DeltaTime, delta_angle); * if (cross_v.y < 0) * { * angle_to_turn = -angle_to_turn; * } * this_data.EntityTrans.Rotate(Vector3.up, angle_to_turn * Mathf.Rad2Deg, Space.World); * } * }*/ return(BtRunningStatus.FINISHED); }
protected override bool OnEvaluate(BtWorkingData workData) { BtActionParallelContext thisContext = GetContext <BtActionParallelContext>(workData); _init_list_to(thisContext._evaluationStatus, false); bool finalResult = false; for (int i = 0; i < GetChildCount(); ++i) { BtAction node = GetChild <BtAction>(i); bool ret = node.Evaluate(workData); //early break if (_evaluationRelationship == E_ChildrenRelationShip.and && ret == false) { finalResult = false; break; } if (ret) { finalResult = true; } thisContext._evaluationStatus[i] = ret; } return(finalResult); }
protected override void OnEnter(BtWorkingData workData) { AIEntityWorkingData thisData = workData.As <AIEntityWorkingData>(); UserContextData userData = GetUserContextData <UserContextData>(workData); userData._attackingTime = DefaultWaitingTime; Debug.Log("进入攻击状态,设定Target"); //this_data.EntityAnimator.CrossFade("attack", 0.2f); }
protected override void OnTransition(BtWorkingData workData) { BtActionParallelContext thisContext = GetContext <BtActionParallelContext>(workData); for (int i = 0; i < GetChildCount(); ++i) { BtAction node = GetChild <BtAction>(i); node.Transition(workData); } //clear running status _init_list_to(thisContext._runningStatus, BtRunningStatus.EXECUTING); }
protected override int OnExecute(BtWorkingData workData) { AIEntityWorkingData thisData = workData.As <AIEntityWorkingData>(); UserContextData userData = GetUserContextData <UserContextData>(workData); if (userData._attackingTime > 0) { userData._attackingTime -= thisData.DeltaTime; if (userData._attackingTime <= 0) { Debug.Log("再一次攻击"); //this_data.EntityAnimator.CrossFade(ending_anim[Random.Range(0, ending_anim.Length)], 0.2f); } } return(BtRunningStatus.EXECUTING); }
protected override int OnUpdate(BtWorkingData workData) { BtActionParallelContext thisContext = GetContext <BtActionParallelContext>(workData); //first time initialization if (thisContext._runningStatus.Count != GetChildCount()) { _init_list_to(thisContext._runningStatus, BtRunningStatus.EXECUTING); } bool hasFinished = false; bool hasExecuting = false; for (int i = 0; i < GetChildCount(); ++i) { if (thisContext._evaluationStatus[i] == false) { continue; } if (BtRunningStatus.IsFinished(thisContext._runningStatus[i])) { hasFinished = true; continue; } BtAction node = GetChild <BtAction>(i); int runningStatus = node.Update(workData); if (BtRunningStatus.IsFinished(runningStatus)) { hasFinished = true; } else { hasExecuting = true; } thisContext._runningStatus[i] = runningStatus; } if (_runningstatusRelationship == E_ChildrenRelationShip.or && hasFinished || _runningstatusRelationship == E_ChildrenRelationShip.and && hasExecuting == false) { _init_list_to(thisContext._runningStatus, BtRunningStatus.EXECUTING); return(BtRunningStatus.FINISHED); } return(BtRunningStatus.EXECUTING); }
protected override void OnEnter(BtWorkingData workData) { AIEntityWorkingData this_data = workData.As <AIEntityWorkingData>(); }
protected override void OnEnter(BtWorkingData workData) { //AIEntityWorkingData working = work_data.As<AIEntityWorkingData>(); UnityEngine.Debug.Log("播放移动动作"); // 播放移动动作 }