Version: 5.3 (switch to 5.4b)
IdiomaEnglish
  • C#
  • JS

Idioma de script

Selecciona tu lenguaje de programación favorito. Todos los fragmentos de código serán mostrados en este lenguaje.

RaycastHit.barycentricCoordinate

Sugiere un cambio

¡Éxito!

Gracias por ayudarnos a mejorar la calidad de la documentación de Unity. A pesar de que no podemos aceptar todas las sugerencias, leemos cada cambio propuesto por nuestros usuarios y actualizaremos los que sean aplicables.

Cerrar

No se puedo enviar

Por alguna razón su cambio sugerido no pudo ser enviado. Por favor <a>intente nuevamente</a> en unos minutos. Gracias por tomarse un tiempo para ayudarnos a mejorar la calidad de la documentación de Unity.

Cerrar

Cancelar

Cambiar al Manual
public var barycentricCoordinate: Vector3;
public Vector3 barycentricCoordinate;

Descripción

Las coordenadas del baricentro del triángulo con el que chocamos.

This lets you interpolate any of the vertex data along the 3 axes.

	// Attach this script to a camera and it will 
	// draw a debug line pointing outward from the normal 
	function Update () { 
	   // Only if we hit something, do we continue 
	   var hit : RaycastHit; 
	   if (!Physics.Raycast (Camera.main.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 normals = mesh.normals; var triangles = mesh.triangles;

// Extract local space normals of the triangle we hit var n0 = normals[triangles[hit.triangleIndex * 3 + 0]]; var n1 = normals[triangles[hit.triangleIndex * 3 + 1]]; var n2 = normals[triangles[hit.triangleIndex * 3 + 2]]; // interpolate using the barycentric coordinate of the hitpoint var baryCenter = hit.barycentricCoordinate;

// Use barycentric coordinate to interpolate normal var interpolatedNormal = n0 * baryCenter.x + n1 * baryCenter.y + n2 * baryCenter.z; // normalize the interpolated normal interpolatedNormal = interpolatedNormal.normalized; // Transform local space normals to world space var hitTransform : Transform = hit.collider.transform; interpolatedNormal = hitTransform.TransformDirection(interpolatedNormal);

// Display with Debug.DrawLine Debug.DrawRay(hit.point, interpolatedNormal); }
using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour { void Update() { RaycastHit hit; if (!Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit)) return; MeshCollider meshCollider = hit.collider as MeshCollider; if (meshCollider == null || meshCollider.sharedMesh == null) return; Mesh mesh = meshCollider.sharedMesh; Vector3[] normals = mesh.normals; int[] triangles = mesh.triangles; Vector3 n0 = normals[triangles[hit.triangleIndex * 3 + 0]]; Vector3 n1 = normals[triangles[hit.triangleIndex * 3 + 1]]; Vector3 n2 = normals[triangles[hit.triangleIndex * 3 + 2]]; Vector3 baryCenter = hit.barycentricCoordinate; Vector3 interpolatedNormal = n0 * baryCenter.x + n1 * baryCenter.y + n2 * baryCenter.z; interpolatedNormal = interpolatedNormal.normalized; Transform hitTransform = hit.collider.transform; interpolatedNormal = hitTransform.TransformDirection(interpolatedNormal); Debug.DrawRay(hit.point, interpolatedNormal); } }