Public class variables not displaying in the inspector

I am using C# and am having trouble having the class, public variables show up in the inspector. I looked around online and found that it should have System.Serializable before the class, but it doesn’t seem to help. Any thoughts?

CharacterController_2D.cs

using UnityEngine;
using System.Collections;

public class CharacterController_2D : MonoBehaviour {
    public float f_speed = 5.0f;
    public SpriteManager[] loopSprites;
    private int in_Direction;
	// Use this for initialization
	void Start () {
		in_Direction = 1;
		for(int i = 0; i < loopSprites.Length; i++)
		{
			loopSprites*.init();*
  •  }*
    
  •  Camera.main.transform.position = new Vector3(transform.position.x, transform.position.y, Camera.main.transform.position.z);*
    
  • }*

  • // Update is called once per frame*

  • void Update () {*

  • if(Input.GetButton(“Horizontal”))*

  •  {*
    
  •  	in_Direction = Input.GetAxis("Horizontal") < 0 ? -1 : 1;*
    

rigidbody.velocity = new Vector3((in_Direction * f_speed),rigidbody.velocity.y,0);

  •  	loopSprites[0].resetFrame();*
    
  •  	loopSprites[1].UpdateAnimation(in_Direction,renderer.material);*
    
  •  }*
    
  •  else{*
    
  •  	loopSprites[1].resetFrame();*
    
  •  	loopSprites[0].UpdateAnimation(in_Direction,renderer.material);*
    
  •  }*
    
  • }*

  • public void LateUpdate()*

  • {*

  •  Camera.main.transform.position = new Vector3(transform.position.x, transform.position.y, Camera.main.transform.position.z);*
    
  • }*
    }
    SpriteManager.cs
    using UnityEngine;
    using System.Collections;
    [System.Serializable]
    public class SpriteManager : MonoBehaviour{

  • public Texture2D spriteTexture;*

  • public int in_framePerSec;*

  • public int in_gridX;*

  • public int in_gridY;*

  • public float f_timePercent;*

  • private float f_nextTime;*

  • private float f_gridX;*

  • private float f_gridY;*

  • private int in_CurFrame;*

  • public void init(){*

  •  f_timePercent = 1.0f / in_framePerSec;*
    
  •  f_nextTime = f_timePercent;*
    
  •  f_gridX = 1.0f/ in_gridX;*
    
  •  f_gridY = 1.0f / in_gridY;*
    
  •  in_CurFrame = 1;*
    
  • }*

  • public void UpdateAnimation(int _direction, Material _material){*

  •  _material.mainTexture = spriteTexture;*
    
  •  if(Time.time > f_nextTime)*
    
  •  {*
    
  •  	f_nextTime = Time.time + f_timePercent;*
    
  •  	in_CurFrame++;*
    
  •  	if(in_CurFrame > in_framePerSec)*
    
  •  	{*
    
  •  		in_CurFrame = 1;*
    
  •  	}*
    
  •  }*
    

_material.mainTextureScale = new Vector2(_direction * f_gridX, f_gridY);

  •  int in_col = 0;*
    
  •  if(in_gridY > 1)*
    
  •  {*
    
  •  	in_col = (int)Mathf.Ceil (in_CurFrame / in_gridX);*
    
  •  }*
    
  •  if(_direction == 1)*
    
  •  {*
    

_material.mainTextureOffset = new Vector2(((in_CurFrame) % in_gridX) * f_gridX, in_col * f_gridY);

  •  }*
    
  •  else*
    
  •  {*
    

_material.mainTextureOffset = new Vector2(((in_gridX + (in_CurFrame) % in_gridX)) * f_gridX, in_col * f_gridY);

  •  }*
    
  • }*

  • public void resetFrame(){*

  •  in_CurFrame = 1;*
    
  • }*
    }

Are there two classes in the same file? Which class is the file named after? Which one is supposed to show up? Which one is showing up currently?

using System.Collections;

public List<SpriteManager> sprite = new List<SpriteManager>();

@Muuskii nailed it. You cannot have two MonoBehaviour in the same file. Break these classes into two files and it’ll work just fine.

One could not place a SpriteManager through the inspector and generating one through code create a script without any name - its not working right.

The problem was that I didn’t realize that I have to apply the SpriteManager file to the array within Unity, after splitting it up into two files. I applied the file twice to the Player gameObject and then dragged the SpriteManager component in the inspector onto both items in the array. It now works as it should.