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


    适用情景:主角带着光环,光环用一张贴图,要贴在地面上,并且随地面凹凸起伏

    //代码

    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;
    
    	}
    
    }
    

      

  • 相关阅读:
    第三届 山东省ACM省赛
    省赛知识点待整理
    省赛知识点待整理
    最短路模板(Dijkstra & Dijkstra算法+堆优化 & bellman_ford & 单源最短路SPFA)
    最短路模板(Dijkstra & Dijkstra算法+堆优化 & bellman_ford & 单源最短路SPFA)
    最短路模板(Dijkstra & Dijkstra算法+堆优化 & bellman_ford & 单源最短路SPFA)
    hdoj 4883 TIANKENG’s restaurant【贪心区间覆盖】
    hdoj 1072 Nightmare
    hdoj 2141 Can you find it?【二分查找+暴力】
    poj 1064 Cable master【浮点型二分查找】
  • 原文地址:https://www.cnblogs.com/mrblue/p/4933945.html
Copyright © 2020-2023  润新知