transform.position assign attempt for "Cube" is not valid. Input position is { NaN, -Infinity, NaN }.

How to fix this error ?
With script i think evrything is ok…With scale of cube and ground same,it’s 1…
Check the script please and help me with that.
using UnityEngine;
using System.Collections;

[RequireComponent(typeof(BoxCollider))]
public class PlayerPhysics : MonoBehaviour {

	public LayerMask collisionMask;
	private BoxCollider collider;
	private Vector3 s;
	private Vector3 c;

	private float skin = .005f;
	[HideInInspector]
	public bool grounded;

	Ray ray;
	RaycastHit hit;

	void Start()
	{
		collider = GetComponent<BoxCollider>();
		s = collider.size;
		c = collider.center;
	}

	public void Move(Vector2 moveAmount)
	{
		float deltaY = moveAmount.y;
		float deltaX = moveAmount.x;
		Vector2 p = transform.position;

		for(int i = 0;i<3;i++)
		{
			float dir = Mathf.Sign(deltaY);
			float x = (p.x + c.x - s.x/2)+ s.x/2 * i;
			float y = p.y + c.y + s.y/2 * dir;

			ray = new Ray(new Vector2(x,y),new Vector2(0,dir));
			if(Physics.Raycast(ray,out hit,Mathf.Abs(deltaY),collisionMask));
			{
				float dst = Vector3.Distance(ray.origin,hit.point);
				if(dst > skin)
				{
					deltaY = -dst + skin;
				}
				else
				{
					deltaY = 0;
				}
				grounded = true;
				break;
			}
		}
		Vector2 finalTransform = new Vector2(deltaX,deltaY);
		transform.Translate(finalTransform); //Error is in that line
	}
}

Input position is { NaN, -Infinity, NaN }.

NaN means Not a Number, which is a result from “strange math”. -Infinity means you got a value that represents negative infinity. You divided something by zero most likely. So let’s look at where you got divisions.

         float x = (p.x + c.x - s.x/2)+ s.x/2 * i;
         float y = p.y + c.y + s.y/2 * dir;

s.x/2, s.x/2 * i and s.x/2. Division with 2 is not a problem. Multiplication has precedence over division so s.x/2 * i can be read as s.x / (2 * i) and if 2 * i == 0 you got a problem. We can see where icomes from - the for loop, and it is initialized to 0.

for(int i = 0;i<3;i++)
//...
    float x = (p.x + c.x - s.x/2)+ s.x/2 * i;

It’s basically saying float x = math_stuff / 0; and will result in infinity for the first iteration. I guess if you fix that, your NaN’s might get solved too.