public void selectNextCharacter() { //save old character params Vector3 playerPosition = playerController1.transform.position; Quaternion playerRotation = playerController1.transform.rotation; PlayerControllerAdvanced oldController = playerController1; Checkpoint lastCheckpoint = oldController.lastCheckpoint; int characterHP = oldController.character.hpCurrent; int oldplayerNumber = oldController.playerNumber; //load new characters and link to related objects GameObject newCharacter = characterRoster.getNextCharacter(); GameObject newCharacterInstance = Instantiate(newCharacter, playerPosition, playerRotation); playerController1 = newCharacterInstance.GetComponent <PlayerControllerAdvanced>(); playerController1.character.playerUI = oldController.character.playerUI; playerController1.lastCheckpoint = lastCheckpoint; playerController1.character.hpCurrent = characterHP; playerController1.playerNumber = oldController.playerNumber; player1UI.owner = playerController1; player1UI.init(); followCam.target = newCharacterInstance.transform; //destroy old character and clean up Destroy(oldController.gameObject); if (spawnFX != null) { GameObject fxInstance = Instantiate(spawnFX, playerPosition, playerRotation); } }