物体随机浮动的效果

分享一段在Unity中实现物体在水上随机浮动效果的程序。实现的主要原理是把物体的position和rotation变化用Sin或Cos运动曲线来表示,实现随机效果。
那么我们先来复习一下高中的数学知识吧,看一下百度的解释:

sin.PNG

可以这样理解,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 +)));
   }

这样一个简单的效果就实现啦。具体的运动幅度可以通过调节参数来控制。

GIF_20161001_145104.gif

你可能感兴趣的:(物体随机浮动的效果)