NullReferenceException Error

public GameObject Su;
float countdown = 1;

// Use this for initialization
void Start () {

}

// Update is called once per frame
void FixedUpdate () {

	countdown -= Time.deltaTime;

			if (countdown <= 0) {
					RaycastHit2D hit = Physics2D.Raycast (new Vector2 (transform.position.x, transform.position.y - 0.75f), -Vector2.up, 0.1f);

					if (hit.collider == null) {
	
							Instantiate (Su, new Vector3 (transform.position.x, transform.position.y - 1, 0), Quaternion.identity);

					}

					RaycastHit2D hitSag = Physics2D.Raycast (new Vector2 (transform.position.x + 0.75f, transform.position.y), Vector2.right, 0.1f);

					if (hit.collider.tag != "Water" && hitSag.collider == null) {
	
							Instantiate (Su, new Vector3 (transform.position.x + 1, transform.position.y, 0), Quaternion.identity);

					}

					RaycastHit2D hitSol = Physics2D.Raycast (new Vector2 (transform.position.x - 0.75f, transform.position.y), -Vector2.right, 0.1f);
	
					if (hit.collider.tag != "Water" && hitSol.collider == null) {
		
							Instantiate (Su, new Vector3 (transform.position.x - 1, transform.position.y, 0), Quaternion.identity);
		
					}
			}
	}

This is my script and error

NullReferenceException: Object reference not set to an instance of an object
SuYerleştirme.FixedUpdate () (at Assets/Scripts/SuScripts/SuYerleştirme.cs:31)

but script works fine.

Lets assume Su is always set to a prefab and thats not the issue. The line numbers from an exception doesn’t really matter when you don’t include the entire class, because you don’t have the using statements and the class definition, the line numbers are off 4+ lines.

My assumption is that hit.collider is null in same cases, you have two other places that try and access the collider object on hit after you check for null.

                    RaycastHit2D hit = Physics2D.Raycast (new Vector2 (transform.position.x, transform.position.y - 0.75f), -Vector2.up, 0.1f);
                    // good, check to ensure it's NOT null, if it is, we make stuff.
                    if (hit.collider == null) {
 
                            Instantiate (Su, new Vector3 (transform.position.x, transform.position.y - 1, 0), Quaternion.identity);
 
                    }
 
                    RaycastHit2D hitSag = Physics2D.Raycast (new Vector2 (transform.position.x + 0.75f, transform.position.y), Vector2.right, 0.1f);
                    if (hit.collider != null && hit.collider.tag != "Water" && hitSag.collider == null) {
 
                            Instantiate (Su, new Vector3 (transform.position.x + 1, transform.position.y, 0), Quaternion.identity);
 
                    }
 
                    RaycastHit2D hitSol = Physics2D.Raycast (new Vector2 (transform.position.x - 0.75f, transform.position.y), -Vector2.right, 0.1f);

                    if (hit.collider != null && hit.collider.tag != "Water" && hitSol.collider == null) {
 
                            Instantiate (Su, new Vector3 (transform.position.x - 1, transform.position.y, 0), Quaternion.identity);
 
                    }

So, try checking for null again.