# Mathf.SmoothDampAngle Question

I have a question regarding the Mathf.SmoothDampAngle function. I have a plane, which I am trying to tilt randomly in different directions. I want it to be constrained to a maximum x rotation and a maximum z rotation. I do not want it to rotate on the y axis (spin) yet. This is the code I am using, and it does what I want, but it does not do it smooth enough, neither does it seem to use the whole range of the constraints that I put. (Which are 45 degrees in each direction) My code is as follows:

``````    rotX = Random.Range (MIN_ROTATION, MAX_ROTATION);
rotY = Random.Range (MIN_ROTATION, MAX_ROTATION);
rotZ = Random.Range (MIN_ROTATION, MAX_ROTATION);

float xAngle = Mathf.SmoothDampAngle (transform.eulerAngles.x, rotX, ref velocity, smooth, Mathf.Infinity, Time.deltaTime);
float yAngle = Mathf.SmoothDampAngle(transform.eulerAngles.y, rotY, ref velocity, smooth);
float zAngle = Mathf.SmoothDampAngle (transform.eulerAngles.z, rotZ, ref velocity, smooth, Mathf.Infinity, Time.deltaTime);

Vector3 newRot = new Vector3(xAngle, 0.0f, zAngle);
rigidbody.transform.rotation = Quaternion.Euler(newRot);
``````

Does Anyone have any ideas as to what I can change to make the platform tilt back and forth on the x and z axis smoothly with a controllable speed and controllable range?

Well noone answered me but I think I might have solved my problem, I will post it in case anyone else might have need of this answer. Basically the problem is that since every update it was generating a random target for the smoothdampangle to tilt to, it never actually reached its goal. That made it look jerky. I solved this rather simply by putting a fixed time step based on delta time which says only recalculate a new target every second.

``````    if(time >= 1){
rotX = Random.Range (MIN_ROTATION, MAX_ROTATION);
rotY = Random.Range (MIN_ROTATION, MAX_ROTATION);
rotZ = Random.Range (MIN_ROTATION, MAX_ROTATION);
time = 0;
}
float xAngle = Mathf.SmoothDampAngle (transform.eulerAngles.x, rotX, ref velocity, smooth, Mathf.Infinity, Time.deltaTime);
float yAngle = Mathf.SmoothDampAngle(transform.eulerAngles.y, rotY, ref velocity, smooth);
float zAngle = Mathf.SmoothDampAngle (transform.eulerAngles.z, rotZ, ref velocity, smooth, Mathf.Infinity, Time.deltaTime);

Vector3 newRot = new Vector3(xAngle, 0.0f, zAngle);
transform.rotation = Quaternion.Euler(newRot);
time += Time.deltaTime;
``````

If any of you can think of a better way of doing this, please post here and tell me.