# object movement as wave in Unity 3d

I created a object in unity

``````GameObject monsterclone = (GameObject)Instantiate(monsterPrefab, floorPosition, Quaternion.identity);
``````

This object should move in a wave style from a specific point to another.

``````Vector3 nPos = mfloorPos + new Vector3(2f, 0f, 0f);
Vector3 oPos = mfloorPos  + new Vector3(-2f, 0f, 0f);
``````

How can I do it?

Try using the Mathf.Sin() function using Time.time as the parameter, and tweak according amplitude, phase, etc.

Here’s a WaveLerp function. It works like Lerp(), but with a sinusoidal displacement along the path in the plane given by the ‘up’ vector, and with given amplitude and frequency.

Call the Coroutine with: StartCoroutine(WaveMove(monsterclone.transform, nPos, oPos, 1f));

``````        IEnumerator WaveMove(Transform obj, Vector3 origin, Vector3 dest, float speed)
{
float distance = (dest - origin).magnitude;
float totalTimeToMove = distance/speed;

float timeElapsed = -Time.deltaTime;
float fraction = 0f;

while(fraction < 1f) {
timeElapsed += Time.deltaTime;
fraction = timeElapsed/totalTimeToMove;
obj.position = WaveLerp(origin, dest, Vector3.up, 0.5f, 1f, fraction);
yield return null;
}
}

Vector3 WaveLerp(Vector3 origin, Vector3 dest, Vector3 up, float amplitude, float freq, float fraction) {
float x = fraction * (dest - origin).magnitude;
float w = 2*Mathf.PI * freq;
float y = amplitude * Mathf.Sin(w*x);

Vector3 xDir = (dest - origin).normalized;
Vector3 yDir = Vector3.Cross(xDir, up).normalized;

Vector3 pathOffset = x * xDir;
Vector3 waveOffset =  y * yDir;

return origin + pathOffset + waveOffset;
}
``````