Search Unity

  1. We've closed the job boards. If you're looking for work, or looking to hire check out Unity Connect. You can see more information here.
    Dismiss Notice
  2. We're running great holiday deals on subscriptions, swag and Asset Store packages! Take a peek at this blog for more information!
    Dismiss Notice
  3. Check out our Unite Austin 2017 YouTube playlist to catch up on what you missed. More videos coming soon.
    Dismiss Notice
  4. Unity 2017.2 is now released.
    Dismiss Notice
  5. The Unity Gear Store is here to help you look great at your next meetup, user group or conference. With all new Unity apparel, stickers and more!
    Dismiss Notice
  6. Introducing the Unity Essentials Packs! Find out more.
    Dismiss Notice
  7. Want to see the most recent patch releases? Take a peek at the patch release page.
    Dismiss Notice
  8. Unity 2017.3 beta is now available for download.
    Dismiss Notice

2d Water

Discussion in 'Scripting' started by xcube, Jun 30, 2012.

  1. xcube

    xcube

    Joined:
    Nov 27, 2011
    Posts:
    36
    Hello



    Which means you can get this water?
    How would you do it?
     
  2. jister

    jister

    Joined:
    Oct 9, 2009
    Posts:
    1,595
    the waves aren't that hard i think, you could get that with some peril noise script, the collision on the other hand... i would start with looking into cloth collision or fluid collision...?
     
  3. xcube

    xcube

    Joined:
    Nov 27, 2011
    Posts:
    36
    Thank you for your help!
    I think the fluid and the cloth is too expensive for ios. (Is this true?)

    I need to make simply lines as on as on video.
    RageSpline for surface creation can use? But than to do waves?
     
  4. jister

    jister

    Joined:
    Oct 9, 2009
    Posts:
    1,595
    the waves i would do with planes and a peril noise script on it, then just put 3 planes at different height.
    and well yes the collision i think i would have a look into vertex collision, how i could collide mesh colliders with verts.
     
  5. hippocoder

    hippocoder

    Digital Ape Moderator

    Joined:
    Apr 11, 2010
    Posts:
    20,147
    you really don't need complicated stuff like perlin noise or anything like that. Just move verts up and down nicely and you're set. You can even do this in your modelling package and export as a low res boned wave mesh. Keep it simple.
     
  6. xcube

    xcube

    Joined:
    Nov 27, 2011
    Posts:
    36
    Thanks to all !
     
  7. Brian-Stone

    Brian-Stone

    Joined:
    Jun 9, 2012
    Posts:
    222
    The classic solution to water ripples is to treat each vertex or pixel as a spring that is connected to the other vertices next to it.

    I've coded a C# mono class that demonstrates the basic algorithm. To use it, just create an new project and attach the script to the main camera. Run the script, then position the scene view on the XY plane and zoom out until you can see the entire line of spheres. Select any sphere and drag it up and down using the Translation widget to play with the simulation.

    $WaterDemo.jpg

    Code (csharp):
    1.  
    2. using UnityEngine;
    3. using System.Collections;
    4.  
    5. public class Wave : MonoBehaviour
    6. {
    7.     static int size = 200; // Number of vertices
    8.     static float velocityDamping = 0.999999f; // Proprotional velocity damping, must be less than or equal to 1.
    9.     static float timeScale = 50f;
    10.    
    11.     float[] newHeight = new float[size];
    12.     float[] velocity = new float[size];
    13.    
    14.     GameObject[] vertex = new GameObject[size];
    15.    
    16.     void Start ()
    17.     {
    18.         // we'll use spheres to represent each vertex for demonstration purposes
    19.         for(int i=0; i<size; i++)
    20.         {
    21.             vertex[i] = GameObject.CreatePrimitive(PrimitiveType.Sphere);
    22.             vertex[i].transform.position = new Vector3(i - size/2, 0, 0);
    23.         }
    24.     }
    25.    
    26.     void Update ()
    27.     {
    28.         // Water tension is simulated by a simple linear convolution over the height field.
    29.         for(int i=1; i<size-1; i++)
    30.         {
    31.             int j=i-1;
    32.             int k=i+1;
    33.             newHeight[i] = (vertex[i].transform.position.y + vertex[j].transform.position.y + vertex[k].transform.position.y) / 3.0f;
    34.         }
    35.        
    36.         // Velocity and height are updated...
    37.         for(int i=0; i<size; i++)
    38.         {
    39.             // update velocity and height
    40.             velocity[i] = (velocity[i] + (newHeight[i] - vertex[i].transform.position.y)) * velocityDamping;
    41.            
    42.             float timeFactor = Time.deltaTime * timeScale;
    43.             if (timeFactor > 1f) timeFactor = 1f;
    44.            
    45.             newHeight[i] += velocity[i] * timeFactor;
    46.            
    47.             // update the vertex position
    48.             Vector3 newPosition = new Vector3(
    49.                 vertex[i].transform.position.x,
    50.                 newHeight[i],
    51.                 vertex[i].transform.position.z);
    52.             vertex[i].transform.position = newPosition;
    53.         }
    54.     }
    55. }
    56.  
     
  8. xcube

    xcube

    Joined:
    Nov 27, 2011
    Posts:
    36
    Cool !
    It works.
    Thank you very much !!!
     
  9. TheValar

    TheValar

    Joined:
    Nov 12, 2012
    Posts:
    698
    I went ahead and used Brian Stone's posted code as a base and implemented it using a procedural mesh. The water is made out of a bunch of rectangles and instead of manipulating the translate position of a sphere I used the same algorithm to update the vertex positions of the mesh. You can see the results here: http://triton.towson.edu/~mholtz2/WebPlayer/WaterDemo.html

    Ignore the bad texture mapping. This is my first time coding with meshes and the whole UV mapping/shader stuff is way beyond me at this point.

    Planning to add some splashes and stuff later
     
  10. mww565

    mww565

    Joined:
    Jan 28, 2013
    Posts:
    1
    Hey Valar,

    Great implementation, are you able to post up the source?
     
  11. faraz

    faraz

    Joined:
    Aug 4, 2014
    Posts:
    46