//更新运行状态 void UpdateRunningState() { if (nearbyDefenderPlayerSet.Count > 0 || nearbyAttackerPlayerSet.Count <= 0) { curState = CarFSMState.Stop; moveSpeed = 0.0f; } else { moveSpeed = speed * nearbyAttackerPlayerSet.Count; //人越多 推的越快 //计算宝物车已经走过的路程 float length = trailReference.spline.Length(); distance = Mathf.Clamp(distance + moveSpeed * Time.deltaTime, 0, length - 0.1f); //计算宝物车的位置和朝向 Vector3 forward = trailReference.spline.FindTangentFromDistance(distance); Vector3 position = trailReference.spline.FindPositionFromDistance(distance); if (forward != Vector3.zero) { transform.forward = forward; transform.position = new Vector3(position.x, transform.position.y, position.z); } if (length - distance <= 0.1f) { curState = CarFSMState.Finish; } } }
//更新停止状态 void UpdateStopState() { if (nearbyAttackerPlayerSet.Count > 0 && nearbyDefenderPlayerSet.Count <= 0) { curState = CarFSMState.Running; } }
//使CarController开始工作 public void StartWorking() { if (!PhotonNetwork.isMasterClient) { return; } curState = CarFSMState.Prepare; }
void Start() { agent = GetComponent <NavMeshAgent>(); curState = CarFSMState.Disable; if (agent != null) { agent.enabled = false; } distance = 0.0f; }
//更新起始状态 void UpdatePrepareState() { float step = speed * Time.deltaTime; transform.position = Vector3.MoveTowards(transform.position, trailReference.spline.FindPositionFromDistance(0) + offset, step); if (Vector3.Distance(transform.position, trailReference.spline.FindPositionFromDistance(0) + offset) <= 0.1f) { curState = CarFSMState.Running; } }
//同步更新宝物车的状态和数据 void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info) { if (stream.isWriting) //本地玩家发送数据 { stream.SendNext(curState); stream.SendNext(moveSpeed); stream.SendNext(distance); } else //远程玩家接收数据 { curState = (CarFSMState)stream.ReceiveNext(); moveSpeed = (float)stream.ReceiveNext(); distance = (float)stream.ReceiveNext(); } }