Vector3.Projection是什么意思?

New*_*ker 2 c# unity-game-engine

投影在统一中是什么意思?

我有以下代码,但我不知道它们的概念,任何人都可以帮助我并告诉我这些行是什么意思?

Vector3 normal = (end_line.position - start_line.position).normalized;
Vector3 pos = start_line.position + Vector3.Project (target.position-start_line.position,normal);
Run Code Online (Sandbox Code Playgroud)

Biz*_*han 5

Vector3 normal =(end_line.position-start_line.position).normalized;

normal是线的方向(矢量)。对其进行了标准化,以使其大小等于1。如果删除该.normalized零件,它将代表线(矢量)本身。

Vector3 pos = start_line.position + Vector3.Project(target.position-start_line.position,normal);

让我们分解一下:

target.position-start_line.position是另一个向量,起始start_linetarget

Vector3.Project(target.position-start_line.position,normal)将此向量投影到上normal。如果您将其normal视为地面(大概是在旋转世界),并且正午(12:00),则所得矢量就是您所看到的target.position-start_line.position由太阳引起的阴影并投射到地面上的阴影。

如果移动等于该矢量,start_line您将得到pos

Vector3.Project到底是什么

p = Vector3.Project(a,n)

只是; a沿方向绘制了多少矢量n

a是要投影到的源向量n

n是归一化的向量,它代表一个轴。我不知道标准化向量(0,1)和非标准化向量(0,2)是否给出相同的结果。

p是投影a到上创建的向量n

您始终可以假定n从哪里a开始。由于n是轴,因此可以假定它是一条无限长的线(从-inf到+ inf)。因此,如果您移动an轴上的零点(n矢量的起点),您将得到以下内容:

在此处输入图片说明

向量= a,onNormal = n,投影= p

  • 如果那样的a.normalized = np = a
  • 如果那样的a is perpendicular to np = Vector3.zero
  • p.magnitude <= a.magnitude 由于相同的原因,阴影的长度不能大于中午的阴影源。

在该图中,正常值为(0,1,0),但在这种情况下,您最好也使用(0,ay,0)代替项目。