should class members ever be static?

Hi I’m using a script as a makeshift database called Gametempdatabase. I’m using it to save player names and character roles for when it loads to a separate scene. (no long term saving yet)

class playerdata
{
	var playerin : boolean;
	var playername : String;
	var playerrole : String;
	public function playerdetails()//doesn't work either
	{
		print("from database: " + playerin.ToString() + " " + playername + " as a " + playerrole);
	}
}

//playersdata is not getting separate instances
static var playersdata : playerdata[] = new playerdata[4];

I changed to static previously but that caused all instances to be saved to the same data. How do I fix this?

Sample writing of the classes:

//print(Gametempdatabase.builderscene);
	print("size of playersdata array: " + Gametempdatabase.playersdata.length.ToString());
	for(var sc : int = 0; sc < maxplayers; sc++)
	{
		print(playerin[sc].ToString() + " " + playername[sc] + " as a " + playerrole[sc]);
		Gametempdatabase.playersdata[sc].playerin = playerin[sc];
		Gametempdatabase.playersdata[sc].playername = playername[sc];
		Gametempdatabase.playersdata[sc].playerrole = playerrole[sc];
		
		print("database version: " + Gametempdatabase.playersdata[sc].playername + " " + Gametempdatabase.playersdata[sc].playerin.ToString() + " " + Gametempdatabase.playersdata[sc].playerrole);
		//GameObject.Find("setup object").GetComponent("Gametempdatabase").playersdata[sc].playerdetails();
	}
	print("checking for override using loop");
	for(var c : int = 0; c < maxplayers; c++)
	{
		print("database version: " + Gametempdatabase.playersdata
.playername + " " + Gametempdatabase.playersdata[c].playerin.ToString() + " " + Gametempdatabase.playersdata[c].playerrole);
    	}

Once again, the data members of playerdata were static but changed due to all members changing. (now it's giving a null reference exception)

Create an empty game object, store your info without static and use

DontDestroyOnLoad(gameObject);

Do it as many times as you need