protected override int onExecute(TBTWorkingData wData) { BattleBehaviorWorkingData behaviorData = wData as BattleBehaviorWorkingData; float deltaTime = behaviorData.deltaTime; BattleUnit source = behaviorData.owner; AIBehaviorRequest request = behaviorData.request; Unit target = request.target; Vector2 ownerPos = source.Get2DPosition(); Vector2 targetPos = target.Get2DPosition(); float attackRange = source.GetAttackRange(); float distance = (targetPos - ownerPos).magnitude; if (distance <= attackRange) { return(TBTRunningStatus.FINISHED); } float moveSpeed = source.GetMoveSpeed(); float detalTime = behaviorData.deltaTime; float toForwardX = (targetPos.x - ownerPos.x) / distance; float toForwardZ = (targetPos.y - ownerPos.y) / distance; float newPosX = ownerPos.x + detalTime * moveSpeed * toForwardX; float newPosZ = ownerPos.y + detalTime * moveSpeed * toForwardZ; source.Set2DPosition(newPosX, newPosZ); //BattleLog.Log("【NOD_MoveTo】移动速度:{0} 当前位置:{1},{2} 目标位置:{3},{4} newPosX:{5} newPosZ:{6}}", // moveSpeed.ToString(), ownerPos.x.ToString(),ownerPos.y.ToString(), targetPos.x.ToString(),targetPos.y.ToString() // ,newPosX.ToString(),newPosZ.ToString()); GameMsg.instance.SendMessage(GameMsgDef.Hero_MoveTo, new HeorMoveEventArgs() { id = source.id, targetPos = new Vector3(newPosX, 0, newPosZ), forward = new Vector3(toForwardX, 0, toForwardZ) }); return(TBTRunningStatus.EXECUTING); }