zoukankan      html  css  js  c++  java
  • 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;
    
    	}
    
    }
    

      

  • 相关阅读:
    Idea如果添加Maven模块
    idea在debugger模式下无法启动,但是在run模式下可以启动的问题
    Idea搭建SpringMVC框架(初次接触)
    Intellij IDEA 环境 tomcat 启动设置
    Winform .NET 利用NPOI导出大数据量的Excel
    unity3D AudioMixer+Slider实现音量调节,多音效控制(主音量,背景音,特效音等)
    unity3D 点击按钮暂停和继续游戏
    unity3D AsyncOperation异步加载场景&百分比效果
    unity3D 实现2D游戏背景层交错感(视觉差)
    unity3D 重新加载当前场景&加载当前场景的下一个场景
  • 原文地址:https://www.cnblogs.com/mrblue/p/4933945.html
Copyright © 2011-2022 走看看