适用情景:主角带着光环,光环用一张贴图,要贴在地面上,并且随地面凹凸起伏
//代码
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; } }