版本: Unity 6 (6000.0)
语言英语
  • C#

Vector3.ProjectOnPlane

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交的内容,但我们会阅读用户提出的每项更改建议,并在适用的情况下进行更新。

关闭

提交失败

由于某些原因,您的更改建议无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

声明

public static Vector3 ProjectOnPlane(Vector3 vector, Vector3 planeNormal);

参数

vector 要投影到平面上的向量。
planeNormal 定义要投影到的平面的法线。

返回值

Vector3 vector 在平面上的正交投影。

描述

将向量投影到平面。

对于由 planeNormal 描述的给定平面和给定向量 vectorVector3.ProjectOnPlane 生成一个新的向量,该向量正交于 planeNormal 且平行于平面。注意:planeNormal 不需要被标准化。


''红线代表 vector,黄线代表 planeNormal,蓝线代表 vector 在平面上的投影。''

以下脚本示例使 Update 生成一个 vector 位置和一个 planeNormal 法线。Vector3.ProjectOnPlane 静态方法接收参数并返回 Vector3 位置。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

// Vector3.ProjectOnPlane - example

// Generate a random plane in xy. Show the position of a random // vector and a connection to the plane. The example shows nothing // in the Game view but uses Update(). The script reference example // uses Gizmos to show the positions and axes in the Scene.

public class Example : MonoBehaviour { private Vector3 vector, planeNormal; private Vector3 response; private float radians; private float degrees; private float timer = 12345.0f;

// Generate the values for all the examples. // Change the example every two seconds. 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; }

// Show a Scene view example. 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 the projection on the plane as a blue line. Gizmos.color = Color.blue; Gizmos.DrawLine(Vector3.zero, response); Gizmos.DrawSphere(response, 0.05f);

// Show the vector perpendicular to the plane in yellow Gizmos.color = Color.yellow; Gizmos.DrawLine(vector, response);

// Now show the input position. Gizmos.color = Color.red; Gizmos.DrawSphere(vector, 0.05f); Gizmos.DrawLine(Vector3.zero, vector); } }