Legacy Documentation: Version 4.5.0

Script language:

  • JS
  • C#
  • Boo
Script language

Select your preferred scripting language. All code snippets will be displayed in this language.

RaycastHit.triangleIndex

var triangleIndex: int;
int triangleIndex;
triangleIndex as int

Description

The index of the triangle that was hit.

Triangle index is only valid if the collider that was hit is a MeshCollider.

	// Attach this script to a camera and it will
	// draw a debug line triangle triangle
	// at the triangle where you place the mouse.
	function Update () {
		// Only if we hit something, do we continue
		var hit : RaycastHit;
		if (!Physics.Raycast (camera.ScreenPointToRay(Input.mousePosition), hit))
			return;

// Just in case, also make sure the collider also has a renderer // material and texture var meshCollider = hit.collider as MeshCollider; if (meshCollider == null || meshCollider.sharedMesh == null) return;

var mesh : Mesh = meshCollider.sharedMesh; var vertices = mesh.vertices; var triangles = mesh.triangles;

// Extract local space vertices that were hit var p0 = vertices[triangles[hit.triangleIndex * 3 + 0]]; var p1 = vertices[triangles[hit.triangleIndex * 3 + 1]]; var p2 = vertices[triangles[hit.triangleIndex * 3 + 2]];

// Transform local space vertices to world space var hitTransform : Transform = hit.collider.transform; p0 = hitTransform.TransformPoint(p0); p1 = hitTransform.TransformPoint(p1); p2 = hitTransform.TransformPoint(p2);

// Display with Debug.DrawLine Debug.DrawLine(p0, p1); Debug.DrawLine(p1, p2); Debug.DrawLine(p2, p0); }

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    void Update() {
        RaycastHit hit;
        if (!Physics.Raycast(camera.ScreenPointToRay(Input.mousePosition), out hit))
            return;
        
        MeshCollider meshCollider = hit.collider as MeshCollider;
        if (meshCollider == null || meshCollider.sharedMesh == null)
            return;
        
        Mesh mesh = meshCollider.sharedMesh;
        Vector3[] vertices = mesh.vertices;
        int[] triangles = mesh.triangles;
        Vector3 p0 = vertices[triangles[hit.triangleIndex * 3 + 0]];
        Vector3 p1 = vertices[triangles[hit.triangleIndex * 3 + 1]];
        Vector3 p2 = vertices[triangles[hit.triangleIndex * 3 + 2]];
        Transform hitTransform = hit.collider.transform;
        p0 = hitTransform.TransformPoint(p0);
        p1 = hitTransform.TransformPoint(p1);
        p2 = hitTransform.TransformPoint(p2);
        Debug.DrawLine(p0, p1);
        Debug.DrawLine(p1, p2);
        Debug.DrawLine(p2, p0);
    }
}
import UnityEngine
import System.Collections

public class ExampleClass(MonoBehaviour):

	def Update() as void:
		hit as RaycastHit
		if not Physics.Raycast(camera.ScreenPointToRay(Input.mousePosition), ):
			return
		meshCollider as MeshCollider = (hit.collider as MeshCollider)
		if (meshCollider == null) or (meshCollider.sharedMesh == null):
			return
		mesh as Mesh = meshCollider.sharedMesh
		vertices as (Vector3) = mesh.vertices
		triangles as (int) = mesh.triangles
		p0 as Vector3 = vertices[triangles[((hit.triangleIndex * 3) + 0)]]
		p1 as Vector3 = vertices[triangles[((hit.triangleIndex * 3) + 1)]]
		p2 as Vector3 = vertices[triangles[((hit.triangleIndex * 3) + 2)]]
		hitTransform as Transform = hit.collider.transform
		p0 = hitTransform.TransformPoint(p0)
		p1 = hitTransform.TransformPoint(p1)
		p2 = hitTransform.TransformPoint(p2)
		Debug.DrawLine(p0, p1)
		Debug.DrawLine(p1, p2)
		Debug.DrawLine(p2, p0)