Unity refuses to display my field in the Inspector.

It wont display the playerList text field.

using UnityEngine;
using System.Collections.Generic;
using System.Collections;
using UnityEngine.UI;

public class GameManager : MonoBehaviour
{
	
	private const string PLAYER_ID_PREFIX = "Player ";
	
 
    private static Dictionary<string, Player> players = new Dictionary<string, Player>(); // freaking tutorial doesnt say to use void start 

    //[SerializeField]
    public static Text playerList;
 
 public static void RegisterPlayer (string _netID, Player _player) {
	 
	 string _playerID = PLAYER_ID_PREFIX + _netID;
	 players.Add(_playerID, _player); // Player 1, 0af68923r
	 _player.transform.name = _playerID;
     DisplayUI();


 }
 
 public static void UnRegisterPlayer (string _playerID) {
	 
	 players.Remove(_playerID);
	 
 }
 
 public static Player GetPlayer(string _playerID) {
	 
	 return players[_playerID];
	 
 }
 
public static void DisplayUI()
    {

        foreach (string _playerID in players.Keys)
        {

            playerList.text = playerList.text + _playerID + " - " + players[_playerID].transform.name + "/n";

        }

    }
 
}

Because you declared your field static. Static members do not belong to an instance of that class. They are seperate, static fields which are independent from instances of the class and are shared between all of them. Static fields are never serialized when an instance of a class is serialized since, as i said, it doesn’t even belong to the instance.

If you want a field to be serialized (and therefore be displayed and editable in the inspector) it need to be a non static instance field.

It’s difficult to give you a clear advice what you should change in your class since we don’t know where and how it’s used. At the moment your class has no instance fields or methods. So attaching it to a gameobject is completely pointless at the moment. However for managers that should be represented by an instance you usually want to use a “singleton”. A singletun is just a single instance of an object and you provide a static field which holds a reference to that single instance.

public class GameManager : MonoBehaviour
{
    public static GameManager instance;
    void Awake()
    {
        instance = this;
    }

    public Text playerList;
    // [ ... ]
}

When the game starts the instance of the GameManager in the scene will “store itself” in the static instance variable. Now everybody, anywhere in your project can use GameManager.instance to get access to the instance of the class and therefore has access to all instance fields and methods,