Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

RaycastHit.barycentricCoordinate

public Vector3 barycentricCoordinate;

Описание

Барицентрическая координата треугольника, в который мы попали.

Это позволяет интерполировать любые данные вершин по трем осям.

using UnityEngine; public class Example : 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; // Extract local space normals of the triangle we hit Vector3 n0 = normals[triangles[hit.triangleIndex * 3 + 0]]; Vector3 n1 = normals[triangles[hit.triangleIndex * 3 + 1]]; Vector3 n2 = normals[triangles[hit.triangleIndex * 3 + 2]]; // interpolate using the barycentric coordinate of the hitpoint Vector3 baryCenter = hit.barycentricCoordinate; // Use barycentric coordinate to interpolate normal Vector3 interpolatedNormal = n0 * baryCenter.x + n1 * baryCenter.y + n2 * baryCenter.z; // normalize the interpolated normal interpolatedNormal = interpolatedNormal.normalized; // Transform local space normals to world space Transform hitTransform = hit.collider.transform; interpolatedNormal = hitTransform.TransformDirection(interpolatedNormal); // Display with Debug.DrawLineDebug.DrawRay(hit.point, interpolatedNormal); } }
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
API скрипты 2021.3