分享一段在Unity中实现物体在水上随机浮动效果的程序。实现的主要原理是把物体的position和rotation变化用Sin或Cos运动曲线来表示,实现随机效果。
那么我们先来复习一下高中的数学知识吧,看一下百度的解释:
可以这样理解,A是运动曲线的振幅,ω是角速度,大小为2π*f(f=1/T),控制正弦周期,ψ为x=0时的相位,k为偏距,即曲线沿y轴上下移动的值。这样就可以用这个公式来表示曲线运动了。
//X、Y、Z轴上正弦曲线的ω值
public float wX = 1;
public float wY = 1;
public float wZ = 1;
//X、Y、Z轴上正弦曲线的A值
public float aX = 0.2f;
public float aY = 0.2f;
public float aZ = 0.2f;
public float speed = 1f;
public float range = 1;
private float t = 0;
private Vector3 originPos;
private Vector3 originRotation;
void Awake()
{
originPos = transform.position;
originRotation = transform.eulerAngles;
}
void Update () {
t += Time.deltaTime * speed;
transform.position = new Vector3(aX * Mathf.Sin(wX * t ), aY * Mathf.Sin(wY * t), aZ * Mathf.Sin(wZ * t ))*range;
transform.rotation = Quaternion.Euler(new Vector3(aX * 20 * Mathf.Sin(wX * t ), aY * 20 * Mathf.Sin(wY * t ), aZ * 20 * Mathf.Sin(wZ * t +)));
}
这样一个简单的效果就实现啦。具体的运动幅度可以通过调节参数来控制。