您的位置:首页 > 移动开发 > Unity3D

Unity3d 制作动态Mesh且可以随地面凹凸起伏

2015-11-03 18:03 696 查看
适用情景:主角带着光环,光环用一张贴图,要贴在地面上,并且随地面凹凸起伏



//代码

using UnityEngine;
using System.Collections;

[RequireComponent(typeof(MeshFilter))]
[RequireComponent(typeof(MeshRenderer))]
public class test : MonoBehaviour {
private MeshFilter mFilter;
private Mesh mMesh;

public int QuadNum = 1;
public float QuadLength = 1;

// Use this for initialization
void Start () {
mFilter = gameObject.GetComponent<MeshFilter>();
mMesh = new Mesh();
mFilter.sharedMesh = mMesh;
mMesh.MarkDynamic();

var quadNum = QuadNum * 2;
var ptNum = quadNum + 1;
var h_len = QuadNum * QuadLength;
var len = h_len * 2;

var vertices = new Vector3[ptNum * ptNum];
var uv = new Vector2[ptNum * ptNum];
var triangle = new int[QuadNum * 2 * QuadNum * 2 * 6];

var offset = new Vector3(-h_len, 0, -h_len);

for (int j = 0; j < ptNum; j++)
{
for (int i = 0; i < ptNum; i++)
{
int idx = j*ptNum+i;
uv[idx] = new Vector2(i * 1.0f / ptNum, j * 1.0f / ptNum);
}
}

int it = 0;
for (int j = 0; j < quadNum; j++)
{
for (int i = 0; i < quadNum; i++)
{
int quadId = j * quadNum + i;
int p0 = quadId + j;
int p1 = p0 + ptNum;
int p2 = p1 + 1;
int p3 = p0 + 1;

triangle[it++] = p0;
triangle[it++] = p1;
triangle[it++] = p2;

triangle[it++] = p0;
triangle[it++] = p2;
triangle[it++] = p3;
}
}

mMesh.vertices = vertices;
mMesh.uv = uv;
mMesh.triangles = triangle;
}

// Update is called once per frame
protected virtual void Update () {

var quadNum = QuadNum * 2;
var ptNum = quadNum + 1;
var h_len = QuadNum * QuadLength;
var len = h_len * 2;

var vertices = new Vector3[ptNum * ptNum];

var offset = new Vector3(-h_len, 0, -h_len);

var ray = new Ray(Vector3.down, Vector3.down);
var hit = new RaycastHit();
for (int j = 0; j < ptNum; j++)
{
for (int i = 0; i < ptNum; i++)
{
int idx = j * ptNum + i;
var pt = new Vector3(i * QuadLength, 0, j * QuadLength);

ray.origin = transform.localToWorldMatrix.MultiplyPoint3x4(pt) + new Vector3(0, 10, 0);
if (Physics.Raycast(ray, out hit, 100))
{
pt = transform.worldToLocalMatrix.MultiplyPoint3x4(hit.point);
}

vertices[i + j * ptNum] = pt;
}
}

mMesh.vertices = vertices;

}

}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: