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; } }
相关文章推荐
- unity3d 切换场景过度动画
- 怎样实现Update中方法只被调用一次
- unity连接sqlite数据库操作
- Cg shader for Unity-specific skybox
- Cg shader for skybox
- unity 2D 正交摄像机下 uGUi 比例与自适应问题
- UNITY3D 自定义Mesh
- Unity中HideInInspector和SerializeField
- 游戏摇杆之Easy Touch 3教程
- Unity中简单 UI 管理类 - UIManager
- Unity3D脚本技术框架
- Unity3d 引擎原理详细介绍
- Unity3D-深入剖析NGUI的游戏UI架构
- 通过unity画弧线
- 【VR】Leap Motion 官网文档(一)Unity资源与插件
- Shader 学习笔记 20151103
- UnityShader学习笔记(1)
- Unity3D中脚本的执行顺序和编译顺序(vs工程引用关系)
- unity, OnTriggerEnter2D不触发
- Microsoft.Practices.Unity AOP unity 3.x