/// <summary> /// Get a reference to the Input Source already in the scene, or create a new one if needed /// </summary> /// <param name="rViewActivatorOption"></param> /// <returns></returns> public static GameObject GetOrCreateInputSource(int rViewActivatorOption) { // Find or create the input source; will use Easy Input if it is installed GameObject lInputSourceGO = null; IInputSource lInputSource = InputSetupHelper.CreateInputSource("com.ootii.Input.EasyInputSource, " + AssemblyHelper.AssemblyInfo, ref lInputSourceGO); if (lInputSource == null) { lInputSource = InputSetupHelper.CreateInputSource <UnityInputSource>(ref lInputSourceGO); } ReflectionHelper.SetProperty(lInputSource, "ViewActivator", rViewActivatorOption); return(lInputSourceGO); }
/// <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> /// Step 4: Apply Input Manager settings /// </summary> /// <param name="rMotionController"></param> protected virtual void ConfigureInput(MotionController rMotionController) { string lProgressTitle = "Configuring Input (Step 4 of 6)"; float lProgressAmount = 4f / 6f; EditorUtility.DisplayProgressBar(lProgressTitle, "Input Manager settings", lProgressAmount); InputSetupHelper.CreateDefaultInputSettings(rMotionController); if (Modules == null) { return; } foreach (var lModule in Modules) { if (lModule.IsValid && lModule is IConfigureInput) { ((IConfigureInput)lModule).ConfigureInput(); } } }
/// <summary> /// Draw the settings to use when the character is configured as a Player /// </summary> protected virtual void DrawPlayerSettings() { EditorGUILayout.HelpBox("When a player character is created, the camera, UI, and input options can also be set up.", MessageType.None); GUILayout.Space(5); mPlayerLayer.intValue = EditorGUILayout.LayerField(new GUIContent("Assign to Layer"), mPlayerLayer.intValue); EditorGUILayout.Separator(); EditorGUILayout.LabelField("Camera Settings", EditorStyles.boldLabel, GUILayout.Height(16f)); //EditorGUILayout.BeginHorizontal(); //EditorGUILayout.BeginVertical(); EditorGUILayout.PropertyField(mUseCameraPrefab); if (mUseCameraPrefab.boolValue) { EditorGUI.indentLevel++; EditorGUILayout.PropertyField(FindProperty(x => x.CameraPrefab)); EditorGUI.indentLevel--; } EditorGUILayout.PropertyField(mUseCameraAnchor); if (mUseCameraAnchor.boolValue) { EditorGUI.indentLevel++; EditorGUILayout.PropertyField(FindProperty(x => x.AnchorTargetOffset), new GUIContent("Target Offset"), GUILayout.Width(mFieldWidth)); EditorGUILayout.PropertyField(FindProperty(x => x.AnchorRotatesWithTarget), new GUIContent("Rotate with Target")); EditorGUILayout.PropertyField(FindProperty(x => x.AnchorMovementLerp), new GUIContent("Movement Lerp"), GUILayout.Width(mFieldWidth)); EditorGUI.indentLevel--; } EditorGUILayout.Separator(); EditorGUILayout.PropertyField(mAddGameCore); EditorGUILayout.Separator(); EditorGUILayout.LabelField("Input Settings", EditorStyles.boldLabel, GUILayout.Height(16f)); if (!InputSetupHelper.HasDefaultInputSettings()) { EditorGUILayout.HelpBox( "The default Unity Input Manager values for Motion Controller are missing." + "\n\nMark the checkbox below to set them up.", MessageType.Info); GUILayout.Space(5); EditorGUILayout.PropertyField(FindProperty(x => x.UpdateInput), new GUIContent("Setup Input Entries")); } mViewActivator.intValue = EditorGUILayout.Popup("View Activator", mViewActivator.intValue, InputSetupHelper.Activators, GUILayout.Width(mFieldWidth)); EditorGUILayout.Separator(); EditorGUILayout.LabelField("UI Settings", EditorStyles.boldLabel, GUILayout.Height(16f)); EditorGUILayout.PropertyField(mUseReticle); if (mUseReticle.boolValue) { EditorGUI.indentLevel++; EditorGUILayout.PropertyField(FindProperty(x => x.ReticlePrefab)); EditorGUILayout.PropertyField(FindProperty(x => x.ReticleStartVisible), new GUIContent("Visible at Start")); EditorGUI.indentLevel--; } EditorGUILayout.PropertyField(mUsePlayerHealthBar, new GUIContent("Use HUD")); if (mUsePlayerHealthBar.boolValue) { EditorGUI.indentLevel++; EditorGUILayout.PropertyField(mPlayerHealthBarPrefab, new GUIContent("HUD Prefab")); EditorGUILayout.PropertyField(FindProperty(x => x.PlayerHealthBarHideWhenFull), new GUIContent("Hide When Full")); EditorGUI.indentLevel--; } //EditorGUILayout.EndVertical(); //GUILayout.FlexibleSpace(); //EditorGUILayout.EndHorizontal(); }