zoukankan      html  css  js  c++  java
  • 判断鼠标点击模型时,鼠标所接触的材质

    当一个MeshRenderer拥有多个材质时,MeshRenderer.materials中的索引与子网格的索引相对应,所以只需要找到子网格的索引就能找到材质的索引。

    using UnityEngine;
    
    public class TestRaycastHitMaterial:MonoBehaviour{
    	
    	private void Update() {
    		if(!Input.GetMouseButtonDown(0))return;
    		var meshRenderer=GetComponent<MeshRenderer>();
    		var meshFilter=GetComponent<MeshFilter>();
    		var mesh=meshFilter.mesh;
    
    		var ray=Camera.main.ScreenPointToRay(Input.mousePosition);
    		RaycastHit hitInfo;
    		Physics.Raycast(ray,out hitInfo);
    
    		if(hitInfo.collider!=null){
    			int subMeshIndex=MeshUtil.getRaycastHitSubMeshIndex(mesh,hitInfo);
    			Debug.Log(subMeshIndex);
    			//Debug.Log(meshRenderer.materials[subMeshIndex]);
    		}
    	}
    
    	/// <summary>
    	/// 返回射线命中的子网格索引号
    	/// <br>如果没有子网格或未成功匹配则返回-1</br>
    	/// </summary>
    	/// <param name="mesh"></param>
    	/// <param name="hitInfo"></param>
    	/// <returns></returns>
    	private int getRaycastHitSubMeshIndex(Mesh mesh,RaycastHit hitInfo){
    		//命中三角形的顶点索引
    		int[] triangles=mesh.triangles;
    		int triangleIndex=hitInfo.triangleIndex;
    		int i0=triangles[triangleIndex*3];
    		int i1=triangles[triangleIndex*3+1];
    		int i2=triangles[triangleIndex*3+2];
    		
    		int subMeshCount=mesh.subMeshCount;
    		for(int i=0;i<subMeshCount;i++){
    			var indices=mesh.GetIndices(i);
    			int vertexCount=indices.Length;
    			for(int j=0;j<vertexCount;j+=3){
    				int j0=indices[j];
    				int j1=indices[j+1];
    				int j2=indices[j+2];
    				//如果子网格的索引与命中三角形匹配,则表示是命中的子网格
    				if(i0==j0&&i1==j1&&i2==j2){
    					return i;
    				}
    			}
    		}
    		return -1;
    	}
    }
    
    
  • 相关阅读:
    matlab 函数库
    阿甘的珠宝 大数据博弈综合应用 SG函数 + 最后取为输或赢
    hdu 1536 博弈 SG函数(dfs)
    hdu 1907 John / 2509 Be the Winner 博弈 最后取完者为输
    深入理解 Nim 博弈
    SG函数模板 hdu 1848/1847/1849/1850/1851
    初始博弈 hdu 1846 Brave Game
    乘数密码 扩展欧几里得求逆元
    68.最大k乘积问题 (15分)
    第一次作业
  • 原文地址:https://www.cnblogs.com/kingBook/p/11411553.html
Copyright © 2011-2022 走看看