예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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";
        }
예제 #3
0
 /// <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);
 }