/// <summary> /// Get an existing Base Camera Anchor in the scene, or create a new one if none are found /// </summary> /// <param name="rCameraAnchorGO"></param> /// <returns></returns> public static BaseCameraAnchor GetOrCreateCameraAnchor(out GameObject rCameraAnchorGO) { BaseCameraAnchor lBaseCameraAnchor = null; BaseCameraAnchor[] lFoundAnchors = GameObject.FindObjectsOfType <BaseCameraAnchor>(); if (lFoundAnchors.Length > 0) { // Use the first found camera anchor lBaseCameraAnchor = lFoundAnchors[0]; lBaseCameraAnchor.IsFollowingEnabled = true; rCameraAnchorGO = lBaseCameraAnchor.gameObject; rCameraAnchorGO.SetActive(true); // Disable the rest for (int i = 1; i < lFoundAnchors.Length; i++) { lFoundAnchors[i].IsFollowingEnabled = false; lFoundAnchors[i].gameObject.SetActive(false); } return(lBaseCameraAnchor); } // None found; create a new Camera Anchor object rCameraAnchorGO = new GameObject("Camera Anchor"); rCameraAnchorGO.transform.Reset(); lBaseCameraAnchor = rCameraAnchorGO.AddComponent <BaseCameraAnchor>(); lBaseCameraAnchor.IsFollowingEnabled = true; return(lBaseCameraAnchor); }
/// <summary> /// Creates the Input Source, Camera and Game Core, assigns references, and sets the player's Layer and Tag /// </summary> /// <param name="rMotionController"></param> protected virtual void SetupPlayer(MotionController rMotionController) { // Find or create the input source GameObject lInputSourceGO = InputSetupHelper.GetOrCreateInputSource(ViewActivator); rMotionController.InputSourceOwner = lInputSourceGO; // Find or create the camera BaseCameraRig lCameraRig = CameraSetupHelper.FindSceneCameraRig(); if (lCameraRig == null) { lCameraRig = CreateCameraRig(); } rMotionController.CameraTransform = lCameraRig.transform; ReflectionHelper.SetProperty(lCameraRig, "InputSourceOwner", lInputSourceGO); if (UseCameraAnchor) { GameObject lCameraAnchorGO = null; BaseCameraAnchor lCameraAnchor = CameraSetupHelper.GetOrCreateCameraAnchor(out lCameraAnchorGO); lCameraAnchor.Root = rMotionController.gameObject.transform; lCameraAnchor.RootOffset = AnchorTargetOffset; lCameraAnchor.RotateWithTarget = AnchorRotatesWithTarget; if (AnchorRotatesWithTarget) { lCameraAnchor.RotationRoot = rMotionController.gameObject.transform; } lCameraAnchor.MovementLerp = AnchorMovementLerp; lCameraRig.Anchor = lCameraAnchorGO.transform; } else { CameraSetupHelper.DisableCameraAnchors(); lCameraRig.Anchor = rMotionController.transform; } if (AddGameCore) { SceneSetupHelper.ConfigureGameCore(lInputSourceGO); } // Set player's layer and tag rMotionController.gameObject.layer = PlayerLayer; rMotionController.gameObject.tag = "Player"; }
/// <summary> /// Called when the object is selected in the editor /// </summary> private void OnEnable() { // Grab the serialized objects mTarget = (BaseCameraAnchor)target; mTargetSO = new SerializedObject(target); }