public override void Update() { if (GameInput.Instance.GetEnableInput() && mIsProcessInput) { ProcessInput(); } // 检测自动状态下,是不是按下了方向 if (mIsProcessInput && GameInput.Instance.GetEnableInput() == false && InstanceManager.Instance.IsAutoFighting) { float v = GameInput.GetInstance().Position.y; float h = GameInput.GetInstance().Position.x; bool state = v != 0 || h != 0; if (state) { Actor localPlayer = Game.GetInstance().GetLocalPlayer(); if (localPlayer != null) { ClientEventMgr.GetInstance().FireEvent((int)ClientEvent.CE_PLAYERCONTROLED, null); } } } UpdateWalk(); }
/// <summary> /// 获取用户输入,设置对应方向变量 /// </summary> void ProcessInput() { float v = GameInput.GetInstance().Position.y; float h = GameInput.GetInstance().Position.x; mbMovingInput = v != 0 || h != 0; //GameDebug.LogError("v:" + v + " h:" + h); if (mbMovingInput) { Vector3 dir = Vector3.zero; if (Game.Instance.CameraControl != null && Game.Instance.CameraControl.Mode == CameraControl.EMode.CM_FOLLOW_FORCE_FOCUS) { CameraControl camControl = Game.Instance.CameraControl; Vector3 cameraForward = camControl.transform.forward; Vector3 right = Vector3.zero; Vector3 forward = Vector3.zero; if (h < 0.0f) { right = camControl.transform.right; } else if (h > 0.0f) { right = -camControl.transform.right; } if (v < 0.0f) { forward = cameraForward; } else if (v > 0.0f) { forward = -cameraForward; } dir = right + forward; } else { dir.x = -h; dir.z = -v; if (Game.Instance.CameraControl != null && Game.Instance.CameraControl.SelectedChildCamera != null) { float cameraForward = Game.Instance.CameraControl.SelectedChildCamera.eulerAngles.y; var rotation = Quaternion.Euler(0, cameraForward, 0); dir = rotation * dir; } } dir.Normalize(); //dir.y = 0.0f; // 方向的细分限制 /*float angle = Maths.Util.VectorToAngle(dir); * float minAngle = Mathf.PI/16.0f; * float angleF = Mathf.RoundToInt(angle/minAngle) * minAngle; * dir = Maths.Util.AngleToVector(angleF);*/ _walk(dir); mIsNoneInput = false; } else { mIsNoneInput = true; } if (false == mbMovingInput && mOwner.WalkMode == ActorMachine.EWalkMode.EWM_Dir && (mOwner.IsWalking())) { // 当非任务指引的时候才停止 并且也不在非跟随模式才停止 if (TargetPathManager.Instance.IsNavigating == false) { Actor localPlayer = Game.GetInstance().GetLocalPlayer(); if (localPlayer.GetAIEnable() == false) { TryWalkAlongStop(); } } } if (!mIsNoneInput) { Actor localPlayer = Game.GetInstance().GetLocalPlayer(); if (localPlayer != null) { ClientEventMgr.GetInstance().FireEvent((int)ClientEvent.CE_PLAYERCONTROLED, null); } } }
void LateUpdate() { GameInput.GetInstance().Update(); }