学生一枚,买不起pro,也懒得破解,不能用unity自带的water组件做水,所以用LineRenderer+Mesh+Sin函数苟了一个(为什么不用shader做,因为用Mesh的方法更容易添加碰撞、浮力组件、表面效应组件的效果,用shader的话虽然可以做出显示效果来,但是transform形状不会改变,导致shader水只能看,不能用),效果图如下
主要思路就是用LineRender把水平线画出来,再对应Line的节点在下方接上网格,在fixedupdate中用sin函数更新节点坐标及网格的vertices,如果想添加漂浮水面的效果,可以通过添加碰撞器,或者添加2d浮力效应组件,(这里我用的碰撞器,不过不需要的话可以把start函数中createcolliders();以及fixedupdate中的collidersfresh();调用注释掉)。建立一个空的gameobject,挂上这个脚本,添加LineRenderer组件,这是我的设置,这个根据需求
代码如下
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class mywater : MonoBehaviour {
private GameObject waterlevel;
private Transform watertransform;
private LineRenderer waterlinerenderer;
[RangeAttribute(-10.0f,10f)]
public float A;
[RangeAttribute(0.0f, 1f)]
public float f;
public float linewidth;
public int linenumber;
public float eachlinelength;
private float[] toppos;
public float speed;
private GameObject[] meshobjects;
private Mesh[] meshes;
public float bottom;
public Color32 color;
private GameObject[] colliderob;
private float[] velocitydown;
// Use this for initialization
void Start () {
velocitydown = new float[linenumber];
meshobjects = new GameObject[linenumber];
meshes = new Mesh[linenumber];
toppos = new float[linenumber];
colliderob = new GameObject[linenumber - 1];
waterlevel = this.gameObject;
watertransform = this.transform;
//waterlevel.AddComponent<LineRenderer>();
waterlinerenderer = (LineRenderer)</