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;
    	}
    }
    
    
  • 相关阅读:
    滑动窗口(单调队列)
    离散化
    leetcode第196场周赛
    WindowsForm实现警告消息框
    WindowsForm实现TextBox占位符Placeholder提示
    WindowsForm如何移动一个没有标题栏的窗口
    WindowsForm给窗口添加一些简单的动画效果
    WindowsForm切换窗口的几种常见实现
    Visual Studio Code搭建django项目
    PyInstaller打包Python源程序
  • 原文地址:https://www.cnblogs.com/kingBook/p/11411553.html
Copyright © 2011-2022 走看看