查看: 497|回复: 0
打印 上一主题 下一主题

[其他] 通过控制Mesh点来模拟水面并且通过UV来制作遮罩

[复制链接]

9903

主题

126

听众

7万

积分

首席设计师

Rank: 8Rank: 8

纳金币
53456
精华
316

最佳新人 热心会员 灌水之王 活跃会员 突出贡献 荣誉管理 论坛元老

跳转到指定楼层
楼主
发表于 2015-6-25 08:07:24 |只看该作者 |倒序浏览
通过控制Mesh点来模拟水面并且通过UV来制作遮罩
  1. using UnityEngine;
  2. using System.Collections;

  3. public class WaterSin : MonoBehaviour {

  4.     GameObject gameobject1;
  5.     MeshFilter meshFlider;
  6.     MeshRenderer meshRender;
  7.     public Material material;
  8.     private float totalHeight;
  9.         // Use this for initialization
  10.     void Start()
  11.     {
  12.         //Create Mesh
  13.         gameobject1 = new GameObject("Mesh");
  14.         meshFlider = gameobject1.AddComponent<MeshFilter>();
  15.         meshRender = gameobject1.AddComponent<MeshRenderer>();
  16.         meshRender.material = material;
  17.         meshFlider.mesh = new Mesh();
  18.         Vector3[] veritices = new Vector3[20];
  19.         Vector3[] normal = new Vector3[20];
  20.         Vector2[] uv = new Vector2[20];
  21.         int[] triangles = new int[18 * 3];

  22.         for (int i = 0; i < 10; i++)
  23.         {
  24.             veritices[i] = new Vector3(i - 5, 0, 0);
  25.             veritices[i + 10] = new Vector3(i - 5, 1, 0);
  26.             uv[i] = new Vector2(0.1f * i, 0);
  27.             uv[i+10] = new Vector2(0.1f * i, 1);
  28.             normal[i] = new Vector3(0, 1, 0);
  29.             normal[i + 10] = new Vector3(0, 1, 0);
  30.         }
  31.         for (int i = 0; i < 9; i++)
  32.         {
  33.             triangles[i * 3] = i;
  34.             triangles[i * 3 + 1] = i + 10;
  35.             triangles[i * 3 + 2] = i + 1;

  36.             triangles[(i + 9) * 3] = i + 10;
  37.             triangles[(i + 9) * 3 + 1] = i + 11;
  38.             triangles[(i + 9) * 3 + 2] = i + 1;
  39.         }
  40.         meshFlider.mesh.vertices = veritices;
  41.         meshFlider.mesh.triangles = triangles;
  42.         meshFlider.mesh.uv = uv;
  43.         meshFlider.mesh.normals = normal;
  44.         meshFlider.mesh.RecalculateBounds();
  45.     }
  46.         
  47.        
  48.         // Update is called once per frame
  49.         void Update () {

  50.         MeshWave();
  51.        
  52.         }
  53.     void MeshWave()
  54.     {
  55.         Vector3[] vertices = meshFlider.mesh.vertices;
  56.         Vector2[] uv = meshFlider.mesh.uv;

  57.         for (int i = 10; i < 20; i++)
  58.         {
  59.             float meshHeight = totalHeight+0.3f*Mathf.Sin(0.5f*vertices[i].x + Time.time * 4.0f);
  60.             vertices[i] = new Vector3(vertices[i].x, meshHeight, 0);
  61.             uv[i] = new Vector2(uv[i].x, meshHeight / 11);
  62.         }
  63.         meshFlider.mesh.vertices = vertices;
  64.         meshFlider.mesh.uv = uv;
  65.     }
  66.     void OnGUI()
  67.     {
  68.         totalHeight = GUI.HorizontalScrollbar(new Rect(25, 25, 100, 30), totalHeight, 1.0F, 0.0F, 10.0F);
  69.     }
  70. }
复制代码
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

关闭

站长推荐上一条 /1 下一条

手机版|纳金网 ( 闽ICP备08008928号

GMT+8, 2024-5-4 19:58 , Processed in 0.077393 second(s), 29 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部