FANDOM


This script allows for integration with Unity's First Person Controller, as included in their Standard Assets package.

To use it:

  1. Set your game's Movement method to First Person
  2. Find the RigidbodyFPSController, and untag its Camera child so that it is no longer tagged as MainCamera
  3. Attach a Constant ID component to the Camera child, and check Retain in prefab?.
  4. Attach the script below as a new component on the RigidbodyFPSController root object
  5. Tag this object as Player
  6. In the AC Player component, set the Animation engine to Custom and the Motion control to Manual
  7. Make the RigidbodyFPSController a prefab, and remove it from the scene
  8. Unset the Scene Manager's Default Camera and Default PlayerStart fields
  9. Create a new OnStart Cutscene with a Camera: Switch Action, and assign the prefab's Camera child in the New camera field
  10. In the same Cutscene, create an Object: Teleport Action to set the player's correct starting position/rotation.

UnityFirstPersonIntegration.cs:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using AC;
using UnityStandardAssets.Characters.FirstPerson;

[RequireComponent (typeof (RigidbodyFirstPersonController))]
[RequireComponent (typeof (AC.Player))]
public class UnityFirstPersonIntegration : MonoBehaviour
{

#region Variables

private RigidbodyFirstPersonController firstPerson;
private Player player;

#endregion


#region UnityStandards

private void Awake ()
{
player = GetComponent <Player>();
firstPerson = GetComponent <RigidbodyFirstPersonController>();
}


private void OnEnable ()
{
EventManager.OnEnterGameState += OnEnterGameState;
EventManager.OnFinishLoading += OnFinishLoading;
}


private void OnDisable ()
{
EventManager.OnEnterGameState -= OnEnterGameState;
EventManager.OnFinishLoading -= OnFinishLoading;
}


private void Update ()
{
firstPerson.mouseLook.SetCursorLock (KickStarter.playerInput.IsCursorLocked ());
}

#endregion


#region CustomEvents

private void OnEnterGameState (GameState newGameState)
{
if (newGameState == GameState.Normal)
{
firstPerson.enabled = true;
player.motionControl = MotionControl.Manual;
}
else
{
firstPerson.enabled = false;
player.motionControl = MotionControl.Automatic;
}

ResetMouseLook ();
}



private void OnTeleport ()
{
ResetMouseLook ();
}

#endregion


#region PrivateFunctions

private void OnFinishLoading ()
{
ResetMouseLook ();
}


private void ResetMouseLook ()
{
firstPerson.mouseLook.Init (transform, firstPerson.cam.transform);
}

#endregion

}
Community content is available under CC-BY-SA unless otherwise noted.