//外部状态强制切换 private void HandleModeForceSwitch(CameraMode mode, CameraContext context = null) { if (!Reset(false)) { return; } BaseCameraController camCtrl = CameraUtil.GetCamCtrl(mode); if (camCtrl.Enable(false) && camCtrl.CheckContext(context)) { SwitchCamMode(mode, context); } }
//内部状态切换 private void RefreshCameraMode(CameraContext context = null) { if (!Reset(false)) { return; } for (int i = 0; i < camCtrl.AllowChangeList.Count; i++) { BaseCameraController canCtrl = CameraUtil.GetCamCtrl(camCtrl.AllowChangeList[i]); if (canCtrl.Enable(true) && canCtrl.CheckContext(context)) { SwitchCamMode(camCtrl.AllowChangeList[i], context); break; } } }
private void SetCamera() { if (currentMode == ViewMode.firstPerson) { currentCameraController = firstPersonController; } else if (currentMode == ViewMode.thirdPerson) { currentCameraController = orbitController; } else { currentCameraController = freeLookController; } freeLookController.enabled = currentCameraController == freeLookController; orbitController.enabled = currentCameraController == orbitController; firstPersonController.enabled = currentCameraController == firstPersonController; }
public void Init() { // tell the player that it can move, in 4 seconds Invoke("StartPlayer", 4); // incase we need to change the timescale, it gets set here Time.timeScale = gameSpeed; // we store the current game's number of players in a pref so it may be set elsewhere (the main menu for example) and // carried into every level of the game. if (PlayerPrefs.HasKey("totalPlayers")) // does this pref exist? { totalPlayers = PlayerPrefs.GetInt("totalPlayers"); // then use the value it holds } else { totalPlayers = 1; // default to single player } // find player parent transform playerParent = GameObject.Find("Player_Parent_Object").transform; Vector3[] playerStarts = new Vector3[totalPlayers]; Quaternion[] playerRotations = new Quaternion[totalPlayers]; // this may be a little over-the-top, but hard coding it just wouldn't fit in with the overall theme of re-use for (int i = 0; i < totalPlayers; i++) { tempQuat = Quaternion.identity; if (i == 0) { // place player 1 at the default start position of -5,0,0 tempVec3 = new Vector3(-5, 0, 0); } else { // we'll make player 2 a start position 5 units to the right of the start position of player 1 tempVec3 = new Vector3(-5 + (i * 5), 0, 0); } playerStarts[i] = tempVec3; playerRotations[i] = tempQuat; } // if we haven't already got players set up, didInit will still be false.. otherwise we skip creating the players if (!didInit) { SpawnController.Instance.SetUpPlayers(playerPrefabList, playerStarts, playerRotations, playerParent, totalPlayers); } // grab a ref to the player's gameobject for later playerGO1 = SpawnController.Instance.GetPlayerGO(0); // if we have a two player game, let's grab that second player's gameobject too if (totalPlayers > 1) { playerGO2 = SpawnController.Instance.GetPlayerGO(1); } // find the game camera CameraTransform = GameObject.Find("GameCamera").transform; // position the camera at the specified start position (set in the Unity editor Inspector window on this component) tempVec3 = CameraTransform.localPosition; tempVec3.z = CameraStartPositionZ; CameraTransform.localPosition = tempVec3; // if we don't have a camera control script object set by the editor, try to find one cameraControl = CameraTransform.GetComponent <BaseCameraController>(); isStopped = false; // make sure we have a scene manager to talk to GetSceneManager(); didInit = true; }