If you are new maybe use DontDestroyOnLoad() on an player object that saves your skin, skills etc. instead of saving your player as a prefab. This leaves this player object as an object instantiated when loading a new scene and you can just copy the values to the player that you want to use
//Check this on another player that you want to save the values to
public bool usedAsSave;
void Start()
{
if(usedAsSave)
{
//Disable the SpriteRenderer so it's not drawn and the Rigidbody2d that he doesn't fall
GetComponent<SpriteRenderer>().enabled = false;
GetComponent<Rigidbody2D>().enabled = false;
DontDestroyOnLoad(this.gameObject);
}
}
_________________________________________________________________________
//This is on what ever object you are calling it from
void PlayGame()
{
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);
}
//Now you can call this in whatever scene you want the player to be by, for example binding it into a if statement
//if(SceneManager.GetActiveScene().buildIndex == 1) fror example
void CopyPlayer()
{
//In this example the object has the name "SaveObejct"
var copy = GameObject.Find("SaveObject");
//Now you can copy all the values to the Player you are using
playerSkin.whateverValue = copy.whateverValue;
}
Here is the DontDestroyOnLoad API from Unity.
This is a bit more writing but I find easier to understand for beginners and I used this in the beginning too, to transfer data between scenes.
I hope understood you properly, if not please explain the question a bit more