Параметры
planeNormal | Направление от вектора к плоскости. |
vector | Расположение вектора над плоскостью. |
Возвращает
Vector3 Расположение вектора на плоскости.
Описание
Проецирует вектор на плоскость, заданную нормалью, ортогональной плоскости.
В Vector3 хранится положение заданного вектора в трехмерном пространстве. Второй Vector3 задается planeNormal и определяет направление от плоскости к вектор, проходящий через начало координат. Vector3.ProjectOnPlane использует два значения Vector3 для создания положения вектора в направлении planeNormal и возвращает положение Vector3 на плоскости.

Приведенный ниже пример скрипта заставляет Update
генерировать позицию vector
и planeNormal
нормально. Статический метод Vector3.ProjectOnPlane получает аргументы и возвращает позицию Vector3.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// Vector3.ProjectOnPlane — пример
// Генерируем случайную плоскость в xy. Показать положение случайного
// вектор и связь с плоскостью. пример ничего не показывает
// в представлении игры, но использует Update(). Справочный пример скрипта
// использует Gizmos для отображения позиций и осей в Scene.
public class Example : MonoBehaviour
{
private Vector3 vector, planeNormal;
private Vector3 response;
private float radians;
private float degrees;
private float timer = 12345.0f;
// Генерация значений для всех примеров.
// Меняем пример каждые две секунды.
void Update()
{
if (timer > 2.0f)
{
// Generate a position inside xy space.
vector = new Vector3(Random.Range(-1.0f, 1.0f), Random.Range(-1.0f, 1.0f), 0.0f);
// Compute a normal from the plane through the origin.
degrees = Random.Range(-45.0f, 45.0f);
radians = degrees * Mathf.Deg2Rad;
planeNormal = new Vector3(Mathf.Cos(radians), Mathf.Sin(radians), 0.0f);
// Obtain the ProjectOnPlane result.
response = Vector3.ProjectOnPlane(vector, planeNormal);
// Reset the timer.
timer = 0.0f;
}
timer += Time.deltaTime;
}
// Показать пример представления Scene.
void OnDrawGizmosSelected()
{
// Left/right and up/down axes.
Gizmos.color = Color.white;
Gizmos.DrawLine(transform.position - new Vector3(2.25f, 0, 0), transform.position + new Vector3(2.25f, 0, 0));
Gizmos.DrawLine(transform.position - new Vector3(0, 1.75f, 0), transform.position + new Vector3(0, 1.75f, 0));
// Display the plane.
Gizmos.color = Color.green;
Vector3 angle = new Vector3(-1.75f * Mathf.Sin(radians), 1.75f * Mathf.Cos(radians), 0.0f);
Gizmos.DrawLine(transform.position - angle, transform.position + angle);
// Show a connection between vector and response.
Gizmos.color = Color.yellow;
Gizmos.DrawLine(vector, response);
// Now show the input position.
Gizmos.color = Color.red;
Gizmos.DrawSphere(vector, 0.05f);
// And finally the resulting position.
Gizmos.color = Color.black;
Gizmos.DrawSphere(response, 0.05f);
}
}